什么SPARQL语法允许指定根节点,同时消耗从该节点到给定限制的关系路径。
让<div id=‘mainPanel’>
<span id=‘ChartLabel’>
<div class=’highchairs-container’ id=‘highchairs-0’>
<svg>
<g class=‘highcharts-grid’></g>
<g class=‘highcharts-grid’></g>
<g class=‘highcharts-axis’></g>
<g class=‘highcharts-axis’></g>
<g class=‘highcharts-series-group’></g>
<g class=‘highcharts-button’></g>
<text class=‘highcharts-title’>
<tspan>Deale: Przypisania</tspan>
</text>
<g class=‘highcharts-legend’></g>
<g class=‘highcharts-axis-labels highchairs-taxis-labels’></g>
<g class=‘highcharts-grid axis-labels highcharts-yaxis-labels’></g>
<g class=‘highcharts-tooltip’></g>
</svg>
</div>
</span>
</div>
是人体部位的解剖图。
Graph1
让k_anatomy:K403 a k:Anatomy ;
rdfs:label "Finger" ;
k_anatomy:has_parent k_anatomy:K393 .
k_anatomy:K393 a k:Anatomy ;
rdfs:label "Hand" ;
k_anatomy:has_parent k_anatomy:K370 .
k_anatomy:K370 a k:Anatomy ;
rdfs:label "Free Upper Limb" ;
k_anatomy:has_parent k_anatomy:K359 .
k_anatomy:K359 a k:Anatomy ;
rdfs:label "Upper Limb" ;
k_anatomy:has_parent k_anatomy:K358 .
k_anatomy:K358 a k:Anatomy ;
rdfs:label "Limb" ;
k_anatomy:has_parent k_anatomy:K2 .
k_anatomy:K2 a k:Anatomy ;
rdfs:label "Body_by_region" ;
k_anatomy:has_parent k_anatomy:K1 .
k_anatomy:K1 a k:Anatomy ;
rdfs:label "Body" ;
k_anatomy:has_parent k_anatomy:K0 .
为root
(rdfs:标签为“手指”)。
给定IRI = k_anatomy:K403
和关系k_anatomy:K403
的SPARQL查询将构成以下结果:
k_anatomy:has_parent
答案 0 :(得分:1)
无需为此指定根节点。此查询:
SELECT ?BodyPart ?PartOf
WHERE {
?S rdfs:label ?BodyPart;
k_anatomy:has_parent [ rdfs:label ?PartOf ].
}
可以解决问题。
我只是在本地RDF4J控制台上运行了它。输出:
Evaluating SPARQL query...
+-------------------------------------+-------------------------------------+
| BodyPart | PartOf |
+-------------------------------------+-------------------------------------+
| "Finger" | "Hand" |
| "Hand" | "Free Upper Limb" |
| "Free Upper Limb" | "Upper Limb" |
| "Upper Limb" | "Limb" |
| "Limb" | "Body_by_region" |
| "Body_by_region" | "Body" |
+-------------------------------------+-------------------------------------+
6 result(s) (36 ms)
一个警告:这里的解决方案顺序是任意的,它恰好与您的预期结果吻合,因为在这种情况下,RDF4J引擎只是将结果按原始文件中出现的顺序倒退-但是不能保证每次都会发生这种情况,当然也不能跨三重存储实现。
更新,如果您的商店包含的数据不仅仅是您提供的输入文件,那么要获得所需的结果,您将需要一个稍微复杂一些的查询。具体来说,您将需要使用所谓的“ property path”表达式。这允许您指定要从某个点开始的任意长度的路径。像这样:
SELECT ?BodyPart ?PartOf
WHERE {
k_anatomy:K393 k_anatomy:has_parent* ?S .
?S rdfs:label ?BodyPart;
k_anatomy:has_parent [ rdfs:label ?PartOf ].
}
您仍然希望身体部分与父母同在(因此查询的最后一部分与原始查询相同),但是现在我们通过属性路径添加了一个额外的约束,以说?S
的值必须通过长度为零或更大的路径通过K393
关系链接到has_parent
。
结果:
Evaluating SPARQL query...
+-------------------------------------+-------------------------------------+
| BodyPart | PartOf |
+-------------------------------------+-------------------------------------+
| "Hand" | "Free Upper Limb" |
| "Free Upper Limb" | "Upper Limb" |
| "Upper Limb" | "Limb" |
| "Limb" | "Body_by_region" |
| "Body_by_region" | "Body" |
+-------------------------------------+-------------------------------------+
5 result(s) (6 ms)
如您所见,它没有按预期结果列出“手指”-尽管当然只有在has_parent
关系不形成循环的情况下,它才能正常工作。