簡體   English   中英

SPARQL根據主題內容選擇

[英]SPARQL select based on the content of the subject

我是SPARQL的新手,我正在嘗試根據主題的內容選擇一個屬性。 例如,使用下面的RDF數據,我想返回包含“ var2_1”的結果:

<rdf:Description rdf:about="http://www.ontologydesignpatterns.org/ont/fred/domain.owl#var0">
    <rdf:type rdf:resource="http://www.ontologydesignpatterns.org/ont/fred/domain.owl#var2_0"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.ontologydesignpatterns.org/ont/fred/domain.owl#var1">
    <rdf:type rdf:resource="http://www.ontologydesignpatterns.org/ont/fred/domain.owl#var2_1"/>
</rdf:Description>

這是我正在寫的查詢,但是它什么也沒有返回,而且我似乎找不到找到指定主題應包含“ var1”的方法:

SELECT ?t 
WHERE {
   ?s rdf:type ?t
   FILTER regex(?s, "var1")
}

我將以正確的方式為您提供幫助。

該主題不是字符串文字值,而是IRI: http://www.ontologydesignpatterns.org/ont/fred/domain.owl#var1 : http://www.ontologydesignpatterns.org/ont/fred/domain.owl#var1 為此,您不應使用正則表達式,而應使用實際的IRI本身:

SELECT ?t 
WHERE {
  ?s rdf:type ?t
  FILTER(?s =  <http://www.ontologydesignpatterns.org/ont/fred/domain.owl#var1>)
}

或更簡潔:

SELECT ?t 
WHERE {
   <http://www.ontologydesignpatterns.org/ont/fred/domain.owl#var1> rdf:type ?t
}

另一個答案已經指出您的?s是URI,應該直接匹配而不是使用正則表達式。 另外,需要記住的是,如果定義了正確的前綴,匹配特定的URI會變得更加簡單。 如果我們為文件的URI定義前綴,那么實際的查詢模式將變得更加簡單:

PREFIX fred: <http://www.ontologydesignpatterns.org/ont/fred/domain.owl#>
SELECT ?t 
WHERE {
   fred:var1 rdf:type ?t
}

查詢甚至可以變得更加簡單: rdf:type具有內置的縮寫“ a ”,並且WHERE關鍵字是可選的:

PREFIX fred: <http://www.ontologydesignpatterns.org/ont/fred/domain.owl#>
SELECT ?t {
   fred:var1 a ?t
}

最后,如果您確實想使用正則表達式來匹配URI,則可以通過使用str將URI轉換為字符串來實現:

SELECT ?t {
   ?s a ?t
   FILTER regex(str(?s), "var1")
}

但是與其他選項相比,在較大的數據集上這將非常慢。

最后,為了支持AKSW的注釋,以下是將文件從RDF / XML轉換為Turtle的文件:

PREFIX fred: <http://www.ontologydesignpatterns.org/ont/fred/domain.owl#>

fred:var0 a fred:var2_0.
fred:var1 a fred:var2_1.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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