我设置了耶拿定式端点有两个命名图,http://a并且http://b,我们称之为A和B. A包含一个三,和B包含两个.A,(查看)作为一组三元组,是B的子集,以下查询确认:
select * where {
graph ?g { ?s ?p ?o }
}
-----------------------------------------------------------
| s | p | o | g |
===========================================================
| <urn:uuid:b> | <urn:uuid:p> | <urn:uuid:b> | <http://b> |
| <urn:uuid:a> | <urn:uuid:p> | <urn:uuid:b> | <http://b> |
| <urn:uuid:a> | <urn:uuid:p> | <urn:uuid:b> | <http://a> |
-----------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
现在,我们可以要求出现在一个而不是另一个中的三元组.要在B中要求不在A中的三元组,我们可以使用此查询:
select * where {
graph <http://a> { ?s ?p ?o }
NOT EXISTS { graph <http://b> { ?s ?p ?o } }
}
-------------
| s | p | o |
=============
-------------
Run Code Online (Sandbox Code Playgroud)
我们也可以要求出现在B中的三元组,但不是在A中.我们期望并获得一个三元组.
select * where {
graph <http://b> { ?s ?p ?o }
NOT EXISTS { graph <http://a> { ?s ?p ?o } }
}
----------------------------------------------
| s | p | o |
==============================================
| <urn:uuid:b> | <urn:uuid:p> | <urn:uuid:b> |
----------------------------------------------
Run Code Online (Sandbox Code Playgroud)
通常,如果X不包含不在Y中的三元组,则X是Y的子集.使用上述查询,我们可以找到一个在一个而不在另一个中的三元组.
如果我们不关心特定的三元组,我们可以使用ASK查询来检查是否存在,而不会发现它们是什么.例如,
ask {
graph <http://a> { ?s ?p ?o }
NOT EXISTS { graph <http://b> { ?s ?p ?o } }
}
no
Run Code Online (Sandbox Code Playgroud)
因为没有这样的三元组.但是,由于我们试图询问A是否是B的子图,这表示它们不是三元组,我们需要在这里反转真值.所以我们使用:
ask {
NOT EXISTS {
graph <http://a> { ?s ?p ?o }
NOT EXISTS { graph <http://b> { ?s ?p ?o } }
}
}
yes
Run Code Online (Sandbox Code Playgroud)
同样,如果我们问B是否是A的子图,我们得到no:
ask {
NOT EXISTS {
graph <http://b> { ?s ?p ?o }
NOT EXISTS { graph <http://a> { ?s ?p ?o } }
}
}
no
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1306 次 |
| 最近记录: |