CÓMO: Validar un documento XML mediante DTD, XDR o XSD

Seleccione idioma Seleccione idioma
Id. de artículo: 307379 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E307379
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se explica cómo aplicar una Definición de tipo de documento (DTD), un esquema Microsoft XML-Data Reduced (XDR) o un esquema del Lenguaje de definición de esquemas XML (XSD) a un documento del Lenguaje de marcado extensible (XML). En este artículo también se describe cómo utilizar la clase XmlValidatingReader para validar un documento XML según la gramática especificada, así como la forma de utilizar la clase XmlSchemaCollection para almacenar en memoria caché esquemas con el fin de optimizar la validación XML.

Los documentos XML contienen elementos y atributos. Ofrecen una forma flexible y eficaz de intercambiar datos entre aplicaciones y organizaciones. Para especificar la estructura y el contenido que puede tener un documento XML, puede escribir un DTD, un esquema XDR o un esquema XSD. Los esquemas XSD son el método preferido para especificar gramáticas XML en Microsoft .NET Framework, pero también se aceptan los DTD y los esquemas XDR.

Requisitos

En el presente artículo se da por supuesto que está familiarizado con los temas siguientes:
  • Sintaxis de Microsoft Visual C# .NET o Microsoft Visual Basic .NET
  • Conceptos de XML, incluyendo problemas de validación

Crear un documento XML

  1. Inicie Visual Studio .NET.
  2. Cree un nuevo archivo XML en el equipo local.
  3. Agregue los datos siguientes al documento XML para representar un producto de un catálogo:
    <Product ProductID="123">
       <ProductName>Jersey de rugby</ProductName>
    </Product>
  4. Guarde el archivo como Product.xml en una carpeta nueva llamada C:\MiCarpeta.

Utilizar el DTD

