我有一个我建立在Protege的猫头鹰文件。什么是sparql查询将选择一个类的所有子类和这些子类的所有子类,等等等等(广度优先搜索排序方式)?Sparql查询为儿童,孙辈,..一类
2
A
回答
6
这可能由Sparql query Subclass or EquivalentTo回答,但该问题及其答案包含更多的信息,你在这里要求什么。您无法真正实施搜索策略(深度优先与深度优先),但是如果从根目录到子目录有独特的路径,则可以(按照)排序子类的距离。首先,让我们得到一些样本数据:
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix : <https://stackoverflow.com/q/23094361/1281433/>.
# a
# / \
# b c
# /\ /\
# d e f g
:b rdfs:subClassOf :a .
:c rdfs:subClassOf :a .
:d rdfs:subClassOf :b .
:e rdfs:subClassOf :b .
:f rdfs:subClassOf :c .
:g rdfs:subClassOf :c .
您可以使用这样的查询得到的:a
子类:
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix : <https://stackoverflow.com/q/23094361/1281433/>
select ?subclass where {
?subclass rdfs:subClassOf* :a
}
------------
| subclass |
============
| :a |
| :c |
| :g |
| :f |
| :b |
| :e |
| :d |
------------
结果包括:a
,因为我们使用的路径rdfs:subClassOf*
。这在逻辑上是正确的,因为一个类是它自己的一个子类,但是如果你不想要:a
包括在内,你可以使用rdfs:subClassOf+
,或者你可以用filter(?subclass != :a)
来过滤掉:a
。
在从根到子类有一条路径的情况下,可以计算它们之间的中间节点来确定它们的深度。如果你以这种方式进行深度排序,那么你会得到你的结果,就像第一次搜索会给你以下的结果。该技术在Is it possible to get the position of an element in an RDF Collection in SPARQL?和Calculate length of path between nodes?中有更详细的描述。
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix : <https://stackoverflow.com/q/23094361/1281433/>
select ?subclass (count(?intermediate)-1 as ?depth) where {
?subclass rdfs:subClassOf* ?intermediate .
?intermediate rdfs:subClassOf* :a .
}
group by ?subclass
order by ?depth
--------------------
| subclass | depth |
====================
| :a | 0 |
| :b | 1 |
| :c | 1 |
| :d | 2 |
| :e | 2 |
| :f | 2 |
| :g | 2 |
--------------------
+0
精彩的例子。谢谢! –
相关问题
- 1. jQuery儿童方法选择孙辈
- 2. Firebase查询孙辈/多级查询
- 3. Linux,使用进程存储凭证,它是儿童,孙辈吗?
- 4. 无法检查儿童/孙子女?
- 5. 删除类别及其子女/孙辈
- 6. Mongo查询获取儿童
- 7. mySQL查询选择儿童
- 8. 展开查询Azure移动服务给儿童的儿童
- 9. Python ElementTree - 搜索儿童/孙儿写作不好的XML
- 10. 如何更换儿童和孙儿同班的班级JQUERY
- 11. @PreAuthorize儿童类
- 12. get_class_var儿童类
- 13. SPARQL查询SPARQL查询
- 14. 如何在C++中为孙辈创建超类的虚函数?
- 15. 一个程序来分岔儿童/孙子
- 16. 一个SPARQL查询
- 17. SPARQL查找孙子的数量
- 18. 查询测试计划儿童
- 19. 过滤儿童实体框架查询
- 20. 儿童LINQ查询内的XElement的
- 21. 排序依据儿童在LINQ查询
- 22. 抽象类儿童
- 23. 更改儿童类
- 24. React JS:如何设置孙辈国
- 25. 儿童内部角儿童
- 26. 解析儿童Simplexml儿童
- 27. 抽象类 - 儿童类型
- 28. 将SPARQL查询图合并为一个
- 29. 将SPARQL查询翻译为SQL查询
- 30. 检索亲子幼童,儿童recors在SQL查询
我敢肯定这是一个重复。主要思想是你要使用属性路径:'select?subclass where {?subclass rdfs:subClassOf +}'。 –