我需要在XSD架构中扩展一个元素。在原始模式中,元素定义为:
<xsd:element name="RemarkText">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="C-Infinite">
<xsd:attribute name="IdRef" type="IDREF" use="required"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
我似乎关于扩展的所有示例似乎都涉及扩展类型。如果这最初定义为:
<xsd:complexType name="RemarkText_Type">
<xsd:simpleContent>
<xsd:extension base="C-Infinite">
<xsd:attribute name="IdRef" type="IDREF" use="required"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:element name="RemarkText" type="RemarkText_Type"/>
然后,我想我会知道该怎么做。
但是可以扩展元素而不是类型吗?
redefine标记只能与group,attributeGroup,complexType和simpleType一起使用。它不可能在元素上使用它。
也不可能扩展或限制元素。您可以扩展或限制它所基于的complexType。然后,您可以在不修改原始元素定义的情况下使用新类型,方法是在xml中添加xs:type属性以指示正在使用的complexType类型。
<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio - Developer Pro Edition 7.1.1.1206 (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="NameType">
<xs:sequence>
<xs:element name="FirstName" type="xs:string" />
<xs:element name="Surname" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="NameExType">
<xs:complexContent mixed="false">
<xs:extension base="NameType">
<xs:sequence>
<xs:element name="MiddleName" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="MyName" type="NameType" />
</xs:schema>
但是,如果要使用扩展的NameExType,则XML需要使用xsi:type =“NameExType”。
<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid XML Studio - Developer Pro Edition 7.1.1.1206 (http://www.liquid-technologies.com) -->
<MyName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="NameExType">
<FirstName>string</FirstName>
<Surname>string</Surname>
<MiddleName></MiddleName>
</MyName>
使用像Liquid XML Studio这样的图形编辑器可以让事情变得更容易。
存在“any”元素以帮助解决此类问题。关于如何做到这一点的一个很好的例子可以找到here。