Vincent.Chan‘s Blog

常用链接

统计

积分与排名

网站

最新评论

Thinking XML: 利用模式注释实现自下而上的语义透明::让模式超越语法进入语义范畴

级别: 初级

Uche Ogbuji, 首席顾问, Fourthought, Inc.

2005 年 8 月 08 日

进 一步了解实现语义透明的不同方法,Uche Ogbuji 阐述了语义透明对使用 XML 的开发人员意味着什么。无论是否重用模式,都会发现使用正式的注释(与以前讨论的非正式注释相比)是很有价值的。这样做在不同的层次上带来了好处。在最直 接的实践层面上,可以生成更好的文档。更深远的好处在于它提供了语义透明性的一种重要度量。这一期的文章将讨论语义锚,并给出一些例子。作者还将花一点时 间讨论一下 XTech Conference 2005。

以前的两期文章“ Thinking XML: XML 建模艺术描述”和“ Thinking XML: 利用模式标准化实现自上而下的语义透明” 中,我介绍了针对语义透明的一些有趣的技术和技巧。本文是这一小型系列的最后一部分,即第 3 部分,在本文中,我将讨论我认为最重要的语义透明工具。正确的模式注释在各种层次上都很有用,最起码可以改进文档。本系列的第一期中讨论了非正式的模式注 释。本文中讨论的方法是对这一思想的重要提炼,将利用语义锚实现注释的形式化。这种方法还受益于 developerWorks 上的另一篇短文,“ 技巧:将数据词典用于 XML 和 Web 服务大纲”。继续阅读本文之前,建议您看一看这些文章。

不过,首先我想提一下最近参加的一次很棒的会议。

XTech Conference 2005

XTech 会议源自原来的 XML Europe 会议,特别增加了补充 XML 的浏览器技术和语义技术专题讨论会。此外, 开放式数据的专题讨论会和所有主题不仅考察处理 XML 的全新技术,还探讨人们和组织如何向世界自由提供数据,以便创建全新的、增加价值的应用程序和资源。

XTech 2005 于 5 月 25-27 日在阿姆斯特丹召开(与 XML Europe 2004 的地点相同,很可能 2006 年也在这里召开)。我一直非常喜欢这个会议,高度关注标记技术的新思想和实际应用。浏览器和开放式数据专题讨论会为整个会议注入了很大活力,组织者 Edd Dumbill 为了营造团结协作的大会氛围所做的创造性工作也增强了大会的吸引力。会议提供了 Wiki(公开征求意见)和 IRC 频道(公开讨论)。Edd 在主持 Planet XTech 中很好地运用了流行的 XML 技术用法,这是一个元数据驱动的 Weblog 和 XTech 相关图片的集合,以 XML 的形式提供会议的日程安排,鼓励人们以有趣的、有用的方式“重新混合”或者处理信息。它帮助完成了开放式数据专题讨论会的所有任务。

微格式(microformat)是 会议讨论的一大主题。基本上就是内嵌在宿主格式(如 XHTML 或 CSS)中的 XML 数据岛。微格式允许用户在信息中混合各种类型的扩展内容,如日历信息、个人联系信息或者图片元数据。大会中我最喜欢的话题之一讨论了一个系统,该系统的名 称很长,叫做 Gleaning Resource Descriptions from Dialects of Languages,或 GRDDL,可以用它从微格式中提取结构化的元数据(用法之一)。GRDDL 是一个重要的概念,我希望在以后的 Thinking XML 专栏文章中讨论它。虽然我个人的陈述出了些问题 —— 会场上的投影仪拒绝与我的膝上电脑视频驱动程序合作 —— 但我还是学到了很多东西,度过了一段美好的时光,最重要的是,我很满意地看到 XML 领域对语义技术越来越重视的更多证据(有于 XTech 大会的更多信息,请参阅 参考资料)。





回页首


正式的模式注释

形式化模式注释的关键在于为所用的术语找到好的词汇表资源和一组清晰的标识符。然后在模式中作为数据词典连接的端点写上这些标识符(通常是 URI)。清单 1 中的 RELAX NG 模式(紧凑语法)片段包含有非正式的注释。


清单 1. 使用非正式注释提供语义线索的示例 RELAX NG 模式
												
														

namespace dc = "http://purl.org/dc/elements/1.1/"
element purchase-order
{
dc:description [ "General purpose purchase order for merchandise" ]
attribute id {
dc:description [ "Unique identifier for the purchase order" ]
text
}
#Rest of the schema here
}


这种方法的局限性很大。仅仅提供了非正式的描述,需要人们读懂后才能使用。因此很难开发能够使用这类注释推断模式语义的软件。非正式性反映在注释使用了 dc:description 元素,该元素一般用于资源的松散说明。为了实现注释的正式化,我将选用 OWL Web Ontology Language 中更确定的声明,显然我是在使用词汇表术语标识模式数据元素。我选择 WordNet 作为词汇表。WordNet 是英文单词及其词法关系的数据库。我曾经在本专栏 最近的一期文章 中讨论过 WordNet,基本上可以将其作为一种机器可读的词汇表使用。清单 2 以 清单 1 为基础,但使用了更正式的注释。


清单 2. 使用正式注释提供语义线索的示例 RELAX NG 模式
												
														

