如何在无法修改原XSD的情况下扩展attributeGroup并添加新属性?
解决方案:扩展不可修改的XSD属性组
由于原XSD文件无法修改,你需要在新XSD中创建一个包含原属性组+新属性的扩展属性组,具体步骤如下:
1. 导入原XSD命名空间
首先在新XSD文件中导入原XSD的命名空间,确保能引用原有的myAttributes属性组。假设原XSD的命名空间为urn:original-xsd,原文件名为original.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:orig="urn:original-xsd" targetNamespace="urn:extended-xsd" elementFormDefault="qualified"> <!-- 导入原XSD,schemaLocation指向原文件的实际路径 --> <xs:import namespace="urn:original-xsd" schemaLocation="original.xsd"/>
2. 定义扩展后的属性组
创建一个新的属性组,先引用原有的myAttributes,再添加新的gender属性:
<!-- 扩展后的属性组:原属性组 + 新gender属性 --> <xs:attributeGroup name="myExtendedAttributes"> <xs:attributeGroup ref="orig:myAttributes"/> <!-- 新增gender属性,可根据需求设置use为required或optional --> <xs:attribute name="gender" type="gender_t" use="optional"/> </xs:attributeGroup>
3. 定义新属性的类型(如果需要)
如果gender_t类型未在原XSD中定义,可在新XSD中补充:
<!-- 定义gender属性的类型示例 --> <xs:simpleType name="gender_t"> <xs:restriction base="xs:string"> <xs:enumeration value="male"/> <xs:enumeration value="female"/> <xs:enumeration value="other"/> </xs:restriction> </xs:simpleType>
4. 使用扩展后的属性组
在新XSD的元素中使用这个扩展后的属性组,替代原有的myAttributes:
<!-- 示例:使用扩展属性组定义元素 --> <xs:element name="person"> <xs:complexType> <xs:attributeGroup ref="myExtendedAttributes"/> </xs:complexType> </xs:element> </xs:schema>
补充:扩展原有元素(若需兼容原XSD元素)
如果原XSD中已有使用myAttributes的元素,你可以通过xs:extension扩展该元素的类型,直接添加gender属性:
<!-- 假设原XSD中有orig:person元素,类型为orig:personType --> <xs:element name="person" substitutionGroup="orig:person"> <xs:complexType> <xs:complexContent> <xs:extension base="orig:personType"> <xs:attribute name="gender" type="gender_t" use="optional"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element>
关键说明
- 无法直接修改原属性组,只能通过组合原属性组与新属性的方式创建扩展版本。
- 确保原XSD的命名空间和文件路径在
xs:import中配置正确,否则无法引用原属性组。
内容的提问来源于stack exchange,提问作者cdoe
相关产品推荐
相关产品推荐

