簡體   English   中英

SPARQL CONSTRUCT 查詢特定層次結構模式

[英]SPARQL CONSTRUCT query specific hierarchy pattern

構造查詢應該顯示特定的層次結構。 從我的葉子 object 開始(向上),直到我的根 object(公司)。 但是,它的作用是,如果我從葉節點開始,迭代到下一個,那么所有模式“?prev skos:broader?next”都是允許的。 這意味着我有一個葉子 go 向上一層(機器),在我的起始葉子旁邊,我看到多個其他葉子(其他機器組件)有效不想要

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) 
}

所以,在我的 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 } 
}

我不確定我是否正確理解了您的問題。 但在我看來,如果你想 go '向上'和'向下',從你的起點,問題可能是由

?prev 
        skos:broader ?next ;

也許如果你嘗試類似

?start ^skos:broader ?prev

你不會得到不想要的結果嗎?

希望我沒有把你指向錯誤的方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM