xml本身无继承机制,其“继承性”是通过dtd或xsd在约束层面模拟的复用效果:dtd用参数实体实现文本级结构复用,xsd则通过extension/restriction支持类型级派生与模块化建模。
XML本身没有继承机制,所谓“继承性”其实是通过DTD或XSD这类模式定义语言,在约束层面模拟出类似面向对象中“继承”的复用效果——不是XML语法自带的特性,而是靠模式文档的设计技巧实现的。
DTD中的元素复用:参数实体 + 元素声明组合
DTD不支持真正的继承,但可以用参数实体(parameter entities)把公共内容抽出来,再在不同元素声明中引用,达到结构复用的效果。
- 用%commonAttrs;定义一组通用属性,比如
- 在多个元素声明中重复使用: 和
- 也能用参数实体包裹内容模型,例如%nameGroup;封装(firstName, lastName?),供person、author等元素共用
这种方式本质是文本替换,灵活但缺乏类型约束和层级抽象能力。
XSD中的“继承式”复用:extension与restriction
XSD通过xs:extension和xs:restriction显式支持类型派生,更接近传统继承语义。