XML、RDF、および SPARQL クエリに関しては、私は非常に新しいので、最初に謝らなければなりません。私の知識はすべて 3 日間の多くの読書に基づいているため、完全には浸透していません。それでも、Jena を使用して大きな RDF ファイルをクエリしようとしたときに遭遇した問題は、スーパークラスの一部であるすべてのインスタンスを取得する方法でした。
表現が下手で申し訳ありませんが、ここに例を示します。私の RDF ファイルには、常にメイン ノードがあります。
メインノード
次に、このノードを次のようなリソースとして持つオブジェクトがあります。
<cim:Connection rdf:ID="connection_1">
<cim:Object.name>Connection Point 1</cim:Object.name>
<cim:Connection.node rdf:resource="#main_node_1"/>
</cim:Connection>
また
<cim:Potential rdf:ID="potential_1">
<cim:Object.name>Equal Potential 1</cim:Object.name>
<cim:Potential.node rdf:resource="#main_node_1"/>
</cim:Connection>
これで、SPARQL を使用して任意のクエリを実行する方法rdf:type
と (少し) クエリをグラフ化する方法がわかりました。私がやりたいことは、最初に MainNode を見つけて (既にできています)、次にこの MainNode を参照するすべての要素/オブジェクト/クラス/インスタンスを見つけることです。
私の現在の試みでは、Connection
またはPotential
直接クエリを実行できますが、両方をクエリすることはできません。Connection
したがって、すべての s を返すクエリは次のようになります。
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX cim: <http://iec.ch/TC57/2010/CIM-schema-cim15#>
SELECT ?object
WHERE {
?object cim:Connection.node ?mainNode .
?mainNode cim:Object.name "The Main Node" .
}
すべてPotential
の s に対して、クエリは次のようになります。
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX cim: <http://iec.ch/TC57/2010/CIM-schema-cim15#>
SELECT ?object
WHERE {
?object cim:potential.node ?mainNode .
?mainNode cim:Object.name "The Main Node" .
}
それでも、両方を抽出する必要があり、使用したくありませんUNION
。含まれていないクラスがさらにある可能性があるためです。私の試みは、?object
行を次のように変更することでした:
?mainNode cim:*.name "The Main Node" .
ただし、アスタリスク*
を使用しても、ここでクラスを使用できるようにすることはできません。実際、 と の両方は、変数 を含むスーパークラスの子と見なすことができConnection
ます。Potential
node