Crear el DTD y vincularlo a un documento XML

  1. En Visual Studio .NET, cree un archivo de texto vacío.
  2. Agregue al archivo las siguientes declaraciones DTD para describir la gramática del documento XML:
    <!ELEMENT Product (ProductName)>
    <!ATTLIST Product ProductID CDATA #REQUIRED>
    <!ELEMENT ProductName (#PCDATA)>
  3. Guarde el archivo como Product.dtd en el directorio C:\MiCarpeta.
  4. Abra Product.xml en Visual Studio .NET.
  5. Agregue la siguiente instrucción DOCTYPE al principio de Product.xml para vincular el documento XML al archivo DTD:
    <?xml version='1.0' encoding='utf-16'?>
    <!DOCTYPE Product SYSTEM "Product.dtd">
  6. Guarde el documento XML modificado como ProductWithDTD.xml.

Utilizar el DTD para validar el documento XML

  1. En Visual Studio .NET, cree un nuevo proyecto de aplicación de consola de Visual C# llamado ValidateXml.
  2. Agregue dos instrucciones using al principio de Class1.cs de la manera siguiente:
    using System.Xml;        // para XmlTextReader y XmlValidatingReader
    using System.Xml.Schema; // para XmlSchemaCollection (que se utiliza más adelante)
  3. En Class1.cs, declare un campo booleano llamado isValid antes de que empiece el método Main de la manera siguiente:
    private static bool isValid = true;      // Si se produce un error de validación,
                                             // configure este indicador como false
                                             // en el controlador de eventos de validación.
  4. Cree un objeto XmlTextReader para leer un documento XML de un archivo de texto en el método Main y cree un XmlValidatingReader para validar estos datos XML de la manera siguiente:
    XmlTextReader r = new XmlTextReader("C:\\MiCarpeta\\ProductWithDTD.xml");
    XmlValidatingReader v = new XmlValidatingReader(r);
  5. La propiedad ValidationType del objeto XmlValidatingReader indica el tipo de validación necesaria (DTD, XDR o Schema). Configure esta propiedad como DTD de la manera siguiente:
    v.ValidationType = ValidationType.DTD;
  6. Si se produce algún error de validación, el lector de validación generará un evento de validación. Agregue el código siguiente para registrar un controlador de eventos de validación (implementará el método MyValidationEventHandler en el paso 8):
    v.ValidationEventHandler += 
       new ValidationEventHandler(MyValidationEventHandler);
  7. Agregue el código siguiente para leer y validar el documento XML. Si se produce algún error de validación, se llama a MyValidationEventHandler para resolver el error. Este método configura isValid como False (vea el paso 8). Puede comprobar el estado de isValid después de la validación para ver si el documento es válido o no.
    while (v.Read())
    {
       // Puede agregar código aquí para procesar el contenido.
    }
    v.Close();
    
    // Comprobar si el documento es válido o no.
    if (isValid)
       Console.WriteLine("El documento es válido");
    Else
       Console.WriteLine("El documento no es válido");
  8. Escriba el método MyValidationEventHandler después del método Main de la manera siguiente:
    public static void MyValidationEventHandler(object sender, 
                                                ValidationEventArgs args) 
    {
       isValid = false;
       Console.WriteLine("Evento de validación\n" + args.Message);
    }
  9. Genere y ejecute la aplicación. La aplicación debe informar de que el documento XML es válido.
  10. En Visual Studio .NET, modifique ProductWithDTD.xml para invalidarlo (por ejemplo, elimine el elemento "<ProductName>Jersey de rugby</ProductName>").
  11. Ejecute de nuevo la aplicación. Debe aparecer el mensaje de error siguiente:
    Evento de validación
    El elemento 'Product' no tiene contenido válido. Se esperaba 'ProductName'.
    Error en el archivo:///C:/MiCarpeta/ProductWithDTD.xml(4, 5).
    El documento no es válido

Utilizar el esquema XDR

Crear el esquema XDR y vincularlo a un documento XML

  1. En Visual Studio .NET, cree un archivo de texto vacío.
  2. Agregue al archivo las siguientes definiciones de esquema XDR para describir la gramática del documento XML:
    <?xml version='1.0' encoding='utf-16'?>
    <Schema name="ProductSchema" 
            xmlns="urn:schemas-microsoft-com:xml-data"
            xmlns:dt="urn:schemas-microsoft-com:datatypes">
    
       <ElementType name="Product" content="eltOnly">
          <attribute type="ProductID" required="yes"/>
          <element type="ProductName"/>
       </ElementType>
    
       <AttributeType name="ProductID" dt:type="int"/>
       <ElementType name="ProductName" dt:type="string"/>
    </Schema>
  3. Guarde el archivo como Product.xdr en el directorio C:\MiCarpeta.
  4. Abra el archivo Product.xml original y vincúlelo al esquema XDR de la manera siguiente:
    <?xml version='1.0' encoding='utf-16'?>
    <Product ProductID="123" xmlns="x-schema:Product.xdr"> 
       <ProductName>Jersey de rugby</ProductName>
    </Product>
  5. Guarde el documento XML modificado como ProductWithXDR.xml.

Utilizar el esquema XDR para validar el documento XML

  1. Modifique la aplicación de forma que XmlTextReader cargue ProductWithXDR.xml de la manera siguiente:
    XmlTextReader r = new XmlTextReader("C:\\MiCarpeta\\ProductWithXDR.xml");
  2. Configure ValidationType como XDR, de forma que el lector de validación realice la validación XDR:
    v.ValidationType = ValidationType.XDR;
  3. Genere y ejecute la aplicación. La aplicación debe informar de que el documento XML es válido.
  4. Modifique ProductWithXDR.xml para invalidarlo.
  5. Genere y ejecute de nuevo la aplicación. Debe aparecer un error de validación.

Utilizar el esquema XSD

Crear el esquema XSD y vincularlo a un documento XML

  1. En Visual Studio .NET, cree un archivo de texto vacío.
  2. Agregue al archivo las siguientes definiciones de esquema XSD para describir la gramática del documento XML:
    <?xml version='1.0' encoding='utf-16'?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <xsd:element name="Product">
          <xsd:complexType>
             <xsd:sequence>
                <xsd:element name="ProductName" type="xsd:string"/>
             </xsd:sequence>
             <xsd:attribute name="ProductID" use="required" type="xsd:int"/>
          </xsd:complexType>
       </xsd:element>
    </xsd:schema>
  3. Guarde el archivo como Product.xsd en el directorio C:\MiCarpeta.
  4. Abra el archivo Product.xml original y vincúlelo al esquema XSD de la manera siguiente:
    <?xml version='1.0' encoding='utf-16'?>
    <Product ProductID="123"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:noNamespaceSchemaLocation="Product.xsd">
       <ProductName>Jersey de rugby</ProductName>
    </Product>
  5. Guarde el documento XML modificado como ProductWithXSD.xml.

Utilizar el esquema XSD para validar el documento XML

  1. Modifique la aplicación de forma que XmlTextReader cargue ProductWithXSD.xml de la manera siguiente:
    XmlTextReader r = new XmlTextReader("C:\\MiCarpeta\\ProductWithXSD.xml");
  2. Configure ValidationType como Schema, de forma que el lector de validación realice la validación de esquema XSD:
    v.ValidationType = ValidationType.Schema;
  3. Genere y ejecute la aplicación de manera que utilice el esquema XSD para validar el documento XML.

Utilizar espacios de nombres en el esquema XSD

  1. En Visual Studio .NET, abra ProductWithXSD.xml.
  2. Declare un espacio de nombres predeterminado urn:MyNamespace en el documento. Además, modifique el vínculo XSD de manera que especifique el esquema XSD para validar contenido en este espacio de nombres:
    <?xml version='1.0' encoding='utf-16'?>
    <Product ProductID="123"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="urn:MyNamespace"
             xsi:schemaLocation="urn:MyNamespace Product.xsd">
       <ProductName>Jersey de rugby</ProductName>
    </Product>
  3. Guarde los cambios en ProductWithXSD.xml.
  4. Abra Product.xsd. Modifique la etiqueta de inicio <xsd:schema> de la manera siguiente para que el esquema se aplique al espacio de nombres urn:MyNamespace:
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                targetNamespace="urn:MyNamespace"
                elementFormDefault="qualified">
  5. Guarde los cambios en Product.xsd.
  6. Genere y ejecute la aplicación de manera que utilice el esquema XSD para validar el documento XML.

Almacenar en caché espacios de nombres

  1. En Visual Studio .NET, abra Class1.cs. Cree un objeto XmlSchemaCollection al principio del método Main de la manera siguiente:
    XmlSchemaCollection cache = new XmlSchemaCollection();
  2. El objeto XmlSchemaCollection le permite almacenar esquemas en memoria caché para mejorar el rendimiento. Cada esquema está asociado a un espacio de nombres diferente. Agregue el código siguiente para almacenar en caché Product.xsd:
    cache.Add("urn:MyNamespace", "C:\\MiCarpeta\\Product.xsd");
  3. Agregue la siguiente instrucción después del código que crea el objeto XmlValidatingReader para agregar la caché de esquemas a XmlValidatingReader, de forma que el lector pueda utilizar los esquemas en memoria:
    v.Schemas.Add(cache);

Comprobar que funciona

  1. Genere y ejecute la aplicación.
  2. Compruebe que el documento XML se sigue validando con el esquema XSD.
  3. Modifique ProductWithXSD.xml para invalidarlo.
  4. Compruebe que la aplicación detecta estos errores de validación.

Propiedades

Id. de artículo: 307379 - Última revisión: martes, 15 de enero de 2002 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft Visual Studio .NET 2002 Professional
Palabras clave: 
kbhowto kbhowtomaster KB307379

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com