SPARQLで選択されたOWLデータ型(ここではVisibilityKind)のすべてのリテラルをリストする方法は? VisibilityKindのOWLデータ型の定義は次のとおりです。SPARQL選択されたOWLデータ型のリテラルリスト
DatatypeDefinition(:VisibilityKind
DataOneOf("public"^^xsd:string "private"^^xsd:string "package"^^xsd:string)
)
SPARQLで選択されたOWLデータ型(ここではVisibilityKind)のすべてのリテラルをリストする方法は? VisibilityKindのOWLデータ型の定義は次のとおりです。SPARQL選択されたOWLデータ型のリテラルリスト
DatatypeDefinition(:VisibilityKind
DataOneOf("public"^^xsd:string "private"^^xsd:string "package"^^xsd:string)
)
直接答えるために、あなたはowl:oneOf
、リスト内のすべての値を検索する必要があります。
SELECT ?resource ?value
WHERE {
:VisibilityKind owl:equivalentClass/owl:oneOf/(rdf:rest*/rdf:first) ?value .
?resource ?prop ?value .
}
しかし、注意すべき点がある - 他の性質が持っている可能性があり値 "public" "private"または "package"。あなたが:VisibilityKind
の値のみを取得していることを確認するために、データ型を使用するプロパティの範囲として、そのデータ型を定義します。次に
{ :someProp rdfs:domain :VisibilityKind }
範囲で:VisibilityKind
を定義するすべてのプロパティを取得するには、次の問合せを使用します。
SELECT ?resource ?value
WHERE {
?prop rdfs:range :VisibilityKind .
?resource ?prop ?value
}
SPARQLを使用すると、特定のデータ型IRIを持つすべてのリテラルを取得できます。たとえば、あなたがそのような"public"^^:VisibilityKind
などのリテラルを使用してデータを持っていると仮定すると、あなたが書くことができます。
SELECT ?literal WHERE {
?s ?p ?literal .
FILTER (datatype(?literal) = :VisibilityKind)
}
しかし、あなたはおそらく、このデータ型IRIとリテラルを持っていないので、これはあなたが望むものは確かではありません。 ?o
に関連付けられた値が:VisibilityKind
の値空間に属している場合
SELECT ?literal WHERE {
?s ?p ?literal .
FILTER (isInDatatype(?literal,:VisibilityKind))
}
どこisInDatatype
チェック:あなたはおそらくたいことは大体として配合することができるようなものです。ただし、このような関数は標準のSPARQL 1.1では存在しません。さらに、存在していても、クエリエンジンはOWL 2の意味を理解し、推論を行う必要があります。だから、OWL 2 DL entailment regimeを実装し、あなたが望む結果を得るためにビットにクエリをハックする必要があると思いますSPARQLエンジンが必要になります
SELECT ?literal WHERE {
?s ?p ?literal .
[] a :VisibilityKind;
:owl:sameAs ?literal;
FILTER (isLiteral(?literal))
}
あなたはSPARQL 1.1含意体制の実装を検索したい場合は、あなたが取ることができますSPARQLワーキンググループによって収集されたimplementation reportsを見てください。
https://www.w3.org/TR/owl2-mapping-to-rdf/によると、DatatypeDefinition公理は、「T(DT)owl:equivalentClass T(DR)」として表されます。これは、左(DT)は、 ':VisibilityKind'と、' _:x rdf:type rdfs:Datatype by DataOneOf 'となるデータ範囲(DR)となります。 _:x owl:oneOf T(SEQ lt1 ... ltn).'あなたのクエリはそれと一致するでしょうか? '?o'は述語' owl:oneOf'を介して値のリストに別の辺を持つ空のノードであると思います。しかし、多分私は間違っています。 – AKSW
本当に@AKSWが言ったように、提案されたquerryはそれにマッチしません。 – Annabelle
最初または2番目のクエリが参照されているかどうかは不明です。私は 'owl:equivalentClass'定義を最初に編集しました。 – scotthenninger