![](/img/trans.png)
[英]SPARQL: get all Predicates and their respective Objects and organize them into a List
[英]How to select predicates and their respective labels in SPARQL?
我正在嘗試列出所有本體( NIF )謂詞及其標簽。 不查詢標簽時,將產生80個結果。 因此,我假設其中有80個謂詞為“ nif”的謂詞。
然后,將包含rdfs:label
的行添加到代碼中,但未產生任何結果。 因此,我編寫了以下代碼,首先過濾了包含“ nif”的URI:
SELECT DISTINCT ?p ?label WHERE{ ?s ?p ?o . FILTER (REGEX(STR(?p), "nif", "i")) . ?p rdfs:label ?label . } ORDER BY ?p
但這沒有用。 我嘗試使用?pa rdf:Property
而不是?s ?p ?o
,但這也不起作用。 然后,我嘗試了Exist
and Values ?p {"nif"}
但是我也沒有成功!
我在哪里犯錯?
使用的屬性與聲明的屬性:在RDF中, 使用謂詞和聲明謂詞之間是有區別的。 可以不聲明而使用謂詞,也可以不使用而聲明謂詞。
(在一個文件中聲明謂詞,然后在另一個文件中使用謂詞也是可能且很常見的。這就是RDF如何在不同數據集中重用單個本體的方法。可能有也可能沒有owl:imports
鏈接兩個文件的owl:imports
語句。)
列出默認圖中使用的所有謂詞:
SELECT DISTINCT ?predicate {
?s ?predicate ?o
}
ORDER BY ?predicate
要列出默認圖中聲明的所有謂詞,我們需要考慮使用哪種架構語言對其進行聲明。 列出使用RDF Schema聲明的謂詞:
SELECT ?predicate {
?predicate a rdf:Property
}
ORDER BY ?predicate
列出用OWL聲明的謂詞:
SELECT ?predicate ?type {
VALUES ?type { owl:ObjectProperty owl:DatatypeProperty owl:AnnotationProperty }
?predicate a ?type
}
ORDER BY ?predicate
上面的查詢考慮到OWL具有三種不同類型的謂詞:對象屬性,數據類型屬性和注釋屬性。 所以我們基本上查詢這三個。
有了這些知識,應該可以發現本體中使用了哪些謂詞,以及本體中聲明了哪些謂詞。
現在,關於標簽。 最重要的查詢返回謂詞的URI(機器可讀的標識符)。 要還檢索標簽,請將?label
添加到SELECT
子句中的變量列表中,然后將其添加到WHERE { ... }
塊中:
OPTIONAL { ?predicate rdfs:label ?label }
例如:
SELECT ?predicate ?label {
?predicate a rdf:Property
OPTIONAL { ?predicate rdfs:label ?label }
}
ORDER BY ?predicate
我們將檢索標簽的模式設為可選,因此,如果默認圖中未提供標簽,則仍返回謂詞,但沒有?label
變量的值。 這樣,就可以確定存在謂詞(即使用或聲明謂詞)但不提供標簽的情況。
如果聲明了謂詞但未提供標簽,那么我認為這是一種低質量的本體,在創建時未充分注意。
如果使用謂詞但未提供標簽,我將不會感到驚訝。 這可能僅意味着聲明和標簽是在另一個文件中提供的,並且需要查找該文件並將其添加到數據集中以查詢標簽。
從URI構造標簽:如果問題是本體中缺少標簽,並且在其他地方也找不到標簽,那么這里是一個從URI的最后部分構造盡力而為標簽的版本,以防沒有標簽聲明:
OPTIONAL {
?predicate rdfs:label ?tmpl
}
BIND (coalesce(?tmpl, replace(replace(replace(str(?predicate), '.*[#/:]', ''), '_', ' '), '([a-z])([A-Z])', '$1 $2')) AS ?label)
這將占用URI中最后一個哈希,斜杠或冒號之后的所有內容,用空格替換下划線,並以CamelCase表示法在單詞之間插入空格。
最后,按URI進行過濾。 在此重要的是要注意,過濾只會在“原始” URI上發生,而不是在前綴縮寫形式上發生。 例如,以下過濾器僅接受URI中帶有rdfs
謂詞:
FILTER regex(str(?predicate), 'rdfs', 'i')
但這實際上會拒絕rdfs:label
, rdfs:comment
以及rdfs
命名空間中的任何其他屬性,因為它們的完整URI的格式為
<http://www.w3.org/2000/01/rdf-schema#label>
因此URI實際上不包含字符串rdfs
。 要記住的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.