Pergunta

Eu preciso estender um elemento em um esquema XSD. No esquema original, o elemento é definido como:

   <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>

Todos os exemplos que parecem sobre extensões parecem lidar com tipos estendendo. Se este foi originalmente definido como:

      <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"/>

Então, eu acho que eu saberia o que fazer.

Mas é possível estender um elemento, em vez de um tipo?

Foi útil?

Solução

O Redefinir tag só pode ser usado com grupo , attributeGroup , complexType e simpleType . A sua não é possível usá-lo em um elemento .

Não é possível estender ou restringir um elemento qualquer um. Você pode estender ou restringir a complexType que se baseia. Você pode então usar o novo tipo sem modificar a definição do elemento original, adicionando o tipo xs: atributo no XML para indicar o tipo complexType ser usado.

text alt
(fonte: 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>

Mas então o necessidades de XML para usar o xsi:. Type = "NameExType" se você quiser usar o NameExType estendida

<?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>

Usando um editor gráfico como Líquido XML Estúdio marcas coisas muito mais fácil embora.

Outras dicas

O "qualquer" elemento existe para ajudar com essas questões. Um bom exemplo de como fazer isso podem ser encontrados aqui .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top