RDF入門 推薦標準

TransWiki - W3CHINA.ORG开放翻译计划(OTP)



w3c_home.png (http://www.w3.org/)

目录

RDF入門


W3C 推薦標準 2004年02月10日


當前版本:
http://www.w3.org/TR/2004/REC-rdf-primer-20040210/ (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/)

最新版本:
http://www.w3.org/TR/rdf-primer/ (http://www.w3.org/TR/rdf-primer/)

上一版本:
http://www.w3.org/TR/2003/PR-rdf-primer-20031215/ (http://www.w3.org/TR/2003/PR-rdf-primer-20031215/)

編者:

Frank Manola, fmanola@acm.org (mailto:fmanola@acm.org)

Eric Miller, W3C, em@w3.org (mailto:em@w3.org)

系列文檔編者:

Brian McBride, Hewlett-Packard Laboratories, bwm@hplb.hpl.hp.com (mailto:bwm@hplb.hpl.hp.com)

閱讀時請參照本文檔的勘誤表 (http://www.w3.org/2001/sw/RDFCore/errata#rdf-primer),其中可能會包含一些規範性的修正。

也要留意譯文 (http://www.w3.org/2001/sw/RDFCore/translation/rdf-primer)

Copyright (http://www.w3.org/Consortium/Legal/ipr-notice#Copyright)? 2004 W3C? (MIT, ERCIM, Keio (http://www.keio.ac.jp/)), All Rights Reserved. W3C liability (http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer), trademark (http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks), document use (http://www.w3.org/Consortium/Legal/copyright-documents) and software licensing (http://www.w3.org/Consortium/Legal/copyright-software) rules apply.



摘要

資源描述框架 (RDF) 是用來表現萬維網上各類資源的資訊的一種語言,為了幫助讀者瞭解一些必備的基礎知識後能有效地使用 RDF,特編寫此基礎入門教程。本書介紹了RDF的一些基本概念以及RDF基於XML(可擴展標記語言)的語法。本書還討論了如何用RDF辭彙描述語言來定義RDF辭彙集,並總結了目前所部署的一些基於RDF的應用。最後,本文介紹了其他RDF規範文檔的內容和用途。


本文檔的狀態

本文檔已被W3C成員及其他相關方面審閱,並已被W3C總監(W3C Director)[譯注//Director是W3C組織的最高行政職位,目前由Tim Berners-Lee擔任。]批准為W3C推薦標準(W3C Recommendation) (http://www.w3.org/2003/06/Process-20030618/tr.html#RecsW3C)。W3C 制定推薦標準的任務是使之受到關注,並促使其被廣泛應用。這將增強Web的功能性(functionality)與互操作性(interoperablity)。

這是一套文獻系列 (http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#section-Introduction) (共六份,分別是:入門 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/)概念 (http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/)語法 (http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210/)語義學 (http://www.w3.org/TR/2004/REC-rdf-mt-20040210/)辭彙集 (http://www.w3.org/TR/2004/REC-rdf-schema-20040210/)測試案例 (http://www.w3.org/TR/2004/REC-rdf-testcases-20040210/))之中的一份。該套文獻系列將替換原有的資源描述框架說明書,RDF模型和語法推薦標準 (http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/)RDF模式推薦標準 (http://www.w3.org/TR/2000/CR-rdf-schema-20000327/)

它已經為出版而在2004年二月10日被RDF核心工作小組 (http://www.w3.org/2001/sw/RDFCore/)發展為W3C語義網行為 (http://www.w3.org/2001/sw/)(行為聲明 (http://www.w3.org/2001/sw/Activity),團體章程 (http://www.w3.org/2002/11/swv2/charters/RDFCoreWGCharter))的一部份。

自建議推薦標準以來的修改已被詳細記錄在更改日誌中。

歡迎大家將意見發送至www-rdf-comments@w3.org (mailto:www-rdf-comments@w3.org)存檔檔 (http://lists.w3.org/Archives/Public/www-rdf-comments/))並積極參與www-rdf-interest@w3.org (mailto:www-rdf-interest@w3.org)(存檔檔 (http://lists.w3.org/Archives/Public/www-rdf-interest/))上的相關技術討論。

一個RDF的實現列表可通過http://www.w3.org/2001/sw/RDFCore/impls (http://www.w3.org/2001/sw/RDFCore/impls)獲得。

W3C維護著一個有關這項工作的已公開專利列表 (http://www.w3.org/2001/sw/RDFCore/ipr-statements)

本節描述了本文檔在發佈時的狀態。本文檔有可能被其他本文檔所替代。W3C推薦標準及其他技術文檔(technical document)的最新列表可從以下網址獲得:http://www.w3.org/TR (http://www.w3.org/TR)


目錄

  1. 介紹(Introduction) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#intro)
  2. 關於資源的陳述(Making Statements About Resources) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#statements)
      2.1 基本概念(Basic Concepts) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#basicconcepts)
      2.2 RDF模型(The RDF Model) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfmodel)
      2.3 結構化屬性值與空白節點(Structured Property Values and Blank Nodes) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#structuredproperties)
      2.4 類型文字(Typed Literals) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#typedliterals)
      2.5 總結(Concepts Summary) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#conceptsummary)
  3. RDF/XML - 一種用於RDF的XML語法(An XML Syntax for RDF: RDF/XML) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfxml)
      3.1 基本原理(Basic Principles) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#basicprinciples)
      3.2 簡化和組織RDF URIrefs(Abbreviating and Organizing RDF URIrefs) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#newresources)
      3.3 總結(RDF/XML Summary) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfxmlsummary)
  4. 其他RDF表達能力(Other RDF Capabilities) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#othercapabilities)
      4.1 RDF容器(RDF Containers) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#containers)
      4.2 RDF集合(RDF Collections) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#collections)
      4.3 RDF具體化(RDF Reification) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#reification)
      4.4 關於結構化值(rdf:value)的更多資訊(More on Structured Values: rdf:value) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfvalue)
      4.5 XML文字(Literal)(XML Literals) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#xmlliterals)
  5. RDF Schema - 定義RDF的辭彙表(Defining RDF Vocabularies: RDF Schema) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfschema)
      5.1 描述類(Class)(Describing Classes) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#schemaclasses)
      5.2 描述屬性(Property)(Describing Properties) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#properties)
      5.3 理解RDF Schema聲明(Interpreting RDF Schema Declarations) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#interpretingschema)
      5.4 其他關於Schema的資訊(Other Schema Information) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#otherschema)
      5.5 更豐富的Schema語言(Richer Schema Languages) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#richerschemas)
  6. 一些RDF的應用:具體領域中的RDF(Some RDF Applications: RDF in the Field) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#applications)
      6.1 都柏林核心元資料倡議(Dublin Core Metadata Initiative) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#dublincore)
      6.2 PRISM (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#prism)
      6.3 XPackage (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#xpackage)
      6.4 RSS 1.0:RDF站點匯總(RSS 1.0: RDF Site Summary) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rss)
      6.5 CIM/XML (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#cimxml)
      6.6 基因本體協會(Gene Ontology Consortium) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#geneont)
      6.7 描述設備性能與用戶偏好(Describing Device Capabilities and User Preferences) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#devcap)
  7. RDF規範的其他部分(Other Parts of the RDF Specification) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#otherparts)
      7.1 RDF語義(RDF Semantics) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#semantics)
      7.2 測試用例(Test Cases) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#testcases)
  8. 參考文獻(References) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#references)
      8.1 規範性參考文獻(Normative References) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#normative-references)
      8.2 參考性資料(Informational References) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#informational-references)
  9. 致謝(Acknowledgments) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#acknowledgements)

附錄

  A. 關於URI的更多資訊(More on Uniform Resource Identifiers (URIs)) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#identifiers)
  B. 關於XML的更多資訊(More on the Extensible Markup Language (XML)) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#documents)
  C. 改動記錄(Changes) (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#changes)



1. 介紹(Introduction)

資源描述框架(Resource Description Framework, 簡稱 RDF)是一個用於表達關於萬維網(World Wide Web)上的資源的資訊的語言. 它專門用於表達關於Web資源的元資料, 比如Web頁面的標題、作者和修改時間,Web文檔的版權和許可資訊,某個被共用資源的可用計畫表等。然而,將"Web資源(Web resource)"這一概念一般化後,RDF可被用於表達關於任何可在Web上被標識的事物的資訊,即使有時它們不能被直接從Web上獲取。比如關於一個線上購物機構的某項產品的資訊(例如關於規格、價格和可用性資訊),或者是關於一個Web用戶在資訊遞送方面的偏好的描述。

RDF用於資訊需要被應用程式處理而不是僅僅顯示給人觀看的場合。RDF提供了一種用於表達這一資訊、並使其能在應用程式間交換而不喪失語義的通用框架。既然是通用框架,應用程式設計者可以利用現成的通用RDF解析器(RDF parser)以及通用的處理工具。能夠在不同的應用程式間交換資訊意味著對於那些並非資訊的最初創建者的應用程式也是可利用這些資訊。

RDF基於這樣的思想:用Web識別字(稱作統一資源識別字Uniform Resource IdentifiersURIs)來標識事物,用簡單的屬性(property)及屬性值來描述資源。這使得RDF可以將一個或多個關於資源的簡單陳述表示為一個由結點和弧組成的圖(graph),其中的結點和弧代表資源、屬性或屬性值。為了讓討論顯得儘量具體一些,下面的這組陳述"有一個人由http://www.w3.org/People/EM/contact#me 標識, 他的名字是Eric Miller, 他的電子郵件位址是em@w3.org,他的頭銜是Dr."可以表示為圖1 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure1)所示的圖:

fig1dec16.png

圖1:一個描述Eric Miller的RDF圖

圖1 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure1)展示了RDF用URIs來標識:

RDF提供了一種基於XML的語法(稱為RDF/XML)用於保存和交換RDF圖。圖1 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure1)所示的RDF用RDF/XML來書寫的話就像下面的例1 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example1)這樣:

例1:一段描述Eric Miller的RDF/XML

 <?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:contact="http://www.w3.org/2000/10/swap/pim/contact#">
<contact:Person rdf:about="http://www.w3.org/People/EM/contact#me">
<contact:fullName>Eric Miller</contact:fullName>
<contact:mailbox rdf:resource="mailto:em@w3.org"/>
<contact:personalTitle>Dr.</contact:personalTitle>
</contact:Person>
</rdf:RDF>

注意:上述RDF/XML也包含URIs,同樣地還包含簡略形式的屬性(比如mailbox和fullName)及各個屬性的值(em@w3.org和Eric Miller)。

和HTML一樣,RDF/XML也是機器可處理的,也使用URIs,RDF也可以鏈結Web上任何地方的資訊。然而與傳統超文本不同的是,RDF URIs可以引用任何可標識的事物,包括那些不是直接可從Web上獲取的事物(比如Eric Miller這個人)。結果是,RDF除了能夠描述像網頁這類事物以外,還可以描述汽車,商業活動,人類,新聞事件等等。此外,RDF中的屬性本身有URIs,用以準確標識被鏈結的事物之間的關係。

下列文檔都屬於RDF規範的一部分:

本文檔旨在提供一個關於RDF的介紹,並描述一些已有的RDF應用,以幫助資訊系統設計者及應用程式開發者理解RDF的特性和如何使用這些特性。特別地,本文檔旨對下列這類問題做出回答:

  • RDF看起來是怎樣的?
  • RDF可以表達什麼資訊?
  • RDF資訊是如何被創建、訪問和處理的?
  • 現有資訊如何能夠與RDF結合?

本文檔是一個非規範性(non-normative)文檔,也就是說它並不是關於RDF的權威性的規範。本文檔中的例子和其他解釋性的資料用於幫助讀者理解RDF,但是它們有可能並不是權威性的和充分完善的。在這些情況下,請參考RDF規範中相關的規範性文檔。為此,本文檔描述了RDF規範中的其他文檔所擔任的角色,並在適當的地方提供了指向規範性文檔中相關部分的鏈結。

需要注意的是,上述RDF文檔更新並更清晰地解釋了先前發佈的一些RDF規範,資源描述框架(RDF)的模型和語法規範 (http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/) [RDF-MS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdfms)]和資源描述框架模式(RDF Schema)規範1.0 (http://www.w3.org/TR/2000/CR-rdf-schema-20000327/)[RDF-S (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-s)]。所以,一些術語、語法和概念已經稍有變化。本文檔反映的是在上面的列表中給出的新版本RDF規範。因此,對於熟悉舊規範或基於舊規範的教程、入門讀物的讀者,應留意當前版本的規範與先前版本的一些差異。關於先前版本的RDF中出現的一些問題以及它們在當前版本中的解決方案的列表,請參見[http://www.w3.org/2000/03/rdf-tracking/ RDF問題跟蹤(Issue Tracking)。

2. 關於資源的陳述

RDF是用以提供一種發表關於Web資源(如網頁)的陳述的簡單方法的。這部分描述了RDF提供這些能力(描述這些概念的規範標準就是RDF概念和抽象語法 (http://www.w3.org/TR/rdf-concepts/)[RDF-CONCEPTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)])背後的基本思想。


2.1 基本概念

試想一下這樣的情形:有一個叫John Smith的人創建了某個網頁。如果用自然語言(比如英語)來陳述該事實,一種簡潔明瞭的方式是採用下面這種簡單陳述的形式:

 http://www.example.org/index.html has a creator whose value is John Smith

強調該陳述的各個部分是為了強調:為了描述某事物的特性,需要某些方法來命名或標識多種事物:

  • 陳述所描述的事物(譬如此例中John Smith所創建的網頁)
  • 陳述所描述事物的具體屬性(property)(譬如本例中的creator)
  • 陳述所描述的作為該屬性(陳述所描述事物對應的)的值的事物(如這個網頁的creator是誰)。

在上面的陳述中,網頁用它的URL(Uniform Resource Locator,統一資源定位符)來標識。另外,單詞"creator"被用來標識事物的屬性(property),短語"John Smith"被用來標識作為屬性(property)的值的事物(一個人)。

該網頁的其他屬性(property)可以通過書寫其他具有相同形式的英文陳述來描述:用URL標識該網頁,用單詞(或其他運算式)來標識網頁的屬性(properties)及其值。例如:這個網頁的創建日期和所用的語種可以由下列陳述來描述:

 http://www.example.org/index.html has a creation-date whose value is August 16, 1999
http://www.example.org/index.html has a language whose value is English

RDF是基於這一思想的:被描述的事物具有一些屬性 (http://www.w3.org/TR/rdf-concepts/#dfn-property) (properties),而這些屬性各有其值(values);對資源的描述可以通過對它作出指定了上述屬性及值的陳述(statement)來進行(就像上面例子中的那樣)。RDF用一套特定的術語來表達陳述中的各個部分。確切地說,關於事物(譬如上例中的網頁)的陳述中用於識別事物的那部分就叫做主體 (http://www.w3.org/TR/rdf-concepts/#dfn-subject),而用於區分陳述物件主語的各個不同屬性(譬如:作者,創建日期,語種等等)的那部分就叫做謂詞 (http://www.w3.org/TR/rdf-concepts/#dfn-predicate),陳述中用於區分各個屬性的值的那部分叫做客體 (http://www.w3.org/TR/rdf-concepts/#dfn-object)。因此,考慮英文陳述:

 http://www.example.org/index.html has a creator whose value is John Smith

這個陳述裏的不同部分用RDF術語來說就是:

正如英語是作為(用英語溝通的)人們之間很好溝通工具一樣,RDF是用來做出機器可處理的聲明的工具。那麼,如果想做出這種適合機器處理的聲明,還需要兩件事:

  • 一個可用來區分標識一個陳述中的主體,謂詞,客體的機器可處理的識別字系統,同時這個識別字系統不會和其他人可能在Web上使用的相似的識別字系統混淆;
  • 一種用以表示這些陳述並讓這些陳述可在機器間交流的機器可處理的語言;

幸運地是,現有的Web體系結構提供了這兩個必需的工具。

正如前面所描述的,Web已經提供了一種形式的識別字-URL(Uniform Resource Locator,同一資源定位符)。在第一個例子中,就採用了一個URL來標識John Smith所創建的網頁。URL是標識(identify)Web資源(Web resource)的字串,這是通過標識資源的首選訪問機制來實現的(本質上,即資源的網路"位置")。然而,對於許多不具有網路位址或URL的資源(這一點與網頁是不同的),能夠記錄關於它們的資訊也是同等重要。

Web提供了一套更通用的識別字形式,稱為統一資源識別字 (http://www.isi.edu/in-notes/rfc2396.txt)(Uniform Resource Identifier,URI)。URL是URI的一種具體形式。所有URI都具有共同的特徵:即不同的人或組織可以彼此獨立地創建並使用URI來標識事物。但是,URI並不局限於標識具有網路位址或其他電腦訪問機制的資源。實際上,我們可以創建URI來引用陳述中需要被標識的任何資源,包括:

  • 網路可訪問資源,譬如,一份電子文檔、一個圖片、一個服務(例如,"洛山磯的今日天氣預報")或是一組其他的資源;
  • 非網路可訪問資源,譬如,人、公司、在圖書館裝訂成冊的書籍;
  • 不物理存在的抽象概念,如"作者(creator)"這個概念;

由於上述通用性,RDF用URIs作為其標識機制(用於標識陳述中的主體、謂詞和客體)的基礎。更準確地說,RDF使用的是URI引用(URI references) (http://www.w3.org/TR/rdf-concepts/#dfn-URI-reference) [URIS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-uri)]。一個URI引用(或"URIref")是一個在尾部附加了可選的"片段識別符(fragment identifier)"的URI。比如,URI引用(URIref) http://www.example.org/index.html# 由URI http://www.example.org/index.html 和(由符號#分隔的)的section2 (片段識別字)組成。RDF URIrefs可以包含Unicode[UNICODE (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-unicode)]字元(參見[RDF-CONCEPTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)]),這就允許在URIrefs中使用多種語言。RDF將"資源(resource)"定義任何可被為URI引用(URIref)標識的事物。因此,使用URIrefs,RDF實際上可以描述任何事物,並陳述這些事物之間的關係。URIrefs和片段識別字將在Appendix A (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#identifiers)[RDF-CONCEPTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)]中作進一步的闡述。

為了用一種機器可處理的(machine-processable)方式來表示RDF陳述(RDF statements),RDF採用了可擴展標記語言(Extensible Markup Language) (http://www.w3.org/TR/2000/REC-xml-20001006)[XML (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xml)]。XML被設計成允許任何人來設計他們自己的文檔格式,並可用這種格式書寫文檔。RDF定義了一個特殊的XML標記語言(稱為RDF/XML)來表示RDF資訊和在機器間交換這些資訊。在第一節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#intro)中有一個關於RDF/XML的例子。這個例子(例 1 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example1) )使用了一些諸如<contact:fullName>和<contact:personalTitle>這樣的標籤來相應地區分Eric Miller和Dr這些文本內容。這些標籤能讓那些理解這些標籤含義的程式正確地解釋文本內容。XML的內容和標籤(除了一些特例)能夠包含統一字元編碼[UNICODE (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-unicode)] 的字元,這就允許了來自各種語言的資訊可以被直接顯示出來。附錄 B (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#documents)大體上給出了關於XML進一步的背景知識。關於RDF的RDF/XML專用語法在第三節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfxml)中有更詳細的描述,且定義在規範[RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]中。


2.2 RDF模型

2.1節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#basicconcepts) 中闡述了以下內容:RDF陳述的基本概念,用URIref標識RDF陳述中涉及的事物的方法,以及用RDF/XML作為一種機器可處理的方式來表示RDF陳述。基於這些鋪墊,這節將描述RDF是如何用URIs發表關於資源的陳述的。在介紹(第1節)中已經說明了,RDF的基本思想是:表達簡單的資源陳述,其中每個陳述都是由主體(subject),謂詞(predicate),客體(object)組成的。在RDF中,如下的英文陳述:

 http://www.example.org/index.html has a creator whose value is John Smith

可以由RDF陳述來表示:

請注意是如何用URIrefs不僅標識了陳述的主體,還標識了謂詞和客體,而不分別用單詞"作者"和"John Smith"(這樣使用URIrefs的效果將會在這節的稍後部分做論述)。

RDF把圖中的節點和弧作為陳述的模型。RDF的圖模型 (http://www.w3.org/TR/rdf-concepts/#section-data-model)已在[RDF概念 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)]裏有過詳細說明。在這個表示法(圖示法)中,一個陳述可表示為:

  • 一個表示主體的節點;
  • 一個表示客體的節點;
  • 一個由主體節點指向客體節點的表示謂詞的弧;

因此以上的RDF陳述可以描述為如圖2 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure2)所示的那樣:

fig2dec16.png

圖2:一個簡單的RDF陳述

一組陳述相應地被一組節點和弧表示。所以,為了在RDF中表示其他的英文陳述:

http://www.example.org/index.html has a creation-date whose value is August 16, 1999
http://www.example.org/index.html has a language whose value is English

可以用圖3 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure3)所示的圖(用合適的URIrefs標識屬性"creation-date" 和 "language"):

fig3nov19.png

圖3:關於同一資源的多個陳述:

圖3 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure3) 說明了RDF陳述中的客體可以是URIrefs,也可以是常量值(稱作文字),即用於表示某種屬性值的字串。

圖 3 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure3)顯示了:為了表示多種類型的屬性值,RDF陳述中的客體可能是URIrefs或字串表示的常數(稱為文字 (http://www.w3.org/TR/rdf-concepts/#section-Literals),literal)。(比如在以 "http://purl.org/dc/elements/1.1/language" 為謂詞的例子中,那個文字就是一個英文的國際標準雙字母碼。)在RDF的陳述中,文字(literal)可能不被用作主體或者謂詞。在畫RDF圖時,節點為URIrefs的用橢圓來表示,而節點為文字的則用方框來表示(這個例子中的簡單字串文字叫做平凡文字 (http://www.w3.org/TR/rdf-concepts/#dfn-plain-literal),它與將會在2.4節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#typedliterals)做介紹的類型文字 (http://www.w3.org/TR/rdf-concepts/#dfn-typed-literal)(typed literals)是不同的。在[[RDF-CONCEPTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)]中詳細說明了各種不同的可用於RDF陳述中的文字。平凡文字和類型文字都能容許采統一字元編碼[UNICODE (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-unicode)]的字元,即允許資訊用多種語言描述。)

有時在討論它們的時候畫圖不太方便,因此也會用到一個替代的書寫陳述的方法,稱為三元組 (http://www.w3.org/TR/rdf-concepts/#dfn-rdf-triple)。在三元組表示法中,圖中的每個陳述都可以寫成一個依次為主體,謂詞,客體的三元組。如圖3 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure3)所表示的陳述用三元組表示法來寫就是:

 <http://www.example.org/index.html > <http://purl.org/dc/elements/1.1/creator > <http://www.example.org/staffid/85740 > .
<http://www.example.org/index.html > <http://www.example.org/terms/creation-date > "August 16, 1999" .
<http://www.example.org/index.html > <http://purl.org/dc/elements/1.1/language > "en" .

每一個三元組均對應於圖中的一條弧,且這個弧的起始節點和終止節點分別是陳述中的主體和客體。和圖形表示法不同(倒像是原先的陳述),三元組表示法要求一個節點在它出現的每個陳述中都要有標識。因此,例如, "http://www.example.org/index.html" 在三元組表示法中共出現了三次(在每個三元組中均出現一次),而在圖形表示法中只出現了一次。但是,三元組表示法和圖示法描述了完全相同的資訊,這揭示了一個要點:RDF的基礎是陳述的圖模型,而用於表示或描述這個圖的表示法則是次要的。

完全的三元組表示法要求寫出完整的URIref(括在尖刮號中),正如上面例子那樣,所以導致了在一頁中有很多長句。為方便起見,本文檔用一種簡寫法(也在其他的RDF規範裏使用)來書寫三元組。在這種簡寫法中, 一個不用尖刮號的XML限定名(QName)作為一個完整的URIref 的縮寫形式 (QName 會在附錄 B (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#documents)進一步討論)。一個QName包括一個被賦為命名空間URI的首碼,其後是一個冒號,然後是個"局部名稱"(local name)。由QName可以生成完整的URIref,即將局部名稱添加到已經賦了命名空間URI的首碼。因此,例如,如果將命名空間URI"http://example.org/somewhere/"賦值給QName首碼foo,那麼QName "foo:bar"就是URIref"http://example.org/somewhere/bar"的縮寫。在本文檔的例子中也會用一些"公認的"QName首碼(這些首碼無需說明就可使用),定義如下:

 首碼 rdf:, 命名空間 URI: http://www.w3.org/1999/02/22-rdf-syntax-ns#
首碼 rdfs:, 命名空間 URI: http://www.w3.org/2000/01/rdf-schema#
首碼 dc:, 命名空間 URI: http://purl.org/dc/elements/1.1/
首碼 owl:, 命名空間 URI: http://www.w3.org/2002/07/owl#
首碼 ex:, 命名空間 URI: http://www.example.org/ (or http://www.example.com/)
首碼 xsd:, 命名空間 URI: http://www.w3.org/2001/XMLSchema#

顯然,"example"的首碼 "ex:"的變形在需要時也會用在示例中,例如:

 首碼 exterms:, 命名空間 URI: http://www.example.org/terms/ (作為示例的組織中的辭彙),
首碼 exstaff:, 命名空間 URI: http://www.example.org/staffid/ (作為示例的組織中的雇員標識),
首碼 ex2:, 命名空間 URI: http://www.domain2.example.org/ (作為示例的第二個組織中的辭彙), and so on.

用這種簡寫法,先前的三元組可以寫成:

 ex:index.html  dc:creator             exstaff:85740 .
ex:index.html exterms:creation-date "August 16, 1999" .
ex:index.html dc:language "en" .

因為RDF用URIref替代詞語來命名陳述中的事物,RDF稱一個URIref的集合(特別是為了某個目的集合)為辭彙表(vocabulary)。通常,這些辭彙表中的URIrefs被組織為一個有相同首碼的QName的集合。也就是說,一個辭彙表中的所有術語都有一個相同的命名空間URIref,通常這個URIref(無論是誰控制)定義了這個辭彙表。 包含在辭彙表裏的URIrefs是通過在公用的URIref的末端加上局部名稱形成的,這樣就構成了一套有著公用首碼的URIrefs。譬如:正像前面的例子展示的那樣,一個組織,比方說是example.org,可能定義一個由首碼全部為http://www.example.org/terms/ 的URIrefs構成的辭彙表,用來表示這個組織在業務中用到的術語(例如:"創建日期","產品"等),同時也會定義一個全部由http://www.example.org/staffid/ 開頭的URIrefs辭彙表來標識這個組織的雇員。RDF用相同的方法來定義它自己的術語的辭彙表,這些術語在在RDF中有著特定的含義。RDF 辭彙表中的 URIrefs 都以 "http://www.w3.org/1999/02/22-rdf-syntax-ns# "開頭,通常情況下,其QName用首碼"rdf:"來表示。RDF辭彙描述語言(將會在 第五節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfschema)做闡述)定義了另一套都以http://www.w3.org/2000/01/rdf-schema# 開頭的URIrefs的術語集合,其QName用首碼"rdfs:"來表示。(當一個特定的QName首碼以這種方式與一個已給定的術語集相關聯的時候,那麼這個QName首碼有時會用以作為這個辭彙表的名稱,比如,有人可能說"rdfs: 辭彙")。

使用公用的URI首碼提供了一種便捷的方法來組織一套相關的術語集URIrefs,然而,這僅僅只是一種約定。RDF模型只認可完整的URIrefs;它不會去看URIrefs的具體內容或使用任何關於它們結構的知識。特別地,RDF不會僅僅因為URIrefs有一個公用的首碼而認定這些URIrefs之間有聯繫(更深入的探討請看附錄A (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#identifiers) )。當 URIrefs 帶有不同的首碼時,並沒有規定說,這些URIrefs就不能被認為屬於同一個辭彙表。 某個特定的組織、過程(process)或者工具等可以根據自己的需要,來定義辭彙。這些辭彙的 URIrefs可以來自於任何其他的辭彙,數目不受限制。

另外,有時一個組織將使用辭彙表的URIref命名空間用作是提供關於該辭彙表的詳細資料這種Web資源所在地的URL。例如:像著名的QName首碼dc: 將會在本文檔的例子中用到,它是和命名空間URIref http://purl.org/dc/elements/1.1/ 相關聯的。事實上,這指在6.1節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#dublincore)闡述的都柏林核心辭彙表。通過在網頁流覽器中訪問這個URIref命名空間就能獲得關於都柏林核心辭彙表(明確地說,是一個RDF Schema)的其他一些資訊。然而,這也僅僅只是一種約定。RDF不會認為每個URI命名空間都能確定一個可獲取的Web資源(更深入的探討請看附錄B (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#documents) )。

在這個入門文檔的其餘部分裏,當涉及到一些為特殊目而定義的一套URIref,比如供RDF自身的使用而定義的各種URIref ,或者是example.org定義的用來標識它雇員的一套URIref,時都將會用到術語"辭彙表"。術語"命名空間"只是在特指XML命名空間這個語法概念的時候才會使用(或者用來描述 QName中的URI首碼)。

在RDF圖中可以自由混合來自不同辭彙表的URIrefs。譬如:在圖 3 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure3) 中用到了分別採用了exterms:,exstaff:,dc:辭彙表的URIref。在RDF圖中,RDF也沒有限制能用多少個具有同一謂詞URIref的陳述描述同一個資源。例如:如果資源ex:index.html是由約翰·史密斯和其他幾名工作人員努力合作創造的話,那麼example.org可能寫以下陳述:

 ex:index.html dc:creator exstaff:85740 .
ex:index.html dc:creator exstaff:27354 .
ex:index.html dc:creator exstaff:00816 .

這些RDF陳述的例子開始展現一些使用URIref作為RDF標識事物的基本方式的優勢所在。譬如:在第一個陳述中,不用字串"John Smith"來作為網頁的製作者,而是把一個URIref(使用基於他的雇員號碼的URIref)http://www.example.org/staffid/85740賦予給他。這樣使用URIref的一個優點就是陳述主體可以被更加精確的標識出來。就是說,這個網頁的製作者不是字串"John Smith",也不是數以千計的名叫John Smith的人中的一個,而是與那個URIref(且不管是誰創建了定義了這種關係的URIref)相關的那個特殊的John Smith。而且,因為一個指向John Smith的URIref,他就成為一個成熟的資源,並且僅僅通過增加其他主體為John的 URIref的RDF陳述,就可以記錄他的一些其他資訊。例如:圖 4 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure4)展示了可給出關於John的姓名和年齡的一些陳述。

fig4dec16.png

圖4:更多關於John Smith的資訊

這些例子也說明了RDF在RDF陳述中用URIref作為謂詞。就是說,RDF使用URIrefs標識屬性,而不是使用像"creator"或者"name"那樣的字串(或片語)。用URIref來標識屬性的重要性是基於很多原因的。第一,它可以把一個人用的屬性和其他人用的屬性區別開來,儘管他們可能用相同的字串來表示屬性。例如:在圖4 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure4)中的例子,example.org使用"name"想要使寫出的某人的全名作為一個字串文字(譬如:"John Smith"),但是其他人可能想要使"name"代表某些不同的事物(譬如:在一個程式段中的變數名)。當一段程式遇到"name"作為一個Web上的屬性識別字(或者當合併來自多個資料源的資料)時將不一定能區分這些使用方法。但是,如果example.org用"http://www.example.org/terms/name"當作它定義的"name"的值,並且其他人用"http://www.domain2.example.org/genealogy/terms/name"當作他們定義的"name"的值,那麼顯然不同的"name"包含著不同的值(即使一個程式不能自動確定它們的具體含義)。此外,使用URIrefs來區分屬性能使屬性被看成是資源本身。因為屬性也是資源,僅僅通過增加主體為屬性的URIref的RDF陳述,就能記錄關於屬性的資訊(譬如:example.org 所用的"name"屬性的含義的英文描述)。

用URIref作為RDF陳述的主體,謂詞,客體支持了Web上的共用辭彙表的使用和發展,因為人們可以發現並開始使用已經在用的辭彙表來描述事物,這反映了人們對那些概念的共用理解。例如:在三元組"ex:index.html dc:creator exstaff:85740 "中:

 ex:index.html   dc:creator   exstaff:85740 .

當謂詞"dc:crearot"完全展開為一個URIref時,就明確的指向了Dublin Core元資料屬性集(一個廣泛使用的描述各種各樣資訊的一套屬性集,將在6.1節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#dublincore)中做深入的討論)中的"creator"的屬性。這個三元組的作者有效地說明了網頁(由http://www.example.org/index.html 所標識)和網頁的作者(一個獨一無二的人,由http://www.example.org/staffid/85740 所標識)之間的關係正是一個由http://purl.org/dc/elements/1.1/creator 標識的概念。另一個熟悉Dublin Core辭彙的人,或是查明了"dc:creator"確切含義(通過在Web上查找的它的定義)的人,將會明白這個關係的含義。另外,在這種理解的基礎上,在處理含有謂詞"dc:creator"的三元組時,人們就能編寫出行為與這個含義一致的程式來。

當然,這有賴於越來越普遍地使用URIref而不是用文字來指代事物;譬如:用URIref像"exstaff:85740"和"dc:creator"來代替字串文字像"John Smith"和"creator"。即使是那樣,RDF對URIre的使用仍不能解決所有的標識問題,因為例如:人們仍然能夠用不同的URIref來指代同一個事物。由於這個原因,儘量使用現有的辭彙表(比如Dublin Core)的術語,而不發明可能與其他辭彙表中術語重複的術語,這是個不錯的想法。 正如在第6節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#applications)描述的應用展示的那樣,在特定領域裏適用的辭彙表一直都在完善中。然而,即使同義詞被建立了,在普遍可訪問的"Web 空間"中使用不同的URIref,即提供了在這些URIref中識別等價關係的機遇,也提供了轉向使用通用辭彙表的機遇。

另外,重要的是,要區分RDF本身賦予RDF陳述中的辭彙(比如在先前例子裏的dc:creator)的含義與人們(或人編寫的程式)可能賦予這些辭彙的其他外部定義的含義。作為一門語言,RDF直接定義的只有主體,謂詞,客體三元組的圖示語法,在rdf:辭彙表中的URIrefs的某些含義,和稍後會做介紹的某些其他概念。這些事物在[RDF-CONCEPTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)]和[RDF-SEMANTICS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-semantics)]有規範的定義。不過,RDF沒有定義在RDF陳述中使用的其他辭彙表中的術語的含義,比如:dc:creator。特定的辭彙表會被創建且其中的URIref會被賦予特定的含義,但這是在RDF之外的。使用了這些辭彙表中的URIref的RDF陳述可能會把那些術語的特定含義傳達給熟悉這些辭彙表的人,或是處理這些辭彙表的RDF應用程式,而不會把這些含義傳達給不是特意處理這些辭彙表的通用RDF應用程式。

例如,人們可以給一個三元組如:

ex:index.html dc:creator exstaff:85740 .

賦予一定的含義,這是基於單詞"creator"作為URIref"dc:creator"的一部分出現所表示的含義,或者基於在他們理解了"dc:creator"在Dublin Core辭彙表中的確切定義。 不過,就通用的RDF應用程式而言,這個三元組和下面的三元組在內在的含義上是一樣的:

 fy:joefy.iunm  ed:dsfbups  fytubgg:85740 .

與此類似,任何可能在Web上找到的描述"dc:creator"含義的自然語言文本都無法為一個通用的RDF應用程式提供其直接可用的額外的含義資訊。

當然,來自一個特定辭彙表的URIrefs可以在RDF陳述中被使用,儘管給定的應用程式可能不能把任何特定的含義賦予他們。例如,通用的RDF軟體會識別出上述運算式是一個RDF陳述,其中"ed:dsfbups"是一個謂詞,等等。它不會把辭彙表開發人員賦予給一個URIref(比如 ed:dsfbups)的任何特定含義賦給這個三元組。此外,基於他們對一個給定的辭彙表的理解,人們仍可以編寫出一個與這個辭彙表中的URIref的特定含義一致的RDF應用程式,儘管這個含義對不是以這種方式編寫的RDF應用程式是無法理解的。

結果是:RDF提供了一種發表更易被應用程式處理的陳述的方法。一個應用不能真正理解這些陳述,就如當一個資料庫系統處理一個查詢語句如:SELECT NAME FROM EMPLOYEE WHERE SLALRY > 35000 的時候,資料庫系統對像"employee"或"salary"這類的辭彙的理解一樣。但是, 如果一個應用程式編寫的很合理,那麼它處理RDF陳述時就好像它確實理解它們一樣,這正像是一個資料庫系統和它的程式並沒有理解什麼是"employee"和"payroll"卻能在處理雇員和薪水的資料資訊時做有用的工作一樣。例如:一個人能搜尋Web找到全部書評並且為每本書創建一個平均等級。 然後,這個人就可以把這些關於書的資訊放到Web上。 而另一網站能獲取這些書平均等級的列表並且創造一個"評價最高的十本書"頁面。 這裏,一個關於書等級的共用辭彙表的可用性和及其使用,以及用於標識那些書的一組共用的URIref,允許個人建造一個在Web上可相互理解和用處日益廣泛(或說是做了其他貢獻那樣)的關於書的"資訊庫"。相同的原則適用於人們每天在Web上創建的關於數以千計的主題的大量資訊。

RDF陳述和很多其他資訊記錄格式類似,像:

  • 在一個資料處理系統裏,一個簡單的記錄或是目錄清單中的實體,
  • 一個簡單的關聯資料庫的行,
  • 形式邏輯的簡單斷言,

並且,這些格式的資訊都能看成RDF陳述,這使得RDF能用於集成來自多個資料源的資料。

2.3 結構化的屬性值與空節點

需要記錄的資訊,如果用簡單的RDF語句的形式來描述就足夠了,那麼,一切都將變得很簡單,但是,大多數現實世界中的資料,至少表面看起來,要比簡單的RDF語句所能描述的形式複雜得多。例如,在最初的那個例子中,用來記錄創建網頁的是一個簡單的資料:creation-date屬性,這個屬性的值是簡單的字元型,但是,假設這個creation-date屬性的值需要分別記錄年、月、日,或者,在描述John Smith的個人資訊的情況下,我們來考慮John的位址,整個的位址可以被寫作一個簡單的字串,或者一個三元組"1501 Grant Avenue, Bedford, Massachusetts 01730"。

 exstaff:85740   exterms:address   "1501 Grant Avenue, Bedford, Massachusetts 01730" .

然而,設想一下約翰的位址需要記錄為由一個街道,城市,州和郵遞區號組成的結構,這些在RDF中是如何做到的?

像這樣的結構化的資料資訊在RDF中是通過以下方式描述的:把被描述的事物聚集體(比如:John Smith的住址)看成一個資源,然後發表關於這個新資源的陳述。所以,在RDF圖中,為了將John Smith住址分解成它的各個組成部分,一個用來描述John Smith住址這一概念的新節點就隨之產生了,並用一個新的URIref來標識,如http://www.example.org/addressid/85740 (可縮寫為exaddressid:85740)。把這個節點作為主體,RDF陳述(附加的弧和節點)可用來描述附加的資訊,如圖5 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure5)所示:

fig5may19.png 圖5:分解John的住址:

相應的三元組表示如下:

 exstaff:85740       exterms:address        exaddressid:85740 .
exaddressid:85740 exterms:street "1501 Grant Avenue" .
exaddressid:85740 exterms:city "Bedford" .
exaddressid:85740 exterms:state "Massachusetts" .
exaddressid:85740 exterms:postalCode "01730" .

這中描述RDF結構化資料的方法會產生很多的"中間的"URIrefs,比如像描述聚集體概念(如John's address)的URIref exaddressid:85740。這些概念可能從來不會被從RDF圖的外部引用,因此可能不需要"通用的"識別字。另外,在用於描述一組陳述的圖 圖5 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure5)中,用來標識"John Smith's address"的URIref並不是真正需要的,因為這個圖可以簡單地標識為如圖6 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure6)所示:

fig6may19.png

圖6:使用一個空節點

圖6 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure6)是一個近乎完美的RDF圖,它使用了一個沒有URIref的節點來表示"John Smith's address"這一概念。這個空節點 (http://www.w3.org/TR/rdf-concepts/#dfn-blank-node)雖然沒有URIref,但表達了它應該表達的含義,因為這個空節點本身提供了圖中各個部分之間必需的連通作用(空節點在[RDF-MS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdfms)]中被稱作匿名資源(anonymous resources))。然而,為了把這個圖表示為三元組的形式,就需要一個某種形式的能清楚表示那個空節點的識別字。這裏試著寫出了與圖6 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure6) 所示的內容相應的三元組:

 exstaff:85740   exterms:address         ??? .
??? exterms:street "1501 Grant Avenue" .
??? exterms:city "Bedford" .
??? exterms:state "Massachusetts" .
??? exterms:postalCode "01730" .

"???"出現的地方正是出空節點出現過的地方。因為一個複雜的圖包含的空節點可能會不只一個,所以需要一種區分在圖的三元組表示法中出現的不同空節點的辦法。因此,三元組使用空節點識別字 (http://www.w3.org/TR/rdf-concepts/#dfn-blank-node-id),以"_:name"的形式來表示空節點。例如:在這個例子中,空節點識別字"_:johnaddress"可以用來表示空節點,那麼相應的三元組可以寫成如下的形式:

 exstaff:85740   exterms:address         _:johnaddress .
_:johnaddress exterms:street "1501 Grant Avenue" .
_:johnaddress exterms:city "Bedford" .
_:johnaddress exterms:state "Massachusetts" .
_:johnaddress exterms:postalCode "01730" .

在表示一個圖的三元組中,圖中每個不同的空節點都被賦予一個不同的空節點識別字。與URIref和文字不一樣,空節點識別字並不被認為是RDF圖的一個實際組成部分(這從圖6 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure6)所示的就可以看出來,並且注意在圖中空節點並沒有空節點識別字)。空節點識別字僅僅是在把RDF圖表示成三元組形式的時候,用來表示圖中的空節點的(並且區分不同的空節點)。空節點識別字只是在用三元組表示單一的圖的時候才有意義(兩個有相同空節點數目的RDF圖可能會獨自地使用相同的空節點識別字來區別那些空節點,但是如果假設不同RDF圖中具有相同識別字的空節點是相同的就不對了)。如果希望圖中的一個節點需要從圖的外部來引用,那麼就應該賦予一個URIref值來標識它。最後,因為空節點識別字表示的是(空)節點而非弧,所以在一個圖的三元組運算式中:空節點識別字只能出現在三元組主體和客體的位置上;不能出現在謂詞的位置上。

這一節的開頭部分記錄了聚集體結構(比如John Smith's address)可以通過如下的方式來描述:聚集體被作為一種資源描述,然後發表關於這個新資源的陳述。這個例子闡明了RDF的一個重要方面:RDF只能直接表示二元關係,例如:John Smith和描述他住址的文字(literal)之間的關係。要描述John和由這個位址的每個單獨部分組成的組的關係的時候,就要涉及到處理一個N元(n-ary)關係(在這裏N=5),其中這五元分別是John,街區(street),城市(city),州(state),和郵遞區號(postal code)。為了要在RDF中直接的描述這種結構(例如:把地址看作是由街區(street),城市(city),州(state),和郵遞區號(postal code)這四個部分構成的一個組),就必須把這個N元關係分解為一組二元關係。空節點提供了一種完成這個任務的方法:對於每一個N元關係,選擇其中的一元( participant)作為這個關係的主體(比如John),創建一個空節點來描述其餘的關係(比如John's address),這個N元關係的其他元(比如city)則被描述成由空節點標識的新資源的各個單獨的屬性。

有些資源可能沒有URI,空節點也同樣提供了一種更準確的發表關於這些資源的陳述的方法,但這是通過和那些有URI的資源的關係來描述的。例如:當發表一個關於某人(比如Jane Smith)的陳述的時候,可能會很自然的想到要用基於這人的email位址的URI作為她的URI(mailto:jane@example.org ),但是,這種方法可能會導致一些問題。如果需要同時記錄關於Jane(比如她目前的實際住址)和她的郵箱(比如,它所在的伺服器)兩者的資訊,那麼,還用基於她郵箱位址的URI作為她的URIref的話,就會很難區分表述的到底是Jane還是她的郵箱。同樣的問題也會出現在下面這種情況:當一個公司用它公司的網頁URL(比如:http://www.example.com/)作為自己的URI的時候。同樣地,當需要同時記錄關於網頁(比如:是誰於何時創建的)和這個公司兩者的資訊時,如果還用"http://www.example.com/"作為兩者的識別字,就會導致很難區分誰是真正意義上的主體。

這些問題出現的根本原因就是:用Jane的郵箱來代表Jane是不正確的,因為Jane和她的郵箱根本就是兩碼事,因此她和它應該區別對待。當Jane自己沒有URI時,空節點提供了一條為這種情形更正確的建模方法:Jane可以由一個空節點表示,並且用這個以"exterms:mailbox"為屬性的空節點作為陳述的主體,且用URIref"mailto:jane@example.org" 作為它的這個屬性的值。這個空節點也可以用以"exterms:Person"為值的一個"rdf:type"屬性來表述(類型(type)將在以後章節做更詳細的討論),或者是其他有用的描述性資訊,正如下列三元組所示的:

 _:jane   exterms:mailbox   <mailto:jane@example.org&gt; .
_:jane rdf:type exterms:Person .
_:jane exterms:name "Jane Smith" .
_:jane exterms:empID "23748" .
_:jane exterms:age "26" .

(注意在第一個三元組中" mailto:jane@example.org"寫在兩個尖括弧裏面,這是因為"mailto:jane@example.org" 在mailto URI模式中是個完整的URIref,而不是一個QName縮寫,在三元組表示法裏一個完整的URIref必需寫在一對尖括弧內。)

這些三元組準確地說明了:"有一個資源,其類型為exterms:Person,其電子郵箱是由"mailto:jane@example.org" 來標識的,其名字是Jane Smith,等等"。就是說,空節點可以讀作"有一個資源"。以這個空節點作主體的陳述就提供關於這個資源特性方面的資訊。

實際上,在這些情況下用空節點替代URIref並不會在資訊處理方面帶來太多改變。例如:人們知道一個email位址唯一確定在example.org裏的某人(特別地,如果這個位址不能被重用的話),那麼,這個email位址會被用來聚集來自多個資料源的關於這個人的資訊。儘管這個email地址不是這人的URI。在這種情況下,如果在Web上找到了一些描述一本書的RDF,並且給出了作者的聯繫資料如 mailto:jane@example.org,那麼把這條新資訊和先前的一套三元組結合起來,然後推斷作者的名字是Jane Smith,這樣做就可能是合理的。這種說法的關鍵有點像"這書的作者是 mailto:jane@example.org"是"這書的作者是郵箱是mailto:jane@example.org的某人"的一種典型的縮寫一樣。用一個空節點來表示這個"某人"是一種更準確地來表示真實世界的方法。(順便說一下,一些基於RDF的模式語言特別指出允許某些屬性可以作為它們描述的資源的"唯一識別字"。這些將在5.5節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#richerschemas)做更深入的探討。)

這種使用空節點的方法也可以幫助人們避免文字(literals)在可能不適當情況下的使用.例如:當描述Jane的書而又缺少一個識別作者的URIref時,出版商就可能這樣寫(使用出版商自己的ex2terms:辭彙表):

 ex2terms:book78354   rdf:type          ex2terms:Book .
ex2terms:book78354 ex2terms:author "Jane Smith" .

但是,書的作者卻不是字串"Jane Smith",而是一個名叫Jane Smith的人。於是,當出版商用一個空節點時相同的資訊就可能會被更準確的表達出來:

 ex2terms:book78354   rdf:type          ex2terms:Book .
ex2terms:book78354 ex2terms:author _:author78354 .
_:author78354 rdf:type ex2terms:Person .
_:author78354 ex2terms:name "Jane Smith" .

這實質上說,"ex2terms:book78354"的類型是"ex2terms:book",並且它的作者是類型為"ex2terms:Person"的一個資源,作者的名字是"Jane Smith"。當然,在這個特例中,出版者為了要鼓勵對作者的外部引用,可能對作者指派他自己的URIrefs而不是使用空節點識別他們。

最後,上面的例子給出了Jane的年齡是26說明了這麼一件事實就是:有時一個屬性的值可能表面上看來很簡單,但實際上可能會更複雜。在這種情況,Jane的年齡實際上是26歲,但是單位量(歲)沒有明確給出。當確信某個訪問文本中屬性值的人由此能推定所使用的單位量時類似的單位量經常被省略。但是,在Web上無際的文本海洋裏,這樣的"確信"通常是不可靠的,例如:一個美國位址也許給定一個重量單位--磅,但是某個從外部訪問這個資料的人可能會推想給定的單位是千克。總的來說,對於單位或是類似的資訊應該經過縝密的考慮然後進行明確的表述。這個問題將會在4.4節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfvalue)做更深入的探討,在這節中將會講述能把這樣的資訊表述成構造值(structured values)是RDF特色之一,同時也會涉及到另外一些用於表述這類資訊的技術。


2.4 類型文字

上一節講述了怎樣處理如下這種情況:用平凡文字表示的屬性值分解為能表示那些文字每個單獨部分的構造值。例如:如果要記錄一個網頁的創建日期的話,這種方法用一個專門的平凡文字作為它的值,這個值會以一個由年,月,日組成的結構體作為資料的各個部分,並分別用平凡文字來表示相應的值,就取代了通過創建一個單獨exterms:creation-date屬性來記錄一個網頁創建日期的方法。但是,到目前為止,所有可以在RDF中作為客體的常量值都用這些平凡(非類型)文字表示,甚至當意圖是用數位(例如一個年份屬性或是年齡屬性的值)或者其他更特殊的值當作屬性值時。

例如,如圖4 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure4) 所示的一個記錄關於John Smith資料的RDF圖,這個圖中記錄的John Smith的屬性"exterms:age"值為平凡文字"27",正如圖7 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure7)所示的那樣:

fig7dec16.png

圖7:表示John Smith的年齡

在這個例子中,假設的組織example.org可能想要用一個數字來表示"27",而不是用由"2"和後面的"7"組成的字串來表示(因為文字表示了一個屬性"age"的值)。但是,圖7並沒有明確指出"27"應當被解釋成一個數字。同樣地,example.org可能也想把"27"表示成一個十進位數字(比如,一個值為二十七的十進位數字),而不是表示成一個八進位數(比如,一個值為二十三的八進位數)。然而,同樣地,圖7也沒有明確指出這些資訊。一些特殊的應用程式可能會在編碼時把屬性exterms:age的值解釋成十進位數字,但這意味著對這個RDF的正確解釋會依賴RDF圖中沒有明確提供的資訊,因而還依賴一些其他需要解釋這個RDF的應用程式不一定能獲取的資訊。

在程式設計語言和資料庫系統裏通常都會提供一個關於如何解釋文字的附加資訊:即給文字關聯一個資料類型,比如在這個例子裏,資料類型是小數或者是整數。一個能理解資料類型的應用程式就會知道,比如,把文字"10"表示成數位十,還是數位二,還是由字元"1"和後面的字元"0"組成的一個字串,取決於指定的資料類型是整數,二進位數字,還是字串。(雖然這本入門文檔不會詳細說明關於資料類型的概念,但在2.3節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#structuredproperties)的結尾處已經提到過更多可以用來包含單位資訊的專門的資料類型,比如:一個為intergerYears資料類型。)在RDF中,類型文字 (http://www.w3.org/TR/rdf-concepts/#dfn-typed-literal) 是用來提供這類資訊的。

一個RDF類型文字是通過把一個字串與一個能確定一個特殊資料類型的URIref配對形成的。結果在RDF圖中的一個文字節點就是這個配對。類型文字表示的值就是把指定的字串賦值給指定的資料類型的值。例如,使用一個類型文字,John Smith的年齡將會被表述成在三元組中使用的整數27:

 <http://www.example.org/staffid/85740&gt;  <http://www.example.org/terms/age&gt; "27"^^<http://www.w3.org/2001/XMLSchema#integer&gt; .

或者,使用QName來簡化URI則可寫成:

 exstaff:85740  exterms:age  "27"^^xsd:integer .

或者,如圖8所示的:

fig8jul23.png

圖8:一個表示John Smith年齡的類型文字

同樣地,如圖3 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure3)所示它表述了關於一個網頁的資訊資料,網頁的 exterms:creation-date屬性值寫成了平凡文字"August 16,1999"。然而,如果使用一個類型文字,那麼這個網頁的創建日期就可以明確的表述成1999年8月16號(August 16, 1999),用三元組表示就是:

 ex:index.html  exterms:creation-date  "1999-08-16"^^xsd:date .

或正如圖9 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure9)所示的那樣:

fig9jul23.png

圖9:一個表示一個網頁創建日期的類型文字

不像典型的程式設計語言和資料庫系統那樣,RDF沒有自己的內置資料類型,比如,整型,實型,字元型,或者日期類型。但是,RDF類型文字為一個已給定的文字提供了一種簡單的方法來指出應該用什麼樣的資料類型來說明它。在類型文字中使用的類型在外部定義,並且由它們的資料類型URI (http://www.w3.org/TR/rdf-concepts/#dfn-datatype-URI)來確定。(有一個例外,RDF用URIref"rdf:XMLLiteral"定義了一個內置資料類型用來把XML內容表示成一個文字值。這個資料類型定義在[RDF-CONCEPTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)],並在4.5節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#xmlliterals)講述的它的使用方法。)例如:圖8 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure8)圖9 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure9) 的例子都使用了整數的資料類型和來自XML資料類型的資料,其中,在XML模型的第二部分:資料類型 (http://www.w3.org/TR/xmlschema-2/) [XML-SCHEMA2 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xmlschema2)]中定義了XML資料類型。用這種方法的優點之一便是它賦予了RDF直接表述資訊的機動靈活性,因為在表述那些來自不同資訊源的資訊時無需進行資訊源和RDF本身的資料類型集之間的轉換。(當在不同的資料類型集系統之間移動資訊時,還是要進行類型轉換的,但當資訊在RDF中移入或移出時,RDF無需額外的資料類型轉換。)

正如在RDF概念(RDF Concepts)和抽象語法(Abstract Syntax) (http://www.w3.org/TR/rdf-concepts/)[RDF-CONCEPTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)]中敍述的那樣,RDF資料類型概念是基於XML資料類型[XML-SCHEMA2 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xmlschema2)]的概念框架上的,這種概念框架定義了包含以下部分的資料類型:

  • 一個要用資料類型文字表示的值的集合,被稱作值空間(value space)。例如,XML模型資料類型xsd:date的值空間就是日期的集合。
  • 一個資料類型用來表示它的值的字串的集合,被稱作是詞法空間(lexical space)。詞法空間決定了哪一種字串能夠合乎規則地被用來表示這種資料類型的文字。例如:資料類型xsd:date定義了"1999-08-16"是書寫這種類型文字的一種合乎規則的方法(相反的如果寫成"August 16,1999"則可認為是不合乎規則的)。正如在[RDF-CONCEPTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)]中定義的,一種資料類型的詞法空間是一個雙位元組字元[UNICODE (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-unicode)]串集,它允許直接表示來自很多語言的資訊。
  • 一個從詞空間到值空間的"詞-值(lexical-to-value)映射".這決定了這樣的一個字串的值:一個為表示這種特殊資料類型的取自詞法空間裏的一個特定的字串。例如:一個映射到資料類型xsd:date的詞-值映射,決定了對於這種資料類型,字串"1999-08-16"表示日期"August 16, 1999"。詞-值映射是個重要因素因為相同的字串可能為不同資料類型表示不同的值。

並不是所有資料類型都適和在RDF中使用。一種適和在RDF中使用的資料類型必須符合上述的概念框架。主要意思就是:對於一個特定的字串,資料類型必須明確地說明這個字串是否在它的詞法空間內,以及這個字串在它的值空間裏所表示的值。例如:基本的XML資料類型(比方說是xsd:string,xsd:boolean,xsd:date等等)就適合用在RDF當中。然而,一些XML內建資料類型就不適合用在RDF當中。例如:xsd:duration沒有一個良式定義(well-defined)的值空間,並且xsd:QName需要一個封裝的XML文本文檔。到目前為止所認為適合和不適合用在RDF中的XML資料類型的清單已經在[RDF-SEMANTICS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-semantics)]中給出了。

因為一個特定類型文字表示的值是由類型文字的資料類型決定的,且RDF沒有定義任一種資料類型(rdf:XMLLiteral是例外),對一個出現在RDF圖中的類型文字的實際解釋(例如:決定它所表示的值)必須由那些編寫成能正確處理RDF和類型文字的資料類型的軟體完成。也就是說,這種軟體必須能處理一種RDF的擴展語言,即把RDF和資料類型都作為其內置辭彙表的一部分。這使得關於哪種將會在RDF軟體中普遍用到的資料類型的爭論日益激烈。通常,那些在[RDF-SEMANTICS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-semantics)]羅列出的適合在RDF中使用的XML模型資料類型在RDF中有著"首屈一指"的地位。正如已注明的,圖8 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure8)圖9 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure9) 的例子使用了XML資料類型中的一些資料類型,並且這本入門書也將在類型文字的其他例子中使用這些資料類型(另外,XML資料類型已經被賦值為用來查閱它們的URIref了,這一點在[XML-SCHEMA2 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xmlschema2)]有詳細的說明)。比較起其他的資料類型來這些XML資料類型並沒受到區別對待,但人們期望它們能被廣泛的應用,因此它們最有可能被不同的軟體共同使用。然而,RDF也應該能處理其他的資料類型集,因為正如已經闡述的,它們也是適合使用在RDF中的。

通常,RDF軟體可能被要求處理一些包含引用了軟體不能處理的資料類型 的RDF資料,這樣就有些事情軟體是無法做到的。一個原因是,除了·rdf:XMLLiteral外,RDF本身不能定義標識資料類型的URIref。因此,除非RDF軟體理解特定的URIref,否則將不能決定一個類型文字中的URIref是否實際上標識了一個資料類型。此外,即使一個URIref確實標識了一個資料類型,RDF自身也無法定義這個資料類型和一個特定文字配對的合法性。只有那些能夠正確理解這種資料類型的軟體才能判斷這種合法性。

例如,在如下三元組中的類型文字:

 exstaff:85740  exterms:age  "pumpkin"^^xsd:integer .

或如圖10 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure10)所示的那樣:

fig10jul23.png

圖10:一個用作John Smith的年齡的非法類型文字

是有效的RDF,但是很明顯,一個錯誤與資料類型xsd:integer有關,因為"pumpkin"沒有在xsd:integer的詞法空間裏定義。不能處理資料類型xsd:integer的RDF軟體將不會發現這個錯誤。

然而,適當地使用RDF類型文字可以提供更多關於文字值的解釋方面的資訊,並因此使得RDF陳述成為一種更好的在應用程式中交換資訊的方式。


2.5 總結

綜上所述,基本上說,RDF是比較簡單的:由節點和弧構成的圖解釋說明了有關被URIref識別事物的陳述。在這一部分已經介紹了這些概念。如早先注明的,描述這些概念標準的(即權威的)RDF規範是RDF概念(RDF Concepts)和抽象語法(Abstract Syntax) (http://www.w3.org/TR/rdf-concepts/) [RDF-CONCEPTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)],如果做更深入的研究就應當參考它們。在(標準的)RDF語義學 (http://www.w3.org/TR/rdf-mt/) (RDF Semantics)[RDF-SEMANTICS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-semantics)] 文檔中詳細說明了這些概念的形式語義。

然而,描述事物除了用目前為止所討論的RDF陳述的基本技術之外,人們或組織也需要一種能夠描述他們想要用在那些陳述中的辭彙表(術語(term))的方法,顯然,如下列的這些辭彙表:

  • 描述事物類型的辭彙表(比如:exterms:Person)
  • 描述事物屬性的辭彙表(比如:exterms:age和exterms:creation-date)
  • 和牽涉到那些屬性並可以作為陳述中的主體和客體的事物的類型的辭彙表(比如:通常用xsd:integer辭彙表來確定屬性"exterms:age"的值)。

在RDF中描述這類辭彙表是依據RDF Vocabulary Description Language 1.0: RDF Schema (http://www.w3.org/TR/rdf-schema/) ] [RDF-VOCABULARY (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-vocabulary)],這將在第5節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfschema)做介紹。

另外,RDF基本思想的背景知識和它在提供一種能描述Web上資訊的語言中扮演的角色,這一點可以在[WEBDATA (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-webdata)]中找到。RDF從知識表示,人工智慧和資料管理領域中借鑒了一些思想,具體包括:概念圖(Conceptual Graphs),基於邏輯的知識表示(logic-based knowledge representation),框架(frames),關聯資料庫(relational databases)。關於這些學科的背景知識可能的資料來源包括:[SOWA (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-sowa)],[CG (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-cg)],[KIF (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-kif)],[HAYES (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-hayes)],[LUGER (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-luger)], and [GRAY (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-gray)]。


3. 表示RDF的XML語法: RDF/XML

如第2部分所描述的,RDF的概念模型是一張圖(graph)。RDF提供了一種被稱為RDF/XML的XML語法來書寫和交換RDF圖。與RDF的簡略記法--三元組(triples)不同,RDF/XML是書寫RDF的規範性語法(normative syntax)。RDF/XML定義於RDF/XML語法規範 (http://www.w3.org/TR/rdf-syntax-grammar/)[RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]。本節描述RDF/XML的語法。

3.1 基本原理

RDF/XML語法的基本思想可以通過前面的一些例子來說明。以下麵這句英文為例:

 http://www.example.org/index.html has a creation-date whose value is August 16, 1999

上面這個陳述可以用RDF圖來表示(其中的creation-date屬性已指定了URIref),如圖11 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure11)所示:

fig11dec16.png

圖11: 描述一個網頁的創建日期(Creation Date)

用三元組表示就是:

 ex:index.html   exterms:creation-date   "August 16, 1999" .

(注意:在這個例子中沒有用類型文字(typed literal)作為日期的值。類型文字在RDF/XML中的表示將在後面描述)

例2 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example2) 顯示了圖11 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure11)所對應的RDF/XML語法:

例2:描述網頁創建日期的RDF/XML

 1. <?xml version="1.0"?>
2. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3. xmlns:exterms="http://www.example.org/terms/">
4. <rdf:Description rdf:about="http://www.example.org/index.html">
5. <exterms:creation-date>August 16, 1999</exterms:creation-date>
6. </rdf:Description>
7. </rdf:RDF>

(加入行號僅僅是為了便於解釋例子,RDF/XML中並不包含行號)

看起來有些摸不著頭腦(a lot of overhead),依次考慮該XML的各個部分將利於理解其作用。(附錄B (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#documents)提供了一個關於XML的簡單介紹)。

第1行是XML聲明(XML declaration):<?xml version="1.0"?>。它表明以下內容將是XML,XML版本號是1.0。

第2行以rdf:RDF元素開始。它表明以下XML內容(從這裏開始,直到第7行的</rdf:RDF>為止)用於表達RDF。同一行緊隨rdf:RDF其後的是XML命名空間聲明(XML namespace declaration),即rdf:RDF首標籤的xmlns屬性。該聲明指明在當前內容中出現的所有首碼為rdf:的標籤都屬於由下列URIref所標識的命名空間:http://www.w3.org/1999/02/22-rdf-syntax-ns#。以http://www.w3.org/1999/02/22-rdf-syntax-ns#打頭的URIrefs用於標識來自RDF辭彙表中的術語。

第3行是另一個XML命名空間聲明(關於首碼exterms:的)。該聲明用rdf:RDF元素的另一個xmlns屬性來表示。它指明首碼exterms:與命名空間URIref http://www.example.org/terms/關聯。以http://www.example.org/terms/開始的URIrefs用於由example組織(example.org)[譯注:example組織為本文檔所舉示例]定義的辭彙表中的術語。第3行末尾的">"符號表明rdf:RDF首標籤的結束。第1至3行是常規的、必備的部分,用以表明當前的內容是RDF/XML,並聲明內容中所使用的命名空間。

第4-6行是Figure 11 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure11)中所示陳述的RDF/XML主要部分。談及RDF陳述時,顯而易見,陳述是一種"description(描述)"。並且,它是一種"about(有關)"陳述主體的描述(在本例中,是有關 http://www.example.org/index.html的描述)。RDF/XML表示陳述的方式正是如此。第4行中rdf:Description的起始標籤表明某個資源描述的開始,然後標識了陳述所"about(針對)"的資源(也就是陳述的主體)。RDF/XML採用了 rdf:about 屬性來指定主體資源的URIref。第5行用QName exterms:creation-date作為標籤,提供了"屬性元素(property element)",來表示謂詞以及陳述的客體。選擇QName exterms:creation-date,可以將本地名稱creation-date 擴展為http://www.example.org/terms/creation-date,這個屬性元素(property element )的內容就是陳述的客體-即平凡文字"August 19, 1999 "(主體資源的creation-date 屬性的值)。屬性元素(property element)在rdf:Description 元素所包含內容中以嵌套的形式存在,意味著該屬性(property )應用於rdf:Description 元素的rdf:about 屬性(attribute)所指定的資源。第6行表明這個rdf:Description 到此結束。

最後,第7行表明從第2行開始的rdf:RDF元素到此結束。在能夠通過上下文確定XML內容為RDF/XML的情況下,可以不用rdf:RDF元素來包括RDF/XML的內容。這在[RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]中將進一步討論。但是,使用rdf:RDF元素在任何情況下均沒有壞處,本文檔中的示例一般都會(但並不總是)使用rdf:RDF元素。

例2 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example2)展示了RDF/XML如何把一個RDF圖編碼為XML元素、屬性、元素內容和屬性值的基本思想。謂詞(以及一些結點)的URIrefs被寫作XML QNames,即包含一個簡短的首碼(prefix)(代表命名空間URI)和一個內部名(local name)(代表命名空間中的元素或屬性)(詳見附錄B (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#documents))。對於一個(命名空間URIref,內部名)對,將命名空間URIref和內部名連接起來將形成結點或謂詞的URIref(像圖11中的那樣)。主體結點(subject nodes)的URIrefs被寫為XML屬性值(客體結點(object nodes)的URIrefs有時也可被寫為屬性值)。文字結點(Literal nodes)(總是客體結點)寫為元素的文本內容或屬性值。(本文檔後面的部分將對這裏的部分寫法作進一步描述;關於所有寫法的描述,請參見[RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]。)

對於包含多個陳述的RDF圖可以用下面RDF/XML方式書寫:用類似於例2 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example2)中第4至6行的方式分別表示RDF圖中的各個陳述。舉例來說,對於下面兩個陳述:

 ex:index.html   exterms:creation-date   "August 16, 1999" .
ex:index.html dc:language "en" .

可以用例3 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example3)中的RDF/XML來表示:

例3: 表達兩條陳述的RDF/XML

 1.  <?xml version="1.0"?>
2. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3. xmlns:dc="http://purl.org/dc/elements/1.1/"
4. xmlns:exterms="http://www.example.org/terms/">
5. <rdf:Description rdf:about="http://www.example.org/index.html">
6. <exterms:creation-date>August 16, 1999</exterms:creation-date>
7. </rdf:Description>
8. <rdf:Description rdf:about="http://www.example.org/index.html">
9. <dc:language>en</dc:language>
10. </rdf:Description>
11. </rdf:RDF>

例3 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example3)例2 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example2)一樣,只是多了一個表達第二條陳述的rdf:Description元素(第8至10行)。(第3行給出了另一個命名空間聲明,以標識在第二條陳述中用到的命名空間)。可以用同樣的方式添加任意多個陳述,只需對每條陳述分別使用一個rdf:Description元素。如例3 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example3)所示,一旦完成了書寫XML和命名空間聲明,RDF/XML中各個RDF陳述的書寫將簡單明瞭。

RDF/XML語法提供了若干種簡略表達形式以便於書寫。比如在例3 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example3)中,用多個屬性和屬性值來描述同一資源,這裏資源ex:index.html同時作為多個陳述的主體(subject)。在這種情況下,RDF/XML允許在標識該主體的rdf:Description元素下嵌入多個屬性元素來表達屬性。比如,要表達下列一組關於資源 http://www.example.org/index.html 的陳述:

 ex:index.html   dc:creator              exstaff:85740 .
ex:index.html exterms:creation-date "August 16, 1999" .
ex:index.html dc:language "en" .

它所對應的RDF圖(和圖3 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure3)相同)如圖12 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure12)所示:

