c# – 将SPARQL查询结果限制为层次结构中的第一级
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 将SPARQL查询结果限制为层次结构中的第一级,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2290字,纯文字阅读大概需要4分钟。
内容图文
![c# – 将SPARQL查询结果限制为层次结构中的第一级](/upload/InfoBanner/zyjiaocheng/817/408b8998b82a4f49894d502e360d1fdb.jpg)
我正在使用C#对我的N3数据文件执行查询.如何将结果限制为节点的第一级子节点.
例如:
project
|
|__ main
| |__m1
| |__m2
|
|__ SUB
|__A
| |__A1
| |__A2
|
|__B
|__C
| |__C1
|
|__D
一个示例查询,它导致SUB的所有节点级别:
select ?object where {
:SUB rdfs:superClassOf* ?object
}
结果将是:
|__A
| |__A1
| |__A2
|
|__B
|__C
| |__C1
|
|__D
但是我想把结果限制在这样的第一级孩子:
|__A
|__B
|__C
|__D
解决方法:
选择长度为1的路径
使用*的属性路径查找长度为zeor或更大的路径.如果您想要长度恰好为1的路径,只需删除*:
select ?object where {
:SUB rdfs:superClassOf ?object
}
我注意到RDFS只定义了rdfs:subClassOf,而不是你在查询中使用的rdfs:superClassOf.不过,我会认为这只是问题的一个错字.我认为你想要的实际查询是:
select ?subclass where {
?subclass rdfs:subClassOf :SUB
}
选择任意长度的路径
本节中的解决方案基于an answer to a question about finding the position of elements in an RDF list.请考虑以下数据:
@prefix : <urn:ex:> .
:a :p :b, :c .
:b :p :d, :e .
此查询查找p上的链以及链的长度:
prefix : <urn:ex:>
select ?sub ?sup (count(?mid)-1 as ?distance) where {
?sub :p* ?mid .
?mid :p* ?sup .
}
group by ?sub ?sup
order by ?sub ?sup
$arq --data data.n3 --query query.sparql
------------------------
| sub | sup | distance |
========================
| :a | :a | 0 |
| :a | :b | 1 |
| :a | :c | 1 |
| :a | :d | 2 |
| :a | :e | 2 |
| :b | :b | 0 |
| :b | :d | 1 |
| :b | :e | 1 |
| :c | :c | 0 |
| :d | :d | 0 |
| :e | :e | 0 |
------------------------
由于我们可以获得路径的长度,我们可以在该长度上进行过滤,并获得我们想要的路径.例如:
prefix : <urn:ex:>
select ?sub ?sup where {
{
select ?sub ?sup (count(?mid)-1 as ?distance) where {
?sub :p* ?mid .
?mid :p* ?sup .
}
group by ?sub ?sup
order by ?sub ?sup
}
filter( ?distance = 2 )
# filter ( ?distance > 2 ) # alternative
# filter ( ?distance < 10 ) # alternative
}
$arq --data data.n3 --query query.sparql
-------------
| sub | sup |
=============
| :a | :d |
| :a | :e |
-------------
如果只需要较小但特定长度的路径,则可以手动展开属性路径.例如,对于长度为2的路径:
prefix : <urn:ex:>
select ?sub ?sup {
?sub :p/:p ?sup .
}
对于一系列数字,例如1-2,你可以使用?匹配零或一:
prefix : <urn:ex:>
select ?sub ?sup {
?sub :p/:p? ?sup .
}
有关属性路径的更多信息,请务必查看SPARQL 1.1规范中的9 Property Paths节.
内容总结
以上是互联网集市为您收集整理的c# – 将SPARQL查询结果限制为层次结构中的第一级全部内容,希望文章能够帮你解决c# – 将SPARQL查询结果限制为层次结构中的第一级所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。