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:
Elemento do tipo simples
Elemento vazio
Elemento vazio com atributos
Elemento com atributos e conteúdo simples
Elemento com uma sequência de elementos filho
Elemento com uma sequência de elementos filho e atributos
Elemento com uma sequência das opções de elementos filho
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.