namespace wn = "http://www.cogsci.princeton.edu/"
element purchase-order
{
wn:definition [
http://cogsci.princeton.edu/cgi-bin/webwn?stage=1&word=purchase+order]
attribute id {
wn:definition [
http://cogsci.princeton.edu/cgi-bin/webwn2.0?stage=1&word=identifier]
text
}
#Rest of the schema here
}


该例中的注释为记录定义提供了明确的引用。可以在引用的 WordNet 页面上直接找到词典中的定义:

名词“purchase order”在 WordNet 中有一种意义。
1. order, purchase order ——(付款并提供规格说明和数量要求后,请求某人提供某物的商业文档,“IBM 接到了一百台计算机的订单”。)
名词“identifier”在 WordNet 中有一种意义。
1. identifier ——(建立受体的身份的符号。)

机 器可使用 URL 的等价物来检查语义是否等价 —— WordNet 允许您在此基础上更进一步,使用它的同义词设置更丰富的语义。如果一个模式中包含指向“name”的锚,另一个包含指向“identifier”的锚,那 么机器就可以导航 WordNet 自动识别这些术语词义的相似性。不过,在实践中,WordNet 并不一定是这类注释的最佳选择,模式中使用的术语多数都有专门的技术含义,而通用词典中并没有记载这些含义。另外,由于过于雄心勃勃,WordNet 还没有完全完成,它包含不少错误,仍然在不断的发展中。作为语义锚,还可以选择 ebXML 核心成分和 RosettaNet 词典,两者本专栏中都曾经谈到过。您甚至可以在每个符号中组合使用多个锚。

即使在准备从语义层面上处理这类注释之前,也可以在文 档任务中加以利用。很容易使用 XSLT 抽取模式定义和注释,以生成模式索引和数据词典。甚至可以将从页面中抽取的信息与 URL 锚结合起来。如果要使用 WordNet 来实现,可能需要使用 WordNet 的某个 RDF 翻译版本,而不是原来 Princeton 网页,否则标记非常冗长。





回页首


抽象模式中的语义锚

如果阅读过我撰写的“ Discover the flexibility of Schematron abstract patterns”, 就会了解一种非常有用的技术,从具体的 XML 语法中抽象出模式的基本信息内容。我在那篇文章中指出,“通过为 Schematron 抽象模式增加语义丰富的注释,还可以进一步提高表达能力……最终的模式很容易适应任何语法,同时还提供了语义透明性。”清单 3 中的 Schematron 片段示范了这两种技术结合的强大功能。


清单 3. 带有正式注释的 Schematron 抽象模式
												
														

<pattern abstract="true" name="purchase-order">
<rule context="$purchase-order">
<wn:definition href=
"http://cogsci.princeton.edu/cgi-bin/webwn?stage=1&word=purchase+order"
/>
<assert test="$id">
A purchase order requires an ID
</assert>
</rule>
<rule context="$id">
<wn:definition href=
"http://cogsci.princeton.edu/cgi-bin/webwn?stage=1&word=identifier"
/>
<assert test="count(key('ids', .)) = 1">
An ID must be unique
</assert>
</rule>
</pattern>


这段代码定义了一个 Schematron 抽象模式,包含带有惟一标识符的订购单的抽象概念。可以用任何 XML 范式来实例化它,比如使用带有 ID 属性的 PO 元素,或者包含子元素 identpurchase-order 元素。其工作原理请参阅我的 前一篇文章。无论选择什么语法,都可以把这种结构从具体的模式范式回溯到抽象范式(参见 清单 3),从而找到确定其定义的语义锚。模式将限定 count(key('ids', .)) = 1 检查所有的标识符,从而确保只有一个包含当前值(换句话说,确定该标识符是否是惟一的)。它要求事先定义一个名为 ids 的键。





回页首


结束语

在从事 XML 设计的咨询活动中,我发现,对于提高模式以及我开发的其他工具的质量,语义锚是一种非常有用的工具。明显的好处是,可以使用语义锚为客户生成支持文档,而后,清晰的语义所带来的快速调整和处理技术会让客户感到惊喜。

本文结束了关于实用语义透明技术的考察。希望我已经阐明,良好的语义设计不仅仅是一堆理论,而且能够在 XML 技术实践中应用。当然,我将继续在本专栏中讨论这个主题,也建议您参与 Thinking XML 讨论论坛,与他人分享您的观点。





回页首


参考资料





回页首


关于作者

Uche Ogbuji 的照片

Uche Ogbuji 是 Fourthought Inc. 的顾问兼创始人,该公司是一家专为企业知识管理提供 XML 解决方案的软件供应商和咨询公司。Fourthought 开发了 4Suite,这是一个用于 XML、RDF 和知识管理应用程序的开源平台。Ogbuji 先生还是 Versa RDF 查询语言的首席开发人员。他是一位出生于尼日利亚的计算机工程师和作家,目前生活和工作在美国科罗拉多的博耳德。您可以通过 Ogbuji 先生的 Weblog Copia 进一步了解他,或者通过 uche.ogbuji@fourthought.com 与他联系。

posted on 2006-03-21 23:51 Vincent.Chen 阅读(264) 评论(0)  编辑  收藏 所属分类: XML


只有注册用户登录后才能发表评论。


网站导航: