[英]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.