2017-03-27 3 views
0

SPARQLで選択されたOWLデータ型(ここではVisibilityKind)のすべてのリテラルをリストする方法は? VisibilityKindのOWLデータ型の定義は次のとおりです。SPARQL選択されたOWLデータ型のリテラルリスト

DatatypeDefinition(:VisibilityKind 
    DataOneOf("public"^^xsd:string "private"^^xsd:string "package"^^xsd:string) 
) 

答えて

0

直接答えるために、あなたは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 
} 
+0

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

+0

本当に@AKSWが言ったように、提案されたquerryはそれにマッチしません。 – Annabelle

+0

最初または2番目のクエリが参照されているかどうかは不明です。私は 'owl:equivalentClass'定義を最初に編集しました。 – scotthenninger

1

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を見てください。

+0

広範な答えをありがとう。私はSPARQL 1.1を使用しているので問題があります(私はProtegeツールを使って作業しています)。あなたの2番目と3番目のクエリをチェックすることすらできません。 – Annabelle

+0

あなたの質問にはどのようにリテラルが誘導されていますか? – Annabelle

+0

申し訳ありませんが間違いを犯しましたが、 '?literal'の代わりに'?o'を書いたのですが、エラーを修正するために編集しました。 –

関連する問題