【问题标题】:SPARQL property path in reified rdf triplesreified rdf 三元组中的 SPARQL 属性路径
【发布时间】:2021-02-18 06:42:53
【问题描述】:

是否可以将属性路径与 reified rdf 三元组一起使用?

我喜欢获取指定类的所有超类(存储在?class)。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?class ?superclass ?supersuperclass ?supersupersuperclass
WHERE{
  {
    ?s rdf:subject ?class .
    ?s rdf:predicate rdfs:subClassOf .
    ?s rdf:object ?superclass .
    
    OPTIONAL {
    ?s1 rdf:subject ?superclass .
    ?s1 rdf:predicate rdfs:subClassOf .
    ?s1 rdf:object ?supersuperclass .
    }
    
    OPTIONAL {
    ?s2 rdf:subject ?supersuperclass .
    ?s2 rdf:predicate rdfs:subClassOf .
    ?s2 rdf:object ?supersupersuperclass .
    }
    
  }

}

【问题讨论】:

    标签: properties path sparql rdf reification


    【解决方案1】:

    您可以使用中间查询,首先取消声明:

    CONSTRUCT {
      ?s a rdfs:Class .
      ?o a rdfs:Class .
      ?s rdfs:subClassOf ?o .
    }
    WHERE {
      ?t a rdf:Statement .
      ?t rdf:object ?o .
      ?t rdf:predicate rdfs:subClassOf .
      ?t rdf:subject ?s .
    }
    

    然后获取所有的子类关系:

    SELECT ?s ?o
    WHERE {
      ?s a rdfs:Class .
      ?s rdfs:subClassOf* ?o .
    }
    

    如果你知道类没有被其他谓词链接,你可以使用路径:

    SELECT ?s ?o
    WHERE {
      ?s a rdfs:Class .
      ?o a rdfs:Class .
      ?s (^rdf:subject/rdf:object)* ?o .
    }
    

    【讨论】:

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