XML Schema验证与面向对象实现的深入剖析
1. XML Schema之外的验证
在XML处理中,存在多种模式定义语言,各有优劣。常见的有DTD(传统方式)、“面向对象”的XML Schema以及基于语法的Relax NG。
DTD虽然是传统的模式定义语言,但它无法处理命名空间;XML Schema和Relax NG则不涵盖外部实体,所以许多应用仍需继续使用DTD。Relax NG没有默认值和固定值的概念,在交叉引用方面依赖DTD逻辑。
在实现语义约束方面,有多种技术可供选择,其中Schematron是一种基于断言的模式语言。它允许我们不仅检查文档是否有效,还能检查其是否有意义,这在迈向语义网的过程中至关重要。
文档解析过程可细分为多个明确的小任务,大多数解析器会处理其中的几个步骤。例如,Sun Microsystem的多模式验证器加上Schematron插件可以完成所有任务,但在其他情况下,可能需要将文档通过多个解析器和处理过程,并合并这些过程的输出。
以下是一个Relax NG的示例代码:
</rng'start>
<!--Asset track-->
<rng" i ncl ude href="track_type, rng"/>
<rng-define name="track">
<rng'el ement name="track">
<rng. ref name="track_type"/>
</rng .el ement>
</rng.defin