| パラダイム | クエリ言語 |
|---|---|
| 開発者 | ウィキペディア |
| 初登場 | 2008年1月15日 |
| 安定リリース | 1.1 / 2013年3月21日 |
| Webサイト | www.w3.org/TR/sparql11-query/ |
| 主な実装 | |
| Apache Jena、[1] OpenLink Virtuoso [1] | |
SPARQL(発音は「スパークル」、SPARQLプロトコルとRDFクエリ言語の再帰的頭字語[2])は、 RDFクエリ言語、つまりデータベース用のセマンティッククエリ言語であり、リソース記述フレームワーク(RDF)形式で保存されたデータを取得および操作できます。 [3] [4]これは、ワールドワイドウェブコンソーシアムのRDFデータアクセスワーキンググループ(DAWG)によって標準となり、セマンティックウェブの主要技術の1つとして認識されています。2008年1月15日、SPARQL 1.0はW3Cによって公式勧告として承認され、 [5] [6]、2013年3月にはSPARQL 1.1が承認されました。[7]
SPARQLでは、クエリを3つのパターン、論理積、論理和、およびオプションのパターンで構成することができます。[8]
複数のプログラミング言語向けの実装が存在します。[9] SPARQLエンドポイントに接続して半自動的にSPARQLクエリを構築できるツールが存在します(例えばViziQuer)。[10] さらに、SPARQLクエリを他のクエリ言語(例えばSQL [11]やXQuery )に変換するツールも存在します。[12]
利点
SPARQL を使用すると、ユーザーはW3CのRDF仕様に準拠したクエリを作成できます。したがって、データセット全体は「主語 - 述語 - 目的語」の 3 つ組になります。主語と述語は常に URI 識別子ですが、目的語は URI またはリテラル値にすることができます。3 つの「列」からなるこの単一の物理スキーマは、4 つのフィールドを持つ 1 つのリレーショナル レコードが、主語が何度も繰り返され、述語が基本的に列名、目的語がフィールド値である 4 つの 3 つ組になるという点で、超非正規化されています。これは扱いにくいように見えますが、SPARQL 構文には次の機能があります。
1. 主語と目的語は、再帰的にも含め、他のものを検索するために使用できます。
ex:sw001以下はトリプルのセットです。とがex:sw002にリンクしており、 自体にもリンクがあることは明らかです
ex:sw003。
ex : sw001 ex : linksWith ex : sw003 .
ex : sw002 ex : linksWith ex : sw003 .
ex : sw003 ex : linksWith ex : sw004 , ex : sw006 .
ex : sw004 ex : linksWith ex : sw005 .
SPARQL では、式パイプラインで変数が初めて検出されたときに、結果が設定されます。2 回目以降は、入力として使用されます。URI を変数ex:sw003に割り当てる (「バインド」する)?targetsと、結果が に送られます。これにより、 (上流の依存関係)
に?srcリンクしているすべてのものがわかります。 ex:sw003
SELECT *
WHERE {
BIND ( ex : sw003 AS ?targets )
?src ex : linksWith ?targets .
}
しかし、バインディング変数を単純に切り替えると、動作は逆になります。これにより、依存するすべてのものex:sw003(下流の依存関係) が生成されます。
SELECT *
WHERE {
BIND ( ex : sw003 AS ?src )
?src ex : linksWith ?targets . # 注意! 構文は変更されません!
}
さらに魅力的なのは、SPARQL にパスを再帰的にたどるように簡単に指示できることです。
SELECT *
WHERE {
BIND ( ex : sw003 AS ?src )
?src ex : linksWith + ?targets . # + に注意してください。これで SPARQL は ex:sw004 経由で ex:sw005 を検索します
}
したがって、バインドされた変数はリストになることも可能で、複雑な構文なしで操作できます。この効果は次のようになります。
?S が ( ex : A 、ex : B )にバインドされている 場合、?S ex : linksWith ?O は次のように動作します: ?S内の各sに対して、s ex : linksWith をフェッチし、oをキャプチャし、oを?Oに追加します。
?O が ( ex : A 、ex : B )にバインドされている 場合、?S ex : linksWith ?O は次のように動作します。?O : fetch ex : linksWith o内の各oに対して、sをキャプチャし、 sを?Sに追加します。
2. SPARQL式はパイプラインである
サブクエリと CTE を持つ SQL とは異なり、SPARQL は MongoDB や SPARK に非常に似ています。式は、データのフィルタリングや結合を含め、宣言された順序どおりに評価されます。プログラミング モデルは、複数の WHERE 句を含む SQL ステートメントのようになります。リスト対応のサブジェクトとオブジェクト、およびパイプライン アプローチを組み合わせることで、さまざまなデータ ドメインにまたがる非常に表現力豊かなクエリを作成できます。
リレーショナル データベースとは異なり、オブジェクト列は異種です。URI でない場合、オブジェクト データ型は通常、述語値によって暗示されます (またはオントロジーで指定されます) 。リテラル ノードは、符号付きおよび符号なしの短整数と長整数、単精度および倍精度の浮動小数点数、日時、ペニー精度の 10 進数、ブール値、文字列など、基礎となる XSD 名前空間と一致する型情報を保持します。従来のリレーショナル データベースのトリプル ストア実装では、通常、値が文字列として格納され、4 番目の列で実際の型が識別されます。MongoDB や SQLite などのポリモーフィック データベースでは、ネイティブ値をオブジェクト フィールドに直接格納できます。
したがって、SPARQL は、スキーマが本質的にデータの一部であるデータに対して、個別のスキーマ定義を必要とせず、、などの分析クエリ操作の完全なセットを提供しますJOIN。ただし、異なるデータセットを明確に結合できるようにするために、スキーマ情報 (オントロジー) が外部で提供されることがよくあります。SORTさらにAGGREGATE、SPARQLは、グラフとして考えることができるデータに対して
特定のグラフトラバーサル構文を提供します。
以下の例は、オントロジー定義foaf(「友人の友人」)
を活用する単純なクエリを示しています。
具体的には、次のクエリはデータセット内のすべての人物の名前とメール アドレスを返します。
PREFIX foaf : <http://xmlns.com/foaf/0.1/>
SELECT ?name
?email
WHERE
{
?person a foaf : Person .
?person foaf : name ?name .
?person foaf : mbox ?email .
}
このクエリは、一致する主語を持つすべてのトリプルを結合します。ここで、タイプ述語「a」は人物 ( foaf:Person) であり、人物には 1 つ以上の名前 ( foaf:name) とメールボックス ( foaf:mbox) があります。
読みやすさを考慮して、このクエリの作成者は、変数名「?person」を使用してサブジェクトを参照することを選択しました。トリプルの最初の要素は常にサブジェクトであるため、作成者は「?subj」や「?x」などの任意の変数名を簡単に使用することもできます。どのような名前を選択した場合でも、クエリ エンジンが同じサブジェクトを持つトリプルを結合することを示すために、クエリの各行で同じ名前を使用する必要があります。
?person結合の結果は、、、?nameの行セットになります?email。このクエリは、人間が理解しやすい文字列ではなく複雑な URI であることが多いため、?nameおよびを返します。any には複数のメールボックスがある場合があるため、返されるセットでは、行がメールボックスごとに 1 回ずつ、複数回表示される場合があることに注意してください。
?email?person?person?name
このクエリは、複数の SPARQL エンドポイント (SPARQL クエリを受け入れて結果を返すサービス) に分散され、計算され、結果が収集されます。この手順は、フェデレーテッド クエリと呼ばれます。
フェデレーション方式でもローカル方式でも、クエリ内の追加のトリプル定義により、自動車などのさまざまなサブジェクト タイプへの結合が可能になり、たとえば、燃費の良い自動車を運転する人の名前と電子メールのリストを返すなどの簡単なクエリが可能になります。
クエリフォーム
データベースからデータを読み取るクエリの場合、SPARQL 言語は目的に応じて 4 つの異なるクエリ バリエーションを指定します。
SELECTクエリ- SPARQL エンドポイントから生の値を抽出するために使用され、結果はテーブル形式で返されます。
CONSTRUCTクエリ- SPARQL エンドポイントから情報を抽出し、結果を有効な RDF に変換するために使用されます。
ASKクエリ- SPARQL エンドポイントのクエリに対して単純な True/False 結果を提供するために使用されます。
DESCRIBEクエリ- SPARQL エンドポイントから RDF グラフを抽出するために使用されます。その内容は、メンテナーが有用な情報とみなす内容に基づいてエンドポイントが決定します。
これらの各クエリ形式は、WHEREクエリを制限するためにブロックを使用しますが、クエリの場合DESCRIBE、 はWHEREオプションです。
SPARQL 1.1は、いくつかの新しいクエリ形式でデータベースを更新するための言語を指定します。[13]
例
「アフリカの国の首都はどれですか?」という質問をモデル化する別の SPARQL クエリの例:
PREFIX 例: <http://example.com/exampleOntology#>
SELECT ?capital
?country
WHERE
{
?x 例: cityname ?capital ;
例: isCapitalOf ?y .
?y 例: countryname ?country ;
例: isInContinent 例: Africa .
}
?変数はまたは のプレフィックスで示されます$。?capitalおよびのバインディング?countryが返されます。トリプルがセミコロンで終わる場合、このトリプルのサブジェクトによって次のペアが暗黙的に完成し、トリプル全体が完成します。たとえば、 は のex:isCapitalOf ?y短縮形です?x ex:isCapitalOf ?y。
SPARQL クエリ プロセッサは、これらの 4 つのトリプル パターンに一致するトリプルのセットを検索し、クエリ内の変数を各トリプルの対応する部分にバインドします。ここで重要なのは、「プロパティの方向」です (クラスの一致は、クラス属性またはプロパティのみを通じて実行できます。ダック タイピングを参照してください)。
クエリを簡潔にするために、SPARQL ではTurtleと同様の方法でプレフィックスとベースURIを定義できます。このクエリでは、プレフィックス " " は “ ” を表します。
exhttp://example.com/exampleOntology#
拡張機能
GeoSPARQL は、広く理解されている OGC 標準 ( GML、WKTなど) を使用して、地理情報システム(GIS) クエリのフィルター関数を定義します。
SPARUL はINSERTSPARQL のもう 1 つの拡張機能です。これにより、メソッドを追加することで、この宣言型クエリ言語で RDF ストアを更新できるようになりますDELETE。
XSPARQLはXQueryとSPARQLを組み合わせた統合クエリ言語であり、XMLとRDFの両方のデータソースを一度にクエリします。[14]
実装
オープンソースのリファレンスSPARQL実装
- Eclipse RDF4J(旧 OpenRDF Sesame)
- アパッチ・イエナ[1]
- オープンリンク・ヴァーチュオーソ[1]
トリプルストア、API、および SPARQL 標準を実装したその他のストレージ を含む、より包括的な範囲については、SPARQL 実装のリストを参照してください。
参照
参考文献
- ^ abcd Hebeler, John; Fisher, Matthew; Blace, Ryan; Perez-Lopez, Andrew (2009).セマンティック Web プログラミングインディアナポリス: John Wiley & Sons, Inc. p. 406. ISBN 978-0-470-41801-7。
- ^ Beckett, Dave (2011 年 10 月 6 日). 「SPARQL は何の略ですか?」semantic-web@w3.org .
- ^ Jim Rapoza (2006 年 5 月 2 日)。「SPARQL が Web を輝かせる」eWeek。2007年1 月 17 日閲覧。
- ^ セガラン、トビー、エバンス、コリン、テイラー、ジェイミー (2009)。セマンティック ウェブのプログラミング。O'Reilly Media, Inc.、1005 Gravenstein Highway North、Sebastopol、CA 95472。p. 84。ISBN 978-0-596-15381-6。
- ^ 「W3C セマンティック ウェブ アクティビティ ニュース – SPARQL は勧告です」。W3.org。2008 年 1 月 15 日。2008 年 1 月 20 日時点のオリジナルよりアーカイブ。2009年10 月 1 日に閲覧。
- ^ 「XML およびセマンティック ウェブ W3C 標準タイムライン」(PDF) 2012 年 2 月 4 日. 2013 年11 月 27 日閲覧。
- ^ 「11 個の SPARQL 1.1 仕様が W3C 勧告に」w3.org。2013 年 3 月 21 日。2013年4 月 25 日閲覧。
- ^ 「XML と Web サービスのニュース」xml.org 2006 年 10 月 6 日2007 年1 月 17 日閲覧。
- ^ 「SparqlImplementations – ESW Wiki」。Esw.w3.org 。 2009年10月1日閲覧。
- ^ 「ViziQuer は SPARQL クエリを自動的に構築するツールです」。lumii.lv。2011年2 月 25 日閲覧。
- ^ 「D2R Server」 。 2012年2月4日閲覧。
- ^ 「SPARQL2XQuery Framework」 。 2012年2月4日閲覧。
- ^ Yu, Liyang (2014).セマンティックウェブ開発者ガイド. Springer. p. 308. ISBN 9783662437964。
- ^ 「XSPARQL が W3C 提出として公開されました」。W3.org。2009 年 6 月 23 日。2022年5 月 22 日閲覧。
外部リンク
- W3C データアクティビティブログ
- W3C SPARQL 1.1 ワーキング グループ - クローズ - メーリング リストとアーカイブ、RDF データ アクセス ワーキング グループ
- SPARQL 1.1 勧告
- SPARQL 1.0 クエリ言語 (レガシー)
- SPARQL 1.0 プロトコル (レガシー)
- SPARQL 1.0 クエリ XML 結果形式 (レガシー)
- OWL-RDF/S と XML スキーマ間の SPARQL2XQuery マッピング、および XML スキーマから OWL への変換。
- ARQクエリエンジンにおけるSPARQL構文式
- James (2011 年 9 月 8 日). 「DAWG Test Suite for SPOCQ」. Dydra . 2015 年 6 月 7 日時点のオリジナルよりアーカイブ。2014年12 月 2 日閲覧。
- James (2011 年 9 月 8 日). 「RSpec コード例 / 結果: 425 例、1 失敗 / 287.385157145 秒で終了」Dydra。 2011 年 12 月 11 日時点のオリジナルよりアーカイブ。 2014 年12 月 2 日閲覧。
- ウィキデータ
- Wikidata クエリサービスチュートリアル
- DBペディア
