Rdf 如何确定受试者是否为X Y Z类型
这个问题对我来说似乎很容易,直到我试过。。。但也有可能我只是错误地思考了这个问题 假设我们从dbpedia中任意获取了100个主题Rdf 如何确定受试者是否为X Y Z类型,rdf,sparql,Rdf,Sparql,这个问题对我来说似乎很容易,直到我试过。。。但也有可能我只是错误地思考了这个问题 假设我们从dbpedia中任意获取了100个主题 SELECT ?s WHERE { ?s ?p ?o . } LIMIT 100 我想做的是添加一个列,说明他们是个人、地点还是其他类型,如果没有这些内容,“null” 因此,我尝试了几种方法来解决这个问题: 使用rdf:type和值: SELECT ?s ?ppt WHERE { ?s rdf:type ?ppt . VALUES ?ppt {
SELECT ?s
WHERE {
?s ?p ?o .
}
LIMIT 100
我想做的是添加一个列,说明他们是个人、地点还是其他类型,如果没有这些内容,“null”
因此,我尝试了几种方法来解决这个问题:
rdf:type
和值
:
SELECT ?s ?ppt
WHERE {
?s rdf:type ?ppt .
VALUES ?ppt {
dbpedia-owl:Person
dbpedia-owl:Place
dbpedia-owl:SomeOtherType
}
}
但这只是得到一个具有该值的主题列表,并不一定回答它们是三种类型中的哪一种的问题(即,如果我有一个主题,比如说代替?s
,我不能只添加值{…}
阻止针对这1个主题的查询,因为如果它不是这三个主题中的任何一个,则返回的结果将为零绑定(如果…其他…等)为?ppt
,但这似乎也有点奇怪那么,我应该使用哪种查询函数来确定某个东西属于哪三种类型(如果计算为“null”,则为四种)?我认为使用
绑定(if(…),…,…)的解决方案
在这里是有意义的。它并不觉得特别奇怪。假设您有这样的数据,其中:A
和:B
是感兴趣的类型
@prefix : <http://stackoverflow.com/q/22289078/1281433/> .
:i1 :name "i1" . # no type
:i2 a :A .
:i3 a :B .
:i4 a :A, :B .
:i5 a :C .
:i6 a :B, :C .
所有的东西都是a,包括人。是a。@unor我已经删除了问题的这一部分;它实际上与我要问的问题无关。好吧。我想这个主题现在在一个单独的问题中找到了它的位置:关于i6有一个null和一个type
:B
——请看这个查询的结果,这是hap吗pening?@Kristian什么查询的结果?我看到了结果,但我没有办法从中获取查询…你能把它放在pastebin之类的地方吗?抱歉:选择不同的s类型,其中{s a?\u type.BIND(如果(?u type in(dbpedia owl:Agent,dbpedia owl:Place),?\u type,“null”)作为?类型)限制100
@Kristian这正是正在发生的事情。如果你浏览数据,例如,你会注意到,虽然Webster有rdf:type dbpedia owl:Agent
,但有一堆类型既不是dbpedia owl:Agent
也不是dbpedia owl:Place
。对于这些类型,你会得到“null”
结果。
--------------
| i | type |
==============
| :i2 | :A |
| :i3 | :B |
| :i4 | :A |
| :i4 | :B |
| :i5 | |
| :i6 | |
| :i6 | :B |
--------------