Compartilhar via


Regras para inferir tipos de nó e estrutura de esquema

Este tópico descreve como o processo de inferência de esquema converte os tipos de nós em um documento XML a estrutura do idioma da definição de esquema XML (XSD).

Regras de inferência de elemento

Esta seção descreve as regras de inferência para declarações elemento. Há oito estruturas das declarações de elemento que serão inferidas:

  1. Elemento do tipo simples

  2. Elemento vazio

  3. Elemento vazio com atributos

  4. Elemento com atributos e conteúdo simples

  5. Elemento com uma sequência de elementos filho

  6. Elemento com uma sequência de elementos filho e atributos

  7. Elemento com uma sequência das opções de elementos filho

  8. Elemento com uma sequência das opções de elementos filho e atributos

Observação

Todas as declarações de complexType são inferidas como tipos anônimos. O único elemento global é inferido o elemento raiz; todos os outros elementos são locais.

Para saber mais sobre o processo de inferência de esquema, consulte Inferência de esquemas de documentos XML.

Elemento tipado simples

A tabela a seguir mostra XML conectado ao método de InferSchema , e o esquema XML gerado. O elemento negrito mostra o esquema inferido para o elemento de tipo simples.

Para saber mais sobre o processo de inferência de esquema, consulte Inferência de esquemas de documentos XML.

XML Esquema
<?xml version="1.0"?>

<root>text</root>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root" type="xs:string" />

</xs:schema>

Elemento vazio

A tabela a seguir mostra XML conectado ao método de InferSchema , e o esquema XML gerado. O elemento negrito mostra o esquema inferido para o elemento vazio.

Para saber mais sobre o processo de inferência de esquema, consulte Inferência de esquemas de documentos XML.

XML Esquema
<?xml version="1.0"?>

<empty/>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="empty" />

</xs:schema>

Elemento vazio com atributos

A tabela a seguir mostra XML conectado ao método de InferSchema , e o esquema XML gerado. Os elementos negritos mostram o esquema inferido para o elemento vazio com atributos.

Para saber mais sobre o processo de inferência de esquema, consulte Inferência de esquemas de documentos XML.

XML Esquema
<?xml version="1.0"?>

<empty attribute1="text"/>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="empty">

<xs:complexType>

<xs:attribute name="attribute1" type="xs:string" use="required" />

</xs:complexType>

</xs:element>

</xs:schema>

Elemento com atributos e conteúdo simples

A tabela a seguir mostra XML conectado ao método de InferSchema , e o esquema XML gerado. Os elementos negritos mostram o esquema inferido para um elemento com atributos e conteúdo simples.

Para saber mais sobre o processo de inferência de esquema, consulte Inferência de esquemas de documentos XML.

XML Esquema
<?xml version="1.0"?>

<root attribute1="text">value</root>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:simpleContent>

<xs:extension base="xs:string">

<xs:attribute name="attribute1" type="xs:string" use="required" />

</xs:extension>

</xs:simpleContent>

</xs:complexType>

</xs:element>

</xs:schema>

Elemento com uma sequência de elementos filho

A tabela a seguir mostra XML conectado ao método de InferSchema , e o esquema XML gerado. Os elementos negritos mostram o esquema inferido para um elemento com uma sequência de elementos filhos.

Observação

Se um elemento é apenas um elemento filho, ainda é tratado como uma sequência.

Para saber mais sobre o processo de inferência de esquema, consulte Inferência de esquemas de documentos XML.

XML Esquema
<?xml version="1.0"?>

<root>

<subElement/>

</root>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:sequence>

<xs:element name="subElement" />

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

Elemento com uma sequência de elementos filho e atributos

A tabela a seguir mostra XML conectado ao método de InferSchema , e o esquema XML gerado. Os elementos negritos mostram o esquema inferido para um elemento com uma sequência de elementos filho e atributos.

Observação

Se um elemento é apenas um elemento filho, ainda é tratado como uma sequência.

Para saber mais sobre o processo de inferência de esquema, consulte Inferência de esquemas de documentos XML.

