从 SPARQL 查询中获取完整的 属性 路径
Obtaining the full property path from SPARQL query
我有以下示例数据:
@prefix hr: <http://ex.com/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sch: <http://schema.org/> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
hr:AAAA a rdfs:Class .
hr:BBBB a rdfs:Class .
hr:ClassA a rdfs:Class ;
rdfs:subClassOf hr:AAAA ;
rdfs:subClassOf hr:BBBB .
hr:ClassB a rdfs:Class ;
rdfs:subClassOf hr:ClassA .
hr:ClassC a rdfs:Class ;
rdfs:subClassOf hr:ClassB .
hr:ClassD a rdfs:Class ;
rdfs:subClassOf hr:AAAA .
hr:ClassE a rdfs:Class ;
rdfs:subClassOf hr:ClassD .
作为一系列字符串,我想得到的是从一个节点到另一个节点的完整 rdfs:subClassOf 属性 路径。在这种情况下,我想要返回的字符串集看起来像或类似于:
hr:ClassC -> hr:ClassB -> hr:ClassA -> hr:AAAA
hr:ClassC -> hr:ClassB -> hr:ClassA -> hr:BBBB
hr:ClassB -> hr:ClassA -> hr:AAAA
hr:ClassB -> hr:ClassA -> hr:BBBB
hr:ClassA -> hr:AAAA
hr:ClassA -> hr:BBBB
hr:ClassD -> hr:AAAA
hr:ClassE -> hr:ClassD -> hr:AAAA
SPARQL 可以吗?如果是这样,查询会是什么样子?
以下查询似乎很接近:
SELECT ( GROUP_CONCAT( ?subclass; SEPARATOR = " -> " ) AS ?hierarchy )
WHERE {
?class rdfs:subClassOf+ ?subclass .
}
GROUP BY ?class
但结果是:
http://ex.com/AAAA
http://ex.com/AAAA -> http://ex.com/BBBB
http://ex.com/ClassA -> http://ex.com/AAAA -> http://ex.com/BBBB
http://ex.com/ClassB -> http://ex.com/ClassA -> http://ex.com/AAAA -> http://ex.com/BBBB
http://ex.com/ClassD -> http://ex.com/AAAA
我无法解释在哪里:
http://ex.com/AAAA -> http://ex.com/BBBB
来自或结果中缺少 hr:ClassE 的原因。
SPARQL 无法做到这一点。
我有以下示例数据:
@prefix hr: <http://ex.com/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sch: <http://schema.org/> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
hr:AAAA a rdfs:Class .
hr:BBBB a rdfs:Class .
hr:ClassA a rdfs:Class ;
rdfs:subClassOf hr:AAAA ;
rdfs:subClassOf hr:BBBB .
hr:ClassB a rdfs:Class ;
rdfs:subClassOf hr:ClassA .
hr:ClassC a rdfs:Class ;
rdfs:subClassOf hr:ClassB .
hr:ClassD a rdfs:Class ;
rdfs:subClassOf hr:AAAA .
hr:ClassE a rdfs:Class ;
rdfs:subClassOf hr:ClassD .
作为一系列字符串,我想得到的是从一个节点到另一个节点的完整 rdfs:subClassOf 属性 路径。在这种情况下,我想要返回的字符串集看起来像或类似于:
hr:ClassC -> hr:ClassB -> hr:ClassA -> hr:AAAA
hr:ClassC -> hr:ClassB -> hr:ClassA -> hr:BBBB
hr:ClassB -> hr:ClassA -> hr:AAAA
hr:ClassB -> hr:ClassA -> hr:BBBB
hr:ClassA -> hr:AAAA
hr:ClassA -> hr:BBBB
hr:ClassD -> hr:AAAA
hr:ClassE -> hr:ClassD -> hr:AAAA
SPARQL 可以吗?如果是这样,查询会是什么样子?
以下查询似乎很接近:
SELECT ( GROUP_CONCAT( ?subclass; SEPARATOR = " -> " ) AS ?hierarchy )
WHERE {
?class rdfs:subClassOf+ ?subclass .
}
GROUP BY ?class
但结果是:
http://ex.com/AAAA
http://ex.com/AAAA -> http://ex.com/BBBB
http://ex.com/ClassA -> http://ex.com/AAAA -> http://ex.com/BBBB
http://ex.com/ClassB -> http://ex.com/ClassA -> http://ex.com/AAAA -> http://ex.com/BBBB
http://ex.com/ClassD -> http://ex.com/AAAA
我无法解释在哪里:
http://ex.com/AAAA -> http://ex.com/BBBB
来自或结果中缺少 hr:ClassE 的原因。
SPARQL 无法做到这一点。