fig3nov19.png

圖12:關於同一資源的多個陳述

例4 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example4)是它所對應的RDF/XML:

例4: 簡略表達多個屬性

 1.  <?xml version="1.0"?>
2. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3. xmlns:dc="http://purl.org/dc/elements/1.1/"
4. xmlns:exterms="http://www.example.org/terms/">
5. <rdf:Description rdf:about="http://www.example.org/index.html">
6. <exterms:creation-date>August 16, 1999</exterms:creation-date>
7. <dc:language>en</dc:language>
8. <dc:creator rdf:resource="http://www.example.org/staffid/85740"/>
9. </rdf:Description>
10. </rdf:RDF>

與前面兩個例子相比,例4 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example4)中多了一個dc:creator屬性元素(在第8行)[譯注//屬性元素(property element)指表示RDF中的屬性(property)的XML元素(XML element)]。另外,三個屬性元素(表達主體http://www.example.org/index.html的三個屬性)都嵌在同一個rdf:Description元素(標識主體http://www.example.org/index.html)裏,而不是為各個陳述單獨寫一個rdf:Description元素。

第8行引入了一種新的屬性元素形式。第7行中的dc:language元素與例2 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example2)中的exterms:creation-date元素類似,他們都是用平凡文字(plain literal)來表示屬性的值,並且都用與屬性名稱(property name)對應的首標籤(start-tag)和尾標籤(end-tag)將上述文字括起來。然而,第8行中的dc:creator元素表示一個屬性值為另一個資源(而不是平凡文字)的屬性。如果把該資源的URIref寫成被括在首標籤和尾標籤中的平凡文字(像前兩個元素那樣),這將表示dc:creator元素的值是字串 http://www.example.org/staffid/85740 ,而不是由該字串代表的URIref所標識的資源。為了表明這一區別,dc:creator元素被寫成空元素標籤(empty-element tag)(即沒有尾標籤)的形式,同時用一個rdf:resource屬性(attribute)來表達屬性的值(property value)。rdf:resource屬性(attribute)表明屬性元素(property element)的值是另一個用URIref標識資源(resource)。由於該URIref要作為屬性(attribute),RDF/XML要求這個URIref必須被寫成絕對URIref或相對URIref的形式,而不能像寫元素(element name)或屬性(attribute name)那樣被簡略為QName(關於絕對URIref和相對URIref,請參見附錄A (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#identifiers))。

例4 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example4)中的RDF/XML是一種簡略形式,理解這一點很重要。例5 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example5)是描述同一個RDF圖(圖12 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure12))的RDF/XML,其中各個陳述被分開書寫:

例5:用分開的陳述書寫例4

 <?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:exterms="http://www.example.org/terms/">
   <rdf:Description rdf:about="http://www.example.org/index.html">
<exterms:creation-date>August 16, 1999</exterms:creation-date>
</rdf:Description>
   <rdf:Description rdf:about="http://www.example.org/index.html">
<dc:language>en</dc:language>
</rdf:Description>
   <rdf:Description rdf:about="http://www.example.org/index.html">
<dc:creator rdf:resource="http://www.example.org/staffid/85740"/>
</rdf:Description>
 </rdf:RDF>

下面部分將描述另外一些RDF/XML簡略形式。[RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]提供了關於所有簡略形式的更全面的描述。

RDF/XML同樣可以表示包含空白結點(blank node)(即沒有URIref的結點,詳見2.3節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#structuredproperties))的圖。比如,圖13 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure13)(取自[RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)])顯示了一個表達下列資訊的圖:"文檔'http://www.w3.org/TR/rdf-syntax-grammar'有一個title(標題)('RDF/XML Syntax Specification (Revised)')和一個editor(編者),而editor的name(姓名)為'Dave Beckett'、home page(主頁)為'http://purl.org/net/dajobe/'"。

fig13dec16.png

圖13:一個包含空白結點的圖

上面的例子展示了2.3節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#structuredproperties)中曾討論過的想法,即用一個空白結點(blank node)來表示某個沒有URIref、但可用其他資訊來描述的事物。在上面的例子中,該空白結點表示一個人,即文檔的editor(編者),這個人是用他的name(姓名)和homepage(主頁)來描述的。

RDF/XML提供了多種方式來表示包含空白結點的圖。[RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]描述了所有這些方式。這裏所描述的方式是其中最直接的一種,即為各個空白結點指定一個空白結點識別字(blank node identifier)。空白結點識別字用於標識某個特定RDF/XML文檔內部的一個空白結點。但是與URIref不同,空白結點識別字在所屬文檔外部是不可識別的[譯注//即僅在它被指定為空白結點識別字的那個文檔內有效]。在RDF/XML中,所有可以出現資源URIref的地方都可以用rdf:nodeID屬性(attribute)來引用空白結點(用一個空白結點識別字作為該屬性的值)。 具體地,一個以空白結點為主體的陳述,在RDF/XML中可以用一個擁有rdf:nodeID(而不是rdf:about)屬性(attribute)的rdf:Description元素來描述。同樣地,一個以空白結點為客體的陳述可以用一個擁有rdf:nodeID(而不是rdf:resource)屬性(attribute)的屬性元素(property element)來描述。例6 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example6)展示了如何用rdf:nodeID來描述圖13 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure13)對應的RDF/XML:

例6:描述空白結點的RDF/XML

 1.  <?xml version="1.0"?>
2. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3. xmlns:dc="http://purl.org/dc/elements/1.1/"
4. xmlns:exterms="http://example.org/stuff/1.0/">
5. <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar">
6. <dc:title>RDF/XML Syntax Specification (Revised)</dc:title>
7. <exterms:editor rdf:nodeID="abc"/>
8. </rdf:Description>
9. <rdf:Description rdf:nodeID="abc">
10. <exterms:fullName>Dave Beckett</exterms:fullName>
11. <exterms:homePage rdf:resource="http://purl.org/net/dajobe/"/>
12. </rdf:Description>
13. </rdf:RDF>

例6 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example6)中,第9行使用空白結點識別字abc來標識作為多個陳述的主體的空白結點,然後在第7行中利用該空白結點識別字來表明它所對應的空白結點是某個資源的exterms:editor屬性(property)。相對於[RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]中描述的其他方式而言,使用空白結點識別字的優點是可以在一個RDF/XML文檔中多次引用同一個空白結點

最後,2.4節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#typedliterals)中介紹的類型文字(typed literals)可以替代前面例子中的平凡文字(plain literals)作為屬性的值(property values)。類型文字(typed literal)在RDF/XML中的表示方法為:為包含該文字的屬性元素(property element)增加一個rdf:datatype屬性(attribute),並通過該屬性指定資料類型的URIref。

比如,將例2 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example2)中的陳述改為用類型文字而不是平凡文字來作為exterms:creation-date屬性的值(property values),那麼三元組將這樣書寫:

 ex:index.html   exterms:creation-date   "1999-08-16"^^xsd:date .

它所對應的RDF/XML如例7 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example7)所示:

例7:使用類型文字的RDF/XML

 1. <?xml version="1.0"?>
2. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3. xmlns:exterms="http://www.example.org/terms/">
4. <rdf:Description rdf:about="http://www.example.org/index.html">
5. <exterms:creation-date rdf:datatype=
"http://www.w3.org/2001/XMLSchema#date">1999-08-16
</exterms:creation-date>
6. </rdf:Description>
7. </rdf:RDF>

例7 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example7)中,在第5行給出的exterms:creation-date屬性元素(property element)的值是一個類型文字(而不是平凡文字),這是通過為exterms:creation-date元素的首標籤(start-tag)增加一個rdf:datatype屬性(attribute)並由此指定資料類型實現的。rdf:datatype屬性(attribute)的值應是某個資料類型的URIref,在本例中它是XML Schema中的date資料類型的URIref。作為屬性值(attribute value),URIref必須被寫全[譯注//即寫為相對URIref或絕對URIref],而不是像在三元組中那樣寫出它的QName形式xsd:date。用一個正確的資料類型文字作為元素內容(element content),在本例中是文字1999-08-16,即用XML Schema中的date資料類型表示的一個代表1999年8月16日的文字。

在本文檔下面的示例中,我們將避免使用平凡文字(無類型的),而是使用具有正確資料類型(datatype)的類型文字(typed literals)。這樣做的目的在於強調類型文字可以傳遞更多關於文字值(literal values)解釋的資訊。(但下列情況例外,即示例取自實際應用,而在該實際應用中沒有使用類型文字。在這種情況下,示例將保留原應用中的平凡文字,以精確反映RDF在該應用中的用法。)在RDF/XML中,平凡文字和類型文字(以及某些例外情況下的標籤(tag))都可以包含Unicode[UNICODE (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-unicode)]字元,以允許直接表達多語言的資訊。

例7 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example7)舉例說明了使用類型文字需要為每一個元素值為類型文字的元素書寫一個rdf:datatype屬性(attribute),並用一個標識具體資料類型的URIref作為屬性值。如前面提到的,RDF/XML要求用作屬性值(attribute value)的URIrefs必須書寫完整,而不能寫成QName形式。在這種情況下,RDF/XML允許使用XML 實體(entities)以提高可讀性,即為URIrefs提供一個另外的簡寫形式。XML實體聲明的本質是將一個XML名稱(XML name)與一個字串相關聯。如果實體名在XML文檔中被引用,XML處理器(XML processors)將用相應的字串來替換該引用。比如,下列ENTITY聲明(被寫在RDF/XML文檔頭部的DOCTYPE聲明中):

 <!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]> 

把實體xsd定義為一個代表命名空間URIref(對應於XML Schema資料類型的命名空間)的字串。這一聲明使得完整的命名空間URIref可在XML文檔中被簡略為實體引用&xsd;。在例7 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example7)中使用上述簡略形式便可得到例8 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example8).

例8: 使用類型文字和XML實體的RDF/XML

 1. <?xml version="1.0"?>
2. <!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
3. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
4. xmlns:exterms="http://www.example.org/terms/">
5. <rdf:Description rdf:about="http://www.example.org/index.html">
6. <exterms:creation-date rdf:datatype="&xsd;date">1999-08-16
</exterms:creation-date>
7. </rdf:Description>
8. </rdf:RDF>

第2行中的DOCTYPE聲明定義了實體xsd,該實體被用在第6行中。

是否在RDF/XML中用XML實體作為簡略機制是可選的,因此是否在RDF/XML中使用XML DOCTYPE聲明也是可選的。(對於熟悉XML的讀者,RDF/XML只需是"良構的(well-formed)"XML。RDF/XML沒有被設計為將用驗證型XML處理器(validating XML processor)驗證它對於某個DTD的有效性。附錄B (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#documents)將對此作全面論述,並提供了關於XML的更多資訊。 )

出於可讀性考慮,本文剩餘部分的示例將使用XML實體xsd(如前面描述的那樣)。附錄B (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#documents)將對XML實體作進一步討論。如附錄B (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#documents)的說明,其他URIrefs(而且更一般地,字串)也可以被簡略為使用XML實體。然而,在本文檔的示例中,我們僅對XML Schema資料類型採用這種簡略方式。

儘管還有其他用於書寫RDF/XML的簡略形式,但到目前為止所介紹的方法提供了一種簡單而一般的用RDF/XML來表達RDF圖的方法。要應用這些方法,一個RDF圖可以這樣書寫RDF/XML:

  • 所有空白結點(blank nodes)被指定空白結點識別字(blank node identifiers)。
  • 依次列出各個結點,將它作為一個非嵌套的rdf:Description元素的主體(subject)。若該結點有URIref,則rdf:Description元素使用rdf:about屬性(attribute);若該結點是空結點,則rdf:Description元素使用rdf:nodeID屬性(attribute)。

對於各個以該結點作為主體(subject)的三元組(triple),創建一個正確的屬性元素(property element)。該屬性元素或者是元素內容(element content)為文字(literal)(可能為空)、或者是有一個指定該三元組的客體(object)的rdf:resource屬性(attribute)(對於客體有URIref的情況)、或者是有一個指定該三元組的客體的rdf:nodeID屬性(attribute)(對於客體結點為空結點的情況)。

與更多在[RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]中描述的簡略方法相比,上述這種簡單的方式提供了實際圖結構的最直接的表示。另外,如果應用中的輸出RDF/XML將在進一步的RDF處理中被使用的話,這種方式是特別推薦的。


3.2 簡寫與組織RDF URIrefs

到目前為止,所有的示例都假定所描述資源已指派了URIrefs。比如,前面的幾個例子提供了關於example.org網頁的描述性資訊,該網頁的URIref為 http://www.example.org/index.html 。在RDF/XML中,這個資源(resource)的標識是通過使用一個rdf:about屬性(attribute)並用資源的URIref作為屬性值實現的。儘管RDF並沒有規定或限定如何為資源(resources)指派URIrefs,有時希望為一些有組織的資源指派URIrefs。比如,設想一個運動產品公司example.com要為它的產品(比如帳篷、旅行鞋等等)提供一個基於RDF的目錄,該目錄是一個RDF/XML文檔,用 http://www.example.com/2002/04/products 來對它進行標識和定位。在該資源中,各個產品可能會有一個單獨的RDF描述。例9 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example9)所示的RDF/XML描述了這個產品目錄和一種型號為"Overnighter"的帳篷所對應的目錄項及其描述:

例9:example.com產品目錄的RDF/XML

 1.   <?xml version="1.0"?>
2. <!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
3. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
4. xmlns:exterms="http://www.example.com/terms/">
5. <rdf:Description rdf:ID="item10245">
6. <exterms:model rdf:datatype="&xsd;string">Overnighter</exterms:model>
7. <exterms:sleeps rdf:datatype="&xsd;integer">2</exterms:sleeps>
8. <exterms:weight rdf:datatype="&xsd;decimal">2.4</exterms:weight>
9. <exterms:packedSize rdf:datatype="&xsd;integer">784</exterms:packedSize>
10. </rdf:Description>
...other product descriptions...
11. </rdf:RDF>

與前面例子的一個重要區別在於第5行中的rdf:Description元素,它有一個rdf:ID屬性(attribute)而不是rdf:about屬性(attribute)。rdf:ID用於指定一個片斷識別字(fragment identifier)作為資源完整URIref的簡略形式,該片斷識別字在rdf:ID屬性值(attribute)(在本例中為item10245,它可能是由example.com指定的目錄號)中 給出。片斷識別字item10245的解析是相對於基準URI(base URI)(在本例中,基準URI為目錄文檔的URI)。該帳篷的完整URIref是這樣形成的:取(目錄的) 基準URI,在後面添加字元"#"(表明後面跟隨的是片斷識別字)和字串"item10245",這樣得到了絕對URIref http://www.example.com/2002/04/products#item10245.

這裏的rdf:ID屬性有些類似XML和HTML中的ID屬性(attribute),因為它定義了一個相對於當前基準URI(在本例中,基準URI是目錄的基準URI)[譯注//其原因參見XML Base (http://www.w3.org/TR/2001/REC-xmlbase-20010627/)或其簡體中文翻譯[http://xmlbase.w3china.org/ ]]必須唯一的名稱。在本例中,rdf:ID屬性(attribute)為這種特定的帳篷指派一個名稱(item10245)。同一文檔中的其他RDF/XML可以用兩種方式來引用這個帳篷:使用絕對URIref http://www.example.com/2002/04/products#item10245 ,或使用相對URIref #item10245。相對URIref可被理解為一個相對目錄的基準URIref定義的URIref。使用同樣的簡略形式,帳篷的URIref也可以在目錄項中通過使用rdf:about="#item10245"來給出(也就是說,直接給出帳篷的相對URIref),而不是使用rdf:ID="item10245"。作為一種簡略機制,這兩種方式本質上是相同的:RDF/XML在這兩種方式下形成的完整URIref完全相同,都是 http://www.example.com/2002/04/products#item10245 。但是,使用rdf:ID提供了一種機制,可以在指派一組互不相同的名稱集合時進行檢測,因為rdf:ID屬性(attribute)給定的值在隸屬同一個基準URI的範圍(在本例中為產品目錄文檔)內只能出現一次。如果用另一種方式的話,example.com將通過兩步給出該帳篷的URIref:首先指定整個產品目錄的URIref,然後在產品目錄中的帳篷描述中使用一個相對URIref來表明該帳篷被指派的URIref。另外,相對URIref的使用可被理解為是對RDF中這個帳篷指派的完整URIref的一種簡略形式,也可以被認為是對產品目錄中這個帳篷的URIref的指派。

位於產品目錄外部的RDF可以用完整的URIref(通過連接該帳篷的相對URIref #item10245和產品目錄的基準URI形成絕對URIref http://www.example.com/2002/04/products#item10245)來引用這個帳篷。例如,一個戶外運動網站exampleRatings.com也許會用RDF來提供各種帳篷的排名。例9 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example9)所描述的帳篷被給予的等級為(5-star),這一資訊可以在exampleRatings.com網站上由例10 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example10)所示的RDF/XML來表示:

例10: exampleRatings.com給上述帳篷的等級

 1.  <?xml version="1.0"?>
2. <!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
3. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax- ns#"
4. xmlns:sportex="http://www.exampleRatings.com/terms/">
5. <rdf:Description rdf:about="http://www.example.com/2002/04/products#item10245">
6. <sportex:ratingBy rdf:datatype="&xsd;string">Richard Roe</sportex:ratingBy>
7. <sportex:numberStars rdf:datatype="&xsd;integer">5</sportex:numberStars>
8. </rdf:Description>
9. </rdf:RDF>

例10 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example10)中,第5行使用的rdf:Description元素帶有一個rdf:about屬性(attribute),該屬性的值為被描述的帳篷的完整URIref。使用這個URIref可以精確標識被排名所引用的帳篷。

上面這些例子說明了若干要點。首先,儘管RDF沒有規定或限定如何為資源(如本例中的各種帳篷和其他產品)指派URIrefs,但在RDF中可通過下面的方法獲得為資源指派URIrefs的效果:(在RDF之外)標識一個文檔(如本例中的產品目錄),並將它作為資源描述的來源;而在該文檔中描述各個資源時使用相對URIref[譯注//該相對URIref被作為資源在所屬文檔範圍內的識別字]。比如,example.com可以將這個產品目錄作為描述它的產品的總的來源,如果一個產品的產品號不在產品目錄中的任何條目中出現,那麼它就不是一個example.com所知道的產品。(注意:RDF並不會僅根據兩個資源的URIrefs有相同的基準(base)或在某些方面相像而假定它們之間存在任何特定的關係。也許example.com瞭解這些關係,但它們沒有直接在RDF中定義。)

以上的示例說明了Web體系結構的一個基本原則,即任何人都應能夠用他們願意使用的任何辭彙自由地添加關於某一現存資源的資訊[BERNERS-LEE98 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-berners-lee98)]。這些例子進一步說明了描述某個特定資源的RDF不需要全部存放於某一處;相反,它可以被分佈於Web上。這一點不僅對上述情形(即一個組織對其他組織定義的資源給出排名或評論)適用,對於下面這種情形也是適用的,即資源的最初定義者希望通過增加關於資源(或其他人)的資訊來充實資源的描述。這可以通過修改RDF文檔(即資源被最初定義的文檔)來實現:即增加為了描述附加資訊所必需的屬性(properties)和值。另一種實現方式(如本例所展示的)是:創建一個單獨的文檔,並在其中通過使用rdf:Description元素為資源(用rdf:Description元素的rdf:about屬性(attribute)的值來標識)提供附加的屬性(properties)和值。

上面的論述表明,相對URIrefs(比如#item10245)的解析將是相對於某個基準URI(base URI)的。缺省情況下,這個基準URI可以是該相對URI所在資源的URI。但是,在某些情況下也許希望能夠顯式指定基準URI。比如,設想除位於 http://www.example.com/2002/04/products 的產品目錄以外,example.org希望在某個鏡像站點上提供一個產品目錄的副本(比如,位於 http://mirror.example.com/2002/04/products )。這可能會造成一些問題,因為如果是通過鏡像站點獲得產品目錄的話,帳篷的URIref將會通過產品目錄的URI產生,也就是說形成的絕對URIref為 http://mirror.example.com/2002/04/products#item10245 ,而不是 http://www.example.com/2002/04/products#item10245 。顯然,這將引用一個非期望的資源。作為另一個選擇,example.org也許希望為它的產品的URIrefs指定一個基準URIref,而不是使用產品目錄文檔的位置作為基準URIref。

為了處理上述情況,RDF/XML支援XML Base (http://www.w3.org/TR/2001/REC-xmlbase-20010627/) [XML-BASE (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xml-base)]。XML Base允許XML文檔指定一個基準URI,而不是將XML文檔本身的URI作為基準URI。例11 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example11)顯示了產品目錄是如何用XML Base來描述的:

例11: 在example.com的產品目錄中使用XML Base

 1.   <?xml version="1.0"?>
2. <!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
3. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax- ns#"
4. xmlns:exterms="http://www.example.com/terms/"
5. xml:base="http://www.example.com/2002/04/products">
6. <rdf:Description rdf:ID="item10245">
7. <exterms:model rdf:datatype="&xsd;string">Overnighter</exterms:model>
8. <exterms:sleeps rdf:datatype="&xsd;integer">2</exterms:sleeps>
9. <exterms:weight rdf:datatype="&xsd;decimal">2.4</exterms:weight>
10. <exterms:packedSize rdf:datatype="&xsd;integer">784</exterms:packedSize>
11. </rdf:Description>
...other product descriptions...
12. </rdf:RDF>

例11 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example11)中,第5行的xml:base聲明為rdf:RDF元素裏的內容指定了基準URI(直到在遇到其他被指定的xml:base為止) http://www.example.com/2002/04/products 。這樣,在元素裏引用的所有相對URIrefs的解析將相對於xml:base所指定的基準URI,而與這些相對URIrefs所在文檔的URI是什麼無關。因此,所描述帳篷的相對URIref #item10245將被解析為同一個絕對URIref http://www.example.com/2002/04/products#item10245,不管產品目錄文檔的實際URI是什麼,也不管基準URIref是否真的標識了某一具體文檔。

到目前為止,所有示例使用的都是同一個產品描述--example.com產品目錄中的某個具體型號的帳篷。然而,example.org也許希望提供多種不同型號的帳篷,同樣對旅行背包、旅行鞋等多個不同類型產品也提供多種選擇。把事物劃分為不同的種類(kings)類別(categories)這一想法與程式設計語言裏的物件(objects)有不同的類型(types)類(classes)類似。RDF通過提供預定義屬性(property)rdf:type來支持這種概念。當我們用rdf:type屬性(property)來描述一個RDF資源時,該屬性的值就是被看作表達這種事物的種類(kings)類別(categories)的資源。該屬性的主體被看作為該種類(kings)類別(categories)的一個實例(instance)例12 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example12)展示了example.com是如何使用rdf:type來表達產品描述是關於一個帳篷的:

例12: 在帳篷的描述中使用rdf:type

 1.   <?xml version="1.0"?>
2. <!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
3. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax- ns#"
4. xmlns:exterms="http://www.example.com/terms/"
5. xml:base="http://www.example.com/2002/04/products">
6. <rdf:Description rdf:ID="item10245">
7. <rdf:type rdf:resource="http://www.example.com/terms/Tent"/>
8. <exterms:model rdf:datatype="&xsd;string">Overnighter</exterms:model>
9. <exterms:sleeps rdf:datatype="&xsd;integer">2</exterms:sleeps>
10. <exterms:weight rdf:datatype="&xsd;decimal">2.4</exterms:weight>
11. <exterms:packedSize rdf:datatype="&xsd;integer">784</exterms:packedSize>
12. </rdf:Description>
...other product descriptions...
13. </rdf:RDF>

例12 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example12)中,第7行的rdf:type屬性(property)表示被描述的資源是URLref http://www.example.com/terms/Tent 所標識的類的一個實例(instance)。這假定了example.com已經在某個辭彙表中描述了這個類(class),因此才可以在上面的例子中用該類的絕對URIref來引用它。如果example.com是在產品目錄所在文檔中描述了這個類,那麼可以用相對URIref #Tent來引用它。

RDF本身並沒有提供方法來定義特定應用中的類(class),比如本例中的Tent、或它們的屬性(properties)如exterms:weight等。這些類是在RDF schema中使用RDF Schema語言(將在第5節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfschema)介紹)來描述的。其他用於類描述的方法也可以被定義,比如DAML+OILOWL語言(將在http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#richerschemas 5.5節]介紹)。

在RDF中,為被描述的資源指定rdf:type屬性(property)以指明它是某個特定類型或類的實例是非常普遍的手法。這樣的資源在RDF圖中被稱作有類型結點(typed node),在RDF/XML中被稱作有類型結點元素(typed node elements)。RDF/XML提供了一種特殊的簡略形式以描述這些有類型結點。在這種簡略形式中,rdf:type屬性及其的值被移去,而結點對應的rdf:Description元素被替換為一個以QName為名稱的元素(QName對應於被移去的那個rdf:type屬性的值,也就是某個類的URIref)。使用這種簡略形式,例12 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example12)中example.com的帳篷也可用例13 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example13)所示的RDF/XML來描述:

例13:簡略帳篷的類型

 1.   <?xml version="1.0"?>
2. <!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
3. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax- ns#"
4. xmlns:exterms="http://www.example.com/terms/"
5. xml:base="http://www.example.com/2002/04/products">
6. <exterms:Tent rdf:ID="item10245">
7. <exterms:model rdf:datatype="&xsd;string">Overnighter</exterms:model>
8. <exterms:sleeps rdf:datatype="&xsd;integer">2</exterms:sleeps>
9. <exterms:weight rdf:datatype="&xsd;decimal">2.4</exterms:weight>
10. <exterms:packedSize rdf:datatype="&xsd;integer">784</exterms:packedSize>
11. </exterms:Tent>
...other product descriptions...
12. </rdf:RDF>

因為一個資源可能被描述為是多個類的實,因此一個資源可能有多個rdf:type屬性。但是,在這些rdf:type屬性中,只有一個可被寫為簡略形式,其餘的必須像例12 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example12)中的那樣用rdf:type屬性寫出。

有類型結點的簡略形式除用於描述用戶自定義類(user-defined classes)(比如exterms:Tent)的實例以外,在描述內建RDF類(built-in RDF classes,將在第4節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#othercapabilities)中介紹)(比如rdf:Bag)和內建RDF Schema類(built-in RDF Schema classes,將在第5節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfschema)中介紹)(比如rdfs:Class)時也是被普遍使用的。

例12 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example12)例13 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example13)展示了一點,即用RDF/XML寫出的RDF陳述可以非常類似直接用XML(而不是RDF)書寫的描述。在XML正被使用於越來越多的應用這一背景下,這是一個重要的考慮,因為這意味著RDF可在這些應用中被使用,而不需對資訊的構造方式作較大改動。


3.3 總結

上面的例子已經展現了RDF/XML背後的一些基本思想。這些例子為開始書寫有用的RDF/XML提供了足夠的資訊。關於用XML進行RDF陳述的建模(被稱作striping)背後的理論、以及其他可用的RDF/XML簡略形式、和其他關於用XML書寫RDF的細節和示例,請參見(規範性)文檔RDF/XML語法規範 (http://www.w3.org/TR/rdf-syntax-grammar/) [RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]。


4. 其他RDF表達能力

RDF提供了一些額外 的表達能力,如內嵌的表示資源組和RDF陳述組的類和屬性,還能讓XML片斷做為屬性的值。下面討論這些額外的表達能力。


4.1 RDF容器

我們常常需要描述一組事物:例如,說一般書是由多個作者寫的,或把上某門課程的學生都列出來,或一個套裝軟體下的所有模組。RDF提供了一些預定義的類型和屬性用以描述一組事物。

首先,RDF提供了容器辭彙,包括三個預定義的類型,以及他們的一些屬性。一個容器是一個包含了一些事物的資源,這些被包含的事物稱為成員。容器的成員可能是資源(包括匿名節點)或文字。RDF定義了三種類型的容器:

    • rdf:Bag
    • rdf:Seq
    • rdf:Alt

一個包(Bag,是類型為rdf:Bag的資源)表示了一組可能包含重複成員的資源或文字,且成員之間是無序的。例如,包可以用來描述對於成員的添加或處理順序沒有特別要求的組。

一個序列(Sequence,是類型為rdf:Seq的資源)表示了一組資源或文字,其中可能有重複的成員,而且成員之間是有序的。例如,序列可以用來描述一組必須按字母順序排列的事物。

一個替換(Alternative,是類型為rdf:Alt的資源)表示了一組可以選擇的資源或文字(常常是屬性的一個值)。例如,序列可以用來描述一組可以互相替換的關於著作的不同語言的翻譯,或者描述一個資源可能出現的幾個網際網路鏡像站點。在應用中,如果屬性的值是一個替換,這可以選擇替換中任意一個合適的成員作為屬性的值。

為了表示一個資源是一個容器,這個資源必須有個屬性rdf:type且值為預定義的三個資源:rdf:Bag, rdf:Seq, or rdf:Alt 之一。這個容器資源(可能是匿名節點或由URIref標識的節點)代表了作為一個整體的一組事物。容器的成員和容器資源之間的關係是由一組專門為此定義的表示成員關係的屬性描述的,這些屬性的主體是容器資源,客體是其成員。這些成員關係屬性的名字形為rdf:_n,其中n是一個大於0的十進位整數,如 rdf:_1, rdf:_2, rdf:_3等等。除了成員關係屬性和rdf:type屬性外,容器資源還可以有其他的屬性。

很重要的一點是:儘管這些容器可以用預定義的RDF類型和屬性定義,但並沒有為這些容器提供特定的意義,例如,一個替換容器的成員的值是可替換的,這只是RDF的設計用途。這些容器類型和他們的定義,目的是在需要描述一組事物的時候建立一個大家認同的慣例。RDF所做的只是提供預定以的類型和屬性用以構造RDF圖來描述各種容器,相對于一個普通的資源如ex:Tent (如 3.2節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#newresources)討論的),它並沒有給作為包的資源更多的內置的解釋。在這種情況下,應用程式必須注意到不同類型的容器有不同的含義,這點會在下面的例子中進一步討論:

容器的一個慣常用法是表明有個屬性的值是一組事物。例如,為了表示句子 "參加課程6.001的學生有:Amy, Mohamed, Johann, Maria, 和 Phuong",可以給課程一個s:students屬性(來自一個合適的辭彙集),它的值是一個包容器(表示一組學生),然後再用容器成員關係屬性,每個學生可以標識為這個組的成員,如RDF圖圖14 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure14)所示:

fig14july12.png

圖14:一個簡單的包容器描述

因為這個例子中屬性s:students的值是一個包,因此學生的URIrefs的順序是無關緊要的,儘管容器成員屬性的名字包含了一些整數。應用程式應該在創建或處理圖的時候忽略掉屬性名字中顯示出來的順序。

RDF/XML提供了一些特殊的語法和縮寫來簡化容器的描述。例如例14 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example14)描述了例14 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure14)所示的圖。

