| Exemplo | Descrição |
|---|---|
| anyElement | Este é um exemplo avançado que mostra como é possível utilizar o elemento any da especificação do Esquema XML para estender o modelo de conteúdo de um documento XML. |
| Editando PurchaseOrder.xml | Mostra como um arquivo do Esquema XML (PurchaseOrder.xsd) pode ser utilizado para fornecer assistência de edição durante a edição de um arquivo XML (PurchaseOrder.xml). O diretório internacional mostra como construir um tipo derivado e utilizar o atributo xsi:type no documento da instância XML. O exemplo report.xsd mostra como trabalhar com vários esquemas de espaços de nomes diferentes. |
| Utilizando Grupos de Substituição | Mostra como um Esquema XML permite que grupos nomeados de elementos sejam substituídos para outros elementos. |
Utilizando o espaço de nomes ##any
O esquema Book.xsd sob o diretório anyNamespace tem um tipo complexo BookType. O conteúdo de BookType é título, autor, ano, isbn e é, opcionalmente, seguido por qualquer XML bem formado, conforme indicado pelo elemento any: <any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
Isso significa que, em um documento da instância, podemos inserir um elemento XML any para estender a definição do BookType. Nesta amostra, temos outros dois esquemas: Publisher.xsd e Reviewer.xsd. Eles serão utilizados para estender a definição de BookType em nossos documentos da instância. Observe que esses dois esquemas estão em espaços de nomes diferentes.
Utilizando um espaço de nomes específico
O esquema Book.xsd sob o diretório specifiedNamespace tem um tipo complexo BookType. O conteúdo de BookType é título, autor, ano, isbn e é, opcionalmente, seguido por qualquer XML bem formado pertencente ao espaço de nomes http://www.wesley.com, conforme indicado pelo elemento any: <any namespace="http://www.wesley.com" minOccurs="0" maxOccurs="unbounded"/>
Isso significa que, em um documento da instância, podemos inserir um elemento XML any para estender a definição do BookType, contanto que ele pertença ao espaço de nomes http://www.wesley.com. Neste exemplo, o arquivo Reviewer.xsd pertence a este espaço de nomes.
Book.xml é associado a Book.xsd e Reviewer.xsd por meio do atributo xsi:schemaLocation. Isso mostra como é possível estender BookType com um elemento reviewer para fornecer comentários de revisão para o manual.
Para Book.xml, na Visualização Design do Editor XML, selecione o elemento rev:reviewer. No menu pop-up, selecione para incluir um comentário para o revisor. Execute Validar para se certificar de que o documento seja válido.
Gerando instâncias a partir de esquemas com um elemento any
Incluindo espaços de nomes em um documento XML
O arquivo PurchaseOrder.xsd fornece as regras para a definição do seu conteúdo. Ele é associado ao arquivo PurchaseOrder.xml por meio do atributo xsi:schemaLocation.
Restrições de ocorrência
<element name="shipDate" type="date" minOccurs="0"/>
Para PurchaseOrder.xml, na Visualização Design do Editor XML, selecione o primeiro item sob o elemento itens. Clique nele com o botão direito do mouse para selecionar para incluir shipDate no elemento item. O elemento shipDate com um valor configurado para a data atual é incluído. Observe que o menu pop-up Incluir Filho não tem mais a opção shipDate, já que a restrição de se ter no máximo um elemento shipDate foi atendida.
Se você selecionar o elemento shipDate e escolher Remover do pop-up para removê-lo, a opção ficará disponível novamente.
Tipo de elemento enumerado
<element name="state" type="po:USState"/>
<simpleType name="USState">
<restriction base="string">
<enumeration value="CA"></enumeration>
<enumeration value="PA"></enumeration>
<enumeration value="AR"></enumeration>
</restriction>
</simpleType>
Para PurchaseOrder.xml, na Visualização Design do Editor XML, selecione o campo de texto de estado sob o elemento shipTo. Aparecerá uma lista onde é possível selecionar um de três valores (CA, PA e AR), limitados pelos valores de enumeração no tipo simples USState.
Utilizando Tipos Derivados em Documentos da Instância (atributo xsi:type)
<element name="shipTo" type="ipo:Address"/>
<element name="billTo" type="ipo:Address"/>
Em address.xsd, dois tipos complexos, USAddress e UKAddress, estendem o tipo de base Address.
O documento da instância, ipo.xml, pode optar por utilizar uma derivação diferente de Address (por exemplo, USAddress) por meio do uso de um atributo xsi:type.
Na Visualização Design do Editor XML, selecione o atributo xsi:type sob o elemento shipTo. Observe como uma lista fica disponível para permitir que você escolha o tipo Address que deseja utilizar. A assistência guiada será baseada no tipo escolhido na caixa de combinação.
Trabalhando com vários esquemas e espaços de nomes
O exemplo de relatório Trimestral mostra como trabalhar com vários esquemas de diferentes espaços de nomes. Isso inclui os seguintes arquivos na pasta PurchaseOrder/international: address.xsd, ipo.xsd, report.xsd e report.xml.
Conforme os esquemas ficam maiores, muitas vezes é recomendável dividir seu conteúdo entre vários documentos de esquema para fins como facilidade de manutenção, reutilização e capacidade de leitura. O Esquema XML define duas construções para suportar isso: include e import. O elemento include traz definições e declarações do esquema incluído no esquema atual. Isso requer que o esquema incluído esteja no mesmo espaço de nomes de destino que o esquema que o está incluindo. O elemento import se comporta de maneira semelhante, exceto que o esquema importado pode vir de um espaço de nomes diferente.
Para obter mais informações sobre include e import, consulte a ajuda on-line do editor de esquema XML.
<element name="Book" type="Catalogue:BookType"
substitutionGroup="Catalogue:Publication"/>
<element name="Magazine" type="Catalogue:MagazineType"
substitutionGroup="Catalogue:Publication"/>
O conteúdo de Catalogue pode ser um elemento any que está no grupo de substituição. Na Visualização Design do Editor XML, selecione o menu Incluir Filho no elemento Catalogue. Observe como Book e Magazine podem ser substituídos como o conteúdo do elemento Publication. Além disso, declaramos o elemento Publication como abstrato para evitar que o elemento Publication seja utilizado diretamente no documento da instância.