IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  XML | SOA and Web services  >

技巧:将数据词典用于 XML 和 Web 服务大纲

在 XML 节点中留下语义锚

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 中级

Uche Ogbuji (uche.ogbuji@fourthought.com), 首席顾问, Fourthought, Inc.

2004 年 6 月 01 日

在设计 XML 和 Web 服务大纲时,常常(理想情况下)会重用原有标准中定义的数据元素。这时候包括这些标准的链接并提供精确的数据词典引用会非常有用。这样做可以使处理和维护更容易自动化。这篇技巧说明了这种方法。

在我的 Thinking XML 专栏中,经常关注各种不同的行业如何努力实现 语义透明,就 XML 文档而言,至少其框架抱有同样的目的。为此,行业既可以创建完整的文档格式,包括所有元素、属性和内容的语义;也可以分散地、单独地定义术语和概念,这些术语和概念不依赖于所出现的文档。我分别把这两种方法称为 自顶向下自底向上,每种方法都有非常活跃的社区加以推进。

如果您要开发自己使用或者公开使用的 XML 模式,通常慎重的建议是一定避免无意中重复已有的工作。但即使确实进入一个新的领域,或者有充分的理由不能简单地照搬已有的语言,也应尽可能依靠原有的研究成果实现语义透明。无论开发私用的 XML 格式还是作为与他人分享或者公开的资源,这都是最好的办法。您可以借用已有词汇表的命名约定,甚至可能还有一些模式片段,但利用他人的工作成果还有一种不那么常见的技术,即在自己的大纲中引入我所说的 语义链接,特别是到那些定义了您在模式中定义的语法构造的已有标准的链接。这就为 XML 大纲提供了一种特别丰富的数据词典形式。这篇技巧中,我将说明如何在大纲中使用这种链接。

服务到底是什么?

假设您是一位开发人员,准备开发管理企业 Web 服务的信息系统。第一项任务就是搜集信息,详细描述在保证产品完成所要求的预算条件下所提议的 Web 服务。您准备使用 XML 是因为很容易生成报告和查看信息,从而能够很容易把来自不同领域的信息综合在一起。清单 1 是来自一个 RELAX NG 模式的片段,您也许会构造这样的模式。


清单 1. Web 服务开发中预算信息的 RELAX NG 模式片段
<element name='service'>
  <owl:sameClassAs
    resource="http://www.daml.org/services/owl-s/1.0/Service.owl#Service"/>
  <attribute name='id'/>
  <element name='synopsis'>
    <owl:samePropertyAs
      resource='http://www.w3.org/2000/01/rdf-schema#comment'/>
  </element>
  <element name='budget-request'>
    <attribute name='currency'/>
  </element>
  <element name='justification'/>
</element>

这个片断没有包括名称空间声明,但是前缀 owlOWL Web Ontology Language 的名称空间 http://www.w3.org/2002/07/owl# 捆绑在一起。OWL 是用于事物本体(ontology)的 W3C 标准,这种文档为共享一组概念的含义提供了足够的信息。因此,OWL 非常适合在大纲中表示语义链接。每个 OWL 元素都是一个注解,表示从所在 RELAX NG 定义出发的一个链接。

OWL 表达式 owl:sameClassAs 用于声明 XML 模式中的信息项代表某类事物。该例中,它对于明确名为 service 的元素类型的含义非常重要,服务指的是 SOAP Web 服务、REST Web 服务或是其他的变体,因此将它指向 OWL-S 中的定义。OWL-S 是 Web 服务的标准本体和面向服务的体系结构(SOA)。有时候,一个元素更像是其他元素的属性或者性质,而不是本身作为一个类。这里的 owl:samePropertyAs 表达式用于把 synopsis 元素标识为 RDF 模式(RDFS)中注释的等价物,后者被描述成“用于提供可供人类阅读的资源说明。”这样就正式地表明 synopsis是关于 service的可供人类阅读的说明。

RELAX NG 中增加这类注解非常容易,因为外部名称空间中的任何元素可以放在定义中的任何地方。如果使用的是 W3C XML Schema (WXS),事情就稍微复杂一点:必须把这类外部元素放在 xsd:appinfo 中,而 xsd:appinfo 放在 xsd:annotation 元素中。





回页首


WS 描述中的语义链接

由于您精心地组织和表达 Web 服务的预算请求,终于得到了批准,现在到了实现的时候了。新投资的一项服务是日程表和预约服务,您需要编写该服务的 WSDL。当然,您希望 WSDL 的模式片段中包含语义链接,但是也希望把语义链接应用到描述的其他部分。清单 2 就是这样的一个 WSDL 片段,它符合 WSDL 1.1。


清单 2. 消息部分包含语义链接的 WSDL 片段
  <wsdl:message name="get-upcoming-appointments">
    <wsdl:part name="requested-duration" element="schema:duration">
      <wsdl:documentation>
        <owl:sameClassAs
          resource="http://www.w3.org/2002/12/cal/ical#duration"/>
      </wsdl:documentation>
    </wsdl:part>
  </wsdl:message>

从现在起的给定时期内将要处理哪些约会,如果要定义这样的请求消息,在定义该请求的参数时必须建立 duration 的准确含义。您可以引用 W3C 所建议的 iCalendar 标准(RFC 2445)中的表达式作为形式化本体。您把这个链接放在 wsdl:documentation 元素中,这样做不是很理想,因为该元素通常保留给人类可读的文档使用。之所以这样做是因为 WSDL 规范和 WXS 一样,限制了外部元素(称为“扩展性元素”)可以出现的位置。WSDL 2.0 的扩展性模型仍在开发之中。我希望工作组在完成之后会放宽不必要的限制(不要忘记现在检查的似乎是消息部分的概念)。





回页首


结束语

通过增加语义链接,您在 XML 和 Web 服务大纲中使用了简单的术语(service、synopsis、duration)并将其放在具体的上下文中。当部署在系统中时很容易自动推断出它们的含义,增加了相应的 XML 文档的信息价值。比方说,通过语义链接就很容易断定 synopsis 元素和另一个词汇表中的 description 元素具有相同的含义。专业数据库管理员强调数据词典对于表达模式中所用术语的重要性。XML 开发人员也不能松懈。

从更一般的意义上讲,支持语义链接的价值还在于保证大纲、词典、本体等等中的资料能够使用简单的 URL 引用。如果您正参与语义透明的项目,一定要记住您的目标之一是通过简单的链接很容易访问。



参考资料



关于作者

Uche Ogbuji 的照片

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




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款