6.1 SPARQL を使用したトリプルのクエリ
6.1.7 ターゲット RDF グラフ
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 . }
このクエリは、データセットのトリプルで定義されたとおりにリソースの役割または肩 書を返します。
注: クエリされたグラフに空白ノードがある場合、結果では空白のノードの識 別子が返されることがあります。
例えば、次のクエリはhttp://my_collectionsという名前のグラフに対して実行 されます。
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?name ?mbox ?date FROM <http://my_collections>
WHERE { ?g dc:publisher ?name ; dc:date ?date .
GRAPH ?g { ?person foaf:name ?name ; foaf:mbox ?mbox }
}
「GRAPHキーワード」(87 ページ)では、クエリでのGRAPHの使い方について説明し
ています。
W3Cの「SPARQL Query Language for RDF」で説明されているように、FROMおよび
FROM NAMEDキーワードは、SPARQLクエリでRDFデータセットを指定する目的で使 用されます。
http://www.w3.org/TR/rdf-sparql-query/#specifyingDataset
FROMまたはFROM NAMEDキーワードがないと、SPARQLクエリはデータベース内に 存在するすべてのグラフに対して実行されてしまいます。つまり、クエリでグラフ名を 指定しない場合、すべてのグラフの和集合に対してクエリされます。
XQuery、REST、またはJavaScriptで次の方法を使用して、クエリ対象となる1つある
いは複数のグラフを指定することもできます。
• default-graph-uri*:クエリするグラフ名を選択します。通常は、使用可能 なグラフのサブセットです。
• named-graph-uri*:FROM NAMEDおよびGRAPHとともに使用して、特定の種 類のクエリ内で名前を置換するIRIを指定します。クエリの一部として1つある いは複数のnamed-graph-uri*パラメータを指定できます。
default-graph-uri*を指定した場合は、指定した1つあるいは複数のグラフ名が クエリされます。「*」は、1つあるいは複数のdefault-graph-uriまたは
named-graph-uriパラメータを指定できることを示します。
注: このdefault-graph-uriは、名前が付いていないトリプルを含む「デ フォルト」グラフ http://marklogic.com/semantics#default-graphではありません。
この例では、http://example.org/bob/foaf.rdfグラフ内のデータセットを検索 するために、SPARQLクエリがXQueryでラップされています。
xquery version "1.0-ml";
import module namespace sem = "http://marklogic.com/semantics"
at "/MarkLogic/semantics.xqy";
sem:sparql('
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?g ?name
WHERE {graph ?g { ?alum foaf:schoolHomepage
<http://www.ucsb.edu/> .
?alum foaf:knows ?person .
?person foaf:name ?name } }
' ()
("default-graph-uri=http://example.org/bob/foaf.rdf”)
SPARQLクエリのFROMはdefault-graph-uriと同様に機能し、FROM NAMEDは
named-graph-uriと同様に機能します。これら2つの節は、SPARQLクエリの一部 として同様に機能しますが、一方はクエリ内に記述する(クエリ内にラップする)のに 対し、他方はクエリの外側で指定します。
このセクションでは、次の内容を取り上げます。
• FROMキーワード
• FROM NAMEDキーワード
• GRAPHキーワード 6.1.7.1 FROMキーワード
SPARQLクエリのFROM節では、クエリ対象データの取得場所や、クエリ対象グラフを
指定します。クエリの一部としてFROMを使用するには、FROM節に名前付きのグラフ が記述されている必要があります。MarkLogicではグラフ名はコレクションになっ
ており、Query ConsoleのExploreを使用して表示できます。
次のSPARQLクエリでは、FROMキーワードを使用してinfo:govtrack/peopleグ
ラフ内のデータを検索します。
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name
FROM <http://marklogic.com/semantics#info:
govtrack/people/>
WHERE { ?x foaf:name ?name } LIMIT 10
GovTrackデータセットについては、「例を実行する準備」(125 ページ)を参照してく
ださい。
デフォルトグラフは、1つあるいは複数のFROM節内で参照されているグラフのRDF マージ(グラフの和集合)の結果です。各FROM節には、デフォルトグラフを形成する ために使用されているグラフを示すIRIが含まれます。
例えば、graph1およびgraph2がマージされて、デフォルトグラフを形成します。
FROM graph1 FROM graph2
注: この意味で、デフォルトグラフはデフォルトコレクション
http://marklogic.com/semantics#default-graphと同じでは ありません。
次の例は、「Alice」が目的語の位置にあるすべてのトリプルを返すSPARQLのSELECT クエリを示したものです。RDFデータセットには、単一のデフォルトグラフが含まれ、
名前付きグラフは含まれません。
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?s ?p ?o
FROM <http://example.org/foaf/alice>
WHERE {?s foaf:name "Alice";
?p ?o .}
注: FROMキーワードは、WHERE節よりも前に配置する必要があります。
FROMキーワードをWHERE節よりも後ろに配置すると、シンタックスエ ラーが発生します。
graph1
graph2
デフォルトグラフ
6.1.7.2 FROM NAMEDキーワード
クエリでは、FROM NAMED節を使用してデータセット内の名前付きグラフのIRIを指 定できます。各IRIは、データセット内の名前付きグラフ1つを指定するために使用さ れます。複数のFROM NAMED節を記述すると、複数のグラフがデータセットに追加さ れます。FROM NAMEDでは、クエリで使用するグラフ名が、その節で提供されている グラフのみにマッチします。
named-graphは、ロード時にmlcpでコレクションパラメータ
-output_collections http://www.example.org/my_graphを使用して設定で きます。「コレクションおよびディレクトリの指定」(42 ページ)を参照してください。
また、RESTクライアントでPUT:/v1/graphsを使用してnamed-graphを設定する こともできます。
注: 名前付きグラフは、一般にRDFデータをロードするときに作成されます。
「トリプルのロード」(29 ページ)を参照してください。
クエリのFROM NAMEDでは、GRAPHキーワードを使用してWHERE節からクエリされ る名前付きグラフを識別します。
例えば以下のようになります。
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?who ?g ?mbox
FROM <http://example.org/foaf/aliceFoaf>
FROM NAMED <http://example.org/alice>
FROM NAMED <http://example.org/bob>
WHERE {
?g dc:publisher ?who .
GRAPH ?g { ?x foaf:mbox ?mbox } }
この例では、FROMとFROM NAMEDキーワードが同時に使用されています。FROM
NAMEDは、クエリの評価時に考慮されるグラフの範囲を設定するために使用され
ています。また、GRAPHコンストラクトでは、いずれかの名前付きグラフを指定し ています。
注: FROMまたはFROM NAMEDキーワードを使用すると、GRAPH節で使用で きるグラフが制限される場合があります。
6.1.7.3 GRAPHキーワード
GRAPHキーワードは、データセット内の名前付きグラフに対するクエリの一部を評価
するようにクエリエンジンに対して指示します。GRAPH節で使用される変数は、別の
GRAPH節内、またはデータセットのデフォルトグラフにマッチするグラフパターンで
使用することもできます。
例えば以下のようになります。
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?name ?mbox ?date
WHERE { ?g dc:publisher ?name ; dc:date ?date .
GRAPH ?g { ?person foaf:name ?name ; foaf:mbox ?mbox }
}
注: SPARQLクエリでGRAPHコンストラクトを使用する場合は、コレクショ
ンレキシコンをオンにする必要があります。コレクションレキシコンは、
データベース設定ページまたは管理画面からオンにできます。
明示的なIRIを含むGRAPH節(例えばGRAPH <....uri...> { ...graph pattern...})は、GRAPH節で指定されたIRIを使用してデータセットにマッチし ます。