例14:用RDF/XML書寫的一個包含學生的包(bag)

 <?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:s="http://example.org/students/vocab#">

<rdf:Description rdf:about="http://example.org/courses/6.001">
<s:students>
<rdf:Bag>
<rdf:li rdf:resource="http://example.org/students/Amy"/>
<rdf:li rdf:resource="http://example.org/students/Mohamed"/>
<rdf:li rdf:resource="http://example.org/students/Johann"/>
<rdf:li rdf:resource="http://example.org/students/Maria"/>
<rdf:li rdf:resource="http://example.org/students/Phuong"/>
</rdf:Bag>
</s:students>
</rdf:Description>
</rdf:RDF>

例14 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example14)展示了RDF/XML用rdf:li作為一個便利元素來避免顯式地指定屬性的名字。那些標號了的屬性,如rdf:_1, rdf:_2是由圖中的rdf:li自動生成的。元素名rdf:li是借鑒HTML的列表的。<rdf:Bag>元素又是一個例13 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example13)演示的縮寫的例子,即當描述一個類的實例時,用單個元素替換一個rdf:Description元素和rdf:type元素。因為沒有指定URIref,這個包資源是一個匿名節點。另外,它是屬性元素<s:students> 的子節點,這也是一種縮寫,表示這個匿名節點是屬性的值。[RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]講解了更詳細的縮寫方法。

容器rdf:Seq的圖結構和對應的RDF/XML寫法和rdf:Bag相似(唯一的區別是類型是rdf:Seq)。同樣地,雖然rdf:Seq是用來描述序列,但應用程式要負責在創建和處理RDF圖時正確解釋體現在屬性名字中的順序。

為了演示替換容器的用法,句子"X11的源代碼可能可以在網站ftp.example.org, ftp1.example.org, 或 ftp2.example.org上找到"可用如圖15 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure15)所示的圖表示:

fig15july12.png

圖15:一個簡單的替換容器描述

圖15 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure15)代表的圖可以在RDF/XML中如例15 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example15)所示:

例15:用RDF/XML書寫的一個替換容器(Alt Container)

 <?xml version="1.0"?>

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:s="http://example.org/packages/vocab#">



<rdf:Description rdf:about="http://example.org/packages/X11">

<s:DistributionSite>

<rdf:Alt>

<rdf:li rdf:resource="ftp://ftp.example.org"/>

<rdf:li rdf:resource="ftp://ftp1.example.org"/>

<rdf:li rdf:resource="ftp://ftp2.example.org"/>

</rdf:Alt>

</s:DistributionSite>

</rdf:Description>

</rdf:RDF>

一個替換容器被設計為至少有一個成員,由屬性rdf:_1標識。這個成員被認為是屬性的缺省值或優先值。除了rdf:_1外,其他剩下的成員的順序是無關緊要的。

圖15 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure15)中的RDF圖表示屬性s:DistributionSite的值是一個類型是替換容器的資源。關於這個RDF圖更多的意義必須由應用程式來解釋,例如,替換容器的一個成員可以看成屬性s:DistributionSite的值,或者ftp://ftp.example.org是這個屬性的缺省值或優先值。

替換容器常常和語言標記一起使用(RDF/XML允許用在[XML (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xml)]定義的屬性xml:lang 表示元素節點的內容是用什麼語言書寫的。 [RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]描述了xml:lang的用法, 6.2節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#prism)也演示它的用法。)。例如,如果一個著作被翻譯成了多種語言,這這本著作的標題屬性可以是一個替換容器,這個容器包含了用多種語言書寫的標題。

包和替換的用法的區別可以通過以下例子更清楚地看出來。哈克貝裏?芬歷險記("Huckleberry Finn")這本書只有一個作者,但作者有兩個名字(馬克?吐溫是筆名,塞謬爾?克萊門斯是原名),每個名字都可以表示作者。因此,包含這兩個名字的替換比包更適合作為作者名這個屬性的值,因為包容器隱含了這是兩個不同的作者的意思。

用戶可以不用RDF容器辭彙,隨意選擇自己的方式表達一組資源。這些RDF容器只是提供一種通用的方式,如果能得到廣泛應用,可以使描述一組資源的資料具有更好的互操作性。

有時候,有明顯的方法可以代替RDF容器。例如,要描述一個資源和一組資源的關係,可以用多個陳述(屬性是相同的)來表示,每個陳述的主體都是第一個資源,客體是一組資源的一個資源。這和用一個陳述表示,主體是第一個資源,客體是包含一組資源的容器的方式在結構上是不同的。有些時候,這兩種表示方式有相同的意義,但也有時候不一樣。如何在不同的情況下去選擇不同的方式要考慮以下問題:

考慮一個例子表示作家和其的作品之間關係的例子,如下面的句子:

Sue已經寫了"Anthology of Time", "Zoological Reasoning", 和 "Gravitational Reflections"這三本書。

在這個例子中,有三個資源都是由相同的作者獨立完成的,這可以用重複的屬性表示如下:

 exstaff:Sue   exterms:publication   ex:AnthologyOfTime .
exstaff:Sue exterms:publication ex:ZoologicalReasoning .
exstaff:Sue exterms:publication ex:GravitationalReflections .

在這個例子中,只說了作品之間的關係是他們由同一個作者寫成。每個陳述是一個獨立的事實,因為用重複的屬性也是合理的選擇。當然,用一個關於Sue寫的一組書的陳述表示的話,也是合理的。

 exstaff:Sue   exterms:publication   _:z .
_:z rdf:type rdf:Bag .
_:z rdf:_1 ex:AnthologyOfTime .
_:z rdf:_2 ex:ZoologicalReasoning .
_:z rdf:_3 ex:GravitationalReflections .

在另一方面,句子

 這個決議被由Fred, Wilma 和 Dino組成的章程委員會批准了。

說這個委員會作為一個整體批准了這個決議;並不是說每個單獨的委員會成員都投票同意了這個決議。在這個例子中,如果把這個句子用三個獨立的exterms:approvedBy陳述表示,每一個陳述的主體是一個委員會成員, 如下所示,則是不恰當的,

 ex:resolution   exterms:approvedBy   ex:Fred .
ex:resolution exterms:approvedBy ex:Wilma .
ex:resolution exterms:approvedBy ex:Dino .

因為這些陳述是說每個成員都批准了這個決議。

如果將這句話表示為一個陳述,其主體是決議,客體是委員會,則更為恰當。這個委員會可以用一個包含這三個委員會成員的包容器來描述,如下面的這些三元組所示:

 ex:resolution       exterms:approvedBy   ex:rulesCommittee .
ex:rulesCommittee rdf:type rdf:Bag .
ex:rulesCommittee rdf:_1 ex:Fred .
ex:rulesCommittee rdf:_2 ex:Wilma .
ex:rulesCommittee rdf:_3 ex:Dino .

當用RDF容器時,要明白這些陳述不是像程式語言中的結構那樣在構造容器,而是描述已經存在的容器。在剛給出的章程委員會例子中,章程委員會是一組沒有排序的人,不管RDF的描述方式是怎樣的。說資源 ex:rulesCommittee 的類型是rdf:Bag,並不等於說章程委員會是一個資料結構,或說構造了一個包含這個組的成員的資料結構(章程委員會可以描述為一個包即使沒有描述他的任意成員。反之,它描述了章程委員會和包容器有對應的特點,即有成員且成員之間的序是無關緊要的。類似地,用容器成員屬性只是描述了一個容器資源有一些事物作為其成員,並不是說這些事物是容器僅有的成員。例如,上面的三元組只說Fred, Wilma,和 Dino是委員會的成員,但沒有說他們是委員會的所有成員。

同樣,例14 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example14) and 例15 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example15)顯示了描述容器的一個通用模式。然而,很重要的一點是,RDF並不強制使用RDF容器辭彙的方式,因此,可能會有其他使用容器的方式。例如,有時候讓容器資源有一個URIref比作為一個匿名節點更為恰當。此外,還可能有不像前面的例子那樣格式規範的容器辭彙使用方式,例如,例16 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example16) 顯示了一個用RDF/XML表示的和圖15 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure15)中的替換容器類似的圖, 但它顯式地寫出了容器成員屬性,而不是由rdf:li自動生成:

例16:一個格式不正確的替換容器的RDF/XML表示

 <?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:s="http://example.org/packages/vocab#">

<rdf:Description rdf:about="http://example.org/packages/X11">
<s:DistributionSite>
<rdf:Alt>
<rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag"/>
<rdf:_2 rdf:resource="ftp://ftp.example.org"/>
<rdf:_2 rdf:resource="ftp://ftp1.example.org"/>
<rdf:_5 rdf:resource="ftp://ftp2.example.org"/>
</rdf:Alt>
</s:DistributionSite>
</rdf:Description>
</rdf:RDF>

[RDF-SEMANTICS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-semantics)]所說,RDF沒有對RDF容器辭彙的使用施加格式正確性約束,因此例16 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example16)是合法的,儘管這個容器的類型即是包又是替換,屬性rdf:_2還具有兩個不同的值,還沒有屬性rdf:_1, rdf:_3, 或 rdf:_4。

結果是,RDF應用如果需要容器是格式正確的,則為了應用的魯棒性,應該寫代碼檢查容器辭彙的使用恰當與否。


4.2 RDF集合

4.1節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#containers)中描述的容器的一個缺點是沒有辦法封閉它,即沒有辦法說這些是容器的所有成員。一個容器只說一些有標識的資源是它的成員,無法說沒有其他的成員了。而且,如果有一個圖描述它的一些成員,我們沒法排除在其他地方有圖也描述這個容器的其他成員的可能。RDF以RDF集合(collection)的形式提供了對描述特定成員的組的支援。一個RDF集合是用列表結構表示的一組事物,這個列表結構是用一些預定義的集合辭彙表示的。RDF的集合辭彙包括屬性rdf:first 和rdf:rest,和資源rdf:nil.

為了展示這個,句子"上課程6.001的學生有:Amy, Mohamed, 和Johann"可以用圖16 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure16)所示的圖表示:

fig16bjuly12.png

圖16:一個RDF集合(列表結構)

在這個圖中,集合中的每個成員,如s:Amy,是屬性rdf:first的客體,這個屬性的主體是表示一個列表的資源(這個例子中是一個匿名節點)。這個列表通過屬性rdf:rest鏈到列表的剩下的元素,列表的結束用一個值為rdf:nil 的屬性rdf:rest表示(rdf:nil表示一個空列表,它的類型是rdf:List)。這種結構和Lisp語言很像,像Lisp一樣,屬性rdf:first 和rdf:rest允許程式遍曆這個結構。組成列表結構的每個匿名節點的類型默認為rdf:List,儘管這沒有在圖中顯示出來。RDF Schema語言[RDF-VOCABULARY (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-vocabulary)]定義了屬性rdf:first 和rdf:rest的主體的類型是rdf:List,因此,這些匿名節點的類型資訊可以推導出來,而不用每次都寫出來。

RDF/XML提供了一種特殊的圖的記法使描述集合更為簡單。在RDF/XML中,一個集合可以用一個代表屬性的元素節點表示,且這個元素節點有個屬性節點是rdf:parseType="Collection",這表示元素節點下的內容要以一種特殊的方式解釋。在這裏,rdf:parseType="Collection"表示包含的元素要用來創建RDF圖中(其他的rdf:parseType屬性的值將在後面的章節中講述)。

為了展示rdf:parseType="Collection"是怎麼工作的,例17 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example17) 中的RDF/XML寫法對應的圖如 圖16 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure16)說示:

例17:一個關於學生的集合的 RDF/XML表示

 <?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:s="http://example.org/students/vocab#">

<rdf:Description rdf:about="http://example.org/courses/6.001">
<s:students rdf:parseType="Collection">
<rdf:Description rdf:about="http://example.org/students/Amy"/>
<rdf:Description rdf:about="http://example.org/students/Mohamed"/>
<rdf:Description rdf:about="http://example.org/students/Johann"/>
</s:students>
</rdf:Description>
</rdf:RDF>

在RDF/XML 中用rdf:parseType="Collection" 常定義了一個如 圖16 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure16)所示的列表結構:一個固定有限長度的列表,它用rdf:nil表示列表的結束,還用了一些相對於列表唯一的匿名節點。然後,RDF並沒有強制集合辭彙只能用於這種方式,因此也可以用於其他方式。有些方式可能沒有描述列表或者說封閉的集合。為了知道原因,注意到圖16 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure16)所示的圖也可以用集合辭彙的普通格式(不用rdf:parseType="Collection")寫,如例18 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example18)所示:

例18:一個關於學生的集合的RDF/XML普通格式表示

 <?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:s="http://example.org/students/vocab#">

<rdf:Description rdf:about="http://example.org/courses/6.001">
<s:students rdf:nodeID="sch1"/>
</rdf:Description>

<rdf:Description rdf:nodeID="sch1">
<rdf:first rdf:resource="http://example.org/students/Amy"/>
<rdf:rest rdf:nodeID="sch2"/>
</rdf:Description>

<rdf:Description rdf:nodeID="sch2">
<rdf:first rdf:resource="http://example.org/students/Mohamed"/>
<rdf:rest rdf:nodeID="sch3"/>
</rdf:Description>

<rdf:Description rdf:nodeID="sch3">
<rdf:first rdf:resource="http://example.org/students/Johann"/>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:Description>
</rdf:RDF>

注意到在 [RDF-SEMANTICS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-semantics)] (和容器辭彙相同的情況4.1節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#containers))中, RDF並沒有對集合辭彙施加格式正確性約束(well-formedness),因此,當用普通格式寫時,有可能寫出的列表結構並不像由用rdf:parseType="collection"自動生成的那樣正確,如一個節點的rdf:first屬性有兩個不同的值是合法的,或列表結構的最後的節點不是空列表,或簡單地忽略了結合的某些部分。另外,用普通格式寫的集合辭彙定義的圖可以用URIrefs標識列表中的部分節點,而不是在列表中是唯一的匿名節點,這樣,有可能在別的圖中有三元組為集合添加元素,而使之不封閉。

結果是,RDF應用如果需要集合是格式正確的,為了應用的魯棒性,就應該檢查集合辭彙時被正確的使用。另外,語言 OWL (http://www.w3.org/TR/owl-ref/) [OWL (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-owl)], 能夠對RDF圖的結構定義額外的限制,可以避免一些集合格式不正確的情況。


4.3 RDF具體化

有時候RDF應用需要描述RDF陳述,例如,為了記錄RDF陳述發表的時間,作者和其他類似的資訊(有時這些資訊稱為"來源"資訊)。在3.2節的例9中,我們描述了一個帳篷,其URIref是exproducts:item10245, 被example.com出售。其中一個三元組描述了帳篷的重量:

 exproducts:item10245   exterms:weight   "2.4"^^xsd:decimal .

如果能記錄是誰提供了這個資訊,可能對example.com有用。

RDF提供了用以描述RDF陳述的內置辭彙。用這些辭彙對一個陳述的描述稱為這個陳述的具體化(reification)。RDF具體化辭彙包含類rdf:Statement,屬性rdf:subject, rdf:predicate, 和 rdf:object。然而,用RDF具體化辭彙需要謹慎,因為很容易想到這些辭彙定義了一些實際上沒有定義事物。這個問題會再這節的後面討論。

用RDF具體化辭彙,關於帳篷重量的陳述的具體化可以通過給這個陳述一個URIref,如exproducts:triple12345(這樣可以寫陳述去描述它),可以通過以下陳述描述它:

 exproducts:triple12345   rdf:type        rdf:Statement .
exproducts:triple12345 rdf:subject exproducts:item10245 .
exproducts:triple12345 rdf:predicate exterms:weight .
exproducts:triple12345 rdf:object "2.4"^^xsd:decimal .

這些陳述是說:由URIref exproducts:triple12345標識的資源是一個RDF陳述,且這個陳述的主體是exproducts:item10245標識的資源,這個陳述的謂詞是exterms:weight標識的資源,這個陳述的客體是有類型文字"2.4"^^xsd:decimal標識的小數值。假設原來的陳述的確是被exproducts:triple12345標識的,通過比較原來的陳述和這個陳述的具體化,很清楚具體化的確描述了原來的陳述。RDF具體化辭彙的慣用法通常包含了用這個模式描述的四個陳述,因此,這四個陳述有時被稱為"具體化四元組"(reification quad)。

根據這個慣例用RDF具體化,example.com可以這樣記錄John Smith發表了關於帳篷重量的陳述的事實:首先賦予這個陳述一URIref(如,exproducts:triple12345),用上面描寫的具體化描述這個陳述,然後再加一個語句,即exproducts:triple12345 是由John Smith 寫的(用一個URIref標識"John Smith")。結果是:

 exproducts:triple12345   rdf:type        rdf:Statement .
exproducts:triple12345 rdf:subject exproducts:item10245 .
exproducts:triple12345 rdf:predicate exterms:weight .
exproducts:triple12345 rdf:object "2.4"^^xsd:decimal .
exproducts:triple12345 dc:creator exstaff:85740 .

這原來的陳述,和具體化以及作為陳述的作者John Smith形成了如圖17所示的圖:

reificationFigJul22.png

圖17:一個陳述及其具體化和屬性

這個圖用RDF/XML的寫法如例19所示:

例19:一個具體化例子的RDF/XML表示

 <?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:exterms="http://www.example.com/terms/"
xml:base="http://www.example.com/2002/04/products">
   <rdf:Description rdf:ID="item10245">
<exterms:weight rdf:datatype="&xsd;decimal">2.4</exterms:weight>
</rdf:Description>
   <rdf:Statement rdf:about="#triple12345">
<rdf:subject rdf:resource="http://www.example.com/2002/04/products#item10245"/>
<rdf:predicate rdf:resource="http://www.example.com/terms/weight"/>
<rdf:object rdf:datatype="&xsd;decimal">2.4</rdf:object>
      <dc:creator rdf:resource="http://www.example.com/staffid/85740"/>
</rdf:Statement>
 </rdf:RDF>

3.2節介紹了使用RDF/XML的rdf:ID屬性於rdf:Description元素中來簡化稱述主體的URIref。rdf:ID也可以用在屬性元素節點中,用來自動產生一個屬性元素生成的三元組的具體化。例20 顯示了這樣可以表示和例19同樣的圖:

例20:用rdf:ID 生成具體化表示

 <?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:exterms="http://www.example.com/terms/"
xml:base="http://www.example.com/2002/04/products">
   <rdf:Description rdf:ID="item10245">
<exterms:weight rdf:ID="triple12345" rdf:datatype="&xsd;decimal">2.4
</exterms:weight>
</rdf:Description>
   <rdf:Description rdf:about="#triple12345">
<dc:creator rdf:resource="http://www.example.com/staffid/85740"/>
</rdf:Description>
 </rdf:RDF>

在這種情況下,把屬性節點rdf:ID="triple12345"放在exterms:weight元素中,達到與原來描述帳篷重量的三元組同樣的效果:

 exproducts:item10245   exterms:weight   "2.4"^^xsd:decimal .

和一些具體化三元組:

 exproducts:triple12345   rdf:type        rdf:Statement .
exproducts:triple12345 rdf:subject exproducts:item10245 .
exproducts:triple12345 rdf:predicate exterms:weight .
exproducts:triple12345 rdf:object "2.4"^^xsd:decimal .

這些具體化三元組的主體是一個URIref,它是由文檔的基準URI(在xml:base中聲明),字元"#"和rdf:ID的值連接而成。也就是說,這些三元組和前面的例子一樣,具有相同的主體:exproducts:triple12345。

注意:對具體化做斷言和對原來的陳述做斷言是不同的,並且,它們中的一個成立不能推出另一個成立。也就是說,當有的人說,John說了些關於帳篷重量的東西,他們並不是在陳述一個帳篷的重量,他們是在陳述John說了什麼。相反地, 當某人(用一個陳述)描述了一個帳篷的重量,他並沒有對這個陳述做出其他的陳述(因為他可能沒有興趣說關於"陳述"的事情)。

上述說法在一些地方被稱為"具體化的慣例用法"。就像前面說到的一樣,用RDF具體化辭彙的時候要謹慎,因為很容易設想這些辭彙定義了一些其實並沒有定義的事情。如果有應用程式成功使用具體化辭彙,他們是通過遵循某些慣例,做了一些假設做到的,這些慣例和假設都是在RDF為具體化辭彙定義的真正意義之外的,也是在RDF為了支持他們而提供的真正輔助之外的。

首先,重要的是,在具體化的慣例用法中,具體化三元組的主體是假設為標識了在一個特定的RDF文檔中特定的三元組,而不是一些任意的具有相同的主體,謂詞,客體的三元組。使用這個慣例是因為具體化是被設計用於表達一些屬性,如書寫的日期,RDF資料遠資訊,就像例子中已經給出的那樣,這些屬性必須應用於三元組的特定實例。有可能有多個三元組具有相同的主體,謂詞,客體,另外,儘管圖是定義為一個三元組的"集合",多個結構相同的三元組實例可能出現在不同的文檔中。因此,為了完全支援這個慣例,需要一些方式來將具體化三元組的主體和一些文檔中個體三元組關聯起來。然而,RDF沒有提供辦法實現它。

例如,在上面的例子中,在三元組中和RDF/XML中都沒有顯式的資訊說那個描述帳篷重量的陳述就是資源exproducts:triple12345,它是四個具體化三元組的主體,也是John Smith做出的陳述。這可以從圖17 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure17)看出。原來的陳述當然是圖的一部分,但就圖上的資訊而言,exproducts:triple12345是一個單獨的資源,而不是標識了圖中的那個陳述。RDF沒有提供內置的方式來表明一個像exproducts:triple12345的URIref是怎樣關聯到一個特定的陳述或圖的,和沒有提供內置的方式來表明一個像exproducts: item10245的URIref是怎樣關聯到一個具體的帳篷一樣。關聯特定的URIref到特定的資源(這裏是陳述)必須通過RDF以外的機制實現。

用如例20 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example20)所示的rdf:ID能夠自動生成具體化三元組,這提供了一種方便的辦法來表明用在具體化中的陳述的主體URIref。而且,它提供了一個"竅門"用以把具體化三元組和創建他們的RDF/XML語法部分關聯起來,因為rdf:ID屬性的值triple12345是用於生成具體化三元組的主體URIref。然而,這個關聯還是在RDF之外的,因為生成的三元組中沒有任何東西顯式地說原來的三元組有個URIref是exproducts:triple12345(RDF並不假設在一個URIref和任何使用了這個URIref或其縮寫形式的RDF/XML之間有任何關係)。

缺乏內置的方式賦予陳述URIref並不意味著這種類型的來源(provenance)資訊無法在RDF中表示,而是這無法僅僅用RDF關聯給具體化辭彙的語義達到。例如,如果一個RDF文檔(如,一個網頁)有個URI,這可以對這個URI表示的資源做出陳述,然後,通過一些應用相關的對這些陳述的解釋,一個應用可以認為這些陳述對文檔中的全部陳述起作用。另外,如果有些RDF之外的機制可用以賦予RDF陳述URI,當然可以做出關於陳述(用這些URI標識)的陳述。然而,這樣的話,沒有必要嚴格遵照具體化辭彙的慣例用法。

為了明白這點,假設原來的陳述:

 exproducts:item10245   exterms:weight   "2.4"^^xsd:decimal .

有一個URIref exproducts:triple12345,這個陳述可以簡單地通過下面的陳述讓其歸屬於John Smith:

 exproducts:triple12345   dc:creator   exstaff:85740 .

而沒有用具體化辭彙(儘管加上exproducts:triple12345的rdf:type是rdf:Statement可能是有益的)。

另外,具體化辭彙在使用時,可以直接遵照上述的慣例,並附帶應用相關的對如何把特定的三元組和其具體化關聯起來的理解。然而,其他收到這個RDF資料的應用不一定能夠分享這個應用相關的理解,因此不一定能夠正確地解釋這個圖。

還有一點需要重視:這裏講述的具體化的解釋和一些語言中的"引用"(quotation)不同。具體化描述了一個特定的三元組的實例和這三元組提及的資源之間的關係,具體化可以直觀地理解為:這個三元組說的是這些事物,而不是在引用中的:這個三元組有這個形式。例如,在這節中的具體化例子中,三元組

exproducts:triple12345 rdf:subject exproducts:item10245 .

描述了原來的陳述的rdf:subject, 是說陳述的主體是由URIref exproducts:item10245標識的資源(那個帳篷)。它不是像引用那樣說陳述的主體是這個URIref本身(一個由一些字元開頭的字串)。


4.4 關於結構化值(rdf:value)的更多資訊

2.3節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#structuredproperties)注意到RDF模型本質上只支援二元關係,也就是說,一個陳述表示了兩個資源之間的關係。例如,陳述:

 exstaff:85740   exterms:manager   exstaff:62345 .

說兩個雇員之間有exterms: manager關係(一個管理另一個)。

然而,有些情況下有必要在RDF中表示多元關係(多於兩個資源之間的關係)。2.3節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#structuredproperties) 討論了一個例子,這個例子的問題是要表示John Smith和他的位址資訊,即一個由街道,城市,州,郵遞區號組成的結構。可以看出這個位址資訊是一個5元關係。

 address(exstaff:85740, "1501 Grant Avenue", "Bedford", "Massachusetts", "01730")

2.3節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#structuredproperties)注意到這種結構化的資訊可以通過聚集一部分資訊作為一個單獨的資源(這裏,John's的位址資訊),然後對這個新資源發表單獨的陳述,如下面的三元組所示:

 exstaff:85740   exterms:address        _:johnaddress .
_:johnaddress exterms:street "1501 Grant Avenue" .
_:johnaddress exterms:city "Bedford" .
_:johnaddress exterms:state "Massachusetts" .
_:johnaddress exterms:postalCode "01730" .

(其中_:johnaddress是表示John's的位址的匿名節點的標識) 這是在RDF中表示N元關係的一般方法:選出關係中的一個元素(這裏是John)作為關係(這裏是address)的主體,指定一個中間的資源來表示關係中剩下的部分,然後把關係剩下部分都作為這個中間資源的屬性。

在John 的位址資訊中,沒有一個部分能夠作為屬性exterms:address的主值(main value),所有部分對值的貢獻是相同的。然後,有時候,結構中的一部分可以作為結構的主值,其他部分提供上下文資訊或其他對主值的修飾資訊。例如,在3.2節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#newresources)例9 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example9) 中,一個帳篷的重量的值是小數2.4,也就是,

 exproduct:item10245   exterms:weight   "2.4"^^xsd:decimal .

實際上,更為複雜的對重量的描述應該是2.4千克( kilograms),而不是僅僅小數2.4。為了表示這個,屬性exterms:weight的值還需要2個部分:作為類型文字的數值和量度的單位(千克)。在這種情況下,數值可以看成屬性exterms:weight的主值,因為一般這個值都是一個類型文字,而依賴對上下文資訊來填充這個值的單位。

在RDF模型中,這種類型的帶有修飾的屬性值可以看成一種簡單的結構化值。為了表達這個,一個單獨的資源可以用來表示結構化值,且作為原來陳述的客體。這個資源可以有屬性表示結構值中的部分。在這裏,應該有個屬性表示數值,還一個屬性表示單位。RDF提供了一個預定義的屬性rdf:value來描述結構值中的主值。因此,這裏的數值可以作為rdf:value的值,資源exunits:kilograms作為屬性exterms:units的值(假設資源exunits:kilograms定義為example.org的辭彙集的一部分)。結果,這些三元組為:

 exproduct:item10245   exterms:weight   _:weight10245 .
_:weight10245 rdf:value "2.4"^^xsd:decimal .
_:weight10245 exterms:units exunits:kilograms .

這可以用RDF/XML表示,如例21 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example21)所示:

例21:用rdf:value的RDF/XML表示

 <?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:exterms="http://www.example.org/terms/">

<rdf:Description rdf:about="http://www.example.com/2002/04/products#item10245">
<exterms:weight rdf:parseType="Resource">
<rdf:value rdf:datatype="&xsd;decimal">2.4</rdf:value>
<exterms:units rdf:resource="http://www.example.org/units/kilograms"/>
</exterms:weight>
</rdf:Description>

</rdf:RDF>

例21 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example21)也顯示了對4.2節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#collections)介紹的屬性rdf:parseType的用法,在這裏,rdf:parseType="Resource"用以表示節點的內容同時被解釋為一個新的匿名節點,而不用寫一個嵌套的rdf:Description元素。rdf:parseType="Resource" 用在屬性 exterms:weight 元素節點中表示創建了一個匿名節點作為屬性的值,且包含的元素 (rdf:value 和 exterms:units) 描述了這個匿名節點的屬性。關於rdf:parseType="Resource"更詳細的資訊在[RDF-SYNTAX].

相同的方法也可用於表示具有任何單位的數量,用rdf:value屬性表示主值,用其他的屬性表示關於數量的其他資訊。

但沒有必要用rdf:value去取代用戶自定義的屬性,如例21 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example21)中的屬性exterms:amount, 因為RDF並沒有給rdf:value特殊的解釋。它只是作為表示這種情形的慣例。

然而,儘管大部分資料庫中和Web上的資料用簡單的數值作為屬性(如,重量,價格等)的值,這種簡單的數值往往不足夠描述這些值。在像Web這樣的環境,一般來說,假設其他人訪問屬性的值的時候能知道它的單位(或其他上下文相關的資訊)是不穩妥的。例如,一個美國的網站給出重量的單位默認是磅,但非美國的人訪問這個資料的時候常假設單位是公斤。對Web上資料的正確解釋可能需要其他的資訊,如單位資訊。這有很多種方法:例如,用rdf:value,把單位資訊放在屬性名字種,如屬性exterms:weightInKg包含了資料的單位資訊。或者,加上用戶自定義的的資訊,如exterms:unitOfWeight, 在物品或產品實例的描述中,在一個資料集的描述中,或者在Schema中(參考第5節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfschema)


4.5 XML文字

有時候,屬性的值可能是一個XML的片斷,或包含XML標記的文本。例如,出版社可能要維護一些RDF元資料,包括書和文章的標題。當然,這些標題可能是簡單的字串,但並不總是這樣。例如,數學書的標題可能包含用MathML [MATHML (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-mathml)]表示的數學公式。標題還可能因為其他原因包含標記,如 Ruby標注 [RUBY (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-ruby)], 或者雙相的顯示特殊的浮雕型變數。 ([CHARMOD (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-charmod)])

RDF/XML提供了一個特殊的符號,使書寫這種文字變得簡單。即通過屬性rdf:parseType第三個值,如果一個元素節點的有屬性節點rdf:parseType="Literal",表明這個元素節點的內容應該被解釋為一個XML片斷。例22 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example22) 演示了這種用法。

例22:一個XML文字的RDF/XML表示

 <?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xml:base="http://www.example.com/books">

<rdf:Description rdf:ID="book12345">
<dc:title rdf:parseType="Literal">
<span xml:lang="en">
The <em>&lt;br /&gt;</em> Element Considered Harmful.
</span>
</dc:title>
</rdf:Description>

</rdf:RDF>

Example 22 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example22) 中的RDF/XML 描述了一個包含了一個三元組的圖,這個三元組的主體是ex:book12345, 謂詞是dc:title. 屬性節點 rdf:parseType="Literal" 表示元素節點 <dc:title> 下的內容是一個XML片斷,即作為屬性dc:title的值。在這個圖中,值是類型為rdf:XMLLiteral 的類型文字。[RDF-CONCEPTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)] 特意定義rdf:XMLLiteral作為表示XML片斷的資料類型。這些XML片斷都是根據XML Exclusive Canonicalization recommendation [XML-XC14N (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xml-xc14n)]規範化了的,這導致了一些轉換,如為XML片斷加上已用的名字空間聲明,統一的字元轉義或去轉義,空元素的擴展。(因為這些原因以及三元組的標注本身需要一些轉義符,這裏不顯示真正的類型文字。RDF/XML 提供了屬性 rdf:parseType="Literal" 使RDF用戶不用進行這些轉換。詳細資訊請參考[RDF-CONCEPTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)] 和 [RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)].) 一些上下文屬性,如xml:lang 和 xml:base 並不會從RDF/XML文檔中繼承,如果需要的化,如上例所示,必須在XML片斷中給出。

