[英]A ruby SPARQL query that SELECT(s) all triples for a given subject
[英]SPARQL select remaining triples
我有一個 RDF 圖,其中包含使用不同本體描述的數據(想想 VCARD 和 FOAF)。
現在為了使我的查詢更簡單,我想構建一個新圖,在該圖中我將一個本體映射到另一個本體,以便在一個本體中描述數據。
我已經弄清楚了映射部分,但我正在尋找的是一種選擇“剩余三元組”的方法,即那些已經在正確本體中的三元組(因為這些在映射后應該保持不變)。
我認為應該有一種方法可以通過否定來做到這一點,但我似乎無法弄清楚。
例如,假設我有以下 RDF 圖:
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix vcard: <http://www.w3.org/2006/vcard/ns#> .
@base <http://example.org/>
<somePerson>
a foaf:Person .
<someOtherPerson>
a vcard:Individual .
# [Some more triples]
我想將它映射到:
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@base <http://example.org/>
<somePerson>
a foaf:Person .
<someOtherPerson>
a foaf:Person.
# [Some more triples]
在不使用 VCARD 的情況下描述數據。
從第一個到第二個的映射很簡單,但我正在尋找一種簡單的方法來保持其他三元組不變。 (基本上將它們復制到輸出)。
正如@UninformedUser 建議的那樣,這個查詢結構可以解決問題。
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix foaf: <http://xmlns.com/foaf/0.1/>
prefix vcard: <http://www.w3.org/2006/vcard/ns#>
CONSTRUCT {
?name rdf:type foaf:Person .
?x ?y ?z .
}
WHERE {
{
{
?x ?y ?z .
}
FILTER NOT EXISTS
{
?x rdf:type vcard:Individual .
}
}
UNION
{
?name rdf:type vcard:Individual .
}
}
從這里出發:
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix vcard: <http://www.w3.org/2006/vcard/ns#> .
@base <http://example.org/>
<somePerson>
a foaf:Person .
<someOtherPerson>
a vcard:Individual .
[Some more triples]
到這里:
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@base <http://example.org/>
<somePerson>
a foaf:Person .
<someOtherPerson>
a foaf:Person.
[Some more triples]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.