【问题标题】:SPARQL CONSTRUCT query specific hierarchy patternSPARQL CONSTRUCT 查询特定层次结构模式
【发布时间】:2022-08-25 18:54:01
【问题描述】:

构造查询应该显示特定的层次结构。从我的叶子对象开始(向上)直到我的根对象(公司)。 但是,它的作用是,如果我从叶节点开始,迭代到下一个,那么所有模式“?prev skos:broader ?next”都是允许的。这意味着我有一片叶子,上一层(机器),在我的起始叶子旁边,我看到多个其他叶子(其他机器组件),它们是有效的不想要.

construct {
    ?start a :Start .          #start node
    ?prev                      # declare the previous variable
        skos:broader ?next ;   # hierarchy iteration
        a ?prevType ;          # return type
        rdfs:label ?prevName ; #label of the asserted node
    .
    ?next 
        a ?nextType ; 
        rdfs:label ?nextName ;
    .
}
WHERE 
{
    GRAPH (named graph)
    {
    values ?start { <IRI> } #leaf node 
    ?start skos:broader+ ?next .
    ?prev 
        skos:broader ?next ;
        a ?prevType ; 
        rdfs:label ?prevName ; 
    .
    ?next 
        a ?nextType ;
        rdfs:label ?nextName ;
            bind(localname(?prevType) as ?prevTypeName)
            bind(localname(?nextType) as ?nextTypeName) 
}

Pic1: Problem of tripples at the same level

所以,在我的 WHERE 末尾,我尝试添加一个 EXIST 过滤器。目的是仅过滤从我的起始节点开始的模式,并忽略该直接路径之外的所有其他模式。 此查询显示我想要的但跳过第一个 skos:borader 关系。所以我有我的离开节点(组件)(rdf:type Start),但是层次结构(机器)中的下一个节点缺少“skos:borader”。但是从那里正确返回所有其他层次结构(直到公司)。这只是第一跳

大问题,我如何声明我的开始是正确的,所以我的 L2 节点的第一个 skos:borader 被正确断言?

WHERE 
{
    GRAPH (named graph)
    {
    values ?start { <IRI> } #leaf node 
    ?start skos:broader+ ?next .
    ?prev 
        skos:broader ?next ;
        a ?prevType ; 
        rdfs:label ?prevName ; 
    .
    ?next 
        a ?nextType ;
        rdfs:label ?nextName ;
            bind(localname(?prevType) as ?prevTypeName)
            bind(localname(?nextType) as ?nextTypeName) 
    } 

#PRUPOSE: from all valid skos:borader defined in the construct part abouve -> filter out only the direct paths at each level which derive from ?start directly
    Filter EXISTS {
      ?start skos:broader+ ?prev .
      ?prev skos:broader ?next } 
}

Pic2: Problem of missing first skos:broader hop

【问题讨论】:

    标签: sparql rdf hierarchy rdfs construct


    【解决方案1】:

    我不确定我是否正确理解了您的问题。但在我看来,如果你想从你的起点“上”和“下”,问题可能是由

    ?prev 
            skos:broader ?next ;
    

    也许如果你尝试类似

    ?start ^skos:broader ?prev
    

    你不会得到不想要的结果吗?

    希望我没有将您指向错误的方向。

    【讨论】:

    • 谢谢你的想法。不幸的是,?start ^skos:broader ?prev 给我返回了一个空图。但我现在添加了以便更好地理解 2 张图片。他们展示了不需要的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 2020-04-17
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2012-08-03
    相关资源
    最近更新 更多