Можно ли переопределить что-то определенное как xsd: element? - PullRequest
1 голос
/ 01 мая 2009

Мне нужно расширить элемент в схеме 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 ]

5 голосов
/ 05 мая 2009

Тег переопределить можно использовать только с group , attributeGroup , complexType и simpleType . Его невозможно использовать на элементе .

Также невозможно расширить или ограничить элемент . Вы можете расширить или ограничить complexType , на котором он основан. Затем вы можете использовать новый тип без изменения исходного определения элемента, добавив атрибут xs: type в xml, чтобы указать используемый тип 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>

Но тогда XML должен использовать xsi: type = "NameExType", если вы хотите использовать расширенный 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 голосов
/ 04 мая 2009

Элемент «any» существует, чтобы помочь с такими проблемами. Хороший пример того, как это сделать, можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...