簡體   English   中英

如何在SPARQL中選擇謂詞及其各自的標簽?

[英]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:labelrdfs:comment以及rdfs命名空間中的任何其他屬性,因為它們的完整URI的格式為

<http://www.w3.org/2000/01/rdf-schema#label>

因此URI實際上不包含字符串rdfs 要記住的事情。

暫無
暫無

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

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