我正在开发一个 XSD 文档来验证 XML 导入文件。导入文件的几乎所有元素都“可以”具有 ID 属性 (UPDATE)。UPDATE 属性必须限制为 4 个可能的值,所以我有这个预设类型用于属性限制......
<xs:simpleType name="MyUpDir">
<xs:restriction base="xs:string">
<xs:enumeration value="OVERWRITE"/>
<xs:enumeration value="ADDONLY" />
<xs:enumeration value="NOERASE" />
<xs:enumeration value="IGNORE" />
</xs:restriction>
</xs:simpleType>
除了属性限制外,每个元素的值还受各种预先设置的自定义类型的限制示例:
<xs:simpleType name="MyChar50">
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
</xs:restriction>
</xs:simpleType>
要将两者结合起来,我知道我可以对每个元素进行内联操作,如下所示:
<xs:element name="FullName">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="MyChar50">
<xs:attribute name="UPDATE" type="MyUpDir" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
问题是导入文件中有超过 1000 个元素,每个元素都有不同的长度/regEx/精度限制(大约 20 种自定义类型),并且具有 UPDATE 属性的潜力。如果没有 UPDATE 属性,我可以使用自定义类型在自己的行上处理每个元素,从而大大减少 XSD 的“内容”部分。但是从我所读到的,似乎为了适应自定义类型和提到的属性的潜力,我被迫使用扩展示例(最后一个示例),而不是能够为每个这样的元素保留一行. 有没有办法通过创建结合两者的自定义类型来进一步减少这种情况?