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

CURIE を扱う

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

6.2 XQuery または JavaScript によるトリプルのクエリ

6.2.5 CURIE を扱う

CURIE

は、プレフィックスとリファレンスの

2

つのコンポーネントで構成されていま す。プレフィックスはコロン(

:

)でリファレンスと区切られます。例えば、

dc:descriptionはダブリンコアのプレフィックスであり、リファレンス

http://purl.org/dc/elements/1.1/は説明です。

最もよく使用されるプレフィックスとそのマッピングは、次に示すとおりです。

map:entry("atom", "http://www.w3.org/2005/Atom/"), map:entry("cc", "http://creativecommons.org/ns/"), map:entry("dc", "http://purl.org/dc/elements/1.1/"), map:entry("dcterms", "http://purl.org/dc/terms/"), map:entry("doap", "http://usefulinc.com/ns/doap/"), map:entry("foaf", "http://xmlns.com/foaf/0.1/"),

map:entry("media", "http://search.yahoo.com/searchmonkey/media/"), map:entry("og", "http://ogp.me/ns/"),

map:entry("owl", "http://www.w3.org/2002/07/owl/"), map:entry("prov", "http://www.w3.org/ns/prov/"),

map:entry("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns"), map:entry("rdfs", "http://www.w3.org/2000/01/rdf-schema/"), map:entry("result-set",

"http://www.w3.org/2001/sw/DataAccess/tests/result-set/"), map:entry("rss", "http://purl.org/rss/1.0/"),

map:entry("skos", "http://www.w3.org/2004/02/skos/core/"), map:entry("vcard", "http://www.w3.org/2006/vcard/ns/"), map:entry("void", "http://rdfs.org/ns/void/"),

map:entry("xhtml", "http://www.w3.org/1999/xhtml/"), map:entry("xs","http://www.w3.org/2001/XMLSchema/")

sem:curie-expandおよびsem:curie-shorten関数を使用することで、

MarkLogic

CURIE

を扱うことができます。sem:curie-expandを使用すると、よく使用されるプレフィック スを宣言する必要がなくなります。

次に例を示します。

xquery version "1.0-ml";

import module namespace sem = "http://marklogic.com/semantics"

at "/MarkLogic/semantics.xqy";

sem:curie-expand("foaf:name")

=>

<http://xmlns.com/foaf/0.1/name>

この例では、cts:triple-range-queryは「

Lamar Alexander

」という名前の人物を探しま す。結果はcts:searchから返され、foaf:nameが「Lamar Alexander」に等しいsem:triple

要素が検索される点に注意してください。述語

CURIE

はfoaf:nameについて完全に展 開された

IRI

として表示されます。

xquery version "1.0-ml";

import module namespace sem = "http://marklogic.com/semantics"

at "/MarkLogic/semantics.xqy";

let $query := cts:triple-range-query((),

sem:curie-expand("foaf:name"), "Lamar Alexander", "sameTerm") return cts:search(fn:collection()//sem:triple, $query)

=>

<sem:triples xmlns="http://marklogic.com/semantics">

<sem:subject>

http://www.rdfabout.com/rdf/usgov/congress/people/A000360/

</sem:subject>

<sem:predicate>

http://xmlns.com/foaf/0.1/name

</sem:predicate>

<sem:object datatype="http://www.w3.org/2001/XMLSchema#string">

Lamar Alexander

</sem:object>

</sem:triples>

次の例では、クエリには一連のcts:triples関数呼び出しおよびsem:curie-expandが含 まれ、1917年

11

20

に誕生した議員の名前を調べます。該当する人物の名前は、返 されるトリプルステートメントの目的語位置(sem:triple-object)から

RDF

リテラル 文字列として返されます。

xquery version "1.0-ml";

import module namespace sem = "http://marklogic.com/semantics"

at "/MarkLogic/semantics.xqy";

let $person-triples := cts:triples((), sem:curie-expand("vcard3:BDAY", map:entry("vcard3", "http://www.w3.org/2001/vcard-rdf/3.0/")),

"1917-11-20")

let $subject := sem:triple-subject($person-triples) let $name-triples := cts:triples($subject,

sem:curie-expand("foaf:name"), ())

let $name := sem:triple-object($name-triples) return ($name)

=>

Robert Byrd

IRI

CURIE

に短縮するにはsem:curie-shortenを使用します。この関数の評価では、

プレフィックスで表現される値とコロンよりも後の部分(リファレンス)を連結したも

ので

CURIE

を置換します。

次に例を示します。

xquery version "1.0-ml";

import module namespace sem = "http://marklogic.com/semantics"

at "/MarkLogic/semantics.xqy";

sem:curie-shorten(sem:iri("http://www.w3.org/1999/02/

22-rdf-syntax-ns#resource/"))

=>

rdf:resource

注:

CURIE

IRI

にマッピングされますが、属性の値や、IRIのみが含まれるよ

うに指定されているその他のコンテンツの値として使用しないでください。

例えば次のクエリでは、cts:triple-range-queryはその位置に文字列である

sem:curie-shortenではなく

IRI(

sem:iri)があることを前提にしているため、空のシー ケンスを返します。

xquery version "1.0-ml";

import module namespace sem = "http://marklogic.com/semantics"

at "/MarkLogic/semantics.xqy";

let $query := cts:triple-range-query((),

sem:curie-shorten(sem:iri("http://xmlns.com/foaf/0.1/name")),

"Lamar Alexander", "sameTerm")

return cts:search(fn:collection()//sem:triple, $query)

代わりに、次のいずれかを使用できます。

let $query := cts:triple-range-query((),

sem:curie-expand("foaf:name"), "Lamar Alexander", "sameTerm")

または、プレフィックスを完全な

IRI

に展開します。

let $query := cts:triple-range-query((),

sem:iri("http://xmlns.com/foaf/0.1/name/"), "Lamar Alexander",

"sameTerm")

注:

SPARQL

で定義されているsameTerm関数は、値等価性演算を実行します。

これは、型の処理方法が等価演算子(=)と異なります。MarkLogicでは、

sameTermが=と異なるのは、型およびタイムゾーンだけです。例えば、

sameTerm(A,B)は

A=B

を意味します。SPARQL用語ではsameTermセマン ティックを使用して

SPARQL

クエリ内のグラフパターンにグラフをマッ チさせることを単純含意と呼びます。詳細については、「トリプル値とタ イプ情報」(59ページ)を参照してください。

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