【发布时间】:2013-07-13 05:52:54
【问题描述】:
首先我必须道歉,因为我对 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 的元素/对象/类/实例。
根据我目前的尝试,我可以直接查询Connection 或Potential,但不能同时查询两者。所以返回所有Connections 的查询将是:
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" .
}
对于所有Potentials,查询将是:
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 的超类的子类。
【问题讨论】:
标签: rdf sparql authorize.net-cim