gpt4 book ai didi

rdf - 如何在 SPARQL 中查找引用另一个对象的对象

转载 作者:行者123 更新时间:2023-12-04 18:44:16 25 4
gpt4 key购买 nike

首先,我必须道歉,因为我在 XML、RDF 和 SPARQL 查询方面是个新手。我所有的知识都是基于 3 天的大量阅读,所以还没有完全理解。不过,我在尝试使用 Jena 查询大型 RDF 文件时遇到的一个问题是如何获取属于父类(super class)的所有实例?

抱歉,如果措辞不当,请举个例子。在我的 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/类/实例。

根据我目前的尝试,我可以直接查询 ConnectionPotential,但不能同时查询两者。所以返回所有 Connection 的查询将是:

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" . 

但是星号 * 不允许我在这里提供任何类。事实上,ConnectionPotential 都可以被视为包含变量 node 的父类(super class)的子类。

最佳答案

我认为您要求的是距主节点一个三重连接的任何节点:

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子句删除那些你不想要的。

关于rdf - 如何在 SPARQL 中查找引用另一个对象的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17653013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com