3

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ます。Potentialnode

4

1 に答える 1