• 検索結果がありません。

sem:store

ドキュメント内 Semantics Developer’s Guide (ページ 120-125)

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" ;

ドキュメント内 Semantics Developer’s Guide (ページ 120-125)