【问题标题】:Obtaining the full property path from SPARQL query从 SPARQL 查询中获取完整的属性路径
【发布时间】:2020-09-27 17:43:27
【问题描述】:

我有以下示例数据:

@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 不可能实现您想要的。你能得到的最接近的是 Joshua 的答案:stackoverflow.com/questions/18024413/… - 但这不能转换为你的 group_concat 函数,仅仅是因为 group_concat 的结果没有以你期望的方式排序
  • 我想一种可能的选择是有一个外部循环,逐渐增加?class rdfs:subClassOf ?subclass?class rdfs:subClassOf/rdfs:subClassOf ?subclass?class rdfs:subClassOf/rdfs:subClassOf/rdfs:subClassOf ?subclass 等等,直到没有返回结果。
  • stardog.com/docs/#_path_queries_2。我记得,PATH 查询仅在 Studio 中有效。

标签: sparql rdf


【解决方案1】:

这在 SPARQL 中是不可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    相关资源
    最近更新 更多