XML Esquema
<?xml version="1.0"?>

<root attribute1="text">

<subElement1/>

<subElement2/>

</root>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:sequence>

<xs:element name="subElement1" />

<xs:element name="subElement2" />

</xs:sequence>

<xs:attribute name="attribute1" type="xs:string" use="required" />

</xs:complexType>

</xs:element>

</xs:schema>

Elemento com uma sequência e opções de elementos filho

A tabela a seguir mostra XML conectado ao método de InferSchema , e o esquema XML gerado. Os elementos negritos mostram o esquema inferido para um elemento com uma sequência e uma opção de elementos filhos.

Observação

O atributo de maxOccurs do elemento de xs:choice é definido como "unbounded" no esquema inferido.

Para saber mais sobre o processo de inferência de esquema, consulte Inferência de esquemas de documentos XML.

XML Esquema
<?xml version="1.0"?>

<root>

<subElement1/>

<subElement2/>

<subElement1/>

</root>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:sequence>

<xs:choice maxOccurs="unbounded">

<xs:element name="subElement1" />

<xs:element name="subElement2" />

</xs:choice>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

Elemento com uma sequência e uma escolha dos elementos filho e atributos

A tabela a seguir mostra XML conectado ao método de InferSchema , e o esquema XML gerado. Os elementos negritos mostram o esquema inferido para um elemento com uma sequência e uma escolha dos elementos filho e atributos.

Observação

O atributo de maxOccurs do elemento de xs:choice é definido como "unbounded" no esquema inferido.

Para saber mais sobre o processo de inferência de esquema, consulte Inferência de esquemas de documentos XML.

XML Esquema
<?xml version="1.0"?>

<root attribute1="text">

<subElement1/>

<subElement2/>

<subElement1/>

</root>
<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:sequence>

<xs:choice maxOccurs="unbounded">

<xs:element name="subElement1" />

<xs:element name="subElement2" />

</xs:choice>

</xs:sequence>

<xs:attribute name="attribute1" type="xs:string" use="required" />

</xs:complexType>

</xs:element>

</xs:schema>

Processamento de atributos

Sempre que um novo atributo é encontrado dentro de um nó, é adicionado à definição inferido do nó com use="required". Na próxima vez que o mesmo nó é encontrado na instância, o processo de inferência comparará atributos de instância atual com que já inferidas. Se alguma de inferidos já está ausente na instância, use="optional" é adicionado à definição de atributo. Novos atributos são adicionados às declarações existentes com use="optional".

Restrições de clique

Durante o processo de inferência de esquema, os atributos de minOccurs e de maxOccurs são gerados, para componentes inferidos de um esquema, com os valores "0" ou "1" e "1" ou "unbounded". Os valores "1" e "unbounded" são usados somente quando valores "0" e "1" não podem validar o documento XML (por exemplo, se MinOccurs="0" não descreve exatamente um elemento, minOccurs="1" é usado).

Conteúdo Misto

Se um elemento contém conteúdo misturado (por exemplo intercalado texto com elementos), o atributo de mixed="true" é gerado para a definição de tipo complexo inferido.

Outras regras de inferência de tipo de nó

A tabela a seguir descreve as regras de inferência para a instrução de processamento, o comentário, a referência de entidade, o CDATA, o tipo de documento, e os nós de namespace.

Tipo de nó Tradução
Instrução de processamento Ignorado.
Comentário Ignorado.
Referência de entidade A classe de XmlSchemaInference não trata referências a entidades. Se um documento XML contém referências a entidades, você precisará usar um leitor que expande as entidades. Por exemplo, você pode passar XmlTextReader com a propriedade de EntityHandling definida como ExpandEntities como um parâmetro. Se as referências a entidades são localizadas e o leitor não expande entidades, uma exceção é throw.
CDATA Todas as seções de <![CDATA[ … ]] em um documento XML serão inferidas como xs:string.
Tipo de documento Ignorado.
Namespaces Ignorado.

Para saber mais sobre o processo de inferência de esquema, consulte Inferência de esquemas de documentos XML.

Confira também