gpt4 book ai didi

rdf - 如何提取在图中同时作为主体和客体出现的节点?

转载 作者:行者123 更新时间:2023-12-04 23:50:14 25 4
gpt4 key购买 nike

我想检索出现在三元组(不一定是相同的三元组)的主语和宾语部分中的节点列表(图中的顶点)。

我尝试使用子查询进行操作,如下所示:

SELECT ?x
{

?x ?p ?o.

{
SELECT ?x WHERE { ?s ?p ?x . }
}
}

在我获得节点实例的多个实例的意义上,它没有给我确切的结果。当我尝试 DISTINCT 时,出于某种原因,它提供了更多的实例。

附带说明一下,如果我想提取作为主体或对象的节点,我应该怎么做?

所用词汇如有错误请见谅。

最佳答案

作为主体和客体的节点

又短又甜

只要求出现作为主体和客体的东西:

select distinct ?x {
?s1 ?p1 ?x .
?x ?p2 ?o2 .
}

让它难以辨认(只是为了好玩)

如果你想让它更短一点,但可读性要低得多,你可以使用类似的东西
prefix : <...anything...>

select distinct ?x {
?x (:|!:) ?o ; ^(:|!:) ?s .
}

模式 (:|!:) 匹配任何为 : 或不为 : 的属性。这意味着它匹配一切;这只是一个通配符。 (您也可以使用 ?p,它本质上也是一个通配符,但请继续阅读……)路径 ^p 表示 p,但方向相反(因此,例如, ?person foaf:name ?name?name ^foaf:name ?person 匹配相同的数据。由于 0x1045765914是反向通配符。我们不能在属性路径中使用变量,因此即使 (:|!:) 是“正向通配符”,我们也不能将 ^(:|!:) 用作“反向通配符”。 ?p 表示法只是让您缩写,例如, ^?p;?x :p2 :o1 。在这里使用它,我们可以得到:
?x  (:|!:) ?o ;    # every ?x that is a subject
^(:|!:) ?s . # every ?x that is an object

删除注释和换行符,我们得到
?x (:|!:) ?o ; ^(:|!:) ?s .

您可能应该使用可读的。 :)

作为主体或客体的节点

这已经在您之前关于计算节点度的问题中得到了回答, How to calculate maximum degree of a directed graph using SPARQL? 。那里的答案使用此查询来计算度数:
select ?x (count(*) as ?degree) { 
{ ?x ?p ?o } union
{ ?s ?p ?x }
}
group by ?x

不过,它也可以找到作为主体或客体的节点。只需将其更改为:
select distinct ?x  { 
{ ?x ?p ?o } union
{ ?s ?p ?x }
}

或者,您也可以在此处使用通配符方法:
select distinct ?x {
?x (:|!:)|^(:|!:) [].
}

关于rdf - 如何提取在图中同时作为主体和客体出现的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24288330/

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