从 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 无法做到这一点。