首先,我必须道歉,因为在涉及XML,RDF和SPARQL查询时我非常新。我所有的知识都是基于3天的大量阅读,所以它没有完全沉浸。然而,当我试图使用Jena查询大型RDF文件时遇到的一个问题是如何获取作为超类的一部分的所有实例?如何在SPARQL中查找引用另一个对象的对象
对不起,如果这是措辞不良,所以这里是一个例子。在我的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>
现在我知道如何查询任何rdf:type
和(一点)如何使用SPARQL查询图表。我想要做的是第一次找到MainNode(我已经可以),然后找到引用这个MainNode的所有元素/ objetcs/classes/instances。
在我目前的尝试中,我可以直接查询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
的超类的子类。
这正是我想要的!没想到这是最后直截了当的。非常感谢 –