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 特性中,选择了一些比较有趣的特性。prism:category:内容的性质或类型。PRISM 为此提供了推荐的受控词汇表,该词汇表包括诸如 advertisement、cartoon、column和 recipe 之类的术语。 prism:creationTime和 prism:modificationTime:内容生命周期中的相关日期。 prism:event:内容中引用或描述的事件。 prism:location:内容中引用或描述的位置。 prism:person和 prism:organization:内容中引用或描述的人或组织。 prism:isPartOf:该资源是被描述资源的物理或逻辑部分。 prism:hasPart与前者是逆关系。 prism:isFormatOf:该资源是被描述资源的一个变体。 prism:hasFormat与前者是逆关系。例如,这可以将资源的印刷格式和电子格式联系起来。 prism:isReferencedBy:引用被描述资源的资源(例如通过引用)。 prism:references与前者是逆关系。 prism:isTranslationOf:该资源是被描述资源的一种语言翻译。 prism:hasTranslation与前者是逆关系。 prism:copyright:内容的版权声明。
清单 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 文档系统时。