Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este tópico descreve como o processo de inferência de esquema traduz os tipos de nó em um documento XML para uma estrutura XSD (XML Schema Definition Language).
Regras de inferência de elementos
Esta seção descreve as regras de inferência para declarações de elementos. Existem oito estruturas de declarações de elementos que serão inferidas:
Elemento de 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 atributos e elementos filho
Elemento com uma sequência de escolhas de elementos filho
Elemento com uma sequência de escolhas de elementos e atributos filho
Observação
Todas as complexType
declarações são inferidas como tipos anónimos. O único elemento global inferido é o elemento raiz; todos os outros elementos são locais.
Para obter mais informações sobre o processo de inferência de esquema, consulte Inferindo esquemas de documentos XML.
Elemento digitado simples
A tabela a seguir mostra a entrada XML para o InferSchema método e o esquema XML gerado. O elemento destacado mostra o esquema inferido para o tipo simples do elemento.
Para obter mais informações sobre o processo de inferência de esquema, consulte Inferindo 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 a entrada XML para o InferSchema método e o esquema XML gerado. O elemento negrito mostra o esquema inferido para o elemento vazio.
Para obter mais informações sobre o processo de inferência de esquema, consulte Inferindo 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 a entrada XML para o InferSchema método e o esquema XML gerado. Os elementos em negrito mostram o esquema inferido para o elemento vazio com atributos.
Para obter mais informações sobre o processo de inferência de esquema, consulte Inferindo 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 a entrada XML para o InferSchema método e o esquema XML gerado. Os elementos em negrito mostram o esquema inferido para um elemento com atributos e conteúdo simples.
Para obter mais informações sobre o processo de inferência de esquema, consulte Inferindo 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 a entrada XML para o InferSchema método e o esquema XML gerado. Os elementos em negrito mostram o esquema inferido para um elemento com uma sequência de elementos filho.
Observação
Mesmo que um elemento tenha apenas um elemento filho, ele ainda é tratado como uma sequência.
Para obter mais informações sobre o processo de inferência de esquema, consulte Inferindo 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 e atributos filho
A tabela a seguir mostra a entrada XML para o InferSchema método e o esquema XML gerado. Os elementos em negrito mostram o esquema inferido para um elemento com uma sequência de elementos filho e atributos.
Observação
Mesmo que um elemento tenha apenas um elemento filho, ele ainda é tratado como uma sequência.
Para obter mais informações sobre o processo de inferência de esquema, consulte Inferindo 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 escolhas de elementos filho
A tabela a seguir mostra a entrada XML para o InferSchema método e o esquema XML gerado. Os elementos em negrito mostram o esquema inferido para um elemento com uma sequência e escolha de elementos filho.
Observação
O maxOccurs
atributo do xs:choice
elemento é definido como "unbounded"
no esquema inferido.
Para obter mais informações sobre o processo de inferência de esquema, consulte Inferindo 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 escolha de elementos e atributos filho
A tabela a seguir mostra a entrada XML para o InferSchema método e o esquema XML gerado. Os elementos em negrito mostram o esquema inferido para um elemento que contém uma sequência e uma escolha de elementos e atributos filhos.
Observação
O maxOccurs
atributo do xs:choice
elemento é definido como "unbounded"
no esquema inferido.
Para obter mais informações sobre o processo de inferência de esquema, consulte Inferindo 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ó, ele é adicionado à definição inferida do nó com use="required"
. Na próxima vez que encontrarem o mesmo nó na instância, o processo de inferência irá comparar os atributos da instância atual com aqueles já inferidos. Se alguns dos já inferidos estiverem faltando na instância, use="optional"
será adicionado à definição de atributo. Novos atributos são adicionados às declarações existentes com use="optional"
.
Restrições de ocorrência
Durante o processo de inferência do esquema, os atributos minOccurs
e 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 os valores "0"
e "1"
não podem validar o documento XML (por exemplo, se MinOccurs="0"
não descrever com precisão um elemento, minOccurs="1"
é usado).
Conteúdo misto
Se um elemento contiver conteúdo misto (por exemplo, texto intercalado com elementos), o mixed="true"
atributo será 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 processar instruções, comentários, referência de entidade, CDATA, tipo de documento e nós de namespace.
Tipo de nó | Tradução |
---|---|
Instruções de processamento | Ignorado. |
Comentário | Ignorado. |
Referência de entidade | A XmlSchemaInference classe não manipula referências de entidade. Se um documento XML contiver referências de entidade, você precisará usar um leitor que expanda as entidades. Por exemplo, pode passar um XmlTextReader com a propriedade EntityHandling definida para ExpandEntities como um parâmetro. Caso sejam encontradas referências de entidade e o leitor não expanda as entidades, será lançada uma exceção. |
CDATA | Todas as <![CDATA[ … ]] seções em um documento XML serão inferidas como xs:string . |
Tipo de documento | Ignorado. |
Espaços para nomes | Ignorado. |
Para obter mais informações sobre o processo de inferência de esquema, consulte Inferindo esquemas de documentos XML.