6.2 XQuery または JavaScript によるトリプルのクエリ
6.2.2 セマンティック関数を使用した検索
6.2.2.3 sem:store
sem:storeオプションは、sem:sparql、sem:sparql-values、またはsem:sparql-updateを使
用する
SPARQL
クエリのトリプルのソースを示す目的で使用できます。複数のsem:store値を指定した場合は、すべてのソースからのトリプルがマージされてクエリ
されます。
sem:store値がsem:sparql、sem:sparql-values、またはsem:sparql-updateのオプションと して指定されていない場合、そのクエリのデフォルトのsem:storeが使用されます。
6.2.2.4
インメモリでのトリプルの検索sem:in-memory-storeを使用すると、インメモリでトリプルを検索できます。
次に例を示します。
let $triples := sem:rdf-parse($string, ("turtle", "myGraph")) let $query := '
PREFIX ad: <http://marklogic.com/addressbook/>
PREFIX d: <http://marklogic.com/id/>
CONSTRUCT{ ?person ?p ?o .}
FROM <myOtherGraph>
WHERE {
?person ad:firstName "Elvis" ; ad:lastName "Presley" ;
?p ?o . }
'
for $result in sem:sparql($query, (), (), sem:in-memory-store($triples))
order by sem:triple-object($result) return <result>{$result}</result>
このクエリは、「myGraph」という名前のトリプルのグラフをインメモリで構築します。
このグラフには、名が
Elvis
で姓がPresley
という人物が含まれます。これらのトリプル のソースは「myOtherGraph」であり、結果は順序付けられて返されます。6.2.3
変数に対するバインディングの使用標準の
SPARQL
の拡張機能により、クエリステートメントのボディで変数に対するバインディングを使用できます。
SPARQL
クエリで変数を使用する箇所では、sem:sparql の引数として外部バインディングを渡すことで、変数を固定値に設定できます。変数に対するバインディングは、(従来は許容されていなかったシンタックスで)
OFFSETおよびLIMIT節の値として使用することもできます。次のクエリ例では、変数に
対するバインディングをLIMITとOFFSETの両方で使用します。
xquery version "1.0-ml";
import module namespace sem = "http://marklogic.com/semantics"
at "/MarkLogic/semantics.xqy";
import module namespace json = "http://marklogic.com/xdmp/json"
at "MarkLogic/json/json.xqy";
declare namespace jbasic = "http://marklogic.com/xdmp/json/basic";
let $query := '
PREFIX bb: <http://marklogic.com/baseball/players/>
SELECT ?firstname ?lastname ?team FROM <SportsTeams>
{ {
?s bb:firstname ?firstname .
?s bb:lastname ?lastname .
?s bb:team ?team .
?s bb:position ?position .
FILTER (?position = ?pos) }
}
ORDER BY ?lastname LIMIT ?lmt
'
let $mymap := map:map()
let $put := map:put($mymap, "pos", "pitcher") let $put := map:put($mymap, "lmt", "3")
let $triples := sem:sparql($query, $mymap)
let $triples-xml := sem:query-results-serialize($triples, "xml") return <results>{$triples-xml}</results>
=>
<results>
<sparql xmlns="http://www.w3.org/2005/sparql-results/">
<head>
<variable name="firstname"></variable>
<variable name="lastname"></variable>
<variable name="team"></variable>
</head>
<results>
<result>
<binding name="firstname">
<literal datatype="http://www.w3.org/2001/XMLSchema#string">
Fernando</literal>
</binding>
<binding name="lastname">
<literal datatype="http://www.w3.org/2001/XMLSchema#string">
Abad</literal>
</binding>
<binding name="team">
<literal datatype="http://www.w3.org/2001/XMLSchema#string">
Athletics</literal>
</binding>
</result>
<result>
<binding name="firstname">
<literal datatype="http://www.w3.org/2001/XMLSchema#string">
Jesse</literal>
</binding>
<binding name="lastname">
<literal datatype="http://www.w3.org/2001/XMLSchema#string">
Chavez</literal>
</binding>
<binding name="team">
<literal datatype="http://www.w3.org/2001/XMLSchema#string">
Athletics</literal>
</binding>
</result>
<result>
</binding>
<binding name="lastname">
<literal datatype="http://www.w3.org/2001/XMLSchema#string">
Cook</literal>
</binding>
<binding name="team">
<literal datatype="http://www.w3.org/2001/XMLSchema#string">
Athletics</literal>
</binding>
</result>
</results>
</sparql>
</results>
バインディングは、SPARQL(sem:sparql)、SPARQL value(sem:sparql-values)、およ び
SPARQL Update
(sem:sparql-update)で使用できます。SPARQL Update
で使用される 変数に対するバインディングの例については、「変数のバインディング」(182ページ)を参照してください。
6.2.4
結果のXML
およびRDF
表示sem:query-results-serializeおよびsem:rdf-serialize関数を使用すると、結果を
XML、
JSON
、またはRDF
シリアライゼーションで表示できます。次の例では、sem:sparqlクエリは法案番号「1024」の共同提出者を調べ、値シーケンス をsem:query-results-serializeに渡して結果をデフォルトの
XML
形式の変数バイン ディングとして返します。xquery version "1.0-ml";
import module namespace sem = "http://marklogic.com/semantics"
at "/MarkLogic/semantics.xqy";
sem:query-results-serialize(sem:sparql('
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX bill: <http://www.rdfabout.com/rdf/schema/usbill/>
SELECT ?bill ?person ?name
WHERE {?bill rdf:type bill:SenateBill ; bill:congress "108" ; bill:number "1024" ; bill:cosponsor ?person .
?person foaf:name ?name .}
'))
結果は、W3C SPARQL Query Results形式で返されます。
同じ結果を
JSON
シリアライゼーションで表示するには、このクエリの後に形式オプ ションを追加します。次に例を示します。
xquery version "1.0-ml";
import module namespace sem = "http://marklogic.com/semantics"
at "/MarkLogic/semantics.xqy";
sem:query-results-serialize(sem:sparql('
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX bill: <http://www.rdfabout.com/rdf/schema/usbill/>
SELECT ?bill ?person ?name
WHERE {?bill rdf:type bill:SenateBill ; bill:congress "108" ; bill:number "1024" ;