XML文档概念模型约束与验证方法详解
1. 概念模型中的约束
1.1 XML文档与SQL约束情况差异
SQL提供了完整性规则和触发器等方式来检查约束,但XML文档的情况有所不同。XML文档通常分布在多个服务器甚至整个互联网上,难以像关系数据库那样做封闭世界假设。部分服务器可能是移动的,且并非所有服务器在任何时候都可访问,这使得维护引用完整性和其他跨文档约束变得困难。例如HTML文档中常见的404响应代码就体现了这种情况。因此,很多时候需要用文档存储后的同步和修复过程来替代传统的在文档存储或更新前执行的跨文档约束验证。
1.2 概念模型中约束定义语言
过去定义了多种形式化的约束定义语言,但大多仅停留在学术领域,在行业中应用不佳,因为其形式化程度让行业程序员和设计师难以阅读。为解决这一问题,出现了对象约束语言(OCL),自UML 1.1起它就成为统一建模语言(UML)的一部分。不过,OCL也未广泛采用,工具支持不足,且它是为面向对象设计方法和实现而设计,未充分考虑文档数据模型,这使得为以文档为中心的模型定义约束变得困难。
1.3 XPath作为约束语言的优势
鉴于上述情况,选择XPath作为约束语言有诸多优势:
- 熟悉XML的文档设计师、样式表编辑人员和程序员对XPath较为熟悉。
- XPath约束可轻松转换为XSLT样式表或Schematron模式,用于验证文档。
- XPath有足够的表达能力来表示任意约束,尽管XPath 1.0不支持XML Schema数据类型,但XPath 2.0将提供全面支持。