Compartir a través de


Reglas para deducir tipos y estructura de esquema de nodo

En este tema se describe cómo el proceso de inferencia de esquema traduce los tipos de nodo de un documento XML a una estructura del lenguaje de definición de esquemas XML (XSD).

Reglas de inferencia de elementos

En esta sección se describen las reglas de inferencia para las declaraciones de elementos. Hay ocho estructuras de declaraciones de elemento que se deducirán:

  1. Elemento de tipo simple

  2. Elemento vacío

  3. Elemento vacío con atributos

  4. Elemento con atributos y contenido simple

  5. Elemento con una secuencia de elementos secundarios

  6. Elemento con una secuencia de elementos secundarios y atributos

  7. Elemento con una secuencia de opciones de elementos secundarios

  8. Elemento con una secuencia de opciones de elementos secundarios y atributos

Nota:

Todas las complexType declaraciones se deducen como tipos anónimos. El único elemento global inferido es el elemento raíz; todos los demás elementos son locales.

Para obtener más información sobre el proceso de inferencia de esquemas, vea Inferencia de esquemas de documentos XML.

Elemento de Tipo Simple

En la tabla siguiente se muestra la entrada XML al InferSchema método y el esquema XML generado. El elemento en negrita muestra el esquema inferido para el elemento de tipo simple.

Para obtener más información sobre el proceso de inferencia de esquemas, vea Inferencia 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 Vacío

En la tabla siguiente se muestra la entrada XML al InferSchema método y el esquema XML generado. El elemento en negrita muestra el esquema inferido para el elemento vacío.

Para obtener más información sobre el proceso de inferencia de esquemas, vea Inferencia 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 vacío con atributos

En la tabla siguiente se muestra la entrada XML al InferSchema método y el esquema XML generado. Los elementos en negrita muestran el esquema inferido para el elemento vacío con atributos.

Para obtener más información sobre el proceso de inferencia de esquemas, vea Inferencia 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 con atributos y contenido simple

En la tabla siguiente se muestra la entrada XML al InferSchema método y el esquema XML generado. Los elementos en negrita muestran el esquema inferido para un elemento con atributos y contenido simple.

Para obtener más información sobre el proceso de inferencia de esquemas, vea Inferencia 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 con una secuencia de elementos secundarios

En la tabla siguiente se muestra la entrada XML al InferSchema método y el esquema XML generado. Los elementos en negrita muestran el esquema inferido para un elemento con una secuencia de elementos secundarios.

Nota:

Incluso si un elemento tiene solo un elemento secundario, se sigue tratando como una secuencia.

Para obtener más información sobre el proceso de inferencia de esquemas, vea Inferencia 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 con una secuencia de elementos secundarios y atributos

En la tabla siguiente se muestra la entrada XML al InferSchema método y el esquema XML generado. Los elementos en negrita muestran el esquema inferido para un elemento con una secuencia de elementos y atributos secundarios.

Nota:

Incluso si un elemento tiene solo un elemento secundario, se sigue tratando como una secuencia.

Para obtener más información sobre el proceso de inferencia de esquemas, vea Inferencia 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 con una secuencia y opciones de elementos secundarios

En la tabla siguiente se muestra la entrada XML al InferSchema método y el esquema XML generado. Los elementos en negrita muestran el esquema deducido para un elemento con una secuencia y opción de elementos secundarios.

Nota:

El atributo maxOccurs del elemento xs:choice se establece en "unbounded" en el esquema inferido.

Para obtener más información sobre el proceso de inferencia de esquemas, vea Inferencia 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 con una secuencia y opción de elementos secundarios y atributos

En la tabla siguiente se muestra la entrada XML al InferSchema método y el esquema XML generado. Los elementos en negrita muestran el esquema inferido para un elemento con una secuencia y elección de elementos y atributos secundarios.

Nota:

El atributo maxOccurs del elemento xs:choice se establece en "unbounded" en el esquema inferido.

Para obtener más información sobre el proceso de inferencia de esquemas, vea Inferencia 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>

Procesamiento de atributos

Cada vez que se encuentra un nuevo atributo dentro de un nodo, se agrega a la definición deducida del nodo con use="required". La próxima vez que se encuentre el mismo nodo en la instancia, el proceso de inferencia comparará los atributos de la instancia actual con los que ya se han inferido. Si faltan algunos de los ya inferidos en la instancia, use="optional" se agrega a la definición de atributo. Los nuevos atributos se agregan a las declaraciones existentes con use="optional".

Restricciones de ocurrencia

Durante el proceso de inferencia de esquema, se generan los minOccurs atributos y maxOccurs para los componentes inferidos de un esquema, con los valores "0" o "1" y "1" o "unbounded". Los valores "1" y "unbounded" solo se usan cuando los valores "0" y "1" no pueden validar el documento XML (por ejemplo, si MinOccurs="0" no describe con precisión un elemento, minOccurs="1" se usa).

Contenido mixto

Si un elemento contiene contenido mixto (por ejemplo, texto intercalado con elementos), el mixed="true" atributo se genera para la definición de tipo complejo inferido.

Otras reglas de inferencia de tipos de nodo

En la tabla siguiente se describen las reglas de inferencia para procesar instrucciones, comentarios, referencia de entidad, CDATA, tipo de documento y nodos de espacio de nombres.

Tipo de nodo Traducción
Instrucción de procesamiento Ignorado.
Comentario Ignorado.
Referencia de entidad La XmlSchemaInference clase no controla las referencias de entidad. Si un documento XML contiene referencias de entidad, debe usar un lector que expanda las entidades. Por ejemplo, puede pasar un XmlTextReader con la propiedad EntityHandling establecida en ExpandEntities como parámetro. Si se encuentran referencias de entidad y el lector no expande entidades, se lanza una excepción.
CDATA Las <![CDATA[ … ]] secciones de un documento XML se deducirán como xs:string.
Tipo de documento Ignorado.
Espacios de nombres Ignorado.

Para obtener más información sobre el proceso de inferencia de esquemas, vea Inferencia de esquemas de documentos XML.

Consulte también