建立、讀、更新和刪除(Create/Read/Update/Delete,CRUD)操作是最基本的資料庫操作,但是它們也是最重要的操作。CRUD 操作通常是使用關聯式資料庫系統中的結構化查詢語言 (SQL)(Structured Query Language,SQL)完成的。隨著 Web 變得更加具有面向資料特性,因此需要從基於 SQL 的 CRUD 操作轉移到基於語義 Web 的 CRUD 操作。瞭解如何使用 PHP 通過基於語義的 Web 執行 CRUD 操作。
常用縮寫詞
API — API(Application Programming Interface)
CRUD — 建立/讀/更新/刪除(Create/Read/Update/Delete)
HTTP — 超文字傳輸通訊協定 (HTTP)(Hypertext Transfer Protocol)
MVC — 模式—視圖—控制器(Model-View-Controller)
OOP — 物件導向的編程(Object-Oriented Programming)
RDF — 資源描述架構(Resource Description Framework)
SPARQL — 簡單協議和 RDF 查詢語言(Simple Protocol and RDF Query Language)
SQL — 結構化查詢語言 (SQL)(Structured Query Language)
UI — 使用者介面(User interface)
W3C — 全球資訊網聯盟(World Wide Web Consortium)
在開發 Web 應用程式時,為邏輯層和 UI 層建立放置伺服器端代碼的資料庫結構是一種標準實踐。要串連到資料庫,伺服器端代碼需要執行一些基本的建立、更新、刪除和 — 最重要的 — 讀取記錄等操作。由於 Web 應用程式的後台資料庫通常都是關聯式資料庫,因此這些 CRUD 操作都是使用眾所周知的 SQL 語言執行的。但是,隨著 Web 開發越來越多地採用物件導向的編程(OOP),模型也隨之發生改變。
資源描述架構(Resource Description Framework,RDF)是描述對象同時保留資料含義的理想方法。簡單協議和 RDF 查詢語言(Simple Protocol and RDF Query Language,SPARQL — 發音為 “sparkle”)是通常用於針對該資料進行查詢的語言,因為它在語句構成上匹配 RDF 本身的結構。RDF 和 SPARQL 都是所謂 語義 Web 棧(semantic Web stack)中的技術。
要徹底地應用語義 Web 理念,您可以使用 SPARQL 將傳統的 Web 開發技術應用到 RDF 資料中。本文將展示如何使用簡化的模式—視圖—控制器(Model-View-Controller,MVC)設計模型、PHP 伺服器端指令碼語言和 SPARQL 串連到 RDF — 與使用關聯式資料庫系統中的 SQL 相反。
SQL 和 SPARQL CRUD 操作
先決條件
本文假定您基本瞭解 SQL、PHP 和 Web 應用程式開發。瞭解語義 Web 也十分有利。要對基於語義 Web 的資料運行 create、update 和 delete 命令,需要具有支援 SPARQL/Update 規範的語義 Web 資料庫。
在使用 SQL 和 SPARQL 進行開發時,需要查看一下 CRUD 操作之間的異同。清單 1 顯示了 read 操作的 SQL 代碼。
SELECT realname, dob, locationFROM UserTable WHERE realname = "John Smith";
將這段基於 SQL 的代碼與清單 2 中所示的基於 SPARQL 的代碼相比較。採用這兩個 read 操作的原因在於它們最易於理解、實現和說明。這對於 SQL 和 SPARQL 來說都是一樣的。
PREFIX foaf:
在比較兩張清單時,您的第一個想法很可能是 SPARQL 版本明顯比 SQL 版本長很多。這是事實,但是請不要誤以為 SQL 必然更簡單而且更乾淨。根據所運行引擎的不同,SPARQL 可以全部通過稱為連結資料結果(linked data effect)的內容進行分發。此外,它允許擁有動態模式,因為它擁有互相連結的物件導向的透視圖,與嚴格的 SQL 關係透視圖形成對照。如果您想要把關聯式資料庫表分隔為許多資料孤島,則實際上使用的 SQL 程式碼將比 SPARQL 多很多 — 更不必說 SQL 中會出現大量令人討厭的 JOIN 描述符。
SPARQL 的前兩行是 PREFIX 聲明。根據語義 Web 理論,一切內容 — 無論是對象還是資料圖來源(也是一個對象)— 都有統一資源識別項(Uniform Resource Identifier,URI)。PREFIX 行只是將臨時標籤應用到一些 URI 中 — 在本例中為 Friend of a Friend 和 RDF 模式。其中的好處是您以後可以在查詢中使用 PREFIX 聲明而不必使用完整的 URI。
SPARQL 代碼的下一行描述了查詢請求。這條語句在本質上與 SQL 陳述式相同,不同之處是對 URI 的附加請求。注意問號的使用(?)是為了表示術語是變數。
FROM 語句描述了擷取資料的位置。這在 SQL 和 SPARQL 中是相同的,只是在 SPARQL 中,資料來源名稱是 URI,而非表示電腦或網路中某個物理位置的字串。
兩者的 WHERE 語句完全不同,因為使用 SPARQL,必須指定用於擷取資料的模式。同樣,如果嘗試過使用關係方法執行此操作,則需要花費的代價比普通 SQL 多得多:需要使用 PHP、Java™ 程式設計語言或者一些其他伺服器端語言才能執行資料來源之間的檢查。SPARQL 程式碼完成的操作比較明了,這包括確保正在檢索的資料只屬於 Person 類型。SPARQL 將擷取名稱和位置,同時執行一些模式比對以尋找正確的 John Smith。
建立
SPARQL 中的 CRUD 操作通常比 read 操作更神秘。但是,可以完成這些操作。首先,create 操作將把新記錄或對象插入到表或圖表中。
INSERT INTO UserTable (realname, dob, location) VALUES ("John Smith", "1985-01-01", "Bristol, UK");
現在,比較清單 3 中基於 SQL 的代碼與清單 4 中基於 SPARQL 的代碼中的 create 操作。
PREFIX foaf:
同樣,注意 PREFIX 行與用 SPARQL 在 read 操作中執行的操作完全相同。INSERT INTO 的工作原理類似於 SQL,但是同樣,這是基於 URI 的,而非基於字串、基於表和基於名稱的,這允許使用 HTTP 完成操作。您必須再次指定模式。在這裡,比在 read 操作中瞭解起來略微簡單一些,因為您幾乎可以擁有任何屬性,只要它與模式相容。這就是 RDF 所提供的分布式動態可擴充項物件的優點。
刪除
從某一程度來說,如果要建立,那很可能需要進行刪除。例如,使用者可能想要刪除他們在您網站中的帳戶(這顯然是件遺憾的事情,他們想要離開,但是他們可能有正當的理由)。清單 5 提供了典型 delete 操作的 SQL 代碼。
DELETE FROM UserTable WHERE realname = "John Smith"
現在,比較清單 5 中基於 SQL 的代碼與清單 6 中基於 SPARQL 的代碼。
http://www.bkjia.com/PHPjc/752064.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/752064.htmlTechArticle建立、讀、更新和刪除(Create/Read/Update/Delete,CRUD)操作是最基本的資料庫操作,但是它們也是最重要的操作。CRUD 操作通常是使用關聯式資料庫...