É possível redefinir algo definido como xsd: element?
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?
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.
(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 .