我有这样的rdf文件的内容:
<owl:Thing rdf:about="http://hust.se.vtio.owl#hanoi-big-church">
<rdf:type rdf:resource="http://hust.se.vtio.owl#Church"/>
<rdf:type rdf:resource="&owl;NamedIndividual"/>
我想使用sparql查询来响应结果http://hust.se.vtio.owl#hanoi-big-church
并查询
?uri rdf:type ?type
但已回复&owl;NamedIndividual
我应该怎么做?感谢您的帮助!
答案 0 :(得分:3)
显然你的数据或多或少是这样的(将来,如果你能提供完整但极少的工作实例,将会非常有用):
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns="http://hust.se.vtio.owl#" >
<rdf:Description rdf:about="http://hust.se.vtio.owl#hanoi-big-church">
<rdf:type rdf:resource="http://hust.se.vtio.owl#Church"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#NamedIndividual"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
</rdf:Description>
</rdf:RDF>
如您所述,像下面这样的查询会产生多个结果:
prefix : <http://hust.se.vtio.owl#>
prefix owl: <http://www.w3.org/2002/07/owl#>
select ?type where {
:hanoi-big-church a ?type
}
-----------------------
| type |
=======================
| owl:Thing |
| owl:NamedIndividual |
| :Church |
-----------------------
您可以过滤掉以owl:
命名空间开头的IRI结果,但要将?type
转换为包含str的字符串并使用strstarts进行检查。
prefix : <http://hust.se.vtio.owl#>
prefix owl: <http://www.w3.org/2002/07/owl#>
select ?type where {
:hanoi-big-church a ?type .
filter(!strstarts(str(?type),str(owl:)))
}
-----------
| type |
===========
| :Church |
-----------
现在,在这种特殊情况下,您获得了一个结果,因为您已经过滤掉了三个值中的两个。重要的是要注意,事情可以有很多类型,所以如果你的数据也说:hanoi-big-church
是:Building
,你会得到两个结果(:Church
和{{ 1}})。