作成/読み取り/更新/削除 (CRUD) 操作は、最も基本的なデータベース操作ですが、最も重要な操作でもあります。 CRUD 操作は通常、リレーショナル データベース システムの構造化照会言語 (SQL) を使用して完了します。 Web がよりデータ指向になるにつれて、SQL ベースの CRUD 操作からセマンティック Web ベースの CRUD 操作に移行する必要があります。 PHP を使用してセマンティックベースの Web で CRUD 操作を実行する方法を学びます。
よく使われる略語
API — アプリケーション プログラミング インターフェイス (アプリケーション プログラミング インターフェイス)
CRUD — 作成/読み取り/更新/削除 (作成/読み取り/更新/削除)
HTTP — ハイパーテキスト転送プロトコル
MVC — モデルビューコントローラー (モデルビューコントローラー)
OOP — オブジェクト指向プログラミング
RDF — リソース記述フレームワーク
SPARQL — シンプルなプロトコルとRDFクエリ言語 (シンプルなプロトコルとRDFクエリ言語)
SQL — 構造化クエリ言語
UI — ユーザーインターフェース(ユーザーインターフェース)
W3C — ワールドワイドウェブコンソーシアム
Web アプリケーションを開発する場合、ロジック層と UI 層のサーバー側コードを格納するデータベース構造を作成するのが標準的な方法です。データベースに接続するには、サーバー側のコードで、レコードの作成、更新、削除、そして最も重要な読み取りなどの基本的な操作を実行する必要があります。 Web アプリケーションのバックエンド データベースは通常リレーショナル データベースであるため、これらの CRUD 操作はよく知られた SQL 言語を使用して実行されます。しかし、Web 開発ではオブジェクト指向プログラミング (OOP) の採用が進むにつれて、モデルが変化してきました。
リソース記述フレームワーク (RDF) は、データの意味を保持しながらオブジェクトを記述する理想的な方法です。 Simple Protocol and RDF Query Language (SPARQL - 「スパークル」と発音) は、ステートメントの構造が RDF 自体の構造と一致するため、このデータのクエリに通常使用される言語です。 RDF と SPARQL はどちらも、いわゆるセマンティック Web スタックのテクノロジーです。
セマンティック Web の概念を完全に適用するには、SPARQL を使用して従来の Web 開発手法を RDF データに適用できます。この記事では、リレーショナル データベース システムで SQL を使用するのではなく、簡素化されたモデル ビュー コントローラー (MVC) 設計モデル、PHP サーバー側スクリプト言語、および SPARQL を使用して RDF に接続する方法を説明します。
SQL および SPARQL CRUD 操作
前提条件
この記事は、SQL、PHP、Web アプリケーション開発の基本を理解していることを前提としています。セマンティック Web を理解することも有益です。セマンティック Web ベースのデータに対して作成、更新、および削除コマンドを実行するには、SPARQL/Update 仕様をサポートするセマンティック Web データベースが必要です。
SQL と SPARQL を使用して開発する場合、CRUD 操作の類似点と相違点に注目する必要があります。リスト 1 は、読み取り操作の SQL コードを示しています。
SELECT realname, dob, locationFROM UserTable WHERE realname = "John Smith";
この SQL ベースのコードを、リスト 2 に示す SPARQL ベースのコードと比較してください。これら 2 つの読み取り操作を使用する理由は、これらの操作が理解、実装、説明が最も簡単であるためです。これはSQLでもSPARQLでも同様です。
プレフィックスフォーフ:
2 つのリストを比較したときに最初に思うのは、SPARQL バージョンが SQL バージョンよりもかなり長いということでしょう。これは真実ですが、SQL の方が必然的に単純でクリーンであると考える必要はありません。実行されているエンジンに応じて、SPARQL はすべて、リンクされたデータ効果と呼ばれるものを通じて配信できます。さらに、厳密な SQL リレーショナルの観点とは対照的に、相互にリンクされたオブジェクト指向の観点があるため、動的スキーマを持つことができます。リレーショナル データベース テーブルを多くのデータ サイロに分割したい場合、実際には SPARQL よりも多くの行の SQL コードを使用することになります。言うまでもなく、SQL には煩わしい JOIN 記述子が多数使用されます。
SPARQLの最初の2行はPREFIX文です。セマンティック Web 理論によれば、すべてのコンテンツ (オブジェクトであってもデータ グラフ ソース (オブジェクト) であっても) には、Uniform Resource Identifier (URI) があります。 PREFIX 行は、単に一時的なタグを何らかの URI (この場合は友人の友人と RDF スキーマ) に適用します。利点は、完全な URI を使用しなくても、後でクエリで PREFIX ステートメントを使用できることです。
SPARQLコードの次の行はクエリリクエストを記述しています。このステートメントは、URI の追加リクエストを除いて、基本的に SQL ステートメントと同じです。用語が変数であることを示すために疑問符 (?) が使用されていることに注意してください。
FROM文はデータを取得する場所を記述します。これは SQL と SPARQL でも同じですが、SPARQL ではデータ ソース名がコンピューターまたはネットワーク上の物理的な場所を表す文字列ではなく URI である点が異なります。
両者のWHERE文は全く異なります、SPARQLではデータを取得するためのスキーマを指定する必要があるからです。繰り返しになりますが、リレーショナル アプローチを使用してこれを実行しようとすると、単純な SQL よりもはるかにコストが高くなります。データ ソース間のチェックを実行するには、PHP、Java™ プログラミング言語、またはその他のサーバー側言語を使用する必要があります。 SPARQL コード行が達成することは、取得されるデータの型が person のみであることを保証することなど、比較的自明です。 SPARQL は名前と場所を取得し、パターン マッチングを実行して正しい John Smith を見つけます。
作成
SPARQL の CRUD 操作は、読み取り操作よりも謎が多いことがよくあります。ただし、これらの操作は完了することができます。まず、作成操作により、テーブルまたはチャートに新しいレコードまたはオブジェクトが挿入されます。
INSERT INTO UserTable (本名、生年月日、場所) VALUES ("John Smith", "1985-01-01", "Bristol, UK");
ここで、リスト 3 の SQL ベースのコードの作成操作とリスト 4 の SPARQL ベースのコードを比較してください。
プレフィックスフォーフ:
繰り返しますが、PREFIX 行は、SPARQL の読み取り操作で実行するものとまったく同じであることに注意してください。 INSERT INTO は SQL と同様に機能しますが、これも文字列ベース、テーブルベース、名前ベースではなく URI ベースであるため、HTTP を使用して操作を完了できます。モードを再度指定する必要があります。ここでは、スキーマと互換性がある限り、ほぼすべてのプロパティを持つことができるため、読み取り操作よりも少し理解しやすくなります。これは、RDF が提供する動的に拡張可能な分散オブジェクトの利点です。
削除
作成したければ、ある程度、削除する必要があるでしょう。たとえば、ユーザーがサイト上のアカウントを削除したいと考えているとします (これは明らかに残念なことなので、サイトから離れたいと考えていますが、正当な理由がある可能性があります)。リスト 5 は、一般的な削除操作の SQL コードを示しています。
DELETE FROM UserTable WHERE realname = "John Smith"
次に、リスト 5 の SQL ベースのコードとリスト 6 の SPARQL ベースのコードを比較してください。