在Sparql中查询,找到第一层传递实际节点

发布于 2025-01-15 19:06:48 字数 446 浏览 1 评论 0原文

我试图“直接”找到连接到目标节点的所有实际节点(忽略空白节点)。

例如。

Object1 <predicate1> ObjectX .

Object2 <predicate2> _:BlankNode1 .
_:BlankNode1 <predicate3> ObjectX .

Object3 <predicate4> _:BlankNode2 .
_:BlankNode2 <predicate5> _:BlankNode3 .
_:BlankNode3 <predicate6> ObjectX .

Object4 <predicate7> Object3 .

有没有办法可以找到 Object1、Object2 和 Object3,但找不到 Object4?

谢谢,

谢恩。

I'm trying to find all actual nodes 'directly'(ignore blank nodes) connect to target node.

eg.

Object1 <predicate1> ObjectX .

Object2 <predicate2> _:BlankNode1 .
_:BlankNode1 <predicate3> ObjectX .

Object3 <predicate4> _:BlankNode2 .
_:BlankNode2 <predicate5> _:BlankNode3 .
_:BlankNode3 <predicate6> ObjectX .

Object4 <predicate7> Object3 .

Is there a way I can find Object1, Object2 and Object3, but not Object4?

Thanks,

Shane.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

向地狱狂奔 2025-01-22 19:06:48

你应该尝试这个:

SELECT ?object
WHERE {
    ?object (:p|!:p)+ :ObjectX . #The object is connected to the target via any property, with an arbitrary path length greater than 1.
    FILTER NOT EXISTS {
        ?object (:p|!:p)+ ?notBlank . #But there is no path which involves a non-blank node.
        ?notBlank (:p|!:p)+ :ObjectX .
        FILTER(!ISBLANK(?notBlank))
    }
    FILTER(!ISBLANK(?object)) #Finally, the object is not blank
}

You should try this:

SELECT ?object
WHERE {
    ?object (:p|!:p)+ :ObjectX . #The object is connected to the target via any property, with an arbitrary path length greater than 1.
    FILTER NOT EXISTS {
        ?object (:p|!:p)+ ?notBlank . #But there is no path which involves a non-blank node.
        ?notBlank (:p|!:p)+ :ObjectX .
        FILTER(!ISBLANK(?notBlank))
    }
    FILTER(!ISBLANK(?object)) #Finally, the object is not blank
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文