问题描述
我需要在 XSD 架构中扩展一个元素.在原始模式中,元素定义为:
I need to extend an element in an XSD schema. In the original schema, the element is defined as:
<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>
我所看到的关于扩展的所有例子似乎都在处理扩展类型.如果这最初定义为:
All the examples I have seem regarding extensions seem to deal with extending types. If this was originally defined as:
<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"/>
然后,我想我会知道该怎么做.
Then, I think I would know what to do.
但是可以扩展元素而不是类型吗?
But is it possible to extend an element, rather than a type?
推荐答案
redefine 标签只能与 group、attributeGroup、complexType 和 simpleType.不能在 element 上使用它.
The redefine tag can only be used with group, attributeGroup, complexType and simpleType.Its not possible to use it on an element.
也不可能扩展或限制元素.您可以扩展或限制它所基于的 complexType.然后,您可以在不修改原始元素定义的情况下使用新类型,方法是在 xml 中添加 xs:type attribute 以指示类型 complexType用过.
It is not possible to extend or restrict an element either. You can extend or restrict the complexType it is based on. You can then use the new type without modifying the original element definition by adding the xs:type attribute in the xml to indicate the type complexType being used.
<?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".
But then the XML needs to use the xsi:type="NameExType" if you want to use the extended 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 这样的图形编辑器不过事情要容易得多.
Using a graphical editor like Liquid XML Studio makes things a lot easier though.
这篇关于是否可以重新定义定义为 xsd:element 的内容?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!