我需要在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"/>
然后,我想我会知道该怎么做。
但是可以扩展一个元素而不是一个类型吗?
答案 0 :(得分:5)
重新定义标记只能与组, attributeGroup , complexType 和 simpleType <一起使用/ em>的。 无法在元素上使用它。
也无法扩展或限制元素。您可以扩展或限制它所基于的 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之类的图形编辑器可以让事情变得更容易。
答案 1 :(得分:0)
“any”元素可用于帮助解决此类问题。可以找到关于如何执行此操作的一个很好的示例here。