例如,当我有一个人图时,例如约翰和约翰有工作地址、家庭地址、电话号码、关系等。
是否有可能在不知道它是什么的情况下检索与 john 及其子类相关的所有内容?
这样我就可以检索例如以下内容
John < address < house_number
< mobile_number
< company < address
< function < office number < etc...
And retrieve this via:
"John" rdfs:everything ?everything ... as deep as the tree goes.
或者我需要知道图表吗?
您的术语有点偏离,因为地址、手机号码等不是 John 的子类。 RDF 是关于三元组(标记为有向边)的,John 的地址是具有以下形式的三元组的对象John hasAddress AddressOfJohn
。用基于图形的术语来说,听起来您好像在问是否可以检索从 John 开始的某些有向路径可到达的所有内容。使用具体数据更容易,所以我们假设您已经获得了以下数据:
@prefix : <http://stackoverflow.com/q/20878795/1281433/> .
:john :hasAddress :addressOfJohn ;
:hasMobileNumber :mobileNumber ;
:hasCompany :company .
:addressOfJohn :hasHouseNumber :houseNumber .
:company :hasAddress :addressOfCompany ;
:hasFunction :function .
SPARQL 1.1 添加了对属性路径 http://www.w3.org/TR/sparql11-query/#propertypaths,它有点像属性序列的正则表达式语言,包括典型的运算符,例如*
(任意次数的重复)和+
(一个或多个)。不幸的是,您不能在属性路径中使用变量,因此您不能这样做
:john ?p+ ?object
但是,正如answers.semanticweb.com 上的类似问题所述SPARQL:没有指定谓词的属性路径 http://answers.semanticweb.com/questions/15746/sparql-property-paths-without-specified-predicates,您可以构造一个与每个属性匹配的析取。例如,自从:
是一个定义的前缀,因此是一个 IRI,模式:|!:
将匹配any财产(因为一切都是:
或者不是)。那就是那个(:|!:)+
是真正的通配符路径。因此,我们可以编写如下查询并得到相应的结果:
prefix : <http://stackoverflow.com/q/20878795/1281433/>
select ?object where {
:john (:|!:)+ ?object
}
---------------------
| object |
=====================
| :company |
| :function |
| :addressOfCompany |
| :mobileNumber |
| :addressOfJohn |
| :houseNumber |
---------------------
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)