gpt4 book ai didi

sparql - 如何从 RDF 图中的给定资源构造获取整个子图?

转载 作者:行者123 更新时间:2023-12-02 06:10:30 25 4
gpt4 key购买 nike

The RDF graph

如果这是 RDF 图,给定资源 A,我需要构造连接到 A 直到最后的所有三元组。这里我必须得到包含 B、C、D、E 的图表

之后,假设我已经得到了这个图,并且只想从起点 (:A) 开始,并通过遵循以属性 :d 的边结尾的路径来获取生成的子图。例如,如果给出 A1 作为起点,d 作为属性,我们将构造:

:A1 :a :B1, 
:B1 :b :S1,
:B1 :b :S2,
:S1 :d :D1,
:S2 :d :D2,

more complex graph

最佳答案

第一种情况

要获取整个连通图,您需要使用通配符属性路径来跟踪大部分路径,然后使用实际变量获取最后一个链接。我通常在构造通配符时使用空的相对路径,从而使用 <>|!<>作为通配符,但既然您提到您的端点不喜欢它,您也可以使用您喜欢的任何绝对 IRI。例如,

prefix x: <urn:ex:>

construct { ?s ?p ?o }
where { :A (x:|!x:)* ?s . ?s ?p ?o . }

这是有效的,因为每个属性要么是 x: 要么不是,所以 x:|!x: 匹配每个属性,然后 (x:|! x:)* 是任意长度的路径,包括长度为零的路径,这意味着 ?s 将绑定(bind)到从 :a 可到达的所有内容,包括:a本身。然后,您将获取以 ?s 为主语的三元组。当您构造所有这些三元组的图表时,您就会得到您正在寻找的子图。

这是一个基于您显示的图表的示例。我对不同的边缘使用了不同的属性来表明它有效,但如果它们都相同,这也将有效。

@prefix : <urn:ex:> .

:A :p :B, :C .
:B :q :D .
:C :r :E .

:F :s :G .
:G :t :H .
prefix x: <urn:ex:>
prefix : <urn:ex:>

construct {
?s ?p ?o
}
where {
:A (x:|!x:)* ?s .
?s ?p ?o .
}

由于这是一个构造查询,因此结果是一个图表,而不是“表格”。它包含我们期望的三元组:

@prefix :      <urn:ex:> .

:C :r :E .

:B :q :D .

:A :p :B , :C .

第二种情况

如果您想确保路径以特定类型的边缘结束,您也可以这样做。如果您只想要从 A1 到以 d 为边的路径,您可以这样做:

prefix x: <urn:ex:>      #-- arbitrary, used for the property path.
prefix : <...> #-- whatever you need for your data.

construct {
?s1 ?p ?o1 . #-- internal edge in the path
?s2 :d ?o2 . #-- final edge in the path
}
where {
:A (x:|!x:)* ?s1 . #-- start at :A and go any length into the path
?s1 ?p ?o1 . #-- get the triple from within the path, but make
?o1 (x:|!x:)* ?s2 . #-- sure that from ?o1 you can get to to some other
?s2 :d ?o2 . #-- ?s2 that's related to an ?o2 by property :d .
}

关于sparql - 如何从 RDF 图中的给定资源构造获取整个子图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37186530/

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