首先,我必须道歉,因为在涉及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>
现在,我知道如何rdf:type
使用SPARQL查询任何内容,以及(有点)如何使用图表查询。我要做的是首先找到MainNode(已经可以),然后找到所有引用该MainNode的元素/ objetcs / classes / instances。
通过当前的尝试,我可以查询aConnection
或Potential
直接查询,但不能同时查询。因此,返回allConnection
的查询将是:
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
,查询将是:
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
。
我认为您要的是与主节点之间只有三重连接的任何节点:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX cim: <http://iec.ch/TC57/2010/CIM-schema-cim15#>
SELECT ?relationship ?object
WHERE {
?object ?relationship ?mainNode .
?mainNode cim:Object.name "The Main Node" .
}
该查询将告诉您直接连接到主节点的所有节点,以及连接谓词的URI。
如果只希望从相关节点到主节点的一些连接,则需要在一个联合中枚举它们,或者添加一个FILTER
子句以删除不需要的连接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句