簡體   English   中英

為什么 W3C RDF 驗證器不使用完整名稱空間替換 URI?

[英]Why doesn't the W3C RDF validator replace the URI using the full namespace?

我嘗試使用 W3C RDF Validator 在線驗證一個非常簡單的手動編寫的 RDF。 令我驚訝的是,它正確地解析了來自 rdf 命名空間的 URI,但不是來自不同的命名空間(也來自 W3C)。 為什么會這樣?

讓我們舉個例子

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:org="http://www.w3.org/ns/org#" >
  <rdf:Description rdf:about="https://stackexchange.com/">
    <rdf:type rdf:resource="org:Organization"/>
  </rdf:Description>
</rdf:RDF>

這將驗證並解析為解析結果

如您所見,謂詞 (rdf:type) 得到很好的擴展,並且可以單擊它。 object (org:Organization) 根本沒有展開,而且當我嘗試單擊該鏈接時,它確實向瀏覽器發送“org:Organization”,從而產生錯誤。 但是命名空間 org 已經像 rdf 命名空間一樣定義了,如果我手動訪問http://www.w3.org/ns/org#Organization ,我會得到一個 Turtle 文檔。

所以,我的問題是:為什么不把http://www.w3.org/ns/org#Organization放在 object 中? 我應該更改什么以使解析器正確執行它?

實際上,解析器做得很好。 問題是您試圖在屬性值( rdf:resource屬性的值)中使用 XML 名稱空間前綴,而不是作為實際 XML 元素/屬性名稱本身(例如rdf:type ,它是一個 XML 元素名稱)。

換句話說:您不能在字符串值中使用 XML 命名空間。 因此,解析器不會嘗試“擴展”命名空間,而只是將文字字符串值解析為 URI,並且由於org:Organization實際上是一個語法上合法的 URI,所以它會生成它。

要獲得所需的 output,您必須寫出完整的 IRI 字符串,如下所示:

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:org="http://www.w3.org/ns/org#" >
  <rdf:Description rdf:about="https://stackexchange.com/">
    <rdf:type rdf:resource="http://www.w3.org/ns/org#Organization"/>
  </rdf:Description>
</rdf:RDF>

或者,如果您願意,可以使用縮寫的 RDF/XML 語法來獲取:

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:org="http://www.w3.org/ns/org#" >
  <org:Organization rdf:about="https://stackexchange.com/" />
</rdf:RDF>

順便說一句:RDF/XML 是出了名的難以處理的語法。 RDF 還有其他更簡單的語法格式,例如Turtle 只是在說'。

暫無
暫無

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

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