簡體   English   中英

SPARQL 選擇剩余的三元組

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM