學習RDF
RDF(資源描述框架)是描述網路資源的 W3C 標準, 比如網頁的標題、作者、修改日期、內容以及版權資訊等。
什麼是 RDF?
- RDF 指資源描述框架(Resource Description Framework)
- RDF 是一個用於描述 Web 上的資源的框架
- RDF 提供了針對資料的模型以及語法,這樣獨立的團體們就可以交換和使用它
- RDF 被設計為可被計算機閱讀和理解
- RDF 被設計的目的不是為了向人們顯示出來
- RDF 使用 XML 編寫
- RDF 是 W3C 語義網路活動的組成部分
- RDF 是一個 W3C 推薦標準
RDF - 應用舉例
- 描述購物專案的屬性,比如價格以及可用性
- 描述 Web 事件的時間表
- 描述有關網頁的資訊,比如內容、作者以及被建立和修改的日期
- 描述網路圖片的內容和等級
- 描述針對搜尋引擎的內容
- 描述電子圖書館
RDF 被設計為可被計算機讀取
RDF 被設計為提供一種描述資訊的通用方法,這樣就可以被計算機應用程式讀取並理解。
RDF 描述不是被設計用來在網路上顯示的。
RDF 使用 XML 編寫
RDF 文件使用 XML 編寫。被 RDF 使用的 XML 語言被稱為 RDF/XML。
通過使用 XML,RDF 資訊可以輕易地在使用不同型別的作業系統和應用語言的計算機之間進行交換。
RDF 和語義網
RDF 語言是 W3C 的語義網活動的組成部分。W3C 的"語義網遠景 (Semantic Web Vision)"的目標是:
- Web 資訊擁有確切的含義
- Web 資訊可被計算機理解並處理
- 計算機可從 Web 上整合資訊
RDF 是 W3C 標準
RDF 在 2004 年 2 月成為 W3C 標準。
W3C 推薦(標準)被業界以及 web 團體奉為 web 標準。W3C推薦標準 是由 W3C 工作組開發並經 W3C 成員評審的穩定規範。
可以通過此連結找到官方的 W3C 推薦標準。
RDF 資源、屬性和屬性值
RDF 使用 Web 識別符號來標識事物,並通過屬性和屬性值來描述資源。
對資源、屬性和屬性值的解釋:
- 資源是可擁有 URI 的任何事物,比如 "http://www.runoob.com/rdf"
- 屬性是擁有名稱的資源,比如 "author" 或 "homepage"
- 屬性值是某個屬性的值,比如 "David" 或 "http://www.runoob.com" (請注意一個屬性值可以是另外一個資源)
下面的 RDF 文件可描述資源 "http://www.runoob.com/rdf":
<?xml version="1.0"?>
<RDF>
<Description about="http://www.runoob.com/rdf">
<author>Jan Egil Refsnes</author>
<homepage>http://www.runoob.com</homepage>
</Description>
</RDF>
RDF 陳述
資源、屬性和屬性值的組合可形成一個陳述(被稱為陳述的主體、謂語和客體)。
請看一些陳述的具體例子,來加深理解:
陳述:"The author of http://www.runoob.com/rdf is David."
- 陳述的主體是:http://www.runoob.com/rdf
- 謂語是:author
- 客體是:David
陳述:"The homepage of http://www.runoob.com/rdf is http://www.runoob.com".
- 陳述的主體是:http://www.runoob.com/rdf
- 謂語是:homepage
- 客體是:http://www.runoob.com
RDF 的主要元素是 <RDF> 以及可表示某個資源的 <Description> 元素。
<rdf:RDF> 元素
<rdf:RDF> 是 RDF 文件的根元素。它把 XML 文件定義為一個 RDF 文件。
<rdf:Description> 元素
<rdf:Description> 元素可通過 about 屬性標識一個資源。
<rdf:Description> 元素可包含描述資源的那些元素:
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://www.recshop.fake/cd#">
<rdf:Description
rdf:about="http://www.recshop.fake/cd/Empire Burlesque">
<cd:artist>Bob Dylan</cd:artist>
<cd:country>USA</cd:country>
<cd:company>Columbia</cd:company>
<cd:price>10.90</cd:price>
<cd:year>1985</cd:year>
</rdf:Description>
</rdf:RDF>
artist、country、company、price 以及 year 這些元素被定義在名稱空間 http://www.recshop.fake/cd# 中。此名稱空間在 RDF 之外(並非 RDF 的組成部分)。RDF 僅僅定義了這個框架。而 artist、country、company、price 以及 year 這些元素必須被其他人(公司、組織或個人等)進行定義。
屬性(property)來定義屬性(attribute)
屬性元素(property elements)也可作為屬性(attributes)來被定義(取代元素):
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://www.recshop.fake/cd#">
<rdf:Description
rdf:about="http://www.recshop.fake/cd/Empire Burlesque"
cd:artist="Bob Dylan" cd:country="USA"
cd:company="Columbia" cd:price="10.90"
cd:year="1985" />
</rdf:RDF>
屬性(property)來定義屬性(attribute)
屬性元素(property elements)也可作為屬性(attributes)來被定義(取代元素):
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://www.recshop.fake/cd#">
<rdf:Description
rdf:about="http://www.recshop.fake/cd/Empire Burlesque">
<cd:artist rdf:resource="http://www.recshop.fake/cd/dylan" />
...
...
</rdf:Description>
</rdf:RDF>
上面的例子中,屬性 artist 沒有值,但是卻引用了一個對包含有關藝術家的資訊的資源。
RDF 容器元素
RDF 容器用於描述一組事物。舉個例子,把某本書的作者列在一起。
下面的 RDF 元素用於描述這些的組:<Bag>、<Seq> 以及 <Alt>。
<rdf:Bag> 元素
<rdf:Bag> 元素用於描述一個規定為無序的值的列表。
<rdf:Bag> 元素可包含重複的值。
例項
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://www.recshop.fake/cd#">
<rdf:Description
rdf:about="http://www.recshop.fake/cd/Beatles">
<cd:artist>
<rdf:Bag>
<rdf:li>John</rdf:li>
<rdf:li>Paul</rdf:li>
<rdf:li>George</rdf:li>
<rdf:li>Ringo</rdf:li>
</rdf:Bag>
</cd:artist>
</rdf:Description>
</rdf:RDF>
<rdf:Seq> 元素
<rdf:Seq> 元素用於描述一個規定為有序的值的列表(比如一個字母順序的排序)。
<rdf:Bag> 元素可包含重複的值。
<rdf:Alt> 元素
<rdf:Alt> 元素用於一個可替換的值的列表(使用者僅可選擇這些值的其中之一)。
在 RDF 中,這些"值的列表"被稱為成員(members)。
因此,我們可以這麼說:
- 一個容器是一個包含事物的資源
- 被包含的事物被稱為成員(不能稱為"值的列表")。
RDF 集合
RDF 集合用於描述僅包含指定成員的組。
rdf:parseType="Collection" 屬性
正如在前面的章節所看到的,我們無法關閉一個容器。容器規定了所包含的資源為成員 - 它沒有規定其他的成員是不被允許的。
RDF 集合用於描述僅包含指定成員的組。
集合是通過屬性 rdf:parseType="Collection" 來描述的。
例項
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://recshop.fake/cd#">
<rdf:Description
rdf:about="http://recshop.fake/cd/Beatles">
<cd:artist rdf:parseType="Collection">
<rdf:Description rdf:about="http://recshop.fake/cd/Beatles/George"/>
<rdf:Description rdf:about="http://recshop.fake/cd/Beatles/John"/>
<rdf:Description rdf:about="http://recshop.fake/cd/Beatles/Paul"/>
<rdf:Description rdf:about="http://recshop.fake/cd/Beatles/Ringo"/>
</cd:artist>
</rdf:Description>
</rdf:RDF>
RDF Schema (RDFS) 是對 RDF 的一種擴充套件。
RDF Schema 和 應用程式的類
RDF 通過類、屬性和值來描述資源。
此外,RDF 還需要一種定義應用程式專業的類和屬性的方法。應用程式專用的類和屬性必須使用對 RDF 的擴充套件來定義。
RDF Schema 就是這樣一種擴充套件。
RDF Schema (RDFS)
RDF Schema 不提供實際的應用程式專用的類和屬性,而是提供了描述應用程式專用的類和屬性的框架。
RDF Schema 中的類與面向物件程式語言中的類非常相似。這就使得資源能夠作為類的例項和類的子類來被定義。
RDFS 例項
下面的例項演示了 RDFS 的能力的某些方面:
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xml:base="http://www.animals.fake/animals#">
<rdf:Description rdf:ID="animal">
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
</rdf:Description>
<rdf:Description rdf:ID="horse">
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<rdfs:subClassOf rdf:resource="#animal"/>
</rdf:Description>
</rdf:RDF>
在上面的例子中,資源 "horse" 是類 "animal" 的子類。
簡寫的例子
由於一個 RDFS 類就是一個 RDF 資源,我們可以通過使用 rdfs:Class 取代 rdf:Description,並去掉 rdf:type 資訊,來把上面的例子簡寫一下:
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xml:base="http://www.animals.fake/animals#">
<rdfs:Class rdf:ID="animal" />
<rdfs:Class rdf:ID="horse">
<rdfs:subClassOf rdf:resource="#animal"/>
</rdfs:Class>
</rdf:RDF>
RDF 都柏林核心元資料倡議
都柏林核心元資料倡議 (DCMI) 已建立了一些供描述文件的預定義屬性。
Dublin 核心
RDF 是元資料(關於資料的資料)。RDF 被用於描述資訊資源。
都柏林核心是一套供描述文件的預定義屬性。
第一份都柏林核心屬性是於1995年 在俄亥俄州的都柏林的元資料工作組被定義的,目前由都柏林元資料倡議來維護。
屬性 | 定義 |
---|---|
Contributor | 一個負責為資源內容作出貢獻的實體(如作者)。 |
Coverage | 資源內容的氛圍或作用域 |
Creator | 一個主要負責建立資源內容的實體。 |
Format | 物理或數字的資源表現形式。 |
Date | 在資源生命週期中某事件的日期。 |
Description | 對資源內容的說明。 |
Identifier | 一個對在給定上下文中的資源的明確引用 |
Language | 資源智力內容所用的語言。 |
Publisher | 一個負責使得資源內容可用的實體 |
Relation | 一個對某個相關資源的引用 |
Rights | 有關保留在資源之內和之上的權利的資訊 |
Source | 一個對作為目前資源的來源的資源引用。 |
Subject | 一個資源內容的主題 |
Title | 一個給資源起的名稱 |
Type | 資源內容的種類或型別。 |
通過瀏覽上面這個表格,我們可以發現 RDF 是非常適合表示都柏林核心資訊的。
RDF 名稱空間
RDF 名稱空間(xmlns:rdf):: http://www.w3.org/1999/02/22-rdf-syntax-ns#
RDF 名稱空間(xmlns:rdfs ):: http://www.w3.org/2000/01/rdf-schema#
RDF 副檔名和MIME 型別
RDF 檔案的推薦副檔名為.rdf,然而,副檔名.XML是經常被用來相容舊的XML解析器。
MIME 型別:"application/rdf+xml"。
RDFS / RDF 類
元素 | 類 | 子類 |
---|---|---|
rdfs:Class | All classes | |
rdfs:Datatype | Data types | Class |
rdfs:Resource | All resources | Class |
rdfs:Container | Containers | Resource |
rdfs:Literal | Literal values (text and numbers) | Resource |
rdf:List | Lists | Resource |
rdf:Property | Properties | Resource |
rdf:Statement | Statements | Resource |
rdf:Alt | Containers of alternatives | Container |
rdf:Bag | Unordered containers | Container |
rdf:Seq | Ordered containers | Container |
rdfs:ContainerMembershipProperty | Container membership properties | Property |
rdf:XMLLiteral | XML literal values | Literal |
RDFS / RDF 屬性
元素 | 領域 | 範圍 | 描述 |
---|---|---|---|
rdfs:domain | Property | Class | 資源域 |
rdfs:range | Property | Class | 資源的範圍 |
rdfs:subPropertyOf | Property | Property | 該屬性是一個屬性的子屬性 |
rdfs:subClassOf | Class | Class | 資源是一個類的子類 |
rdfs:comment | Resource | Literal | 人類可讀的資源描述 |
rdfs:label | Resource | Literal | 人類可讀的資源標籤(名稱) |
rdfs:isDefinedBy | Resource | Resource | 資源的定義 |
rdfs:seeAlso | Resource | Resource | 關於資源的其他資訊 |
rdfs:member | Resource | Resource | 資源的成員 |
rdf:first | List | Resource | |
rdf:rest | List | List | |
rdf:subject | Statement | Resource | 一個RDF陳述的資源主體 |
rdf:predicate | Statement | Resource | 在一個RDF陳述的資源的謂詞 |
rdf:object | Statement | Resource | 一個RDF陳述的資源客體 |
rdf:value | Resource | Resource | value屬性 |
rdf:type | Resource | Class | 資源是一個類的例項 |
RDF 屬性
元素 | 領域 | 範圍 | 描述 |
---|---|---|---|
rdf:about | 定義所描述的資源 | ||
rdf:Description | 資源描述的容器 | ||
rdf:resource | 定義資源,以確定一個屬性 | ||
rdf:datatype | 定義一個元素的資料型別 | ||
rdf:ID | 定義元素的ID | ||
rdf:li | 定義列表 | ||
rdf:_n | 定義一個節點 | ||
rdf:nodeID | 定義元素節點的ID | ||
rdf:parseType | 定義元素應如何解析 | ||
rdf:RDF | 一個RDF文件的根 | ||
xml:base | 定義了XML基礎 | ||
xml:lang | 定義元素內容的語言 | ||
rdf:aboutEach | (刪除) | ||
rdf:aboutEachPrefix | (刪除) | ||
rdf:bagID | (刪除) |
描述為"刪除" 的為最近從RDF標準刪除元素。