选择两个rdf中的一个:键入sparql

时间:2013-12-19 17:19:31

标签: rdf sparql

我有这样的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 我应该怎么做?感谢您的帮助!

1 个答案:

答案 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}})。