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

时间:2009-05-01 18:38:22

标签: xml xsd

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

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

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

2 个答案:

答案 0 :(得分:5)

重新定义标记只能与 attributeGroup complexType simpleType <一起使用/ em>的。 无法在元素上使用它。

也无法扩展或限制元素。您可以扩展或限制它所基于的 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之类的图形编辑器可以让事情变得更容易。

答案 1 :(得分:0)

“any”元素可用于帮助解决此类问题。可以找到关于如何执行此操作的一个很好的示例here