Uche Ogbuji 通过演示用来自现有 XML 格式的数据构成“资源描述框架 (RDF)”模型,开始了他的用 XML 进行的知识管理的实际探索。 如三个代码清单中所示,RDF 可用作定制 XML 的搭挡,而不仅仅用作某些数据类型的规范表示。包含代码样本的本专栏演示了如何用 RDF 方便地进行知识管理,甚至是在开发过程中相对比较晚的阶段。
虽然 W3C 将“资源描述框架 (RDF)”设计为常规元数据建模工具,但它还提供了许多功能,使之成为 XML 数据的理想搭挡。在许多正在形成的 XML 应用程序中,在应用程序的生存期中封装在应用程序中的知识以 XML 文档形式存储在数据库或资源库中。作为知识管理工具的 RDF 的基本用途是,它允许您组织、关连、分类和注释这些知识,从而增加存储数据的总计值。 RDF 具有复杂性,通过简单地将 RDF 支持添加到基于 XML 的应用程序中来掩饰这种复杂。 本文开始探索 RDF 和 XML 之间的协作关系。以下将演示如何使用 XSLT 根据 XML 生成 RDF。
必需熟悉 RDF 和 XSLT。也可以先阅读以前 developerWorks 中的 介绍 RDF, 或者 参考资料中链接的其它文章。
旧东西不一定总是过时的
例如,让我们来跟踪技术规范的开放式开发过程。规范是公布到网上且感兴趣的团体可以阅读它、添加与规范相关的问题、评论公开的问题以及指派相关问题的操作项目等等。
XML 是一种功能强大的工具,它可将这种问题追踪放在一起。虽然问题和操作项目的描述和相关讨论都需要灵活的表示,但结构对于维护数据语义是很重要的。在示例中,应用程序已经开发好了,而且使用了用于如将操作项目提示者发送给用户、支持搜索和浏览等任务的基本技术。然而,为了利用 RDF 处理中可使用的许多现有工具和技术,开发人员已经决定开始在应用程序中使用 RDF。
在选择使用 RDF 时,开发人员不想重新设计所有的应用程序数据和逻辑。他们宁愿添加他们能够(并且或许逐渐)将 RDF 处理移向应用程序核心的那些东西。所以,他们面临的任务之一是,根据他们已经收集的 XML 数据生成有用的 RDF。
XML 格式示例
清单 1 是追踪过程中单个问题的 XML 格式示例。它有唯一标识符和表示问题与哪个文档或文档部分相关的引用元素。问题的原创者被加上注释,这表示正在使用系统的用户管理功能。任何人都可以对文档进行撰稿,但对已注册的用户会特别标注和处理。问题的主要描述和附加的用户注释会联机显示,并且还有指派给用户的相关操作。
播种数据,收获元数据
从问题追踪中所使用的 XML 文件中抽取 RDF 元数据的方法有几种。最直接的方法或许是编写一种 XSLT 转换, 它读取文件并输出元数据的 RDF/XML 序列,这将在下一小节中演示。
因为 RDF 位于 URI 上(出于更好或出于更坏),所以您必须为元数据节点 提出一些 URI 方案。一些事物(如用于创作问题的规范的位置)已经有 URI。其它事物可能已经有专门的 XML 表示;在我们的示例中,用户对象作为单独的 XML 文件管理。其它事物可能仍是完全抽象的,除了它们的元数据节点外,没有任何应用程序设计工具或机制。这最后一类的示例是我建议为资源创建的 RDF 类型。 要在 RDF 中使用的 URI 如下:在鉴定中的规范的地址。 示例: http://rdfinference.org/ril/ril-20010502。 问题的 XML 源码的地址。 示例: http://rdfinference.org/ril/issue-tracker/issues/i2001030423 注册用户的概要文件的 XML 源码的地址。 示例: http://rdfinference.org/ril/issue-tracker/users/uogbuji. 作者、问题、指派等的 RDF 类型。 示例: http://rdfs.rdfinference.org/ril/issue-tracker#Author
一个可能的 RDF 系列化
上面已给出 清单 2, 它是表示 清单 1 中元数据的一个可能的 RDF 模型系列化。
请注意:在某些情况下,我使用匿名资源,如注释和操作资源。这是一种建模选项。例如,要对用于任务调度的操作进行集中索引, 那么将 URI 用于抽象操作而不是使它们保持匿名可能是有意义的。
XSLT 转换
现在,您已经了解 RDF 的样子,就可以构造一种转换,将问题描述转换成适当的 RDF 文件。 清单 3就是使用 XSLT 的这种转换。
至于在此清单中看到的一些技术,我已经在先前的一篇 developerWorks 文章?? 用 XSLT 进行 WSDL 处理 中讨论过,它包含将“Web 服务描述语言 (WSDL)” 转换成 XML 这一章节。在这种情况下,目的是尽可能使产生的 RDF 系列化看上去更接近原始的WSDL XML。在这种情况中没有这种约束,因此转换很少是机密的。只是依次访问各种 XML 元素,并一点一点地构建等价的 RDF 描述。
最重要的高层次的操作是 issue 元素的匹配,它仅仅转向并调用一个已命名模板来为相应的问题实际构建 RDF 描述。这种间接方式的原因是,可以为定制和扩展这种转换提供灵活性。例如,当您阅读下一个 XML 编程思想 专栏时,可以在执行从问题文档到 RDF 的批处理转换的单独的转换中使用已命名模板。
在示例中,除了联机规范本身之外,问题跟踪程序还可以跟踪有关各种资源的问题。(您可以从问题跟踪程序本身开始一个问题??也许是一个错误报告。)由于这个原因,设计还要使引用元素的处理变得相当灵活。 使用单独的 XSLT 方式(确保仅在正确时刻解析引用元素),模板检查 引用 元素的可展开内容。目前,示例应用程序通过用来自正被讨论的问题中的引用简单地创建 RDF 描述来处理引用是指规范这种情况。由于需要处理更多种类型的可扩展引用, 所以可以添加附加的 xsl:when 子句来处理这些情况。
您还可以查看用于处理使用概要文件或只是自由格式的文本注册用户描述这一事实的基本方法。
更多要遵循的
在本专栏中,我已提供了使用 XSLT 从 XML 实例中抽取 RDF 的简单示例。随着越来越多的基于 XML 的应用程序的使用,这样的技术在扩展带有知识管理特性的应用程序中是有用的。
下一个专题将继续问题跟踪程序示例,同时演示问题文档的批处理和对此处理有用的一些开放源码工具。
本专题中的示例和下一专题中的示例都是基于一个实际的项目,该项目为 rdfinference.org 上的“RDF 接口语言”规范组成一个问题跟踪程序。不久,您将可以在此公共站点上看到这一实际工作。在那之前,请您自由地试验本文中的示例代码,并将任何问题、意见和想法发送给我。