use*_*144 4 rdf semantic-web breadth-first-search jena
我有一个具有三级深度的层次结构的 RDF 图。我想owl:Thing
在不使用推理器的情况下检索从类层次结构(即)的根开始到第三级中的类的所有路径。例如,我希望路径 C 1 → C 2 → C 3
是一条路径,其中每个 C i
是层次结构第i层的一个类。
我需要使用广度优先搜索算法检索 RDF 图中的所有路径,而不考虑图中的对象属性。
给定一些这样的数据(其中类名的长度表示类在层次结构中的深度):
@prefix : <http://example.org/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:a a rdfs:Class .
:aa rdfs:subClassOf :a .
:ab rdfs:subClassOf :a .
:ac rdfs:subClassOf :a .
:aaa rdfs:subClassOf :aa .
:aab rdfs:subClassOf :aa .
:aac rdfs:subClassOf :aa .
:aaba rdfs:subClassOf :aab .
:aabb rdfs:subClassOf :aab .
:aba rdfs:subClassOf :ab .
:abb rdfs:subClassOf :ab .
Run Code Online (Sandbox Code Playgroud)
您可以使用 SPARQL 查询来选择您要查找的路径。
您可以编写这样的 SPARQL 查询以获得以下结果:
prefix : <http://example.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?c1 ?c2 ?c3 where {
values ?c1 { :a }
?c1 ^rdfs:subClassOf ?c2 .
OPTIONAL {
?c2 ^rdfs:subClassOf ?c3 .
}
}
order by ?c3 ?c2 ?c1
Run Code Online (Sandbox Code Playgroud)
-------------------
| c1 | c2 | c3 |
===================
| :a | :ac | |
| :a | :aa | :aaa |
| :a | :aa | :aab |
| :a | :aa | :aac |
| :a | :ab | :aba |
| :a | :ab | :abb |
-------------------
Run Code Online (Sandbox Code Playgroud)
这种方法适用于评论中提到的相机本体,尽管查询需要一些扩展来处理更深的类路径。因此:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX : <http://www.xfront.com/owl/ontologies/camera/#>
select * where {
values ?c1 { owl:Thing }
?c1 ^rdfs:subClassOf ?c2 .
OPTIONAL {
?c2 ^rdfs:subClassOf ?c3 .
OPTIONAL {
?c3 ^rdfs:subClassOf ?c4 .
}
}
}
order by ?c4 ?c3 ?c2
Run Code Online (Sandbox Code Playgroud)
-----------------------------------------------------------
| c1 | c2 | c3 | c4 |
===========================================================
| owl:Thing | :Money | | |
| owl:Thing | :Range | | |
| owl:Thing | :Window | | |
| owl:Thing | :PurchaseableItem | :Body | |
| owl:Thing | :PurchaseableItem | :Lens | |
| owl:Thing | :PurchaseableItem | :Camera | :Digital |
| owl:Thing | :PurchaseableItem | :Camera | :Large-Format |
-----------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
虽然上述SPARQL查询产生的,将预期从广度优先遍历顺序的路径,实际上是没有保障如何ARQ产生的结果。我们也可以直接实现广度优先搜索,使用 Jena 模型 API 来检索子类。这是一个简单的实现:
@prefix : <http://example.org/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:a a rdfs:Class .
:aa rdfs:subClassOf :a .
:ab rdfs:subClassOf :a .
:ac rdfs:subClassOf :a .
:aaa rdfs:subClassOf :aa .
:aab rdfs:subClassOf :aa .
:aac rdfs:subClassOf :aa .
:aaba rdfs:subClassOf :aab .
:aabb rdfs:subClassOf :aab .
:aba rdfs:subClassOf :ab .
:abb rdfs:subClassOf :ab .
Run Code Online (Sandbox Code Playgroud)
[http://www.w3.org/2002/07/owl#Thing]
[http://www.w3.org/2002/07/owl#Thing, http://www.xfront.com/owl/ontologies/camera/#PurchaseableItem]
[http://www.w3.org/2002/07/owl#Thing, http://www.xfront.com/owl/ontologies/camera/#Window]
[http://www.w3.org/2002/07/owl#Thing, http://www.xfront.com/owl/ontologies/camera/#Range]
[http://www.w3.org/2002/07/owl#Thing, http://www.xfront.com/owl/ontologies/camera/#Money]
[http://www.w3.org/2002/07/owl#Thing, http://www.xfront.com/owl/ontologies/camera/#PurchaseableItem, http://www.xfront.com/owl/ontologies/camera/#Camera]
[http://www.w3.org/2002/07/owl#Thing, http://www.xfront.com/owl/ontologies/camera/#PurchaseableItem, http://www.xfront.com/owl/ontologies/camera/#Lens]
[http://www.w3.org/2002/07/owl#Thing, http://www.xfront.com/owl/ontologies/camera/#PurchaseableItem, http://www.xfront.com/owl/ontologies/camera/#Body]
[http://www.w3.org/2002/07/owl#Thing, http://www.xfront.com/owl/ontologies/camera/#PurchaseableItem, http://www.xfront.com/owl/ontologies/camera/#Camera, http://www.xfront.com/owl/ontologies/camera/#Digital]
[http://www.w3.org/2002/07/owl#Thing, http://www.xfront.com/owl/ontologies/camera/#PurchaseableItem, http://www.xfront.com/owl/ontologies/camera/#Camera, http://www.xfront.com/owl/ontologies/camera/#Large-Format]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2336 次 |
最近记录: |