這個例子表明了書寫RDF資料是要謹慎。乍看,標題的值是用平凡文字表示的簡單字串,後來又發現會包含XML標記。如果一個屬性的值有時包含XML標記,有時有不包含,應該都用rdf:parseType="Literal",或者軟體應該能處理屬性的值可能是平凡文字和rdf:XMLLiteral類型的文字的情況。


5. RDF Schema - 定義RDF的辭彙表

RDF使用命名特性和值來表達與資源有關的簡單聲明。但是,在某些情況下,用戶希望能夠根據需要自定義一些辭彙,然後用這些辭彙來描述資源。這些辭彙表明用戶正在描述某種資源,並且會採用某些特定的特性來描述。例如,3.2節所舉例子中,example.com 公司想要描述一個類:exterms:Tent,並且使用特性 exterms:model,exterms:weightInKg 和 exterms:packedSize來描述它們。(這些類和特性的名字之前帶有各種"example"名稱空間首碼,表明:在RDF中,這些名字其實都是RUI引用 ,2.1小節中已經討論過這個問題)。類似的情況,那些對圖書資源比較感興趣的RDF開發人員可能會描述 ex2:Book或者ex2:MagazineArtical這樣的類,並使用ex2:author, ex2:title ,ex2:subject之類的特性來描述這些類。其他的一些應用可能會描述諸如ex3:Person、ex3:Company 這樣的類和ex3:age 、ex3:jobTitle、ex3:stockSymbol 、ex3:numberofEmployee之類的一些特性。RDF本身並不能針對特定應用需求來定義一些類和特性。這些類和特性被稱為RDF辭彙,它們需要通過RDF辭彙描述語言:RDF Schema(RDF的一種擴展語言) 來定義。

RDF Schema 並沒有針對特定應用提供諸如 exterms:Tent , ex2:Book 或者 ex3:Person這樣的一些類或者是諸如 exterms:weightInKg ex2:author 或者 ex3:JobTitle 這樣的一些特性辭彙。RDFS只是提供了描述一種這些類和特性的能力 (facilities),並且可以暗示某些類和特性期望合在一起使用(例如,特性 ex3:jobTitle 應該用來描述ex3:Person)。換句話說,RDF Schema為RDF提供了一個類型系統。RDF Schema 類型系統在某些方面類似於Java這樣的面向物件編程語言的類型系統。例如,RDF Schema允許資源被定義為一個或者多個類的實例。另外,RDFS通常把類組織成為一種分級結構;例如,類 ex:Dog可以定義為ex:Mammal的子類,而ex:Mammal又是ex:Animal的子類。 如果某個資源是類 ex:Dog的實例,那麼隱含意味著它也是ex:Animal的實例。然而,RDF 類和特性在某些方面又與編程語言的類型系統有著明顯的差異。RDF類和特性並沒有過多束縛資源的描述方式,而是提供了一些關於RDF 資源的額外描述資訊。這些添加的資訊可以通過各種方式來使用,具體內容將在5.3節中介紹。

RDF Schema 所具有的這些能力本身也是以 RDF辭彙形式提供的。也就是說,這些RDF 辭彙是一組帶有特殊含義的、預定義的RDF資源。 這些資源的(RDF Schema辭彙)URI帶有首碼 http://www.w3.org/2000/01/rdf-schema# (QName通常採用首碼 rdfs:)。採用RDF Schema 語言所定義的辭彙描述(schemas)也是合法的RDF圖。因此,即使一個軟體不是專為處理新加的RDF Schema辭彙而開發的,它仍然可以將schema解釋為一個包含了各種資源和特性的合法RDF圖,但是這個軟體並不能"理解"新添加的RDF Schema術語的內在含義。為了理解新加術語的含義,RDF 軟體必須能夠處理一種擴展語言。這種擴展語言不僅僅包含rdf:首碼的辭彙,而且還包含了rdfs:首碼的辭彙,以及這些辭彙的內在含義。下一小節中將對這一點進行詳細分析。

下一小節將詳細分析RDF Schema的基本資源和特性。


5.1 描述類

描述過程通常從劃分被描述事物的種類開始。RDF Schema把事物的種類稱之為類(class)。RDF Schema中的類(class)與我們通常所說的類型(Type)或者分類(Category)基本相同,有點類似於面向物件編程語言(比如Java)中的類(class)的概念。RDF類可以用來表示事物的任何分類,例如網頁、人、文檔類型、資料庫或者抽象概念等。類可以通過RDF Schema中的資源(rdfs:Class和rdfs:Resource)以及特性(rdf:type和rdfs:subClassOf)來表示。

例如,假設example.org這個組織想用RDF來提供有關不同種類機動車(Motor vehicles)的資訊,那麼它在RDF Schema中首先需要一個代表機動車這一分類(category)的類(class)。屬於某個類(class)的資源被稱為該類的實例(instances)。在本例中,所有是機動車的資源都是這個類的實例。

在RDF Schema中,一個是任何具有rdf:type特性、並且該特性的值為rdfs:Class的資源。因此,可以這樣來描述一個機動車類:為該類指定一個URIref,比如ex:MotorVehicle(其中的首碼 ex: 代表URIref http://www.example.org/schemas/vehicles,ex: 被用作example.org辭彙表中的所有URIrefs的首碼),然後將這個機動車類描述為一個具有rdf:type特性、並且特性值為rdfs:Class的資源。也就是說,example.org應該編寫如下的RDF聲明:

 ex:MotorVehicle   rdf:type   rdfs:Class .

正如在3.2節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#newresources)中所討論的那樣,特性rdf:type用來表明一個資源是某個類的實例。因此,將ex:MotorVehicle描述為類之後,可以用下面的RDF聲明來描述資源exthing:companyCar是一個機動車:

 exthings:companyCar   rdf:type   ex:MotorVehicle .

(在書寫上述RDF聲明時,遵守了一些約定,即:將類名的首字母大寫,而將特性和實例名稱的首字母小寫。但是,RDF Schema並不強制要求這一點。上述RDF聲明也假定:example.org已分別為事物的類(classes)和事物的實例(instances)定義了兩個不同的辭彙表[譯注//這兩個辭彙表分別在ex:和exthings:所代表的命名空間裏定義]。)

rdfs:Class本身也是資源,而且也有一個rdf:type特徵並且該特性的值為rdfs:Class。一個資源可以是一個或多個類的實例.

example.org在描述了ex:MotorVehicle類之後,也許還要再定義一些類來代表各種特定種類的機動車,例如客車(passenger vehicles)、大篷貨車(vans)、小型貨車(minivans)等等。這些類可以採用和類ex:MotorVehicle同樣的方法來定義:首先為每個新建的類指定一個URIref,然後編寫如下的RDF聲明將這些資源定義為類:

 ex:Van     rdf:type   rdfs:Class .
ex:Truck rdf:type rdfs:Class .

但是上面這些聲明本身只是對單個的類的定義。example.org可能還要描述上面定義的類與類ex:MotorVehicle之間的特定關係,比如它們是機動車(MotorVehicle)中的一

這種兩個類之間的特化關係(specialization relationship)可以用預定義的特性rdfs:subClassOf來描述。例如,可以通過編寫下面這條RDF聲明來描述ex:Van是一種特殊的ex:MotorVehicle:

 ex:Van   rdfs:subClassOf   ex:MotorVehicle .

在上面的例子中,rdfs:subClassOf的含義是:任何ex:Van類的實例同時也是ex:MotroVehicle類的實例。因此,如果資源exthings:companyVan是ex:Van的一個實例,那麼理解RDF Schema辭彙表的RDF軟體可以根據上面聲明的rdfs:subClassOf關係推理出額外的有用資訊,即exthings:companyVan也是ex:MotorVehicle的一個實例。

exthings:companyVan的例子說明了一點,即RDF Schema可以定義一種擴展語言。但是,RDF本身並沒有定義RDF Schema中的辭彙(比如 rdfs:subClassOf)所具有的含義。因此,即時某個RDF schema[譯注//注意RDF Schema與RDF schema的區別]定義了ex:Van和ex:MotorVehicle之間的rdfs:subClassOf關係(通過編寫一個RDF聲明),但是對於不理解RDF Schema術語的RDF軟體來說,這個RDF聲明只是一個以rdfs:subClassOf為謂詞的三元組,該RDF軟體並不能理解rdfs:subClassOf所代表的含義,因此也不能據此得到額外的結論:exthing:companyVan也是ex:MotorVehicle的實例。

rdfs:subClassOf特性具有傳遞性(transitive)。也就是說,如果給出下列RDF聲明:

 ex:Van       rdfs:subClassOf   ex:MotorVehicle .
ex:MiniVan rdfs:subClassOf ex:Van .

這些聲明可以推理出ex:MiniVan同時也是ex:MotroVehicle的子類。相應的,如果RDF Schema定義了某個資源是ex:MiniVan的實例,那麼它也是ex:MotorVehicle的實例(同時也是類ex:Van的實例)。一個類可以是一個或多個類的子類。(例如:ex:MiniVan可以同時為ex:Van和ex:PassengerVehicle的子類)。RDF Schema規定:所有的類總是rdfs:Resource的子類(因為任何類的實例都是資源)。

圖18 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure18)是上面這些例子的一個完整的類層次圖。

vehicleClassesJan12.png

圖18:車輛類層次圖

為了簡化起見,圖18 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure18)中將連接類和rdfs:Class的rdf:type特性全部省略了。事實上,根據RDF Schema的定義,一個以rdfs:subClassOf為謂詞的聲明中的主體和客體都應該是rdfs:Class類型的資源。因此,這些資訊可以推理出來,不過在實際編寫schema的時候,明確聲明這些資訊是一種比較好的編碼風格。

上圖所示的schema可以用下列三元組來描述:

 ex:MotorVehicle       rdf:type          rdfs:Class .
ex:PassengerVehicle rdf:type rdfs:Class .
ex:Van rdf:type rdfs:Class .
ex:Truck rdf:type rdfs:Class .
ex:MiniVan rdf:type rdfs:Class .
 ex:PassengerVehicle   rdfs:subClassOf   ex:MotorVehicle .
ex:Van rdfs:subClassOf ex:MotorVehicle .
ex:Truck rdfs:subClassOf ex:MotorVehicle .
 ex:MiniVan            rdfs:subClassOf   ex:Van .
ex:MiniVan rdfs:subClassOf ex:PassengerVehicle .

上述schema可用例23 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example23)所示的RDF/XML來書寫。

例23:用RDF/XML書寫的車輛類層次圖

 <?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<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://example.org/schemas/vehicles">
<rdf:Description rdf:ID="MotorVehicle">
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
</rdf:Description>
<rdf:Description rdf:ID="PassengerVehicle">
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<rdfs:subClassOf rdf:resource="#MotorVehicle"/>
</rdf:Description>
<rdf:Description rdf:ID="Truck">
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<rdfs:subClassOf rdf:resource="#MotorVehicle"/>
</rdf:Description>
<rdf:Description rdf:ID="Van">
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<rdfs:subClassOf rdf:resource="#MotorVehicle"/>
</rdf:Description>
<rdf:Description rdf:ID="MiniVan">
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<rdfs:subClassOf rdf:resource="#Van"/>
<rdfs:subClassOf rdf:resource="#PassengerVehicle"/>
</rdf:Description>
</rdf:RDF>

正如3.2節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#newresources)以及例13 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example13)中所討論的,RDF/XML提供了一種簡寫形式來描述具有rdf:type特性的資源(類型結點)。因為RDF Schema的類同時也是RDF資源,這種簡寫形式可以應用於對類的描述。上述的schema也可以使用這種簡寫形式來描述,如例24所示:

例24:使用類型節點的機動車類層次簡寫形式

 <?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<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://example.org/schemas/vehicles">
<rdfs:Class rdf:ID="MotorVehicle"/>
<rdfs:Class rdf:ID="PassengerVehicle">
<rdfs:subClassOf rdf:resource="#MotorVehicle"/>
</rdfs:Class>
<rdfs:Class rdf:ID="Truck">
<rdfs:subClassOf rdf:resource="#MotorVehicle"/>
</rdfs:Class>
<rdfs:Class rdf:ID="Van">
<rdfs:subClassOf rdf:resource="#MotorVehicle"/>
</rdfs:Class>
<rdfs:Class rdf:ID="MiniVan">
<rdfs:subClassOf rdf:resource="#Van"/>
<rdfs:subClassOf rdf:resource="#PassengerVehicle"/>
</rdfs:Class>
</rdf:RDF>

本節其餘部分都將採用相似的類型節點簡寫形式。

例23 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example23)例24 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example24)中的RDF/XML為那些具有rdf:ID特性的資源(類)指定了資源名稱(例如:MotorVehicle),這相當於為資源(類)指派了一個相對于schema文檔的URIrefs(參見3.2節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#newresources)的描述)。這裏的rdf:ID非常有用,因為它不僅僅是URIrefs的簡寫形式,同時還提供了一種額外檢查,即確保rdf:ID屬性的值相對於當前的基準URI(通常的情況下就是本文檔URI)是唯一的。在RDF schemas中定義類和特性的名稱時,這種機制有助於發現重複的rdf:ID值。在同一個schema中,基於這些名字的相對URIrefs可以在其他類的定義中被引用。(例如,可以在其他類的描述中用#MotorVehicle來引用MotorVehicle類)。假定schema本身的URI是 http://example.org/schemas/vehicles ,那麼MotorVehicle類的完整URIref就是 http://example.org/schemas/vehicles#MotorVehicle (如圖18 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure18)所示)。正如3.2節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#newresources)所指出的,schema可能被移動或複製(或者只是為schema中的類指定一個基準URIref,而不假定它們被發佈在同一個位置)。為了確保在這些情況下對schema中類的引用能夠維持一致,可以在定義這些類的時候顯式聲明一個基準URI(即增加屬性 xml:base="http://example.org/schemas/vehicles" )。顯式聲明xml:base是一種良好的編碼風格,前面兩個例子就是這樣做。

為了在別處的RDF實例資料(即描述屬於某個類的個體的資料)中引用這些類,example.org可採取下列方式:聲明一個恰當的xml:base,並書寫相對URIrefs,然後根據這兩者所確定的絕對URIrefs來標識類;或者,聲明一個恰當的名字空間,並書寫QNames,然後根據由QName展開得到的絕對URIrefs來標識類。例如,在例25 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example25)所示的RDF/XML中,資源exthings:companyCar可被描述為類ex:MotorVehicle(在例24 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example25)中定義的)的一個實例:

例25:一個ex:MotorVehicle類的實例

 <?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ex="http://example.org/schemas/vehicles#"
xml:base="http://example.org/things">
<ex:MotorVehicle rdf:ID="companyCar"/>
 </rdf:RDF>

注意:QName ex:MotorVehicle將根據命名空間聲明 xmlns:ex="http://example.org/schemas/vehicles#" 展開為完整的URIref http://example.org/schemas/vehicles#MotorVehicle,即MotorVehicle類的URIref(見圖18 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure18))。xml:base聲明 xml:base=http://example.org/things 用於將rdf:ID="companyCar"展開為exthings:companyCar所對應的URIref(這裏沒有採用前一種機制是因為QName不能作為rdf:ID屬性的值)。

5.2 描述特性

用戶除了描述他們想要描述的類(classes),通常還需要能夠定義刻畫這些類的特性(properties)(例如用rearSeatLegRoom來描述一個客車)。在RDF schema中,特性是用RDF類rdf:Property以及RDF Schema特性rdfs:domain(定義域)、rdfs:range(值域)以及rdfs;subPropertyOf來描述的。

RDF中的所有特性都被描述為類rdf:Property的實例。因此一個新特性(例如exterms:weigntInKg)的描述是通過為它指派一個URIref,並使用一個值為rdf:Property的rdf:type特性來完成的。例如,書寫如下的RDF聲明:

 exterms:weightInKg   rdf:type   rdf:Property .

RDF Schema還提供了一些辭彙用於描述如何在RDF資料中正確使用特性和類。其中最重要的一個資訊是由RDF Schema特性rdfs:range和rdfs:domain提供的,它們用於進一步描述與應用相關的特性。

rdfs:range用於表明某個特性的值(定義域)是給定類的實例。例如,如果example.org想要表明"特性ex:author的值是類ex:person的實例",那麼可以寫出如下的RDF聲明:

 ex:Person   rdf:type     rdfs:Class .
ex:author rdf:type rdf:Property .
ex:author rdfs:range ex:Person .

上述聲明表明:ex:person是一個類,ex:author是一個特性,並且對於使用ex:author特性的RDF聲明,其客體(Object)是ex:person類的實例。

一個特性(比如ex:hasMother)可以有零個、一個、或多個range特性。如果ex:hasMother沒有range特性,那麼對ex:hasMother特性的值而言,就沒有什麼限制。如果ex:hasMother有一個range特性限制,例如指定ex:Person作為其值域,這表明ex:hasMother特性的值是類ex:Person的實例。如果ex:hasMother有多個range特性,例如在指定ex:person為它的range特性的同時,還指定了ex:Femal作為它的range特性,這說明了ex:hasMother特性的值是所有被指定的類的實例。例如,ex:hasMother的值既是一個ex:Femal又是一個ex:Person

最後一點並不是十分明顯,即:實際上,為特性ex:hasMother指定兩個range(ex:Femal和ex:person)涉及到兩個獨立的聲明:

 ex:hasMother   rdfs:range   ex:Female .
ex:hasMother rdfs:range ex:Person .

對於任何用到上述特性的聲明,比方說:

 exstaff:frank   ex:hasMother   exstaff:frances .

為確保兩個rdfs:range聲明正確,exstaff:frances必須同時是ex:Femal和ex:Person類的實例。

rdfs:range特性也可用於表明特性的值是一個類型文字(typed literal,見2.4節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#typedliterals))。例如,如果example.org要表明特性ex:age的值來自XML Schema資料類型xsd:integer,它應書寫如下RDF聲明:

 ex:age   rdf:type     rdf:Property .
ex:age rdfs:range xsd:integer .

資料類型xsd:integer是通過URIref(完整的URIref為 http://www.w3.org/2001/XMLSchema#integer )來標識的。可以不在schema中顯式聲明該URIref標識某個資料類型而直接使t用它。然而,顯式聲明一個給定的URIref標識某個資料類型常常是有用的。這可以通過使用RDF Schema類rdfs:Datatype來完成。要聲明xsd:integer是一個資料類型,example.org應書寫如下RDF聲明:

 xsd:integer   rdf:type   rdfs:Datatype .

這個聲明的含義是:xsd:integer是某個資料類型(它被假定符合[RDF-CONCEPTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)]中所描述的RDF資料類型要求)的URIref。這一聲明並構成一個資料類型的定義,即仿佛example.org是在定義一個新的資料類型。在RDF Schema中,沒有可用來定義資料類型的方式。正如在2.4節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#typedliterals)中提到的,資料類型是在RDF(甚至是RDF Schema)之外定義、然後在RDF中通過它們的URIrefs來引用的。上述聲明的作用僅僅是記錄該資料類型的存在,並顯式表明它在schema中被用到。

rdfds:domain用於表明某個特性應用於指定的類(定義域)。例如,如果example.org要表明特性ex:author應用於類ex:Book的實例上,它應書寫如下RDF聲明:

 ex:Book     rdf:type      rdfs:Class .
ex:author rdf:type rdf:Property .
ex:author rdfs:domain ex:Book .

上述聲明表明ex:Book是類,ex:author是特性。而使用ex:author特性的RDF聲明以ex:Book的實例為主體。

一個給定的特性(例如exterms:weight)可能有零個、一個或多個domain特性。如果exterm:weight沒有domain特性,那麼便沒有規定exterms:weight特性對應的主體是某類資源,也就是說任何資源都可以作為exterms:weight特性的主體。如果exterms:weight有一個domain特性,例如指定ex:Book作為其定義域,這表明exterms:weight特性應用於類ex:Book的實例。如果exterms:weight有多個domain特性,例如一個domain特性指定其定義域為ex:Book,另一個domain特性指定其定義域為ex:MotorVehicle,這表明具有exterms:weight特性的資源是所有被指定為定義域的類的實例,即具有exterms:weight特性的資源既是ex:Book類的實例又是ex:MotorVehicle類的實例(對待具體問題,需要認真分析、仔細地指定定義域和值域)。

與rdfs:range的情況一樣,最後一點可能不是非常明顯,即:實際上,為特性exterms:weight聲明兩個定義域(ex:Book和ex:MotorVehicle)涉及到兩個獨立的聲明:BR>

 exterms:weight   rdfs:domain   ex:Book .
exterms:weight rdfs:domain ex:MotorVehicle .

對於任何用到該特性的聲明,比方說:

 exthings:companyCar   exterms:weight   "2500"^^xsd:integer .

為了保證兩個rdfs:domain聲明是正確的,必須保證exthings:companyCar同時是ex:Book和ex:MotorVehicle類的實例。

我們可以擴展車輛類的schema來舉例說明值域(range)和定義域(domain)描述的使用方法:增加兩個特性ex:registeredTo和ex:rearSeatLegRoom,然後添加一個新的類ex:Person,並顯式地將xsd:integer聲明為資料類型。ex:registerdTo特性應用於任何ex:MotorVehicle,並且它的值是ex:Person。對本例而言,ex:rearSeatLegRoom僅僅應用到ex:PassengerVehicle類的實例上,其值是一個xsd:integer(該值給定了後座的腳部活動空間的釐米數)。例26 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example26)顯示了這些描述的RDF/XML:

例26:車輛schema的一些特性描述

 <rdf:Property rdf:ID="registeredTo">
<rdfs:domain rdf:resource="#MotorVehicle"/>
<rdfs:range rdf:resource="#Person"/>
</rdf:Property>
<rdf:Property rdf:ID="rearSeatLegRoom">
<rdfs:domain rdf:resource="#PassengerVehicle"/>
<rdfs:range rdf:resource="&xsd;integer"/>
</rdf:Property>
<rdfs:Class rdf:ID="Person"/>
<rdfs:Datatype rdf:about="&xsd;integer"/>

注意:例26 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example26)中沒有使用<rdf:RDF>元素,因為這裏的RDF/XML片斷將被添加到了例24 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example24)所示的車輛schema中。同理,這裏可以使用相對Urirefs(比如#MotorVehicle)來引用該schema中的類。

RDF Schema提供了一種方法來像描述類的特化關係一樣來描述特性之間的特化關係。這種兩個特性之間的特化關係可以使用預定義的rdfs:subPropertyOf特性來描述。例如,如果ex:primaryDriver和ex:driver都是特性,則example.org可以通過下列RDF聲明來描述"ex:primaryDriver是ex:driver的特化":

 ex:driver          rdf:type             rdf:Property .
ex:primaryDriver rdf:type rdf:Property .
ex:primaryDriver rdfs:subPropertyOf ex:driver .

rdfs:subPropertyOf關係的含義在於,如果一個實例exstaff:fred是實例ex:companyVan的一個ex:primaryDriver,那麼RDF Schema定義exstaff:fred也是ex:companVan的一個ex:driver 。例27 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example27)所示的RDF/XML描述了這些特性(同樣,該RDF/XML片斷將被添加到例24 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example24)所示的車輛schema中)

例27:車輛schema中其他的特性

 <rdf:Property rdf:ID="driver">
<rdfs:domain rdf:resource="#MotorVehicle"/>
</rdf:Property>
<rdf:Property rdf:ID="primaryDriver">
<rdfs:subPropertyOf rdf:resource="#driver"/>
</rdf:Property>

一個特性可以是零個、一個或多個特性的子特性(subproperty)。當RDF Schema中的rdfs:range和rdfs:domain特性應用於某個RDF特性時,它們也會應用於該RDF特性的子特性。因此,在上面的例子中,RDF Schema定義了ex:primaryDriver也具有rdfs:domain約束(值為ex:MotorVehicle),因為ex:primaryDriver是ex:driver的子特性。

例28 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example28)是車輛schema的完整RDF/XML代碼,包括了到目前為止的所有描述。

例28:完整的車輛schema

 <?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<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://example.org/schemas/vehicles">
<rdfs:Class rdf:ID="MotorVehicle"/>
<rdfs:Class rdf:ID="PassengerVehicle">
<rdfs:subClassOf rdf:resource="#MotorVehicle"/>
</rdfs:Class>
<rdfs:Class rdf:ID="Truck">
<rdfs:subClassOf rdf:resource="#MotorVehicle"/>
</rdfs:Class>
<rdfs:Class rdf:ID="Van">
<rdfs:subClassOf rdf:resource="#MotorVehicle"/>
</rdfs:Class>
<rdfs:Class rdf:ID="MiniVan">
<rdfs:subClassOf rdf:resource="#Van"/>
<rdfs:subClassOf rdf:resource="#PassengerVehicle"/>
</rdfs:Class>
<rdfs:Class rdf:ID="Person"/>
<rdfs:Datatype rdf:about="&xsd;integer"/>
<rdf:Property rdf:ID="registeredTo">
<rdfs:domain rdf:resource="#MotorVehicle"/>
<rdfs:range rdf:resource="#Person"/>
</rdf:Property>
<rdf:Property rdf:ID="rearSeatLegRoom">
<rdfs:domain rdf:resource="#PassengerVehicle"/>
<rdfs:range rdf:resource="&xsd;integer"/>
</rdf:Property>
<rdf:Property rdf:ID="driver">
<rdfs:domain rdf:resource="#MotorVehicle"/>
</rdf:Property>
<rdf:Property rdf:ID="primaryDriver">
<rdfs:subPropertyOf rdf:resource="#driver"/>
</rdf:Property>
</rdf:RDF>

前面說明了如何使用RDF Schema來描述類和特性,現在可以講述使用這些類和特性的實例了。例如, 例29 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example29)描述了一個ex:passengerVehicle類(見例28 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example28))的實例,並為它的一些特性賦了值。

例 29:一個ex:PassengerVehicle類的實例

 <?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ex="http://example.org/schemas/vehicles#"
xml:base="http://example.org/things">
<ex:PassengerVehicle rdf:ID="johnSmithsCar">
<ex:registeredTo rdf:resource="http://www.example.org/staffid/85740"/>
<ex:rearSeatLegRoom
rdf:datatype="&xsd;integer">127</ex:rearSeatLegRoom>
<ex:primaryDriver rdf:resource="http://www.example.org/staffid/85740"/>
</ex:PassengerVehicle>
</rdf:RDF>

本例假定實例與schema是分別在不同的文檔中描述的。由於schema以http://example.org/schemas/vehicles作為其XML base(即作為xml:base屬性的值),因此在實例資料[譯注//如5.1節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#schemaclasses)所述,即描述屬於某個類的個體的資料]中用命名空間聲明xmlns:ex="http://example.org/schemas/vehicles#"來保證QNames(如ex:registeredTo)得以展開為正確的、標識schema中類和特性的URIrefs。實例描述中也使用了一個xml:base聲明,用於將rdf:ID="johnSmithsCar"中的johnSmithsCar展開為正確的絕對URIref,而絕對URIrefs的展開過程是根據xml:base進行的,與當前文檔的位置無關。

注意,ex:registeredTo特性可被用來描述ex:PassengerVehicle類的實例,因為ex:PassengerVehicle是ex:MotorVehicle的子類。也要注意到,在實例描述中,ex:rearSetLegRoom特性的值是一個類型文字(typed literal),而不是平凡文字(plain literal)(它不是通過<ex:rearSeatLegRoom>127</ex:rearSeatLegRoom>的方式來指定值)。因為schema中描述了該特性的值域(range)為一個xsd:integer,因此該特性的值應該是一個資料類型為xsd:interger的類型文字以滿足值域限制(即值域聲明並不會自動地將平凡文字指派為某種資料類型,因此必須顯式提供一個具有正確資料類型的類型文字)。正如4.4節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfvalue)中所討論的那樣,可以在schema或者附加的實例資料中提供一些額外資訊來顯式指定ex:rearSetLegRoom特性的單位(釐米)。


5.3 解釋RDF Schema聲明

正如前所述,RDF Schema的類型系統與面向物件編程語言(如Java)的類型系統很相似,然而,RDF與大部分程式設計語言的類型系統在幾個重要方面是有區別:

一個重要的區別是:RDF Schema描述屬性可以作用於哪些特定的類(通過domainrange屬性),而不是(像面向物件類型系統)描述類具有哪些特定屬性的集合。例如:在一個典型的面向物件編程語言中,類 Book會定義為有一個屬性author,且author的類型是Person;而在RDF Schema中,類ex:Book和屬性ex:author都會被分開定義,另外,屬性ex:author的定義域是ex:Book,值域是ex:Person。

這兩種定義方法的區別表面上看起來只是語法層次上的,其實,他們有著重大的區別。在程式設計語言中,屬性author是關於類Book的描述的一部分,而且只能應用於類Book的實例。如果另外一個類,例如SoftwareModule也有個屬性author,這兩個author屬性被看成是不同的屬性。因為在大多數編程語言中,屬性的作用域局部與它被定義的類或類型的。而在RDF中,缺省地,屬性的描述是獨立於類描述的,並且屬性的作用域是全局的(儘管可以它們可被聲明為只能應用於某些類)。

一個結果是:RDF Schema可以描述一個不指定定義域的屬性,如exterms:weight這個屬性可以用來描述任何具有重量(weight)屬性的類的實例。RDF的以屬性為中心的方法的一個好處是:擴展屬性的用途使其應用于最初定義時未預知的情形更為容易。同時,這個"好處"也要謹慎使用,以免屬性錯誤應用於不恰當的情形。

RDF屬性的全局作用域的另外一個結果是:無法在RDF Schema中定義一個根據所描述類(即定義域)的不同而具有不同值域的屬性。例如,在定義屬性ex:hasParent時,如果這個屬性用於描述類ex:Human,則這個屬性的值域是ex:Human;如果這個屬性用於描述類ex:Tiger,則這個屬性的值域是ex:Tiger,這樣定義屬性顯然更為合適。但這種定義方法無法在RDF Schema中實現。對一個RDF屬性的值域的任何定義將應用於用到該屬性的所有地方。因此,定義值域時應謹慎。然而,雖然不能在RDF Schema中定義這種局部相異的屬性值域,但在5.5節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#richerschemas)中討論的表達能力更強的模式語言中可以定義。

另外一個重要的區別是:RDF Schema的描述不一定像程式設計語言的類型聲明那樣是規約性的(prescriptive)。例如,如果在某個程式設計語言中,類Book被定義為有一個屬性author,且author的類型是Person,這通常被解釋為一組約束。該語言不會允許Book的一個實例沒有author屬性,也不會允許Book的一個實例的book屬性值的類型不是Person。更為重要的是,如果author的定義為類Book的唯一屬性,該語言不會允許Book的實例具有其他的屬性。

相反,RDF Schem提供的模式資訊是作為對資源的額外描述(descriptions),並不會限制這些描述怎樣被用於一個應用。例如,假設一個RDF Schema中定義了屬性ex:author的值域(rdfs:range)是ex:Person,這僅僅是一個簡單的RDF陳述: 謂詞是ex:author的陳述的客體是類ex:Person的實例。

這個Schema提供的資訊可能以多種方式得到利用。一個應用可能把這個陳述解釋為創建RDF資料的範本的一部分,且用它來限制任意ex:author的值都是ex:Person的實例。也就是說,這個應用和程式設計語言一樣,把模式資訊解釋為約束(constraint)。然而,另外一個應用可能把這個陳述解釋為獲取的資料的額外資訊,這個資訊並沒有在原資料中顯式表示。例如,第二個應用可能收到一些RDF資料,這些資料包含了一個值為未知類型的ex:author屬性,則可以利用RDF Schema中的那個陳述推導出這個ex:author屬性的值是類ex:Person的實例。第三個應用可能收到一些RDF資料, 這些資料包含了一個值為ex:Corporation的實例的ex:author屬性,利用RDF Schema的資訊,可以發出警告:"資料可能不一致,也可能不是"。在其他地方,可能存在一個聲明消除了這個資料不一致性(例如,聲明一個"Corporation"也是一個"Person")。

此外,根據應用解釋屬性描述的方式,一個實例仍然可以被認為是合法的,即使沒有RDF Schema指定的屬性(如可能有一些ex:Book的實例沒有ex:author屬性,即使ex:author的定義域為ex:Book),或者具有其他的屬性(如可能有一些ex:Book的實例具有ex:technicalEditor屬性,即使描述ex:Book的Schema沒有對這個屬性的描述)。

換句話說,RDF Schema中的陳述通常是描述(descriptions)。他們也可以是規約性的(prescriptive),如果應用要這樣解釋的話。RDF Schema所做的是提供額外的資訊。這些資訊是否和顯式指定的實例資料有衝突,取決於具體的應用。


5.4 其他Schema資訊

RDF Schema還提供了一些其他的內嵌屬性,這些屬性可以用於為RDF Schema和實例提供資料記錄和其他資訊。例如,rdfs:comment屬性可用于提供關於資源的易讀的描述,rdfs:label屬性可用于提供關於資源的更易讀的名字, rdfs:seeAlso屬性可用於提示其他地方可能有關於此資源的更多的描述,rdfs:isDefinedBy是rdfs:seeAlso的子屬性,可用於提示其他地方有關於此資源的定義。對這些屬性更多的討論,請參考RDF辭彙描述語言1.0: RDF Schema (http://www.w3.org/TR/rdf-schema/)[RDF-VOCABULARY (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-vocabulary)]。

對於其他的內嵌RDF屬性(如rdf:value)它們的用途就是規範中的設計用途(intended use),文檔[RDF-SEMANTICS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-semantics)]對這些屬性沒有定義特定的語義,RDF Schmea也沒有基於他們的設計用途定義任何的約束。例如,沒有約束限制屬性rdfs:seeAlso的客體必須為它所在的陳述的主體提供額外的資訊。


5.5 表達更豐富的Schema語言

RDF Schema提供了描述RDF辭彙集的基本能力,更強的表達能力是可能的,也是有用的。這些能力可以通過進一步發展RDF Schema來提供,也可以通過其他基於RDF的語言來提供。其他已被認為有用但RDF Schema沒有提供的、更豐富的表達能力包括:

  • 對屬性的基數限制。例如,一個人有且只有一個生物學意義上的父親。
  • 指定一個屬性(如ex:hasAncestor)是傳遞的,即:如果A ex:hasAncestor B,且 B ex:hasAncestor C,則A ex:hasAncestor C。
  • 指定一個屬性是一個類的實例的唯一表示符(或說,主鍵)。
  • 指定兩個不同的類(具有不同的URIrefs)實際代表同一個的類。
  • 指定兩個不同的實例(具有不同的URIrefs)實際代表同一個實例。
  • 指定屬性的值域或基數限制取決於屬性應用到的類,例如,說一個足球隊的屬性ex:hasPlayers值的個數為11,同時,這個屬性應用于籃球隊時,值的個數應該是5。
  • 能夠通過對類的組合(如,並,交)得到新的類,或者說兩個類是相離的,即兩個類沒有共同的實例。

上面提到這些豐富的表達能力,以及其他一些沒提到的,正是本體語言(如DAML+OIL (http://www.w3.org/TR/daml+oil-reference)[DAML+OIL (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-damloil)]和OWL (http://www.w3.org/TR/owl-ref/)[OWL (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-owl)])的目標。這些本體語言都是基於RDF和RDF Schema的。這些語言的目的是為資源提供更多的機器可處理的語義資訊,也就是說,使資源的機器表示能夠更緊密類比真實世界對應的部分。雖然這些語言對構造基於RDF的有用應用(第6節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#applications)有一些已有的RDF應用的描述)來說不是必須的,但這些語言的研究是語義Web研究中的一個非常活躍的主題。


6. 一些RDF應用:具體領域中的RDF

在前面的章節裏,已經描述了RDF和RDF Schema的大體的表達能力,並且舉了一些例子來演示這些能力,其中有些例子還可能暗示了一些潛在的RDF應用,但是並沒有討論任何真正的應用。在這節中,將會描述一些真正已經發佈的RDF應用,說明了RDF是怎樣支援各種不同的現實世界的關於表示和處理關於各種事物的資訊的需求。


6.1 都柏林核心元資料倡議

元資料是關於資料的資料。這個術語指的是用來識別、描述、查找資訊資源的資料,而不管這些資源是物理存在的或電子化的。雖然用電腦處理的結構化元資料相對較新,但在幫助管理和使用海量資訊時的元資料的基本概念已經用了多年。圖書目錄卡就是一個大家熟悉的這種元資料例子。

都柏林核心是描述檔(因此,也是為了記錄元資料)的一個"元素"集(屬性)。這個元素集是由元資料工作組在1995年3月在俄亥俄州的都柏林(Dublin, Ohio)首先開發出來的。稍後,在都柏林核心元資料工作組基礎上,都柏林核心進行了一系列的修改,這就是我們現在看到的都柏林核心元資料倡議 (http://dublincore.org/)。都柏林核心的目的是提供一個描述性的元素的最小集,以便對類似文檔的網路物件進行描述和自動索引,就像一張圖書目錄卡一樣。都柏林核心元資料集的設計目標是適合讓網際網路上資源發現工具使用,如通行的萬維網搜索引擎使用的網路爬蟲("Webcrawlers")。此外,都柏林核心有意為足夠簡單,使得為網際網路提供資訊的各種各樣的作者和出版商都能夠理解和使用。都柏林核心元素已廣泛地應用于記錄網際網路資源的有關資訊(都柏林核心元素dc:create已經在以前的例子中用到)。 都柏林核心元素的當前版本定義在柏林核心元資料元素集,版本1.1:參考描述 (http://dublincore.org/documents/2003/06/02/dces/) [DC (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-dublin-core)],它包含了下列屬性的定義:

    • Title: 資源的名字。
    • Creator: 一個主要負責創建資源內容的實體。
    • Subject: 資源內容的主題.
    • Description: 資源內容的描述.
    • Publisher: 一個負責使得資源內容可用的實體
    • Contributor: 一個負責為資源內容作出貢獻的實體(如作者)。
    • Date: 在資源生命週期中某時間關聯的日期。
    • Type: 資源內容的類型。
    • Format: 資源的物理形式或資料形式.
    • Identifier: 一個在給定上下文中明確標識資源的識別字。
    • Source: 一個對作為目前資源的來源的資源引用。
    • Language: 資源內容採用的語言
    • Relation: 一個對相關資源的引用
    • Coverage: 資源內容所在的範圍或區域
    • Rights: 關於資源的許可權資訊.

使用都柏林核心元素的資訊可以用任意適合的語言( 例如,HTML的 meta元素)表示。 然而,RDF是都柏林核心資訊的一種理想的表示。 下面的例子表示了在RDF中,用都柏林核心辭彙表示的關於一個資源集合的簡單描述。注意,這裏顯示的都柏林核心RDF辭彙不是權威的描述,都柏林核心參考描述[DC (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-dublin-core)]才是最權威的參考。

第一個例子(例30),使用都柏林核心屬性描述一個網站主頁:

例30:一個用都柏林核心屬性描述的網頁

 <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<rdf:Description rdf:about="http://www.dlib.org">
<dc:title>D-Lib Program - Research in Digital Libraries</dc:title>
<dc:description>The D-Lib program supports the community of people
with research interests in digital libraries and electronic
publishing.</dc:description>
<dc:publisher>Corporation For National Research Initiatives</dc:publisher>
<dc:date>1995-01-07</dc:date>
<dc:subject>
<rdf:Bag>
<rdf:li>Research; statistical methods</rdf:li>
<rdf:li>Education, research, related topics</rdf:li>
<rdf:li>Library use Studies</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:type>World Wide Web Home Page</dc:type>
<dc:format>text/html</dc:format>
<dc:language>en</dc:language>
</rdf:Description>
</rdf:RDF>

我們注意到,RDF和都柏林核心都定義了一個( XML )元素稱為為"Description",(雖然都柏林核心元素名稱用了小寫字母)。 即使開頭的字母都是大寫字母,還是可以用XML的名字空間機制將這兩個元素區別開來(一是rdf:Description,另外一個是dc:description)。 同時,有趣的是,在Web流覽器中訪問http://purl.org/dc/elements/1.1/ (http://purl.org/dc/elements/1.1/) 時(名字空間URI在這裏用於標識都柏林核心辭彙),可以得到一個[DC (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-dublin-core)]的RDF Schema聲明。

第二個例子,例31 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example31) 描述了一個出版了的雜誌

 <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:dcterms="http://purl.org/dc/terms/">
<rdf:Description rdf:about="http://www.dlib.org/dlib/may98/05contents.html">
<dc:title>DLIB Magazine - The Magazine for Digital Library Research
- May 1998</dc:title>
<dc:description>D-LIB magazine is a monthly compilation of
contributed stories, commentary, and briefings.</dc:description>
<dc:contributor>Amy Friedlander</dc:contributor>
<dc:publisher>Corporation for National Research Initiatives</dc:publisher>
<dc:date>1998-01-05</dc:date>
<dc:type>electronic journal</dc:type>
<dc:subject>
<rdf:Bag>
<rdf:li>library use studies</rdf:li>
<rdf:li>magazines and newspapers</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:format>text/html</dc:format>
<dc:identifier rdf:resource="urn:issn:1082-9873"/>
<dcterms:isPartOf rdf:resource="http://www.dlib.org"/>
</rdf:Description>
</rdf:RDF>

例31 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example31) 使用了都柏林的限定詞"isPartOf"(來自一個單獨的辭彙表)來說明這份雜誌是以前描述過的Web網站的一部分。

第三個例子,例 32 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example32), 描述了例 31 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example31)中描述過的雜誌中的一篇特定的文章

例32:描述一篇雜誌文章

 <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:dcterms="http://purl.org/dc/terms/">
<rdf:Description rdf:about="http://www.dlib.org/dlib/may98/miller/05miller.html">
<dc:title>An Introduction to the Resource Description Framework</dc:title>
<dc:creator>Eric J. Miller</dc:creator>
<dc:description>The Resource Description Framework (RDF) is an
infrastructure that enables the encoding, exchange and reuse of
structured metadata. rdf is an application of xml that imposes needed
structural constraints to provide unambiguous methods of expressing
semantics. rdf additionally provides a means for publishing both
human-readable and machine-processable vocabularies designed to
encourage the reuse and extension of metadata semantics among
disparate information communities. the structural constraints rdf
imposes to support the consistent encoding and exchange of
standardized metadata provides for the interchangeability of separate
packages of metadata defined by different resource description
communities. </dc:description>
<dc:publisher>Corporation for National Research Initiatives</dc:publisher>
<dc:subject>
<rdf:Bag>
<rdf:li>machine-readable catalog record formats</rdf:li>
<rdf:li>applications of computer file organization and
access methods</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:rights>Copyright ? 1998 Eric Miller</dc:rights>
<dc:type>Electronic Document</dc:type>
<dc:format>text/html</dc:format>
<dc:language>en</dc:language>
<dcterms:isPartOf rdf:resource="http://www.dlib.org/dlib/may98/05contents.html"/>
</rdf:Description>
</rdf:RDF>

例32中也使用了限定詞"isPartOf",這次是指這篇文章是先前描述過的雜誌中的一部分。

電腦語言和檔格式並非總能為他們描述的資料嵌入元資料提供明確的方式。在許多情況下,元資料不得不被指定為一種單獨的資源,並被明確地鏈結到資料(如,描述本入門文檔的RDF元資料就是這樣的;在本文檔的的最後一部分有一個對元資料的顯式鏈結)。 然而,應用程式和語言日益為元資料直接嵌入資料提供明確的方式。例如, W3C的可伸縮向量圖形語言[SVG (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-svg)] (另一個以XML為基礎的語言)提供了一個明確的元資料元素用以記錄關於其他SVG資料的元資料。 任何以XML為基礎的元資料語言都能包含在這個元素裏。[SVG (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-svg)] 包含了例 33 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example33)所示的例子,它描述了一個SVG檔的元資料是如何嵌入在SVG檔本身的。這個例子使用了都柏林核心辭彙和RDF/XML來記錄元資料。

例33:在SVG檔中嵌入元資料

 <?xml version="1.0"?>
<svg width="4in" height="3in" version="1.1"
xmlns = 'http://www.w3.org/2000/svg'>
<desc xmlns:myfoo="http://example.org/myfoo">
<myfoo:title>This is a financial report</myfoo:title>
<myfoo:descr>The global description uses markup from the
<myfoo:emph>myfoo</myfoo:emph> namespace.</myfoo:descr>
<myfoo:scene><myfoo:what>widget $growth</myfoo:what>
<myfoo:contains>$three $graph-bar</myfoo:contains>
<myfoo:when>1998 $through 2000</myfoo:when> </myfoo:scene>
</desc>
<metadata>
<rdf:RDF
xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs = "http://www.w3.org/2000/01/rdf-schema#"
xmlns:dc = "http://purl.org/dc/elements/1.1/" >
<rdf:Description rdf:about="http://example.org/myfoo"
dc:title="MyFoo Financial Report"
dc:description="$three $bar $thousands $dollars $from 1998 $through 2000"
dc:publisher="Example Organization"
dc:date="2000-04-11"
dc:format="image/svg+xml"
dc:language="en" >
<dc:creator>
<rdf:Bag>
<rdf:li>Irving Bird</rdf:li>
<rdf:li>Mary Lambert</rdf:li>
</rdf:Bag>
</dc:creator>
</rdf:Description>
</rdf:RDF>
</metadata>
</svg>

Adobe公司的可擴展元資料平臺( XMP )是另一個允許關於一個檔的元資料被嵌入到檔本身中的技術的例子。 XMP使用RDF/XML作為其元資料表示的基礎。 一些Adobe產品已經支援XMP。


6.2 PRISM

PRISM:PRISM: 出版業標準元資料需求 (http://www.prismstandard.org/)[PRISM (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-prism)]是在出版業中發展完善的一個元資料規範。PRISM工作組是由雜誌出版商和雜誌的銷售商構成的,他們確定行業所需的元資料(metadata)並為之指定一些列相關的規範。出版商想以多種方式利用現有內容(資料),目的是獲取更多的對創建資源時的投資回報。一個例子是為了發佈在Web上而把雜誌文章轉換成HTML;而把它許可給一個叫LexisNexis (http://www.lexisnexis.com/) 的聚合器則是另外一個例子。所有的這些都是內容的"首次使用";當雜誌發行時,其內容也跟著公諸於世了,出版商也想讓他們的內容變成"常青樹"。它有可能用於其他的期號,如在一個回顧文章中。它也可能用於公司的其他部門,如把雜誌中的圖片等編輯成書。另一個用途則是許可給外人使用,如關於產品評論的再版,或其他出版商的精選輯中。全部達到這些目的就需要一種元資料方式,它著重於"發現","許可權追蹤"和"端到端的元數據"。

發現(Discovery):發現是關於尋找資料的一個籠統的術語,包含了搜索,流覽,內容的傳輸,以及其他技術。關於發現的討論經常以客戶在公眾網站的搜索為中心。不過,內容發現的範疇要比這寬廣得多。(發現的)主體可能由客戶組成,或可能由內部用戶(如研究人員,設計者,圖片編輯,許可證代理人,等等)組成。為了輔助法內容發現,PRISM提供了一系列屬性來描述資源的主題,格式,類型,來源和上下文。它同時也提供了一種用多主題描述分類系統對資源分類的方法。

許可權追蹤(Rights Tracking):雜誌經常包含了經其他人許可使用的材料。除了文章,工具條和其他所有內容可能已被許可的類型之外,特許資料的最普遍的類型就是從一個圖片代理處獲得的圖片。一份資料是否有一次性使用權(當然,這也是要交特許使用金的),還是被出版商完全佔有;僅僅想知道這些就需要一番努力了。PRISM為簡單的許可權跟蹤提供了一些元素。PRISM規範定義了一個單獨的辭彙集用來支持一些描述(description),這些描述記錄了資料可以或不可以被使用的地方,次數,行業等相關內容。

端到端的元數據(End-to-end metadata):大多數出版的內容都已經有了為它們創建的元資料。遺憾的是,當在系統之間傳輸內容時,元資料經常會丟失,那麼只有在以後的生產過程中以相當的開銷來重建它們。為了減少這種問題的發生,PRISM提供了一種能在內容生產線的多個階段中使用的規範。PRISM規範的一大特色是對其他現有的規範的使用。工作組堅決盡可能多的使用現有的規範,而不是創建一個全新的事物,並且只是在必需的地方定義新事物。因此,RPISM規範使用XML,RDF,Dublin Core,和各種ISO格式和辭彙表。

一個PRISM描述可能和一些值為頻繁文字的Dublin Core屬性那麼簡單。例34 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example34) 描述了一個照片,並給出了它的名稱,攝影師,格式等一些基本的資訊:

例34:一個照片的PRISM描述

 <?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xml:lang="en-US">

<rdf:Description rdf:about="http://travel.example.com/2000/08/Corfu.jpg">
<dc:title>Walking on the Beach in Corfu</dc:title>
<dc:description>Photograph taken at 6:00 am on Corfu with two models
</dc:description>
<dc:creator>John Peterson</dc:creator>
<dc:contributor>Sally Smith, lighting</dc:contributor>
<dc:format>image/jpeg</dc:format>
</rdf:Description>
</rdf:RDF>

PRISM也對Dublin Core的作了補充用以允許更詳細的描述。補充的內容通過三個新的辭彙集來說明,通常通過首碼prism:,pcv:和prl來引用:

prism: 這個首碼指主要的RPISM辭彙集,它的術語使用了URI首碼"http://prismstandard.org/namespaces/basic/1.0/"。這個辭彙集中的大部分屬性是來自Dublin Core屬性的更細化版本。例如,dc:date的細化版本是由像prism:publicationTime,prism:releaseTime,prism:expirationTime等等這樣的屬性提供的。

pcv:這個首碼指PRISM受控辭彙表(PRISM Controlled Vocabulary(pcv)),它的術語使用了URI首碼"http://prismstandard.org/namespaces/pcv/1.0/"。通常,描述文章的主題(可能不止一個)的常見做法是提供描述性的關鍵字。遺憾的是,由於不同的人會使用不同的關鍵字[BATES96 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-bates96)],簡單的關鍵字對提高檢索性能上並沒有太大作用。最好的辦法是用取自某"受控辭彙表"的主題術語(subject terms)為文章編碼,這個辭彙集應當為辭彙集中的術語提供盡可能多的同義詞。這樣,受控的術語就會為搜索者和編索引者提供共用的關鍵字。pcv辭彙集提供了屬性,用以說明辭彙集中的術語,術語之間的關係,和術語的別稱。

prl:這個首碼指PRISM許可權語言辭彙集( PRISM Rights Language vocabulary),它的術語使用URI首碼"http://prismstandard.org/namespaces/prl/1.0/"。數位許可權管理(Digital Rights Management)是個承受著劇變的領域。有很多關於許可權管理語言的提議,但沒有一個能在整個行業中明顯受歡迎。因為沒有明確的可推薦選擇,於是PRISM Rights Language (PRL)就被定義為一個過渡性的標準。它提供了依賴於時間,地理,行業等條件的屬性,這些屬性可以讓人們表示一個術語能或不能被使用。人們相信這是一個將會幫助出版商在跟蹤許可權時省錢的"80/20平衡"【譯者注:意思是說80%的人經常使用占術語總數20%的那部分術語,所以,確定一個標準(即限定這20%的術語)可以使出版商在跟蹤許可權時省時省力,也就省了錢。】。它不是作為一種通用的許可權語言的,也不能讓出版商對客戶的內容使用作出限制。

PRISM採用RDF是因為它有處理複雜程度不同的描述的能力。目前,很多元資料使用普通的字串(平凡文字)值,例如:

 <dc:coverage>Greece</dc:coverage>

長時間以來PRISM的開發者期待著PRISM規範的使用變得更完善,由簡單文字值向更具構造性的值轉化。事實上,那個範圍的值正是現在有待解決的。一些出版商已經在使用完善的受控辭彙集了,而其他的才剛剛使用手工提供(manually-supplied)的關鍵字。為了說明這些,能賦值給屬性dc:coverage的不同類型的值的例子是:

 <dc:coverage>Greece</dc:coverage>

 <dc:coverage rdf:resource="http://prismstandard.org/vocabs/ISO-3166/GR"/>

(也就是說,用平凡文字或URIref標識這個國家)和

 <dc:coverage>
<pcv:Descriptor rdf:about="http://prismstandard.org/vocabs/ISO-3166/GR">
<pcv:label xml:lang="en">Greece</pcv:label>
<pcv:label xml:lang="fr">Grèce</pcv:label>
</pcv:Descriptor>
</dc:coverage>

(使用一個構造值來提供一個URIref和在多種語言中的名稱)

同時注意有些含義近似,或可說是其他屬性的子集的屬性。例如:一個資源的地理主題可以像這樣給出:

 <prism:subject>Greece</prism:subject>
<dc:coverage>Greece</dc:coverage>



 <prism:location>Greece</prism:location>

那些屬性當中的任何一個都可能使用簡單文字值或是一個更複雜的結構值。DTD,甚至是更新的XML Schemas,都不能充分的描述出這種多變的可能性。雖然要處理這種範圍廣泛的句法變化,RDF的模型圖卻有一種簡單的結構--三元組集。在三元組領域處理元資料使得舊軟體適應有新擴展的內容輕鬆多了。

這一節由最後舉兩個例子結束。例35 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example35) 說明了:圖像(.../Corfu.jpg)不能夠被用於(#none)煙草工業(在SIC(Standard Industrial Classifications,標準工業分類)中的代碼為21 )。

例35:一個圖片的PRISM描述:

 <rdf:RDF xmlns:prism="http://prismstandard.org/namespaces/basic/1.0/"
xmlns:prl="http://prismstandard.org/namespaces/prl/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
  <rdf:Description rdf:about="http://travel.example.com/2000/08/Corfu.jpg">
<dc:rights rdf:parseType="Resource"
xml:base="http://prismstandard.org/vocabularies/1.0/usage.xml">
<prl:usage rdf:resource="#none"/>
<prl:industry rdf:resource="http://prismstandard.org/vocabs/SIC/21"/>
</dc:rights>
</rdf:Description>
</rdf:RDF>

例36 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example36) 說明了圖片"Corfu"的攝影師員工編號是"3845"(employee 3845),就是人們熟知的John Peterson(better known as John Peterson)。它還說明了圖片所顯示的地理位置為希臘。例36之所以能夠做到這一點,在於它不僅僅提供了來自受控辭彙表的術語代碼(code),而且它還可以提供該辭彙表中術語代碼所隱含的資訊。

例36:關於例35中圖片的附加說明:

 <?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:pcv="http://prismstandard.org/namespaces/pcv/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xml:base="http://travel.example.com/">

<rdf:Description rdf:about="/2000/08/Corfu.jpg">
<dc:identifier rdf:resource="/content/2357845" />
<dc:creator>
<pcv:Descriptor rdf:about="/emp3845">
<pcv:label>John Peterson</pcv:label>
</pcv:Descriptor>
</dc:creator>
<dc:coverage>
<pcv:Descriptor
rdf:about="http://prismstandard.org/vocabs/ISO-3166/GR">
<pcv:label xml:lang="en">Greece</pcv:label>
<pcv:label xml:lang="fr">Grece</pcv:label>
</pcv:Descriptor>
</dc:coverage>
</rdf:Description>
</rdf:RDF>


6.3 XPackage

在很多情況下都需要維持 關於資源的結構化分組和他們用作單位的聯繫的資訊.The XML 包 (XPackage) 規格說明書 (http://www.xpackage.org/specification/) [XPACKAGE (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xpackage)提供了一個定義這樣的分組的框架,叫做"包". XPackage 詳細說明了一個框架來描述包含在包裏面的資源,這些資源的特性,包含的方法,還有他們之間的相互關係. XPackage 應用包括指定一個文檔用的樣式表,聲明多個文檔共用的圖片, 指明一個文檔的作者和其他元資料, 描述XML資源是如何使用名字空間的,還提供了一個清單來把資源和一個檔案檔捆在一起.

XPackage 框架是基於XML, RDF和XML 鏈結語言 (http://www.w3.org/TR/xlink/) [XLINK (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xlink)], 還提供了多個RDF辭彙表: 一個是用在一般的包裝描述, 還有幾個辭彙表是用於對包裝處理器提供一些有用的資訊.

對XPackage的一個應用是描述XHTML文檔和他們支持的資源.當一個站點要獲取一個XHTML文檔的時候,或許還會牽涉到其他的資源,像樣式表和圖像檔也需要被獲取.然而,如果不處理這個文檔,這些資源的特性就不是很明顯了.關於這個文檔的其他資訊,例如作者的名字,如果不處理這個文檔,可能也是不可取的. XPackage允許這些敍述性情報(如作者等資訊)標準地儲存在一個包含RDF的包描述文檔.例 37 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example37) (為了簡明, 刪除了名字空間聲明):描述一個XHTML文檔的包描述文檔的外部元素:

例 37: 一個XPackage 包描述文檔的外部元素

 <?xml version="1.0"?>
<xpackage:description>
<rdf:RDF>

(description of individual resources go here)

</rdf:RDF>
</xpackage:description>

在包描述文檔裏面,資源(如XHTML文檔, 樣式表, 和圖片) 被標準的RDF/XML語法描述. 每一個資源描述元素都包含在不同的辭彙表裏面的RDF屬性(XPackage 使用術語"ontology"來表示RDF裏面的"辭彙表"). 除了那個主要的包辭彙表, XPackage 本身自帶了幾個補充的辭彙表,包括:

 *一個描述檔(包含屬性如 file:size)的辭彙表(使用首碼 file:)
*一個提供MIME資訊(包含屬性如mime:contentType)的辭彙表(使用首碼 mime:)
*一個提供字元使用資訊(包含屬性如unicode:sript)的辭彙表(使用首碼 unicode:)
*一個描述基於XML的資源(包含屬性如x:namespace和x:style)的辭彙表(使用首碼 x:)

例 38 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example38), 使用一個標準的屬於XPackage MINE 辭彙表的XPackage屬性(mime:contentType),定義了檔的MIME 內容類型 ("application/xhtml+xml"). 另一個屬性,使用了一個Dublin Core 辭彙表裏面的屬性來描述文檔的作者 (在這個例子裏是"Garret Wilson").這個屬性是在XPackage外部定義的,所有就使用了dc:creator這個屬性.

例 38: 對一個XHTML文檔的描述

 <?xml version="1.0"?> 
<xpackage:description
xmlns:xpackage="http://xpackage.org/namespaces/2003/xpackage#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:mime="http://xpackage.org/namespaces/2003/mime#"
xmlns:x="http://xpackage.org/namespaces/2003/xml#"
xmlns:xlink="http://www.w3.org/1999/xlink">
<rdf:RDF>

<!--doc.html-->
<rdf:Description rdf:about="urn:example:xhtmldocument-doc">
<rdfs:comment>The XHTML document.</rdfs:comment>
<xpackage:location xlink:href="doc.html"/>
<mime:contentType>application/xhtml+xml</mime:contentType>
<x:namespace rdf:resource="http://www.w3.org/1999/xhtml"/>
<x:style rdf:resource="urn:example:xhtmldocument-stylesheet"/>
<dc:creator>Garret Wilson</dc:creator>
<xpackage:manifest rdf:parseType="Collection">
<rdf:Description rdf:about="urn:example:xhtmldocument-stylesheet"/>
<rdf:Description rdf:about="urn:example:xhtmldocument-image"/>
</xpackage:manifest>
</rdf:Description>

</rdf:RDF>
</xpackage:description>

屬性xpackage:manifest 指明,在處理的時候,樣式表和圖像資源都需要用到; 那些資源在包描述文檔裏面被分別的描述. 在描述樣式表的例子例 39 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example39)裏面, 使用在general XPackage 辭彙表裏面的xpackage:location屬性列出了它在包裏面的路徑("stylesheet.css"), 也用XPackage MIME 辭彙表的 mime:contentType 屬性來說明瞭這是一個CSS 樣式表 ("text/css").

例 39: 一個樣式表的資源描述

 <?xml version="1.0"?> 
<xpackage:description
xmlns:xpackage="http://xpackage.org/namespaces/2003/xpackage#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:mime="http://xpackage.org/namespaces/2003/mime#"
xmlns:x="http://xpackage.org/namespaces/2003/xml#"
xmlns:xlink="http://www.w3.org/1999/xlink">
<rdf:RDF>

<!--stylesheet.css-->
<rdf:Description rdf:about="urn:example:xhtmldocument-css">
<rdfs:comment>The document style sheet.</rdfs:comment>
<xpackage:location xlink:href="stylesheet.css"/>
<mime:contentType>text/css</mime:contentType>
</rdf:Description>

</rdf:RDF>
</xpackage:description>

這個例子的完整版本可以在[XPACKAGE (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xpackage)]上看到.


6.4 RSS 1.0: RDF站點匯總

