PRISM 是一種與出版相關的元數據標准。它通過提供標准化特性、受控詞匯表和支持用戶定義其自己的受控詞匯表的擴展性機制來允許對內容和相關資源進行正式描述。在本專欄文章中,Uche Ogbuji 通過示例介紹了 PRISM。
與出版相關的各種行業處於最早支持 XML 並在實踐中利用其價值的行列中。這不足為奇,因為出版早就是 SGML(XML 的前身)的堅定支持者了。信息與內容交換(Information and Content Exchange)協議(簡稱 ICE)出現於 1998 年,作為使用 XML 的最早的主要業界標准之一。ICE 是一個指導內容分發的協議,它指導將內容以電子形式分發到各個合作伙伴處,合作伙伴將這些內容呈現在因特網上。XML 十分適合於出版中的另一個重要需求:內容元數據管理。ICE 提供了交換內容的機制,但即使 ICE 規范也承認需要一種描述該內容的正式方法。
為了滿足這種需求,出版開發了 工業標准元數據的出版需求(Publishing Requirements for Industry Standard Metadata,PRISM)― 一種用於指導處理內容的 XML 元數據標准。PRISM 涵蓋了從目錄到書籍在內的各種內容,以及從各種形式的電子出版物到各種形式的印刷出版物在內的各種媒體。PRISM 正在由 IDEAlliance(前身是 GCA)的一個工作組進行開發,IDEAlliance 是研究電子技術基礎結構的出版商協會。PRISM 成員包括象 Adobe 這樣的技術供應商,以及象 Time Inc. 和 McGraw-Hill 這樣的雜志出版社。
本文中,我將以 PRISM 1.2 規范版現行草案為主介紹 PRISM。讀者應該熟悉 XML 和 RDF。
從基礎進行構建
PRISM(就其最基礎部分而言)被定義為使用 Dublin Core 詞匯表的 RDF/XML 文檔。作為示例, 清單 1是描述本專欄前一篇文章的有效 PRISM 文檔。
清單 1. 用基礎 PRISM 正式描述的 Thinking XML 專欄的第 12 篇文章
<?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"
>
<rdf:Description
rdf:about="http://www.ibm.com/developerworks/XML/library/x-think12.Html">
<dc:description>
A discussion of the broader context and relevance of XML/RDF techniques.
</dc:description>
<dc:title>Basic XML and RDF techniques for knowledge management, Part 7
</dc:title>
<dc:publisher>IBM developerWorks</dc:publisher>
<dc:creator>Uche Ogbuji</dc:creator>
<dc:subject>XML</dc:subject>
<dc:subject>RDF</dc:subject>
<dc:format>text/Html</dc:format>
</rdf:Description>
</rdf:RDF>
這種與純 RDF 和日益流行的 Dublin Core 元素集的一致性,意味著 PRISM 可以與大部分 RDF 工具以及適當的技術很好地合作。至於所涉及的 Dublin Core 特性,PRISM 允許靈活地使用特性值:您可以象我先前所做的一樣,使用特定的純文本值;您可以使用來自受控詞匯表(如 ISBN 號)的純文本值;或者可以使用 URI。例如,我將上面的 dc:publisher 特性表示為:
<dc:publisher>IBM developerWorks</dc:publisher>
我可以用 IBM developerWorks 的國際標准序列號(International Standard Serial Number,ISSN)(實際上,這是一個虛構的 ISSN)表示它:
<dc:publisher>1234-5678</dc:publisher>
我也可以使用 IBM developerWorks 的 ISSN 識別題名(key title)。識別題名是隨 ISSN 一起分配的特殊名稱。識別題名通常是出版物普通名稱的變體,它被修改成是全局唯一的。ISSN 識別題名和號碼是由 ISSN 國際中心(ISSN International Centre)控制的詞匯表。在元數據字段中使用它們,消除了與使用出版商所給予的普通名稱相關聯的可能的任何模糊性。
我可以使用 IBM developerWorks URL 作為第三個選項:
<dc:publisher rdf:resource="http://www.ibm.com/developerworks"/>
請注意 RDF 的不同語法形式,它將特性值指定為另一種資源而不僅是純文本字符串。這後一個選項也是受控詞匯表,但不是由某個個體建立的控制,而是依靠由 URL 中使用的 IBM 的域名所有權以及映射到這個域名的機器的因特網地址共同建立的控制。
要點在於 PRISM 是基於 RDF/XML 序列化而不是抽象模型的。在本專欄的上一篇文章中,我強烈建議 RDF 用戶關注抽象模型而不是 XML 序列化。我可以理解 PRISM 在這方面的矛盾,因為它必須與內容提供者打交道,從而具體地告訴他們要在元數據通信中加入什麼 XML 元素。PRISM 希望在語法級別上建立強大的互操作性。為了強調這一點,PRISM 是根據 DTD 正式定義的,對於 PRISM 的出版初衷,這或許也是很自然的結果。
側重於語法的一個不利方面是 RDF/XML 序列化不能表示每種 RDF 模型。例如,如果一個組織想要用不能劃分成 XML 前綴/本地名稱組合的 URI 形式來標識內容,那麼就很難理解如何用 PRISM 來描述此類內容了。有利的方面是,PRISM 利用了 RDF/XML 規范中的靈活性,它既可以表現為獨立文檔,也可以嵌入內容中。 rdf:RDF 封裝器元素照常提供對元數據的封裝。
添加的一抹亮色
PRISM 還定義了一組特性,用來擴展 Dublin Core 所允許的基本描述。這些特性支持:
這些特性都是基於核心 PRISM 名稱空間 http://prismstandard.org/namespaces/1.2/basic/ 的,規范的第 II 部分 4.4 中正式定義了這個名稱空間。警告:PRISM 規范草案中的示例本身與它們的 PRISM 名稱空間的定義不一致。一些示例使用標准化名稱空間,但另一些不加說明地使用諸如 http://prismstandard.org/namespaces/basic/ 甚至 http://prismstandard.org/namespaces/basic/1.2/ 之類的變體。我假定這些只是排版錯誤。
在下列清單中,我從規范中定義的大約 50 個 PRISM 特性中,選擇了一些比較有趣的特性。
清單 2是一個用這些 PRISM 核心元素來擴充 清單 1的示例。
清單 2:用 PRISM 核心元素正式描述 Thinking XML 專欄的第 12 篇文章
<?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/"
XMLns:prism="http://prismstandard.org/namespaces/1.2/basic/"
XML:lang="en"
>
<rdf:Description
rdf:about="http://www.ibm.com/developerworks/XML/library/x-think12.Html">
<dc:description>
A discussion of the broader context and relevance of XML/RDF techniques.
</dc:description>
<dc:title>Basic XML and RDF techniques for knowledge management, Part 7
</dc:title>
<dc:publisher>IBM developerWorks</dc:publisher>
<dc:creator>Uche Ogbuji</dc:creator>
<dc:subject>XML</dc:subject>
<dc:subject>RDF</dc:subject>
<prism:category>column</prism:category>
<prism:organization>OMG</prism:organization>
<dc:format>text/Html</dc:format>
</rdf:Description>
</rdf:RDF>
添加的內容以黑體顯示。我聲明了 PRISM 名稱空間,然後添加這個名稱空間的語句。
定制的受控詞匯表
PRISM 提供的重要一點是:為他人定義其自己的受控詞匯表提供了一種正式方法。這樣,PRISM 提供了超出 XML 和 RDF 基本擴展性的擴展性機制。如果您研究我在清單 1和 2 中的描述,就會發現對於 dc:subject 特性,我使用的是簡單值 XML 和 RDF 。但因為這些值不是來自於受控詞匯表的,所以可能比較含糊。例如,來自采礦業的人可能將 RDF誤解為該行業中“refuse defined fuels”的常用縮寫。實際上,我在這裡想說的是,所討論的內容是關於兩個特定的 W3C 規范。但 PRISM 沒有定義業界規范的受控詞匯表。我將改為使用 PRISM 的工具來定義我自己的這種詞匯表,如 清單 3所示。
清單 3:正式規范的受控詞匯表示例
<?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/"
XMLns:pcv="http://prismstandard.org/namespaces/1.2/pcv/"
XMLns:u="http://uche.ogbuji.Net/eg/pcv/specs/schema/"
XML:lang="en" >
<pcv:Descriptor rdf:about="http://www.w3.org/TR/REC-XML">
<pcv:label>XML 1.0 Recommendation</pcv:label>
<u:owner rdf:resource="http://w3.org"/>
</pcv:Descriptor>
<pcv:Descriptor rdf:about="http://www.w3.org/TR/REC-rdf-syntax/">
<pcv:label>RDF Model and Syntax 1.0</pcv:label>
<u:owner rdf:resource="http://w3.org"/>
</pcv:Descriptor>
</rdf:RDF>
這裡,我用規范本身的 URL 作為標識,定義了兩個 pcv:Descriptor 類型的資源。我用 rdfs:label 的子類 pcv:label 設置了容易理解的資源描述,以適合於在支持 PRISM 的軟件中使用。最後,我利用 RDF 本身的通用可擴展性來創建我自己的專用特性 u:owner ,將規范和擁有規范的組織結合起來。現在,我可以使用這個受控詞匯表制作出比我原來的 dc:subject 有所改進的語句。 清單 4是從 清單 1中摘錄的,它顯示了已修改的 subject 語句。
清單 4:更新 dc:subject 以使用受控詞匯表
<dc:subject>
<pcv:Descriptor rdf:about="http://www.w3.org/TR/REC-XML"/>
</dc:subject>
<dc:subject>
<pcv:Descriptor rdf:about="http://www.w3.org/TR/REC-rdf-syntax/"/>
</dc:subject>
如果我使用這種形式,就可以依賴軟件處理 PRISM 以用受控詞匯表找到 清單 4中的文檔,來確定諸如描述符資源標簽之類的有用資源。因為這可能並不總是可用,所以我可以使用 PRISM 來利用 RDF 的語法規則以在行內重復這些特性,如 清單 5所示。
清單 5:通過重復使用 lable 特性,更新 dc:subject 以使用清單 4 中的受控詞匯表
<dc:subject>
<pcv:Descriptor rdf:about="http://www.w3.org/TR/REC-XML">
<pcv:label>XML 1.0 Recommendation</pcv:label>
</pcv:Descriptor>
</dc:subject>
<dc:subject>
<pcv:Descriptor rdf:about="http://www.w3.org/TR/REC-rdf-syntax/">
<pcv:label>RDF Model and Syntax 1.0</pcv:label>
</pcv:Descriptor>
</dc:subject>
這種方法的風險在於行內的標簽可能與外部受控詞匯表文檔中的值不同步。
PRISM 的其它事宜
PRISM 的開發已有時日,並已相當成熟。PRISM 工作組的成員數已經得到了穩步的增加,該工作組還引用了 PRISM 在生產中越來越多的成功案例。因為 PRISM 成功地實現了一些基本 Dublin Core 特性,所以,我已經在與出版不直接相關的項目中使用了它。它在數據庫項目中發揮了令人吃驚的作用,尤其是用於將數據集從傳統數據庫集成到 XML 文檔系統時。