我如何递归地跟随空白节点以获得关于对象的所有三元组?
How do I recursively follow blank nodes to get all triples about an object?
这是 ID 为 123 的用户的数据对象,该用户年龄 50 岁,喜欢意大利面。
[ a :user;
:user_id 123;
:demographics [ :age 50 ];
:favorite_food [ :italian [ :spaghetti true ]]
].
是否有任何 sparql 查询,我可以在其中获取与该用户相关的所有三元组,而不必为每个可能的空白节点值执行 UNION?
我正在尝试将 json 转换为三元组,然后将三元组转换回 json,
因此,无需向 json.
的每个子元素添加父 ID 属性 即可查询嵌套深度未知的对象将非常方便
这似乎可行,但我必须为每一层嵌套执行 UNION
select ?e1 ?a1 ?v1 { ?e :user_id 123.
{ ?e ?a1 ?v1. BIND(?e AS ?e1) }
UNION { ?e ?a ?v. ?v ?a1 ?v1. BIND(?v AS ?e1). } }
UninformedUser 指出了一个解决方案。从查询的外观来看,递归 属性 路径技巧似乎不会在嵌套之前获取第一层,但它确实获取了所有数据。
select ?s ?p ?o { ?e :user_id 123. ?e (<>|!<>)* ?s. ?s ?p ?o }
@UninformedUser 在评论中提供了解决方案。尽管 OP 认为使用递归 属性 路径技巧的查询不会在嵌套之前获取第一级,但它确实获取了所有他们想要的数据。
SELECT ?s ?p ?o
{ ?e :user_id 123 .
?e (<>|!<>)* ?s .
?s ?p ?o
}
这是 ID 为 123 的用户的数据对象,该用户年龄 50 岁,喜欢意大利面。
[ a :user;
:user_id 123;
:demographics [ :age 50 ];
:favorite_food [ :italian [ :spaghetti true ]]
].
是否有任何 sparql 查询,我可以在其中获取与该用户相关的所有三元组,而不必为每个可能的空白节点值执行 UNION?
我正在尝试将 json 转换为三元组,然后将三元组转换回 json, 因此,无需向 json.
的每个子元素添加父 ID 属性 即可查询嵌套深度未知的对象将非常方便这似乎可行,但我必须为每一层嵌套执行 UNION
select ?e1 ?a1 ?v1 { ?e :user_id 123.
{ ?e ?a1 ?v1. BIND(?e AS ?e1) }
UNION { ?e ?a ?v. ?v ?a1 ?v1. BIND(?v AS ?e1). } }
UninformedUser 指出了一个解决方案。从查询的外观来看,递归 属性 路径技巧似乎不会在嵌套之前获取第一层,但它确实获取了所有数据。
select ?s ?p ?o { ?e :user_id 123. ?e (<>|!<>)* ?s. ?s ?p ?o }
@UninformedUser 在评论中提供了解决方案。尽管 OP 认为使用递归 属性 路径技巧的查询不会在嵌套之前获取第一级,但它确实获取了所有他们想要的数据。
SELECT ?s ?p ?o
{ ?e :user_id 123 .
?e (<>|!<>)* ?s .
?s ?p ?o
}