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)