gpt4 book ai didi

rdf - SPARQL查询rdf容器(rdf : Bag)

转载 作者:行者123 更新时间:2023-12-04 07:55:35 30 4
gpt4 key购买 nike

我有这个RDF

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:com="http://www.example.com/com#">
<rdf:Description rdf:about="http://www.example.com/com#1">
<com:cities>
<rdf:Bag>
<rdf:li>A</rdf:li>
<rdf:li>B</rdf:li>
<rdf:li>D</rdf:li>
</rdf:Bag>
</com:cities>
<com:name>1</com:name>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/com#2">
<com:cities>
<rdf:Bag>
<rdf:li>C</rdf:li>
<rdf:li>B</rdf:li>
</rdf:Bag>
</com:cities>
<com:name>2</com:name>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.com/com#3">
<com:cities>
<rdf:Bag>
<rdf:li>C</rdf:li>
<rdf:li>B</rdf:li>
<rdf:li>D</rdf:li>
</rdf:Bag>
</com:cities>
<com:name>3</com:name>
</rdf:Description>
</rdf:RDF>

使用Sparql,我需要获取所有包含城市D(1和3)的对象的名称。我可以做这样的事情:
SELECT ?name
WHERE {
?a com:cities ?cities.
?cities rdf:_1 ?s.
FILTER(?s = "D")
?a com:name ?name.
}

但它只会检查第一个元素。我可以使用rdf:_2,rdf:_3,...进行更多查询,并使用UNION,但我不知道Bag中rdf:li的数量。
是否有类似rdf:all的东西?
或其他解决方案来做到这一点?
谢谢

最佳答案

使用rdfs:member

?cities rdfs:member ?s.

如果您的系统支持它或对属性URI进行过滤:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
...
?cities ?prop ?s. FILTER (strstarts(str(?prop), str(rdf:_)))

关于rdf - SPARQL查询rdf容器(rdf : Bag),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16121150/

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