Editando e Validando Detalhes da Amostra de Arquivos XML

Estas amostras ilustram como é possível utilizar alguns dos recursos de edição guiada no Editor XML para editar e validar arquivos XML. Para obter mais informações sobre como editar arquivos XML com restrições de DTD ou Esquema XML, consulte a ajuda on-line do Editor XML.
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.

anyElement

Esta amostra mostra como é possível utilizar o elemento any no Esquema XML para criar um modelo de conteúdo extensível em seu documento XML. A amostra é dividida em 2 diretórios:
  1. anyNamespace - mostra como utilizar o espaço de nomes ##any
  2. specifiedNamespace - mostra como utilizar um espaço de nomes específico

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.

BookRev.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.
  1. Na Visualização Design do Editor XML, selecione o elemento opensource:reviewer. No menu pop-up, selecione Incluir Filho > Comentário para incluir um comentário para o revisor.
  2. Execute Validar - o documento é válido, já que o elemento reviewer está em conformidade com a restrição definida no arquivo Reviewer.xsd.
BookPub.xml é associado a Book.xsd e Publisher.xsd por meio do atributo xsi:schemaLocation. Isso mostra como é possível estender BookType com um elemento company para fornecer informações do publicador para o manual.
  1. Na Visualização Design do Editor XML, selecione o elemento pub:company. No menu pop-up, selecione Remover para removê-lo.
  2. Execute Validar - o documento é válido, já que o elemento any é opcional.

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 Incluir Filho > Comentário 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

É possível utilizar Novo Assistente XML para criar uma instância de um esquema XML.
  1. Na visualização Navegador, selecione o objeto Book.xsd no diretório "specifiedNamespace". Clique com o botão direito do mouse em Book.xsd e selecione Gerar > Arquivo XML para chamar o Novo Assistente XML.
  2. Na primeira página do assistente, especifique o novo nome do arquivo como Book1.xml. Clique em Avançar.
  3. Você vai observar que a caixa de grupo Informações do Esquema XML contém uma tabela que mostra 2 espaços de nomes. O primeiro é o espaço de nomes que corresponde a Book.xsd. O segundo é o espaço de nomes que é referido pelo elemento any em Book.xsd.
  4. Clique em Concluir.

Incluindo espaços de nomes em um documento XML

O Editor XML fornece um mecanismo conveniente para a inclusão de mais espaços de nomes em um documento XML. A inclusão manual de espaços de nomes (digitando-os na visualização de origem) pode ser suscetível a erros; URIs de espaço de nomes de esquema podem ser facilmente escritos de forma incorreta e a sintaxe de atributo do local de esquema pode ficar complicada. Um diálogo útil é fornecido para ajudá-lo na tarefa. Na Visualização Design ou Estrutura de Tópicos, é possível acessar o diálogo Editar Espaços de Nomes para ajudar nesta tarefa.
  1. Abra o arquivo BookPub.xml no diretório anyElement/anyNamespace.
  2. Clique com o botão direito do mouse em um elemento-raiz e selecione o item de menu Editar Espaços de Nomes.
  3. Clique em Incluir para chamar um diálogo para inserir informações para um novo espaço de nomes.
  4. Selecione Especificar Novo Espaço de Nomes. Clique em Navegar e localize o arquivo Reviewer.xsd no diretório anyNamespace.
  5. Preencha os campos Prefixo e Nome do Espaço de Nomes.
  6. Clique em OK e em OK novamente. Você vai observar que um atributo xmlns:openSource foi incluído e que o valor do atributo xsi:schemalocation foi atualizado.
  7. Agora que o espaço de nomes foi incluído, você vai observar que, quando se clica no elemento pub:company e escolhe o pop-up Incluir Antes ou Incluir Depois, é possível incluir elementos do espaço de nomes Reviewer.xsd (isto é, http://www.apache.com).

Editando PurchaseOrder.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

No PurchaseOrder.xsd, o elemento item (em Itens de Tipo Complexo) tem um elemento shipDate opcional com minOccurs=0:
		<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 Incluir Filho > shipDate 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 Incluir Filho > shipDate ficará disponível novamente.

Tipo de elemento enumerado

Em PurchaseOrder.xsd, o tipo complexo USAddress tem um estado de elemento cujo tipo é um tipo simples USState
		<element name="state" type="po:USState"/>
O tipo simples USState é derivado da cadeia com um aspecto de enumeração como o seguinte:
		<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)

O arquivo ipo.xml mostra como mercadorias podem ser enviadas para o Reino Unido e a nota enviada para um endereço nos Estados Unidos. Em ipo.xsd, os elementos billTo e shipTo são definidos como tipos Address:
		<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.

Utilizando Grupos de Substituição

O arquivo Catalogue.xsd declara Book e Magazine como pertencentes ao grupo de substituição com Publication:
		<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.


Feedback