6.1 SPARQL を使用したトリプルのクエリ
6.1.7 クエリパターン
SPARQL
クエリの中核は、グラフパターンと呼ばれるトリプルパターンの集まりです。トリプルパターンは
RDF
トリプルに似ていますが、主語、述語、および目的語の各 ノードが変数である点が異なります。グラフパターンは、RDFデータのサブグラフの
RDF
タームがこれらの変数と代替可能 な場合に、そのサブグラフとマッチします。また、その結果はサブグラフと同等のRDF
グラフです。グラフパターンは、波括弧({ })内に含まれる
1
つあるいは複数のトリプルパターン です。この章では、クエリパターンに対応する次のタイプのグラフパターンについて説 明します。•
基本グラフパターン:トリプルパターンの集まりは、トリプルストア内のトリプ ルにマッチする必要があります。•
グループグラフパターン:グラフパターンの集まりは、同じ変数置換を使用して すべてマッチする必要があります。•
オプショングラフパターン:追加のパターンによってソリューションを拡張でき ます。•
和集合グラフパターン:考えられる2
つ以上のパターンについて試行されます。•
グラフグラフパターン:パターンは名前付きグラフにマッチされます。SPARQL
変数は、疑問符(?)またはドル記号($)付きで表記されます。変数は、任意の主語、述語、または目的語ノードにマッチさせたり、その位置の任意の値にマッチさ せたりするように配置できます。つまり、変数は
IRI
またはリテラル(文字列、ブール 型、日付など)にバインドできます。トリプルパターンは、トリプルストア内のトリプ ルにマッチするたびに、各変数ごとにバインディングを生成します。この例は、基本グラフパターンを示したものです。変数がトリプルの主語(?s)と述語
(?p)にマッチし、目的語は「Paris」(パリ)です。このクエリは
2
つの部分で構成され ています。SELECT節はクエリ結果に含まれる内容を指定し、WHERE節はデータグラフに マッチさせる基本グラフパターンを提供します。PREFIX db: <http://dbpedia.org/resource/>
PREFIX onto: <http://dbpedia.org/ontology/>
SELECT ?s ?p
WHERE {?s ?p db:Paris }
このクエリは、パリで誕生または死亡した、データセットに含まれるすべての人物を返 します。結果の数は、クエリの末尾に「
LIMIT 10
」を追加することで制限できます。詳 細については、「LIMITキーワード」(100ページ)を参照してください。注:
変数は
1
回だけバインドできます。SELECT節の?sおよび?pは、WHERE節内 と同じ変数です。クエリの結果には、目的語の位置に「
Paris
」がある(birthPlace
およびdeathPlace
につ いて)主語および述語のIRI
が含まれます。SPARQL
のSELECTクエリは、ソリューションを返します。ソリューションは、変数と 値のバインディングの集まりです。デフォルトでは、SELECTクエリの結果はAuto
形式 で返されます。これは確認しやすいように整形されたビューです。出力表示は変更でき ます。詳細については、「クエリ結果オプションの指定」(76ページ)を参照してくだ さい。前の例は、単一トリプルのパターンマッチ(基本グラフパターン)です。SPARQLで は、複数トリプルのパターンマッチングを使用してクエリすることもできます。
SPARQL
では、Turtle
に似たシンタックスを使用してクエリパターンを表現します。それぞれのトリプルパターンはピリオドで終わります。
SQL
クエリのAND節と同様に、クエリパターン内の各トリプルは完全にマッチする必要 があります。例えば、Paris, Texas
(テキサス州にあるパリ)とParis, France
(フランス にあるパリ)のように、データセット内に別の国で見つかる可能性のある場所名がある とします。次の例は、フランスのパリで誕生し、「フットボール選手」(Footballer)と 説明されているすべてのリソースのIRI
を返します。PREFIX db: <http://dbpedia.org/resource/>
PREFIX onto: <http://dbpedia.org/ontology/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?s
WHERE {?s onto:birthPlace db:Paris .
?s onto:birthPlace db:France .
?s dc:description "Footballer"@en . }
上記のクエリパターンを記述する別の方法として、WHERE句でセミコロン(;)を使用し て、同じ主語を共有するトリプルパターンを区切る方法が挙げられます。
次に例を示します。
PREFIX db: <http://dbpedia.org/resource/>
PREFIX onto: <http://dbpedia.org/ontology/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?s
WHERE {?s onto:birthPlace db:Paris ; onto:birthPlace db:France ; dc:description "Footballer"@en . }
SPARQL
規格では、クエリのトリプルパターンの主語および目的語として空白ノードを使用することが認められています。
次に例を示します。
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?desc
WHERE { _:p rdf:type foaf:Person ; dc:description ?desc . }
このクエリは、データセットのトリプルで定義されたとおりにリソースの役割または肩 書を返します。
注: