是否有可能重新定义定义为xsd:element的内容?

问题描述 投票:1回答:2

我需要在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"/>

然后,我想我会知道该怎么做。

但是可以扩展元素而不是类型吗?

xml xsd
2个回答
5
投票

redefine标记只能与group,attributeGroup,complexType和simpleType一起使用。它不可能在元素上使用它。

也不可能扩展或限制元素。您可以扩展或限制它所基于的complexType。然后,您可以在不修改原始元素定义的情况下使用新类型,方法是在xml中添加xs:type属性以指示正在使用的complexType类型。

alt text (来源:liquid-technologies.com

<?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这样的图形编辑器可以让事情变得更容易。


0
投票

存在“any”元素以帮助解决此类问题。关于如何做到这一点的一个很好的例子可以找到here

© www.soinside.com 2019 - 2024. All rights reserved.