おそらく、オントロジーの背後にある基本的な考え方を理解できないだけかもしれませんが、ここに私の質問があります。述語を指定して空の結果を取得する SPARQL クエリを使用して、RDF ストレージ (4store を使用しますが、XML ArmyKnife も試しました) からトリプルを抽出しようとしています。
RDF 構文を台無しにしないようにするために、LUBM で生成されたデータを使用します (サンプルに適したサイズに縮小されています)。
<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF
xml:base = "http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl"
xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:ub="univ-bench.owl#"
>
<owl:DatatypeProperty rdf:ID="name">
<rdfs:label>name</rdfs:label>
</owl:DatatypeProperty>
<owl:Class rdf:ID="Organization">
<rdfs:label>organization</rdfs:label>
</owl:Class>
<owl:Class rdf:ID="University">
<rdfs:label>university</rdfs:label>
<rdfs:subClassOf rdf:resource="#Organization" />
</owl:Class>
<ub:University rdf:about="http://www.University0.edu">
<ub:name>University0</ub:name>
</ub:University>
</rdf:RDF>
次に、クエリを実行して、インポート後にデータベースに実際に含まれるトリプルを確認します。
SELECT * WHERE {?s ?p ?o} ORDERBY ?s
結果は次のとおりです。
<http://www.University0.edu> <univ-bench.owl#name> "University0"
<http://www.University0.edu> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <univ-bench.owl#University>
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#Organization> <http://www.w3.org/2000/01/rdf-schema#label> "organization"
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#Organization> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Class>
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#University> <http://www.w3.org/2000/01/rdf-schema#subClassOf> <http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#Organization>
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#University> <http://www.w3.org/2000/01/rdf-schema#label> "university"
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#University> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Class>
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#name> <http://www.w3.org/2000/01/rdf-schema#label> "name"
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#name> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#DatatypeProperty>
<univ-bench.owl#name>最初のトリプルの一部として述語があることがはっきりとわかります。
それにもかかわらず、次のクエリは結果を返しません。
SELECT * WHERE {?s <univ-bench.owl#name> ?o}
名前空間の有無にかかわらず、何十もの組み合わせを試しましたが、うまくいきません。明らかに存在する述語をRDFエンジンが見つけられない理由を誰か説明できますか?
ところで、OBJECT="University0" で同じトリプルを抽出しても問題ありません。