人們常常需要每天訪問網上各種各樣的資訊,例如計畫安排、任務表、新聞標題、搜索結果,最新消息等。隨著萬維網上資訊資源和多樣性的增加,管理這些資訊並將之集成為一個整體的難度越來越大。RSS1.0(http://purl.org/rss/1.0)("RDF Site Sumary")是一個RDF辭彙表,它提供一種羽量級但功能強大的方式來描述這些即時的、大規模分佈和可重用的資訊。RSS1.0同時可能也是萬維網上最為廣泛的RDF應用。

舉例來說,W3C主頁(http://www.w3.org)是W3C組織與保持公眾聯繫的主要方式,服務於傳播有關該組織的研究資訊。圖19是某一天的W3C主頁,(http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure19).中間一列是新聞條目,經常發生改變。為了能夠及時傳播這些資訊,W3C 小組實現了一個RDF Site Summary(RSS 1.0 (http://purl.org/rss/1.0/))新聞種子,這樣中間列的內容就可以被其他人按需獲取或者重用。新聞綜合站點可以將(種子站點的)新聞標題融合進自己當天新聞綜述之中。其他的站點也可以將新聞標題作為一種鏈結顯示給它們的訪問者,並且,越來越多的個人會用自己的桌面應用來訂閱種子(站點的內容)。這些桌面的RSS 閱讀器允許它們的用戶不用流覽器去訪問每一個站點,就能追蹤上百個站點。

fig18dec16.gif (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/w3c-rss.crop.gif)

圖19:W3C主頁

萬維網上大量的站點都提供RSS1.0種子。例40 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example40)是某一天W3C種子的實例。(http://www.w3.org/2000/08/w3c-synd/home.rss)

例 40: W3C RSS 1.0 種子示例

 <?xml version="1.0" encoding="utf-8"?>
 <rdf:RDF xmlns="http://purl.org/rss/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
   <channel rdf:about="http://www.w3.org/2000/08/w3c-synd/home.rss">
<title>The World Wide Web Consortium</title>
<description>Leading the Web to its Full Potential...</description>
<link>http://www.w3.org/</link&gt;
     <dc:date>2002-10-28T08:07:21Z</dc:date>
     <items>
<rdf:Seq>
<rdf:li rdf:resource="http://www.w3.org/News/2002#item164"/>
<rdf:li rdf:resource="http://www.w3.org/News/2002#item168"/>
<rdf:li rdf:resource="http://www.w3.org/News/2002#item167"/>
</rdf:Seq>
</items>
   </channel>
   <item rdf:about="http://www.w3.org/News/2002#item164">
<title>User Agent Accessibility Guidelines Become a W3C
Proposed Recommendation</title>
<description>17 October 2002: W3C is pleased to announce the
advancement of User Agent Accessibility Guidelines 1.0 to
Proposed Recommendation. Comments are welcome through 14 November.
Written for developers of user agents, the guidelines lower
barriers to Web accessibility for people with disabilities
(visual, hearing, physical, cognitive, and neurological).
The companion Techniques Working Draft is updated. Read about
the Web Accessibility Initiative. (News archive)</description>
<link>http://www.w3.org/News/2002#item164</link&gt;
<dc:date>2002-10-17</dc:date>
</item>
   <item rdf:about="http://www.w3.org/News/2002#item168">
<title>Working Draft of Authoring Challenges for Device
Independence Published</title>
<description>25 October 2002: The Device Independence
Working Group has released the first public Working Draft of
Authoring Challenges for Device Independence. The draft describes
the considerations that Web authors face in supporting access to
their sites from a variety of different devices. It is written
for authors, language developers, device experts and developers
of Web applications and authoring systems. Read about the Device
Independence Activity (News archive)</description>
<link>http://www.w3.org/News/2002#item168</link&gt;
<dc:date>2002-10-25</dc:date>
</item>
   <item rdf:about="http://www.w3.org/News/2002#item167">
<title>CSS3 Last Call Working Drafts Published</title>
<description>24 October 2002: The CSS Working Group has
released two Last Call Working Drafts and welcomes comments
on them through 27 November. CSS3 module: text is a set of
text formatting properties and addresses international contexts.
CSS3 module: Ruby is properties for ruby, a short run of text
alongside base text typically used in East Asia. CSS3 module:
The box model for the layout of textual documents in visual
media is also updated. Cascading Style Sheets (CSS) is a
language used to render structured documents like HTML and
XML on screen, on paper, and in speech. Visit the CSS home
page. (News archive)</description>
<link>http://www.w3.org/News/2002#item167</link&gt;
<dc:date>2002-10-24</dc:date>
</item>
 </rdf:RDF>

正如例40所示 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example40),種子的格式經過專門設計,這樣內容就可以非常容易地打包進不同的部分。新聞站點,網站日誌,體育比分(sports scores)、股票報價 一類的應用都是RSS1.O的典型用例。

RSS種子可以被任何能夠"講"HTTP的應用所請求。最近,RSS1.0應用分成了以下三種不同的大類:

fig19Adec16.gif (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/meerkat-rss.crop.gif) fig19Bdec16.gif (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/newsisfree-rss.crop.gif)

圖20:MeerKat 和 NewsIsFree

RSS1.0遵照可擴展原則進行設計。通過引入其他的RDF辭彙(RSS開發團體稱之為模組(modules)),RSS1.0作者可以提供大量的元資料並處理。模組可以和其他更通用的RDF辭彙一樣,可以由感興趣的人員來開發。當前,已經開發了三個官方認可的模組(http://web.resource.org/rss/1.0/),和19個建議模組(http://web.resource.org/rss/1.0/modules/proposed.html)。這些模組已經被大量團體所認同,其覆蓋範圍從完整的都柏林核心模組(Dublin Core module) (http://web.resource.org/rss/1.0/modules/dc/) 到更加專業的RSS中心模組,例如 Aggregation module (http://web.resource.org/rss/1.0/modules/aggregation/).

應當注意一點,當我們在RDF的範疇討論RSS的時候,當前有兩中RSS規範標準。一個分支(RSS 0.91,0.92,0.93,0.94 和2.0)沒有使用RDF,另外一個分支(RSS 0.9 和1.0)使用了RDF。


6.5 CIM/XML

電業部門使用電力系統模型以完成各種不同的任務。例如,在計畫和安全分析中電力系統的類比就是必不可少的。電力系統模型同時也應用於實際的操作中,比如它可以被能源管理系統(Energy Management Systems ,EMS)用於能源控制中心中。一個實際運作的電力系統模型可能由幾千種資訊類別組成。除了在內部使用這些模型,電業部門為了規劃和一些運作目的,比如為了達到協調電力傳輸或者確保操作可靠性的目的,還需要相互交換系統模型資訊。然而,各個電業部門使用了不同的軟體來完成這些任務,因此,系統模型以不同的格式存儲,這使得這些模型的交換相當困難。

為了使電力系統模型間能夠進行資訊交換,電業部門需要就電力系統的實體以及實體間關係的定義達成一致。一個非盈利性的電力科學研究協會――電力能源研究協會 (http://www.epri.com/)(Electric Power Research Institute,EPRI),開發了一個[通用資訊模型 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-cim)](Common Information Model,CIM)來完成這一任務。在CIM模型中,明確了電力系統的資源,屬性以及關係等的通用語義。除此之外,為了能夠進一步增強電子化地交換CIM模型的能力,電力業已經開發了一種用XML表達CIM模型的語言CIM/XML (http://www.langdale.com.au/CIMXML/)。CIM/XML是一種RDF的應用,使用RDF和RDF Schema來組織CIM模型的XML文檔結構。北美電力可靠性理事會 (http://www.nerc.com/)(North American Electric Reliability Council,NERC)(一個業界組織的以提高北美地區電力傳送可靠性為目的的理事會)已經採納了CIM/XML作為電力傳輸系統運營商間交換模型資訊的標準。同時,CIM/XML格式也通過了國際電工委員會的國際標準化認證過程。在[DWZ01 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-devos)]上有關於CIM/XML的大量精彩討論.[注:請不要將電力業CIM與分散式管理任務組(Distributed Management Task Force, DMTF) (http://www.dmtf.org/)所開發的CIM混淆。DMTF開發的CIM是用以為分散式軟體、網路和企業環境表示管理資訊的,它也是採用XML進行表示的,目前並未採用RDF,但關於這個方向的獨立研究已經展開。

CIM模型能將一個電業部門的所有主要物件均表示為類、屬性以及它們之間的關係.CIM模型使用這些類和屬性以支援獨立開發的應用軟體之間的集成,這些軟體可能應用于特定廠商的EMS之間,也可能是應用於某個EMS和其他的與系統運作有關的系統之間,像發電和送電的管理等。

CIM模型被明確表示為一系列使用統一建模語言 (http://www.uml.org/)(Unified Modeling Language,UML)描述的類圖。CIM模型的基類是PowerSystemResource類,同時CIM模型還包括了Substation 、Switch、Breaker等一些特殊化的子類。CIM/XML將CIM表示為RDF模式的一個辭彙表,並將RDF/XML用作為交換特定系統模型間的語言。例41 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example41)展示了CIM/XML類和屬性定義的例子。

例41: CIM/XML類和屬性定義的例子

 <rdfs:Class rdf:ID="PowerSystemResource"> 
<rdfs:label xml:lang="en">PowerSystemResource</rdfs:label>
<rdfs:comment>"A power system component that can be either an
individual element such as a switch or a set of elements
such as a substation. PowerSystemResources that are sets
could be members of other sets. For example a Switch is a
member of a Substation and a Substation could be a member
of a division of a Company"</rdfs:comment>
</rdfs:Class>
<rdfs:Class rdf:ID="Breaker">
<rdfs:label xml:lang="en">Breaker</rdfs:label>
<rdfs:subClassOf rdf:resource="#Switch" />
<rdfs:comment>"A mechanical switching device capable of making,
carrying, and breaking currents under normal circuit conditions
and also making, carrying for a specified time, and breaking
currents under specified abnormal circuit conditions e.g. those
of short circuit. The typeName is the type of breaker, e.g.,
oil, air blast, vacuum, SF6."</rdfs:comment>
</rdfs:Class>
<rdf:Property rdf:ID="Breaker.ampRating">
<rdfs:label xml:lang="en">ampRating</rdfs:label>
<rdfs:domain rdf:resource="#Breaker" />
<rdfs:range rdf:resource="#CurrentFlow" />
<rdfs:comment>"Fault interrupting rating in amperes"</rdfs:comment>
</rdf:Property>

CIM/XML為了簡化模型表達,只使用了RDF/XML完全語法的一個子集。並且,CIM/XML對RDF Schema辭彙表進行了一些擴展。這些擴展支援逆屬性的描述以及多值(基數)約束。多值(基數)約束用來描述對於一個給定資源的一個給定屬性允許的作為其值的實例個數(對於一個多值聲明允許的值是"零值或單值"、"單值"、"零值或多值"、"單值或多值")。例42 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example42)中的屬性闡述了這些擴展(這些擴展的部分用QName首碼cims標識):

例42:一些RDF模式的CIM/XML擴展

 <rdf:Property rdf:ID="Breaker.OperatedBy"> 
<rdfs:label xml:lang="en">OperatedBy</rdfs:label>
<rdfs:domain rdf:resource="#Breaker" />
<rdfs:range rdf:resource="#ProtectionEquipment" />
<cims:inverseRoleName rdf:resource="#ProtectionEquipment.Operates" />
<cims:multiplicity rdf:resource="http://www.cim-logic.com/schema/990530#M:0..n" />
<rdfs:comment>"Circuit breakers may be operated by
protection relays."</rdfs:comment>
</rdf:Property>

<rdf:Property rdf:ID="ProtectionEquipment.Operates">
<rdfs:label xml:lang="en">Operates</rdfs:label>
<rdfs:domain rdf:resource="#ProtectionEquipment" />
<rdfs:range rdf:resource="#Breaker" />
<cims:inverseRoleName rdf:resource="#Breaker.OperatedBy" />
<cims:multiplicity rdf:resource="http://www.cim-logic.com/schema/990530#M:0..n" />
<rdfs:comment>"Circuit breakers may be operated by
protection relays."</rdfs:comment>
</rdf:Property>

通過使用CIM/XML交換各個廠商產品之間的實際的大規模模型(包括像在一個測試中使用到的2000多所變電站的描述資料),並通過驗證這些模型能被有代表性的應用軟體所正確解釋,電力科學研究院已經成功的進行了互操作的測試。儘管CIM模型原先是被計畫用於電力管理系統,但現在它已經被擴展到電力傳輸以及其他方面的一些應用領域了。

物件管理組織 (http://www.omg.org/)(Object Management Group,OMG)已經採用了一個稱為資料訪問輔助工具(Data Access Facility ,[DAF (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-daf)])的物件介面標準來對CIM電力系統模型進行訪問。類似CIM/XML語言,DAF也是基於RDF模型的,並且與CIM/XML共用相同的CIM模式。.然而,CIM/XML目的是使一個模型能夠以文檔的方式被交換,而DAF則是使應用軟體能夠像訪問一個物件集合一樣的訪問這個模型。

基於XML的資訊交換很自然地能被表示為實體-關係模型或者面向物件的類、屬性和關係(甚至不要求這些資訊是能通過Web訪問的),CIM/XML闡明了RDF在這其中能夠扮演的重要角色。在這些情況下,RDF為XML提供了一個基本架構以支援物件標識,以及支援在結構化的關係中使用這些物件。大量使用RDF/XML進行資訊交換的應用軟體闡明了這一關係,同時大量研究RDF(或者像OWL等的本體語言)和UML(以及它的XML表示)之間聯繫的工程也闡明了這一關係。CIM/XML需要擴展RDF模式才能支援基數約束和逆屬性,這類的需要促使人們開發更強大的基於RDF的Schema或本體語言,如DAML+OIL和在5.5節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#richerschemas)描述的OWL等。在將來,這些語言在支援一些類似的模型應用就可能更為合適。

最後,CIM/XML還為那些正在尋找另外的"RDF在領域中的應用"的例子的那些人闡述了一個重要事實:一些語言被描述為"XML"語言,或者系統被描述為使用"XML"的,而它們實際使用的"XML"就是RDF/XML,也即它們就是關於RDF的應用。有時需要相當深入地瞭解這些語言或者這些系統的描述才能發現這點(在某些已知的例子中,RDF甚至根本沒有被明確的提及,但是樣例資料清楚地顯示這是RDF/XML)。同時,在類似於CIM/XML的這些應用中,由於創建的RDF是被計畫用作軟體部件間的資訊交換而不是用於通用性的訪問(儘管我們可以假想在未來,更多這種類型的RDF能夠通過Web訪問),因此創建出的RDF在Web上並不那麼容易找到。


6.6 基因本體協會

使用像 SNOMED RT (http://www.snomed.org/) (醫學文獻術語系統化命名法, Systematized Nomenclature of Medicine Reference Terminology) 和MeSH (http://www.nlm.nih.gov/mesh/meshhome.html) (醫學學科標題,Medical Subject Headings) 之類的受控辭彙表的結構化元資料在醫學界扮演著越來越重要的角色。這些結構化元資料提高了文獻搜索的效率,並有助於醫學知識[COWAN (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-cowan)]的傳播與交換。但是,由於醫學領域知識在不斷地發生快速變化,這就要求人們開發額外的辭彙表以供使用。

基因本體協會 (http://www.geneontology.org/)(Gene Ontology (GO) Consortium)的[基因本體 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-go)([GO])]旨在提供一個受控辭彙表,用以描述基因產品某些方面的特徵。相互協作的資料庫使用基因本體術語標注它們的基因產品(或者基因),引用並指明了哪些證據可用以支持這些注釋。這些資料庫使用通用基因本體術語,更加容易實現資料庫之間的統一查詢。結構化的基因本體可以在不同的粒度等級上進行歸因與查詢。由於有關基因和蛋白質在細胞中功能的知識在不斷積累和更新,因此基因本體辭彙表也是動態變化的。

基因本體的三個組織原則是"分子功能","生物過程"和"細胞成分"。某個基因產品可能有一種或多種分子功能,並有可能作用於一個或多個生物過程之中;該產品可能包含了一種或多種的細胞成分,也可能與一種或多種細胞成分相關聯。這三種本體中所有的術語定義都包含在一個單獨的(文本格式的)定義檔中。每月都會定時生成一些XML格式的檔,其中包含了這三種本體檔以及所有可用的(本體)定義。

功能、過程和成分被表示為有向無環圖(DAGs)或者網路。一個子術語可能是其父術語的一個"實例"(isa-關係),或者是其父術語的一個成分(part-of關係)。一個子術語可能有多個父術語並可能與其不同的父術語間有著不同的關係類別。本體還可以表示同義詞和對外部資料庫的交叉引用。由於RDF/XML在表示圖結構時有很大的靈活性,並且有著廣泛的工具支持,基因本體使用RDF/XML來簡化XML版本的本體中的術語間的關係表示。但是,基因本體目前在術語描述中使用了"非"RDF嵌套的XML結構,所以現在所使用的基因本體描述語言並不是純粹的RDF/XML。

例 43 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example43) 展示了一些基因本體文檔 (http://www.geneontology.org/GO.doc.html)中的基因本體資訊的樣例:

例 43:基因本體資訊樣例

 <?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE go:go>
<go:go xmlns:go="http://www.geneontology.org/xml-dtd/go.dtd#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<go:version timestamp="Wed May 9 23:55:02 2001" />
<rdf:RDF>
<go:term rdf:about="http://www.geneontology.org/go#GO:0003673">
<go:accession>GO:0003673</go:accession>
<go:name>Gene_Ontology</go:name>
<go:definition></go:definition>
</go:term>
<go:term rdf:about="http://www.geneontology.org/go#GO:0003674">
<go:accession>GO:0003674</go:accession>
<go:name>molecular_function</go:name>
<go:definition>The action characteristic of a gene product.</go:definition>
<go:part-of rdf:resource="http://www.geneontology.org/go#GO:0003673" />
<go:dbxref>
<go:database_symbol>go</go:database_symbol>
<go:reference>curators</go:reference>
</go:dbxref>
</go:term>
<go:term rdf:about="http://www.geneontology.org/go#GO:0016209">
<go:accession>GO:0016209</go:accession>
<go:name>antioxidant</go:name>
<go:definition></go:definition>
<go:isa rdf:resource="http://www.geneontology.org/go#GO:0003674" />
<go:association>
<go:evidence evidence_code="ISS">
<go:dbxref>
<go:database_symbol>fb</go:database_symbol>
<go:reference>fbrf0105495</go:reference>
</go:dbxref>
</go:evidence>
<go:gene_product>
<go:name>CG7217</go:name>
<go:dbxref>
<go:database_symbol>fb</go:database_symbol>
<go:reference>FBgn0038570</go:reference>
</go:dbxref>
</go:gene_product>
</go:association>
<go:association>
<go:evidence evidence_code="ISS">
<go:dbxref>
<go:database_symbol>fb</go:database_symbol>
<go:reference>fbrf0105495</go:reference>
</go:dbxref>
</go:evidence>
<go:gene_product>
<go:name>Jafrac1</go:name>
<go:dbxref>
<go:database_symbol>fb</go:database_symbol>
<go:reference>FBgn0040309</go:reference>
</go:dbxref>
</go:gene_product>
</go:association>
</go:term>
</rdf:RDF>
</go:go>

例 43 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example43)說明了go:term是基本元素。在某些情況下,基因本體沒有使用RDF Schema,而定義了它自己的術語。例如,術語GO:0016209有一個元素<go:isa rdf:resource="http://www.geneontology.org/go#GO:0003674" />。這一標記表示了"GO:0016209 isa GO:0003674"這一關係,或者用英語來說,表示了"Molecular function is part of the Gene Ontology(抗氧化劑是一個分子功能)"。另一個關係特例是go:part-of。例如,GO:0003674有一個元素是<go:part-of rdf:resource="http://www.geneontology.org/go#GO:0003673" />。這表明了"Molecular function is part of the Gene Ontology(分子功能是基因本體的一部分)"。

任何一個標注必須被歸因到一個源,這個源可以是一份參考文獻、一個資料庫或者一個計算分析。標注必須指明在引用的源中找到了哪些證據以支援基因產品與這一基因術語的關聯。一個簡單的受控辭彙表可以用來記錄這些證據。例子包括:

  • ISS 意思是 "inferred from sequence similarity [with <database:sequence_id>](根據基因序列相似性推斷[用<database:sequence_id>])"
  • IDA意思是 "inferred from direct assay(根據直接化驗推斷)"
  • TAS 意思是 "traceable author statement(可追蹤的作者論述)"

go:dbxref元素表示在外部資料庫的術語,而go:association表示每個術語的基因關聯。go:association能同時含有go:association 和go:gene_product,前者包含了指向支援關聯證據的go:dbxref,後者則包含了基因符號與go:dbxref。這些元素說明了基因本體的XML語法並不是"純粹的"RDF/XML,因為這些元素中嵌套著其他元素這一事實並未遵循[RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]的2.1節與2.2節中所描述的交替節點/謂詞弧的條狀嵌套語法。

基因本體說明了許多有趣的要點。首先,它表明使用RDF結構化XML能增強XML在資訊交換中的作用。在資料結構整體上是一個圖結構或者網路結構而不是一個嚴格層次結構的情況下,這一點將體現得更加明顯。同時,基因本體作為一個例子表明了使用RDF的資料並不一定要以在Web上直接使用的形式出現(儘管所有的檔通過Web都是可訪問的)。而基因本體也可作為一個例子,表明資料表面上使用"XML"進行描述,但是進一步觀察可發現其使用的是RDF/XML(儘管不是"純粹的"RDF/XML)。最後,基因本體闡明了RDF在本體本體中所扮演的基礎性角色。在5.5節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#richerschemas)中討論過DAML+OIL 與OWL等基於RDF的更加豐富的本體描述語言,一旦這些語言得到廣泛使用,RDF的作用將會更進一步得到增強。實際上,一個下一代基因本體 (http://gong.man.ac.uk/)(Gene Ontology Next Generation)的專案已經開始使用這些更豐富的語言來展開基因本體表示的相關研究。


6.7 描述設備性能和用戶參數

近幾年新出現了很多用於流覽Web的移動設備(mobile devices)。這些設備中有許多具有高度分散的能力,包括選擇廣泛的輸入與輸出能力,以及不同級別的語言支援。移動設備在網路連接能力方面也可能有著廣泛的不同。這些新設備的用戶期望有一個便於使用的外觀顯示,而不管其設備能力與當前的網路特性如何。同樣地,用戶希望在內容或應用呈現給他們時能夠考慮到他們動態變化的偏好(比如是否開啟聲音)。然而在現實中,由於設備的異構性以及缺少一種讓用戶向伺服器傳達個人偏好的標準方式,這會造成:得到的內容可能不能存貯在設備裏、不能顯示出來或者違反了用戶意願。此外,最終的內容可能會在網路傳輸上花很多時間才到達用戶端設備。

處理這些問題的一個辦法是讓用戶端編碼遞送上下文(delivery context)(即設備能力、用戶偏好、網路特性等等)使得服務端可以利用這個上下文為設備和用戶進行內容的定制(關於遞送上下文的定義,請參見[DIPRINC (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-diprinc)])。W3C的組合能力/偏好特徵(Composite Capabilities/Preferences Profile, CC/PP)規範[CC/PP (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-ccpp)]通過定義一個描述遞送上下文的通用框架促進了這個問題的解決。

CC/PP框架定義了一個相對簡單的結構,即一個由元件和屬性/值對構成的2層結構。一個元件(component)可被用來描述遞送上下文的一部分(如網路特性、設備支援的軟體或設備的硬體特性)。一個元件可以包含一個或多個屬性(attributes)。例如,一個表示用戶偏好的元件可能會需要包含一個指定是否打開音頻輸出的屬性。

CC/PP用RDF Schema定義上述層次結構(關於此結構的Schema詳細資訊,請參見[CC/PP (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-ccpp)])。一個CC/PP辭彙表定義了一些特定的元件和各自的屬性,但[CC/PP (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-ccpp)]不定義這些辭彙。這些辭彙是由其他機構或應用(如下所述)定義的。[CC/PP (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-ccpp)]也沒有定義傳輸CC/PP辭彙實例的協定。

CC/PP辭彙表的一個實例稱為一個特徵檔(profile)。在特徵檔中,CC/PP屬性(attribute)用RDF屬性(property)表示。例44 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example44)所顯示的是一個特徵檔的片斷,它描述了用戶的打開音頻輸出的偏好:

例44:一個CC/PP特徵檔的片斷

 <ccpp:component>
<rdf:Description rdf:ID="UserPreferences">
<rdf:type rdf:resource="http://www.example.org/profiles/prefs/v1_0#UserPreferences"/>
<ex:AudioOutput>Yes</ex:AudioOutput>
<ex:Graphics>No</ex:Graphics>
<ex:Languages>
<rdf:Seq>
<rdf:li>en-cockney</rdf:li>
<rdf:li>en</rdf:li>
</rdf:Seq>
</ex:Languages>
</rdf:Description>
</ccpp:component>

在這個應用中使用RDF有幾個優勢。第一,以CC/PP編碼的特徵檔包含的屬性可能是在由不同組織創建的Schema中定義的。RDF很自然地適合表示這些特徵檔,因為沒有單個組織能夠為聚集的特徵資料創建一個超級Schema。 使用RDF的第二個好處是,它使得在特徵檔中插入任意屬性變得更為容易(由於RDF是基於圖的資料模型),這對包含了頻繁變化的資料(如地點資訊)的特徵檔尤為有用。

開放移動聯盟(Open Mobile Alliance)已經定義了用戶代理特徵檔(User Agent Profile, UAProf),[UAPROF (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-uaprof)]。它是一個基於CC/PP的框架,包含了一個用於描述設備能力、用戶代理能力、網路特性等的辭彙表,並定義了一個傳輸特徵檔的協定。UAProf定義了六個元件,包括硬體平臺(HardwarePlatform)軟體平臺(SoftwarePlatform)網路特性(NetworkCharacteristrics)用戶流覽器(BrowserUA)等。它還為每個元件定義了一些屬性,儘管元件的屬性並是不固定的--可能被補充或撤銷。20040210/#example45 例45 (http://www.w3.org/TR/2004/REC-rdf-primer-)顯示了一個關於硬體平臺元件的UAProf片斷:

例45:一個關於硬體平臺元件的UAProf片斷:

 <prf:component>
<rdf:Description rdf:ID="HardwarePlatform">
<rdf:type rdf:resource="http://www.openmobilealliance.org/profiles/UAPROF/ccppschema-20021113#HardwarePlatform"/>
<prf:ScreenSizeChar>15x6</prf:ScreenSizeChar>
<prf:BitsPerPixel>2</prf:BitsPerPixel>
<prf:ColorCapable>No</prf:ColorCapable>
<prf:BluetoothProfile>
<rdf:Bag>
<rdf:li>headset</rdf:li>
<rdf:li>dialup</rdf:li>
<rdf:li>lanaccess</rdf:li>
</rdf:Bag>
</prf:BluetoothProfile>
</rdf:Description>
</prf:component>

UAProf協定支援靜態特徵檔和動態特徵檔。一個靜態特徵檔是通過URI訪問的。這有幾個優點:在客戶發給伺服器的請求中只含有一個URI,而不是一個冗長的XML文檔(這將減少網路擁塞);客戶不需要存儲和/或創建這個特徵檔;用戶端的實現負擔是相對羽量級的。動態特徵檔是動態創建的,因此沒有相關聯的URI。它可以包含一個描述與靜態特徵檔差別的特徵檔片斷,也可以包含客戶的靜態特徵檔中所沒有的資料。一個請求可以包含任意數量的靜態特徵檔和動態特徵檔。然後,特徵檔的順序是重要的,因為在請求中後面的特徵檔會覆蓋前面的。關於UAProf的協定和處理多個特徵檔的規則,詳見[UAPROF (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-uaprof)]。

一些其他的團體(例如,3GPP's TS 26.234 [3GPP (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-3gpp)]和WAP論壇的多媒體消息服務用戶端事務規範(Multimedia Messaging Service Client Transactions Specification [MMS-CTR (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-mms)]))已經定義了一些基於CC/PP的辭彙表。因此,一個特徵檔可以利用RDF的分散式特點,包含來自不同辭彙表定義的組件。http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example46 例46]顯示了一個這樣的特徵檔:

例46:一個用到多個辭彙表的特徵檔

 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:prf="http://www.wapforum.org/profiles/UAPROF/ccppschema-20010330#"
xmlns:mms="http://www.wapforum.org/profiles/MMS/ccppschema-20010111#"
xmlns:pss="http://www.3gpp.org/profiles/PSS/ccppschema-YYYYMMDD#">
  <rdf:Description rdf:ID="SomeDevice">
<prf:component>
<rdf:Description rdf:ID="Streaming">
<rdf:type rdf:resource="http://www.3gpp.org/profiles/PSS/ccppschema-PSS5#Streaming"/>
<pss:AudioChannels>Stereo</pss:AudioChannels>
<pss:VideoPreDecoderBufferSize>30720</pss:VideoPreDecoderBufferSize>
<pss:VideoInitialPostDecoderBufferingPeriod>0</pss:VideoInitialPostDecoderBufferingPeriod>
<pss:VideoDecodingByteRate>16000</pss:VideoDecodingByteRate>
</rdf:Description>
</prf:component>
<prf:component>
<rdf:Description rdf:ID="MmsCharacteristics">
<rdf:type rdf:resource="http://www.wapforum.org/profiles/MMS/ccppschema-20010111#Streaming"/>
<mms:MmsMaxMessageSize>2048</mms:MmsMaxMessageSize>
<mms:MmsMaxImageResolution>80x60</mms:MmsMaxImageResolution>
<mms:MmsVersion>2.0</mms:MmsVersion>
</rdf:Description>
</prf:component>
<prf:component>
<rdf:Description rdf:ID="PushCharacteristics">
<rdf:type rdf:resource="http://www.openmobilealliance.org/profiles/UAPROF/ccppschema-20010330#PushCharacteristics"/>
<prf:Push-MsgSize>1024</prf:Push-MsgSize>
<prf:Push-MaxPushReq>5</prf:Push-MaxPushReq>
<prf:Push-Accept>
<rdf:Bag>
<rdf:li>text/html</rdf:li>
<rdf:li>text/plain</rdf:li>
<rdf:li>image/gif</rdf:li>
</rdf:Bag>
</prf:Push-Accept>
</rdf:Description>
</prf:component>
</rdf:Description>
</rdf:RDF>

關於遞送上下文以及其中資料的定義將繼續發展。從而,RDF天生的可擴展性以及因此而對動態變化的辭彙表的支持使得RDF成為一個表達遞送上下文的理想框架。


7. RDF規範的其他部分

第1節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#intro) 指出了RDF 規範包含了一系列的文檔(除了這個入門外):

The Primer has already discussed the subjects of several of these documents, basic RDF concepts (in [http://www.w3.org/TR/2004/REC-rdf 這個入門文檔已經討論了這些文檔的一些主題, 如基本的RDF概念(在第 2節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#statements)), RDF/XML 語法 (在 第 3節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfxml)) 和RDF Schema (在 第 5節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfschema)). 這節簡要地講述一下剩下的文檔(儘管已經有很多對 [RDF-SEMANTICS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-semantics)]的引用), 目的是解釋他們在完整的RDF規範中的角色.


7.1 RDF語義

就像前面章節討論的那樣, RDF是用以表示關於資源的陳述的, 它的表示形式是圖並使用了一些特定的辭彙(資源,屬性,類的名字等等). RDF還是用以作為高階語言的基礎, 如在 5.5節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#richerschemas)中討論的一些語言. 為此, RDF圖的含義必須得到精確的定義.

一般來說,到底什麼組成了RDF圖的"含義"依賴於很多因素, 包括在用戶團體中解釋用戶以特定方式定義的類和屬性的一些慣例, 自然語言書寫的注釋, 對其他具有內容的資訊的鏈結. 如2.2節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfmodel)所述, 大部分以這種形式表達的含義不能直接被機器處理, 儘管這些含義可能被人們解釋RDF資訊時用到,或被程式師在編寫軟體以對RDF資訊作出各種處理時用到. 然而, RDF陳述也具有一種"形式化"的語義, 它決定了機器用一種數學的精確方式, 從一個給定的RDF圖中可以得到的結論. 文檔 RDF 語義 (http://www.w3.org/TR/rdf-mt/) [RDF-SEMANTICS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-semantics)] 用一個規範說明形式語言語義的技術, 稱為模型論, 來定義這個形式化語義. [RDF-SEMANTICS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-semantics)] 也定義了RDF語言的擴展RDF Schema和單獨的資料類型的語義擴展. 換句話說, RDF模型論語義提供了所有RDF概念的理論基礎. 基於在模型論中定義的語義, RDF圖可以容易地翻譯到具有相同含義的邏輯運算式上.


7.2 測試用例

文檔 RDF 測試用例 (http://www.w3.org/TR/rdf-testcases/) [RDF-TESTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-tests)] 為用文字描述的RDF規範補充了測試用例(例子), 這些用例對應於RDF核心工作組解決的一些特定的技術問題. 為了方便描述這些用例, 那個測試用例文檔引入了一個稱為 N-Triples (http://www.w3.org/TR/rdf-testcases/#ntriples)的表示法, 這也是本入門文檔中所用的三元組表示法的基礎. 這些測試用例以機器可讀的方式發佈在這個測試用例文檔所在的Web站點, 因此, 開發人員可以把這些作為自動化測試RDF軟體的基礎.

這些測試用例被劃分為以下幾類:

  • 肯定的和否定的語法分析器(Parser)測試: 他們測試RDF/XML Parser是否能夠為合法的RDF/XML 輸入文檔產生正確的N-Triples輸出圖, 或為不合法的RDF/XML.輸入文檔正確地報告錯誤.
  • 肯定的和否定的蘊涵(Entailment)測試: 他們測試是否能夠從指定的RDF陳述集合中得到正確的或不正確的結論.
  • 帶有資料類型的蘊涵測試: 他們是用到了資料類型的肯定的或否定的蘊涵測試, 因此需要對測試中用到的資料類型的支持.
  • 其他測試: 他們是不在上述類別中的測試.

這些測試用例不是對RDF的完全規格說明,也沒有優先于其他規範文檔的意思。相反,它們是用來闡明RDF核心工作組(RDF Core Working Group)在RDF的設計方面的意圖。開發人員也許會覺得這些測試用例很有幫助,如果那些規範在某些細節的措辭上不夠清晰的話


8. 參考文獻

8.1 規範性文獻

[RDF-CONCEPTS]
Resource Description Framework (RDF): Concepts and Abstract Syntax (http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/), Klyne G., Carroll J. (Editors), W3C Recommendation, 10 February 2004. This version (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/) is http://www.w3.org/TR/2004/REC-rdf-primer-20040210/. The latest version (http://www.w3.org/TR/rdf-concepts/) is http://www.w3.org/TR/rdf-concepts/.
[RDF-MIME-TYPE]
MIME Media Types (http://www.iana.org/assignments/media-types/), The Internet Assigned Numbers Authority (IANA). This document is http://www.iana.org/assignments/media-types/ . The registration for application/rdf+xml is archived at http://www.w3.org/2001/sw/RDFCore/mediatype-registration .
[RDF-MS]
Resource Description Framework (RDF) Model and Syntax Specification (http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/), Lassila O., Swick R. (Editors), World Wide Web Consortium, 22 February 1999. This version (http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/) is http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/. The latest version (http://www.w3.org/TR/REC-rdf-syntax/) is http://www.w3.org/TR/REC-rdf-syntax/.
[RDF-SEMANTICS]
RDF Semantics (http://www.w3.org/TR/2004/REC-rdf-mt-20040210/), Hayes P. (Editor), W3C Recommendation, 10 February 2004. This version (http://www.w3.org/TR/2004/REC-rdf-mt-20040210/) is http://www.w3.org/TR/2004/REC-rdf-mt-20040210/. The latest version (http://www.w3.org/TR/rdf-mt/) is http://www.w3.org/TR/rdf-mt/.
[RDF-SYNTAX]
RDF/XML Syntax Specification (Revised) (http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210/), Beckett D. (Editor), W3C Recommendation, 10 February 2004. This version (http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210/) http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210/. The latest version (http://www.w3.org/TR/rdf-syntax-grammar/) is http://www.w3.org/TR/rdf-syntax-grammar/.
[RDF-TESTS]
RDF Test Cases (http://www.w3.org/TR/2004/REC-rdf-testcases-20040210/), Grant J., Beckett D. (Editors), W3C Recommendation, 10 February 2004. This version (http://www.w3.org/TR/2004/REC-rdf-testcases-20040210/) is http://www.w3.org/TR/2004/REC-rdf-testcases-20040210/. The latest version (http://www.w3.org/TR/rdf-testcases/) is http://www.w3.org/TR/rdf-testcases/.
[RDF-VOCABULARY]
RDF Vocabulary Description Language 1.0: RDF Schema (http://www.w3.org/TR/2004/REC-rdf-schema-20040210/), Brickley D., Guha R.V. (Editors), W3C Recommendation, 10 February 2004. This version (http://www.w3.org/TR/2004/REC-rdf-schema-20040210/) is http://www.w3.org/TR/2004/REC-rdf-schema-20040210/. The latest version (http://www.w3.org/TR/rdf-schema/) is http://www.w3.org/TR/rdf-schema/.
[UNICODE]
The Unicode Standard, Version 3, The Unicode Consortium, Addison-Wesley, 2000. ISBN 0-201-61633-5, as updated from time to time by the publication of new versions. (See http://www.unicode.org/unicode/standard/versions/ (http://www.unicode.org/unicode/standard/versions/) for the latest version and additional information on versions of the standard and of the Unicode Character Database).
[URIS]
RFC 2396 - Uniform Resource Identifiers (URI): Generic Syntax (http://www.isi.edu/in-notes/rfc2396.txt), Berners-Lee T., Fielding R., Masinter L., IETF, August 1998, http://www.isi.edu/in-notes/rfc2396.txt.
[XML]
Extensible Markup Language (XML) 1.0, Second Edition (http://www.w3.org/TR/2000/REC-xml-20001006), Bray T., Paoli J., Sperberg-McQueen C.M., Maler E. (Editors), World Wide Web Consortium, 6 October 2000. This version (http://www.w3.org/TR/2000/REC-xml-20001006) is http://www.w3.org/TR/2000/REC-xml-20001006. The latest version (http://www.w3.org/TR/REC-xml) is http://www.w3.org/TR/REC-xml.
[XML-BASE]
XML Base (http://www.w3.org/TR/2001/REC-xmlbase-20010627/), Marsh J. (Editor), World Wide Web Consortium, 27 June 2001. This version (http://www.w3.org/TR/2001/REC-xmlbase-20010627/) is http://www.w3.org/TR/2001/REC-xmlbase-20010627/. The latest version (http://www.w3.org/TR/xmlbase/) is http://www.w3.org/TR/xmlbase/.
[XML-NS]
Namespaces in XML (http://www.w3.org/TR/1999/REC-xml-names-19990114/), Bray T., Hollander D., Layman A. (Editors), World Wide Web Consortium, 14 January 1999. This version (http://www.w3.org/TR/1999/REC-xml-names-19990114/) is http://www.w3.org/TR/1999/REC-xml-names-19990114/. The latest version (http://www.w3.org/TR/REC-xml-names/) is http://www.w3.org/TR/REC-xml-names/.
[XML-XC14N]
Exclusive XML Canonicalization Version 1.0 (http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/), Boyer J., Eastlake D.E. 3rd, Reagle J. (Authors/Editors), World Wide Web Consortium, 18 July 2002. This version (http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/) is http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/. The latest version (http://www.w3.org/TR/xml-exc-c14n/) is http://www.w3.org/TR/xml-exc-c14n/.


8.2 參考性文獻

[3GPP]
3GPP TS 26.234. (http://www.3gpp.org/specs/specs.htm) 3rd Generation Partnership Project; Technical Specification Group Services and System Aspects; Transparent end-to-end packet switched streaming service; Protocols and codecs V5.2.0 (2002-09). This document (http://www.3gpp.org/specs/specs.htm) is available at http://www.3gpp.org/specs/specs.htm via directory ftp://ftp.3gpp.org/specs/2002-09/Rel-5/26_series/.
[ADDRESS-SCHEMES]
Addressing Schemes (http://www.w3.org/Addressing/schemes.html), Connolly D., 2001. This document (http://www.w3.org/Addressing/schemes.html) is http://www.w3.org/Addressing/schemes.html.
[BATES96]
Indexing and Access for Digital Libraries and the Internet: Human, Database, and Domain Factors (http://is.gseis.ucla.edu/research/mjbates.html), Bates M.J., 1996. This document (http://is.gseis.ucla.edu/research/mjbates.html) is http://is.gseis.ucla.edu/research/mjbates.html.
[BERNERS-LEE98]
What the Semantic Web can represent (http://www.w3.org/DesignIssues/RDFnot.html), Berners-Lee T., 1998. This document (http://www.w3.org/DesignIssues/RDFnot.html) is http://www.w3.org/DesignIssues/RDFnot.html.
[CC/PP]
Composite Capability/Preference Profiles (CC/PP): Structure and Vocabularies (http://www.w3.org/TR/2004/REC-CCPP-struct-vocab-20040115/), Klyne G., Reynolds F., Woodrow C., Ohto H., Hjelm J., Butler M., Tran, L., W3C Recommendation, 15 January 2004. This version (http://www.w3.org/TR/2004/REC-CCPP-struct-vocab-20040115/) is http://www.w3.org/TR/2004/REC-CCPP-struct-vocab-20040115/. The latest version (http://www.w3.org/TR/CCPP-struct-vocab/) is http://www.w3.org/TR/CCPP-struct-vocab/.
[CG]
Conceptual Graphs, Sowa J., ISO working document ISO/JTC1/SC32/WG2 N 000, 2 April 2001 (work in progress). Available at http://users.bestweb.net/~sowa/cg/cgstand.htm (http://users.bestweb.net/~sowa/cg/cgstand.htm).
[CHARMOD]
Character Model for the World Wide Web 1.0 (http://www.w3.org/TR/2002/WD-charmod-20020220/), Dürst M., Yergeau F., Ishida R., Wolf M., Freytag A., Texin T. (Editors), World Wide Web Consortium, 20 February 2002 (work in progress). This version (http://www.w3.org/TR/2002/WD-charmod-20020220/) is http://www.w3.org/TR/2002/WD-charmod-20020220/. The latest version (http://www.w3.org/TR/charmod/) is http://www.w3.org/TR/charmod/.
[CIM]
Common Information Model (CIM): CIM 10 Version, EPRI, Palo Alto, CA: 2001, 1001976. This document (http://www.epri.com/attachments/286161_1001976(1).pdf) is available at http://www.epri.com/attachments/286161_1001976(1).pdf (267pp.).
[COWAN]
Metadata, Reuters Health Information, and Cross-Media Publishing (http://seminars.seyboldreports.com/2002_new_york/files/presentations/014/cowan_john.ppt) , Cowan J., 2002. Presentation at Seybold New York 2002 Enterprise Publishing Conference. This document (http://seminars.seyboldreports.com/2002_new_york/files/presentations/014/cowan_john.ppt) is http://seminars.seyboldreports.com/seminars/2002_new_york/presentations/014/cowan_john.ppt. An accompanying transcript (http://seminars.seyboldreports.com/2002_new_york/files/transcripts/doc/transcript_EP7.doc) is http://seminars.seyboldreports.com/2002_new_york/files/transcripts/doc/transcript_EP7.doc
[DAF]
Utility Management System (UMS) Data Access Facility (http://www.omg.org/technology/documents/formal/UMS_Data_Access_Facility.htm), version 2.0, Object Management Group, November 2002. This document (http://www.omg.org/technology/documents/formal/UMS_Data_Access_Facility.htm) is available at http://www.omg.org/technology/documents/formal/UMS_Data_Access_Facility.htm.
[DAML+OIL]
DAML+OIL (March 2001) Reference Description (http://www.w3.org/TR/daml+oil-reference), Connolly D., van Harmelen F., Horrocks I., McGuinness D.L., Patel-Schneider P.F., Stein L.A., World Wide Web Consortium, 18 December 2001. This document (http://www.w3.org/TR/daml+oil-reference) is http://www.w3.org/TR/daml+oil-reference.
[DC]
Dublin Core Metadata Element Set, Version 1.1: Reference Description (http://dublincore.org/documents/2003/06/02/dces/), 02 June 2003. This version (http://dublincore.org/documents/2003/06/02/dces/) is http://dublincore.org/documents/2003/06/02/dces/. The latest version (http://dublincore.org/documents/dces/) is http://dublincore.org/documents/dces/.
[DIPRINC]
Device Independence Principles. (http://www.w3.org/TR/di-princ/) Gimson, R., Finkelstein, S., Maes, S., Suryanarayana, L., World Wide Web Consortium, 18 September 2001 (work in progress). This version (http://www.w3.org/TR/2001/WD-di-princ-20010918/) is http://www.w3.org/TR/2001/WD-di-princ-20010918. The latest version (http://www.w3.org/TR/di-princ/) is http://www.w3.org/TR/di-princ/.
[DWZ01]
XML for CIM Model Exchange (http://www.langdale.com.au/PICA/) , deVos A., Widergreen S.E., Zhu J., Proc. IEEE Conference on Power Industry Computer Systems, Sydney, Australia, 2001. This document (http://www.langdale.com.au/PICA/) is http://www.langdale.com.au/PICA/.
[GO]
Gene Ontology: tool for the unification of biology (http://www.geneontology.org/GO_nature_genetics_2000.pdf), The Gene Ontology Consortium, Nature Genetics, Vol. 25: 25-29, May 2000. Available at http://www.geneontology.org/GO_nature_genetics_2000.pdf (http://www.geneontology.org/GO_nature_genetics_2000.pdf)
[GRAY]
Logic, Algebra and Databases, Gray P., Ellis Horwood Ltd., 1984. ISBN 0-85312-709-3, 0-85312-803-0, 0-470-20103-7, 0-470-20259-9.
[HAYES]
In Defense of Logic, Hayes P., Proceedings from the International Joint Conference on Artificial Intelligence, 1975, San Francisco. Morgan Kaufmann Inc., 1977. Also in Computation and Intelligence: Collected Readings, Luger G. (ed), AAAI press/MIT press, 1995. ISBN 0-262-62101-0.
[KIF]
Knowledge Interchange Format, Genesereth M., draft proposed American National Standard NCITS.T2/98-004. Available at http://logic.stanford.edu/kif/dpans.html (http://logic.stanford.edu/kif/dpans.html).
[LBASE]
LBase: Semantics for Languages of the Semantic Web (http://www.w3.org/TR/2003/NOTE-lbase-20031010/), Guha R. V., Hayes P., W3C Note, 10 October 2003. This version (http://www.w3.org/TR/2003/NOTE-lbase-20031010/) is http://www.w3.org/TR/2003/NOTE-lbase-20031010/. The latest version (http://www.w3.org/TR/lbase/) is http://www.w3.org/TR/lbase/.
[LUGER]
Artificial Intelligence: Structures and Strategies for Complex Problem Solving (3rd ed.), Luger G., Stubblefield W., Addison Wesley Longman, 1998. ISBN 0-805-31196-3.
[MATHML]
Mathematical Markup Language (MathML) Version 2.0 (http://www.w3.org/TR/2001/REC-MathML2-20010221/), Carlisle D., Ion P., Miner R., Poppelier N. (Editors); Ausbrooks R., Buswell S., Dalmas S., Devitt S., Diaz A., Hunter R., Smith B., Soiffer N., Sutor R., Watt S. (Principal Authors), World Wide Web Consortium, 21 February 2001. This version (http://www.w3.org/TR/2001/REC-MathML2-20010221/) is http://www.w3.org/TR/2001/REC-MathML2-20010221/. The latest version (http://www.w3.org/TR/MathML2/) is http://www.w3.org/TR/MathML2/.
[MMS-CTR]
Multimedia Messaging Service Client Transactions Specification. (http://www.openmobilealliance.org/) WAP-206-MMSCTR-20020115-a. This document is available at http://www.openmobilealliance.org/.
[NAMEADDRESS]
Naming and Addressing: URIs, URLs, ... (http://www.w3.org/Addressing/), Connolly D., 2002. This document (http://www.w3.org/Addressing/) is http://www.w3.org/Addressing/.
[OWL]
OWL Web Ontology Language Reference (http://www.w3.org/TR/2004/REC-owl-ref-20040210/), Dean M., Schreiber G (Editors); van Harmelen F., Hendler J., Horrocks I., McGuinness D.L., Patel-Schneider P.F., Stein L.A. (Authors), W3C Recommendation, 10 February 2004. The latest version (http://www.w3.org/TR/owl-ref/) is http://www.w3.org/TR/owl-ref/.
[PRISM]
PRISM: Publishing Requirements for Industry Standard Metadata (http://www.prismstandard.org/), Version 1.1, 19 February 2002. The latest version (http://www.prismstandard.org/) of the PRISM specification is available at http://www.prismstandard.org/.
[RDFISSUE]
RDF Issue Tracking (http://www.w3.org/2000/03/rdf-tracking/), McBride B., 2002. This document (http://www.w3.org/2000/03/rdf-tracking/) is http://www.w3.org/2000/03/rdf-tracking/.
[RDF-S]
Resource Description Framework (RDF) Schema Specification 1.0 (http://www.w3.org/TR/2000/CR-rdf-schema-20000327/) , Brickley D., Guha, R.V. (Editors), World Wide Web Consortium. 27 March 2000. This version (http://www.w3.org/TR/2000/CR-rdf-schema-20000327/) is http://www.w3.org/TR/2000/CR-rdf-schema-20000327/.
[RSS]
RDF Site Summary (RSS) 1.0 (http://purl.org/rss/1.0/spec), Beged-Dov G., Brickley D., Dornfest R., Davis I., Dodds L., Eisenzopf J., Galbraith D., Guha R.V., MacLeod K., Miller E., Swartz A., van der Vlist E., 2000. This document (http://purl.org/rss/1.0/spec) is http://purl.org/rss/1.0/spec.
[RUBY]
Ruby Annotation (http://www.w3.org/TR/2001/REC-ruby-20010531/), Sawicki M., Suignard M., Ishikawa M., Dürst M., Texin T. (Editors), World Wide Web Consortium, 31 May 2001. This version (http://www.w3.org/TR/2001/REC-ruby-20010531/) is http://www.w3.org/TR/2001/REC-ruby-20010531/. The latest version (http://www.w3.org/TR/ruby/) is http://www.w3.org/TR/ruby/.
[SOWA]
Knowledge Representation: Logical, Philosophical and Computational Foundations, Sowa J., Brookes/Cole, 2000. ISBN 0-534-94965-7.
[SVG]
Scalable Vector Graphics (SVG) 1.1 Specification (http://www.w3.org/TR/2003/REC-SVG11-20030114/), Ferraiolo J., Fujisawa J., Jackson D. (Editors), World Wide Web Consortium, 14 January 2003. This version (http://www.w3.org/TR/2003/REC-SVG11-20030114/) is http://www.w3.org/TR/2003/REC-SVG11-20030114/. The latest version (http://www.w3.org/TR/SVG11/) is http://www.w3.org/TR/SVG11/.
[UAPROF]
User Agent Profile. (http://www.openmobilealliance.org/) OMA-WAP-UAProf-v1_1. This document is available at http://www.openmobilealliance.org/.
[WEBDATA]
Web Architecture: Describing and Exchanging Data (http://www.w3.org/1999/04/WebData), Berners-Lee T., Connolly D., Swick R., World Wide Web Consortium, 7 June 1999. This document (http://www.w3.org/1999/04/WebData) is http://www.w3.org/1999/04/WebData.
[XLINK]
XML Linking Language (XLink) Version 1.0 (http://www.w3.org/TR/2001/REC-xlink-20010627/), DeRose S., Maler E., Orchard D. (Editors), World Wide Web Consortium, 27 June 2001. This version (http://www.w3.org/TR/2001/REC-xlink-20010627/) is http://www.w3.org/TR/2001/REC-xlink-20010627/. The latest version (http://www.w3.org/TR/xlink/) is http://www.w3.org/TR/xlink/.
[XML-SCHEMA2]
XML Schema Part 2: Datatypes (http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/), Biron P., Malhotra A. (Editors), World Wide Web Consortium. 2 May 2001. This version (http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/) is http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/. The latest version (http://www.w3.org/TR/xmlschema-2/) is http://www.w3.org/TR/xmlschema-2/.
[XPACKAGE]
XML Package (XPackage) 1.0 (http://www.xpackage.org/specification/xpackage-draft-20030306.html) , Wilson G., Editor's Working Draft, 6 March 2003. This version (http://www.xpackage.org/specification/xpackage-draft-20030306.html) is http://www.xpackage.org/specification/xpackage-draft-20030306.html. The latest version (http://www.xpackage.org/specification/) is http://www.xpackage.org/specification/.


9. 致謝

本文檔得益於RDF 核心工作組 (http://www.w3.org/2001/sw/RDFCore/)中諸多成員的共同努力。尤其感謝Art Barstow, Dave Beckett, Dan Brickley, Ron Daniel, Ben Hammersley, Martyn Horner, Graham Klyne, Sean Palmer, Patrick Stickler, Aaron Swartz, Ralph Swick 以及 Garret Wilson,正是他們以及其他許多研究人員在對上一個版本的RDF入門提出了許多寶貴意見之後,才得以產生本文。

另外,Pat Hayes, Sergey Melnik 和 Patrick Stickler也對本文做出了重要貢獻,他們領導開發了RDF規範系列中所描述的RDF資料類型工具。

Frank Manola 還要感謝, MITRE 公司 (http://www.mitre.org/),Frank的主管, 在其完成本文的絕大部分時間裏所給予的大力支持,RDF核心工作組的活動得到了該公司資助的研究授權。





附錄A:更多關於統一資源識別字(Uniform Resource Identifiers,URIs)的更多資訊

注意:附錄A旨在提供一個關於URIs的簡要介紹。URIs的權威規範是RFC 2396 (http://www.isi.edu/in-notes/rfc2396.txt)[URIS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-uri)],如需瞭解更多資訊請參閱該文檔。關於URIs的補充論述可以在下列位址處獲得:Naming and Addressing: URIs, URLs, ... (http://www.w3.org/Addressing/) [NAMEADDRESS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-nameaddress)]。

2.1節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#basicconcepts)所述,Web提供了一種通用形式的識別字--統一資源識別字(Uniform Resource Identifier) (http://www.isi.edu/in-notes/rfc2396.txt)(URI), 用於標識(命名)Web上的資源。與URLs不同,URIs並不局限於標識有網路位置或使用其他電腦訪問機制的資源。已有許多不同的URI方案(URI scheme)被開發並正在用於不同用途,比如:

  • http: (超文本傳輸協定(Hypertext Transfer Protocol[譯注:簡稱HTTP]),用於標識網頁)
  • mailto: (email地址),例如mailto:em@w3.org
  • ftp: (檔傳輸協議(File Transfer Protocol[譯注//簡稱FTP]))
  • urn: (統一資源名稱(Uniform Resource Names[譯注:簡稱URN]),用於標識永久與位置無關的資源),例如urn:isbn:0-520-02356-0(標識一本書)

現有URI方案(URI schemes)的列表可在Addressing Schemes (http://www.w3.org/Addressing/schemes.html) [ADDRESS-SCHEMES (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-address-schemes)]獲得。一個不錯的想法是考慮在各種專門的標識用途中利用現有URI方案,而不是試圖創造一種新的方案。

URI由誰創建和如何使用並不是由某個人或組織控制的。然而某些URI方案(比如URL的http:) 要依賴于集中式系統(比如DNS),而其他一些方案(比如freenet:)則是完全分散式的。這意味著,如其它類型的名稱一樣,人們不需要特別的權威或許可權來為事物創建URI。而且,任何人都可以創建URIs來引用不為他們所擁有的事物,就像在日常語言中任何人都可以用任何他們樂意的名稱來稱呼不為他們所有擁的事物一樣。

2.1節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#basicconcepts)所談到的,RDF使用URI引用(URI references)[URIS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-uri)]來命名RDF陳述中的主體、謂詞和客體。一個URI引用(或簡稱URIref)是一個可以在末尾附加(也可以不附加)片段識別字(fragment identifier)[譯注//片段識別字這一術語有歷史淵源,它的實際作用也許並不是標識某個片段。]的URI。舉例來說,URI引用 http://www.example.org/index.html#section2 包含了URI http://www.example.org/index.html 和(以"#"字元分隔的)片段識別字Section2。RDF URIrefs中可以包含Unicode [UNICODE (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-unicode)]字元(參見[RDF-CONCEPTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)]),以允許在URIrefs中使用多種語言。

URIrefs可以是絕對的(absolute)相對的(relative)。一個絕對(absolute)URIref是對一個與URIref所在上下文無關的資源的引用,例如URIref http://www.example.org/index.html。相對(relative)URIref是絕對URIref的一種簡略記法,其中略去了絕對URIref中的部分首碼。被略去的部分需要通過相對URIref所在上下文中的資訊獲得。例如,當相對URIref otherpage.html 出現在資源 http://www.example.org/index.html 中時,它所對應的絕對URIref為 http://www.example.org/otherpage.html。 一個沒有URI部分的URIref[譯注//即一個不含任何字元的URIref(空URIref)或一個隻包含片段識別字的URIref]被認為是對當前文檔的引用(即它所在的文檔)。於是,文檔裏的空URIref[譯注//即不包含任何字元的URIref]等價于該文檔自身的URIref;而一個隻包含片段識別字(fragment identifier)的URIref等價于它所在文檔的URIref加上該片段識別字。例如,在 http://www.example.org/index.html 裏,如果 #section2 作為一個URIref出現的話,它將被看作等價於絕對 URIref http://www.example.org/index.html#section2.

[RDF-CONCEPTS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts)]中提到 RDF graphs(RDF的抽象模型)不使用任何相對URIrefs,即RDF陳述中的主體、謂詞和客體(以及類型文字中的資料類型)的標識必須是與上下文無關的。然而,某個特定的具體RDF語法(比如RDF/XML)可以允許在某些情況下將相對URIrefs作為一種絕對URIrefs的簡略寫法。RDF/XML的確允許這樣使用相對URIrefs,前面的一些RDF/XML示例已經說明了這一點。更多細節請參見[RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]。

RDF和Web流覽器都使用URIrefs來標識事物,然而它們在解釋URIrefs的方式上略有不同。因為在RDF中,URIrefs被用來標識事物,而流覽器還用URIrefs來獲取事物。通常,這並沒有經常有實際的區別,但在某些情況下區別是顯著的。一個顯而易見的區別是:當一個URIref被用在流覽器中時,它被期望標識某個可實際獲取的資源,即某個確實位於該URI所標識的位置的資源。然而在RDF中,一個URIref可以被用來表示像人這樣的不能在Web上獲取的事物。人們在用RDF時有時會有這樣的慣例:即當一個URIref被用於標識某個RDF資源時,人們習慣於在該URI所標識的位置放一個包含關於這個資源的描述性資訊的頁面,這樣可在流覽器中用該URIref來獲取資訊。這在某些情況下,這是非常有用的,儘管它在原始資源的標識和描述它的Web頁面(詳見2.3節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#structuredproperties))的標識的區分上造成了一些困難。然而,這一慣例在RDF定義中並沒有被明確規定,RDF本身不假定URIref標識任何可獲取的事物。

另一個區別是它們對帶片段識別字的URIref的不同處理方式。在URLs(標識某HTML文檔)中通常用片段識別字(fragment identifiers)來標識URL所標識文檔中的某個特定位置。按正規的HTML用法,URI引用(URI references)是用於獲取資源的,因此下面兩個URIrefs:

 http://www.example.org/index.html
http://www.example.org/index.html#Section2

是相關的(它們都引用了同一個HTML文檔,而第二個標識第一個中的一個位置)。但是正如前面談到的,在RDF中,URI引用純粹被用於標識資源,而不是獲取資源,並且RDF也不假定上述兩個URIrefs之間存在任何關係。就RDF來說,它們在語法上是不同的URI引用,因此它們可以引用著不相關的事物。這並不意味著由HTML定義的限制關係不存在,而只表明RDF不會僅根據URI引用的URI部分相同而假定它們之間存在某個關係。

就這一點再進一步地,RDF不假定具有相同前導字串的URI引用(不論是否包含片段識別字)之間存在任何關係。例如,就RDF來說,下麵兩個URIrefs:

 http://www.example.org/foo.html
http://www.example.org/bar.html

沒有特定的關係,儘管它們有共同的前導字串 http://www.example.org/。 對於RDF來說,它們僅僅是不同的資源,因為它們的URIrefs是不同的。(儘管它們可能確實是位於同一目錄的兩個檔,但RDF不假定這一點或任何其他關係存在於它們之間。)


附錄B:關於可擴展標記語言(Extensible Markup Language,XML)的更多資訊

注意:附錄A旨在提供一個關於XML的簡要介紹。XML的權威規範是[XML (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xml)],如需瞭解更多資訊請參閱該文檔。

可擴展標記語言(Extensible Markup Language) (http://www.w3.org/TR/2000/REC-xml-20001006)[XML (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xml)]被設計為允許任何人設計他們自己的文檔格式並依照該格式書寫文檔。像HTML文檔(網頁)一樣,XML文檔包含文本。文本主要由平凡文本內容(plain text content)和以標籤(tag)為形式的標記(markup)的構成。標記使得處理程式可以解釋各個內容片斷(稱作元素(elements))。XML內容和(在某些特例中)標籤(tags)可以包含Unicode[UNICODE (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-unicode)]字元,以允許直接表達多種語言的資訊。在HTML中,允許的標籤集合以及它們的解釋是由HTML規範定義的。而XML允許終於用戶定義他們自己的標記語言(markup languages)(標籤及標籤可出現的結構),以滿足在他們的特定需求(第3節 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfxml)所描述的RDF/XML語言就是這樣一種XML標記語言)。例如,下面這段簡短的文字就是用一個基於XML的標記語言書寫的:

 <sentence><person webid="http://example.com/#johnsmith">I</person> 
just got a new pet <animal>dog</animal>.</sentence>

以標籤為界的元素(<sentence>,<person>等)反映了與這段文字相關的特定結構。這些標籤允許理解這些特定元素以及它們的構造方式的程式正確地解釋上面的文字。比如,本例中的一個元素是<animal>dog</animal>,它包含首標籤<animal>、元素內容和一個相應的尾標籤</animal>。這個animal元素以及person元素被嵌套在sentence元素中。如果按下面的方式來書寫這個句子,也許嵌套體現得更為清楚(並更接近於某些將在後面出現的更"結構化的"XML):

 <sentence>
<person webid="http://example.com/#johnsmith">I</person>
just got a new pet
<animal>dog</animal>.
</sentence>

在某些情況下,一個元素可以沒有內容。可以用兩種方式來書寫這樣的元素:不在首、尾標籤括起的部分寫入內容,比如<animal></animal>,或者用被稱作空元素標籤(empty-element tag)的簡寫形式,比如<animal/>。

在某些情況下,首標籤(或空元素標籤)除了包含標籤名稱(tag name)以外,也可以包含限定資訊(以屬性(attributes)的形式出現)。例如,<person>元素的首標籤包含屬性webid="http://example.com/#johnsmith"(可能是標識被引用的那個人)。一個屬性(attribute)包含名稱、等號和值(用引號括起)。

這一具體的標記語言使用單詞"sentence"、"person"和"animal"作為標籤名稱,以試圖傳達元素的某些含義;它們傳達含義給懂英語的讀者,或一個專門解釋該辭彙表的程式。然而,這裏沒有內嵌的含義。例如,對於不懂英語的讀者或一個不理解這些標記的程式而言,元素<person>也許沒有任何含義。以下面這段文字為例:

 <dfgre><reghh bjhbw="http://example.com/#johnsmith">I</reghh> 
just got a new pet <yudis>dog</yudis>.</dfgre>

對一個機器來說,這段文字和前面的例子有著完全相同的結構。然而,對於懂英語的讀者來,他不會明白這段文字表達了什麼,因為這裏的標籤不是英文單詞。此外,別人也許已在他們的標記語言中使用了相同的單詞,而具有完全不同的含義。例如,在另一個標記語言中"sentence"可能引用一個被定罪的罪犯必須在服役機構服役的時間。因此,必須提供附加的機制來幫助保持XML辭彙的條理性。

為避免混淆,有必要對元素進行唯一標識。在XML中,這是通過使用XML命名空間(Namespaces) (http://www.w3.org/TR/REC-xml-names/)[XML-NS (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-namespaces)]實現的。一個命名空間(namespace)即一種標識部分Web(空間)的方式,它作為一個特定集合的名稱的限定符(qualifier)。為一個XML標記語言創建命名空間是通過為它創建URI來實現的。通過使用命名空間的URI來限定標籤名稱,任何人都可以創建他們自己的標籤,並正確地區分於別人創建的具有相同拼寫的標籤。一個時常被遵循的慣例是:創建一個網頁來描述標記語言(以及其中標籤的含義)並使用該網頁的URL作為命名空間的URI。然而,這只是一個慣例,XML和RDF都沒有假定一個命名空間URI標識的是一個可獲取的Web資源。下面的例子展示了XML命名空間的使用。

 <user:sentence xmlns:user="http://example.com/xml/documents/">
<user:person user:webid="http://example.com/#johnsmith">I</user:person>
just got a new pet <user:animal>dog</user:animal>.
</user:sentence>

本例中,屬性(attribute)xmlns:user="http://example.com/xml/documents/"為上述XML片段聲明了一個命名空間。它將首碼(prefix)user映射到命名空間URI http://example.com/xml/documents/ 上。這樣,XML內容可以使用限定名稱(簡稱QNames)作為標籤,比如user:person。QName以標識命名空間的首碼打頭,後面緊跟一個冒號,然後是一個用於標籤或屬性名稱的內部名(local name)。通過使用命名空間URIs來區分名稱的分組,並用命名空間的URIs來限定標籤(如本例中這樣),就不必為標籤名稱衝突而擔心了。兩個拼寫相同的標籤僅當它們的命名空間URIs也相同時才被認為是相同的標籤。

每個XML文檔必須是良構的(well-formed)。這意味著XML文檔必須滿足許多語法條件,例如,每個首標籤必須有一個與之匹配的尾標籤,並且元素之間的嵌套必須是正確的(元素之間不能重疊)。[XML (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xml)]定義了完整的良構條件集合。

另外,一個XML文檔可以自由選擇是否包含一個XML文檔類型聲明(document type declaration)。文檔類型聲明對文檔的結構定義了附加的限制,並支援在文檔中使用預定義的文本單元。文檔類型聲明(通過DOCTYPE引入XML文檔)包含或指向定義了文檔語法的聲明。這個語法被稱為文檔類型定義(document type definition,簡稱DTD)。DTD中的聲明指定了哪些XML元素(elements)和屬性(attributes)可以在符合該DTD的XML文檔中出現、這些元素和屬性的關係(例如哪些元素可以嵌套在另一些元素中,哪些屬性可以在另一些元素中出現),以及元素或屬性是必須的還是可選的。文檔類型聲明可以指向文檔外部的一組聲明(稱作外部子集,它們可被用來在多個文檔間共用一些公用的聲明),也可以包含直接在文檔中出現的聲明(稱做內部子集),或者既包含內部子集也包含外部子集。一個文檔的完整DTD是它的內部子集與外部子集的總和。例47 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example47)是一個帶有文檔類型聲明的XML文檔的簡單例子:

例47:一個帶有文檔類型聲明的XML文檔

 <?xml version="1.0"?> 
<!DOCTYPE greeting SYSTEM "http://www.example.org/dtds/hello.dtd">
<greeting>Hello, world!</greeting>

本例中,文檔僅有外部DTD子集,系統識別字(system identifier)[譯注//系統識別字一詞有其歷史淵源,將它理解為一種識別字就可以了,不要對其中的"系統"二字產生誤解。]為 http://www.example.org/dtds/hello.dtd 給出了它的位置(一個URIref)。

如果一個XML文檔有與之關聯的文檔類型聲明,並且符合該文檔類型聲明中的限制,則該XML文檔是有效的(valid)。

一個RDF/XML文檔僅需是良構的(well-formed)XML;它不用被驗證是否符合某個XML DTD或XML模式(XML Schema),並且[RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]也沒有指定一個可用於驗證RDF/XML的規範性DTD(但[RDF-SYNTAX (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax)]在附錄中為RDF/XML給出了一個非規範性的模式)。關於XML DTD語法的更詳盡的討論超出了本文檔的範圍。欲瞭解更多關於XML DTDs以及XML驗證的資訊,請參見[XML (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xml)]和眾多關於XML的書籍。

然而,有一個XML文檔類型聲明的使用與RDF/XML相關的,並且是用在定義XML實體中。實際上,XML實體定義是將一個名稱與一個字串相關聯。當實體名稱在文檔中的別處[譯注//指除了它被定義的地方以外]出現時,XML處理器(XML processors)將用相應的字串來替換該實體名稱。這為長字串(比如URIrefs)的書寫提供了一種簡略方式,並有助於增強XML文檔的可讀性。使用只包含XML實體聲明的文檔類型聲明是合法的,並且有時是有用的,即使在文檔不用被驗證時(比如在RDF/XML中)。

在RDF/XML文檔中,實體通常在文檔內部聲明,即只使用內部DTD子集(這樣做的一個原因是RDF/XML不用被驗證,而非驗證的XML處理器不被要求處理外部DTD子集)。例如,在RDF/XML文檔的開始部分提供如例48 (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example48)所示的文檔類型聲明將允許在文檔中分別用&rdf;、&rdfs;和&xsd;作為命名空間rdf、rdfs和xsd所對應URIrefs的簡寫。

例48:一些XML實體聲明

 <?xml version='1.0'?> 
<!DOCTYPE rdf:RDF [
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#">
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">
]>
<rdf:RDF
xmlns:rdf = "&rdf;"
xmlns:rdfs = "&rdfs;"
xmlns:xsd = "&xsd;">
...RDF statements...
</rdf:RDF>


附錄C:改動

本文檔僅對建議推薦標準版本(Proposed Recommendation version) (http://www.w3.org/TR/2003/PR-rdf-primer-20031215/)僅作了微小的編輯與排字上的改動。關於建議推薦標準版本(Proposed Recommendation version) (http://www.w3.org/TR/2003/PR-rdf-primer-20031215/)對更早版本所做的改動請參見它的改動記錄 (http://www.w3.org/TR/2003/PR-rdf-primer-20031215/#changes).


rdf_metadata_button.40.gif (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/metadata.rdf)

个人工具
其它语言
 
 Page execution time: 4119.39 ms.
网上报警 苏ICP备05002329号