Al momento sei offline in attesa che la connessione Internet venga ristabilita

HOW TO: Convalidare un documento XML utilizzando DTD, XDR o XSD

Questo articolo è stato precedentemente pubblicato con il codice di riferimento I307379
Sommario
In questo articolo viene illustrato come applicare una DTD (Document Type Definition), uno schema XDT (XML-Data Reduced) o uno schema XSD (XML Schema Definition) a un documento XML (Extensible Markup Language). Nell'articolo viene inoltre descritto come utilizzare la classe XmlValidatingReader per convalidare un documento XML a fronte della grammatica specificata, oltre a come utilizzare la classe XmlSchemaCollection per inserire schemi nella memoria cache al fine di ottimizzare la convalida XML.

I documenti XML contengono elementi e attributi. Essi offrono un sistema potente e flessibile per scambiare dati fra applicazioni e organizzazioni. Per specificare la struttura e il contenuto consentiti di un documento XML, è possibile scrivere una DTD, uno schema XDR o uno schema XSD. Gli schemi XSD sono il metodo preferenziale per specificare la grammatica XML in Microsoft .NET Framework, ma sono supportati anche le DTD e gli schemi XDR.

Torna all'inizio

Requisiti

In questo articolo si presume la conoscenza dei seguenti argomenti:
  • Sintassi di Microsoft Visual C# .NET o Microsoft Visual Basic .NET
  • Concetti XML, compresi i problemi di convalida
Torna all'inizio

Creare un documento XML

  1. Avviare Visual Studio .NET.
  2. Creare un nuovo file XML nel computer locale.
  3. Aggiungere i seguenti dati al documento XML per rappresentare un prodotto contenuto in un catalogo:
    <Product ProductID="123">   <ProductName>Rugby jersey</ProductName></Product>
  4. Salvare il file con il nome di Product.xml in una nuova cartella chiamata C:\MyFolder.
Torna all'inizio

Utilizzo di DTD

Creare la DTD e collegarla al documento XML

  1. Creare un file di testo vuoto in Visual Studio .NET.
  2. Aggiungere le seguenti dichiarazioni DTD al file per descrivere la grammatica del documento XML:
    <!ELEMENT Product (ProductName)><!ATTLIST Product ProductID CDATA #REQUIRED><!ELEMENT ProductName (#PCDATA)>
  3. Salvare il file con il nome di Product.dtd nella directory C:\MyFolder.
  4. Aprire Product.xml in Visual Studio .NET.
  5. Aggiungere la seguente istruzione DOCTYPE nella parte superiore del file Product.xml per collegare il documento XML al file DTD:
    <?xml version='1.0' encoding='utf-16'?><!DOCTYPE Product SYSTEM "Product.dtd">
  6. Salvare il documento XML modificato con il nome di ProductWithDTD.xml.
Torna all'inizio

Utilizzare la DTD per convalidare il documento XML

  1. In Visual Studio .NET creare un nuovo progetto applicazione console denominato ValidateXml utilizzando Visual C#.
  2. Aggiungere due istruzioni using all'inizio di Class1.cs come segue:
    using System.Xml;        // for XmlTextReader and XmlValidatingReaderusing System.Xml.Schema; // for XmlSchemaCollection (which is used later)
  3. In Class1.cs dichiarare un campo booleano denominato isValid prima dell'inizio del metodo Main, come segue:
    private static bool isValid = true;      // If a validation error occurs,                                         // set this flag to false in the                                         // validation event handler.
  4. Creare nel metodo Main un oggetto XmlTextReader per leggere un documento XML da un file di testo, quindi creare un oggetto XmlValidatingReader per la convalida di questi dati XML, come segue:
    XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithDTD.xml");XmlValidatingReader v = new XmlValidatingReader(r);
  5. La proprietà ValidationType dell'oggetto XmlValidatingReader indica il tipo di convalida necessario, ossia DTD, XDR o Schema. Impostare la proprietà DTD come segue:
    v.ValidationType = ValidationType.DTD;
  6. Se si verificano errori di convalida, il visualizzatore genera un evento convalida. Aggiungere il seguente codice per registrare un gestore eventi convalida, mentre il metodo MyValidationEventHandler verrà implementato al passaggio 8:
    v.ValidationEventHandler +=    new ValidationEventHandler(MyValidationEventHandler);
  7. Aggiungere il seguente codice per leggere e convalidare il documento XML. Se si verificano errori di convalida, viene chiamato MyValidationEventHandler per risolvere l'errore. Questo metodo imposta isValid su False (vedere il passaggio 8). È possibile verificare lo stato di isValid dopo la convalida, per vedere se il documento è o non è valido.
    while (v.Read()){   // Can add code here to process the content.}v.Close();// Check whether the document is valid or invalid.if (isValid)   Console.WriteLine("Document is valid");else   Console.WriteLine("Document is invalid");
  8. Scrivere il metodo MyValidationEventHandler dopo il metodo Main, come segue:
    public static void MyValidationEventHandler(object sender,                                             ValidationEventArgs args) {   isValid = false;   Console.WriteLine("Validation event\n" + args.Message);}
  9. Generare ed eseguire l'applicazione. L'applicazione dovrebbe indicare che il documento XML è valido.
  10. In Visual Studio .NET modificare ProductWithDTD.xml in modo da invalidarlo, eliminando ad esempio l'elemento "<ProductName>Rugby jersey</ProductName>".
  11. Eseguire nuovamente l'applicazione. Dovrebbe essere visualizzato un messaggio di errore analogo al seguente:
    Evento convalida
    Contenuto dell'elemento "Product" non valido. Previsto "ProductName".
    Si è verificato un errore nel file:///C:/MyFolder/ProductWithDTD.xml(4, 5).
    Documento non valido
Torna all'inizio

Utilizzo dello schema XDR

Creare lo schema XDR e collegarlo al documento XML

  1. Creare un file di testo vuoto in Visual Studio .NET.
  2. Aggiungere le seguenti definizioni di schema XDR al file per descrivere la grammatica 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. Salvare il file con il nome di Product.xdr nella directory C:\MyFolder.
  4. Aprire il file Product.xml originale e collegarlo allo schema XDR come segue:
    <?xml version='1.0' encoding='utf-16'?><Product ProductID="123" xmlns="x-schema:Product.xdr">    <ProductName>Rugby jersey</ProductName></Product>
  5. Salvare il documento XML modificato con il nome di ProductWithXDR.xml.
Torna all'inizio

Utilizzare lo schema XDR per convalidare il documento XML

  1. Modificare l'applicazione come segue in modo che XmlTextReader carichi ProductWithXDR.xml:
    XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithXDR.xml");
  2. Impostare ValidationType su XDR in modo che il visualizzatore esegua la convalida XDR:
    v.ValidationType = ValidationType.XDR;
  3. Generare ed eseguire l'applicazione. L'applicazione dovrebbe indicare che il documento XML è valido.
  4. Modificare ProductWithXDR.xml per invalidarlo.
  5. Generare ed eseguire nuovamente l'applicazione. Dovrebbe essere visualizzato un errore di convalida.
Torna all'inizio

Utilizzo dello schema XSD

Creare lo schema XSD e collegarlo al documento XML

  1. Creare un file di testo vuoto in Visual Studio .NET.
  2. Aggiungere le seguenti definizioni di schema XSD al file per descrivere la grammatica 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. Salvare il file con il nome di Product.xsd nella directory C:\MyFolder.
  4. Aprire il file Product.xml originale e collegarlo allo schema XSD come segue:
    <?xml version='1.0' encoding='utf-16'?><Product ProductID="123"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:noNamespaceSchemaLocation="Product.xsd">   <ProductName>Rugby jersey</ProductName></Product>
  5. Salvare il documento XML modificato con il nome di ProductWithXSD.xml.
Torna all'inizio

Utilizzare lo schema XSD per convalidare il documento XML

  1. Modificare l'applicazione come segue in modo che XmlTextReader carichi ProductWithXSD.xml:
    XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithXSD.xml");
  2. Impostare ValidationType a Schema in modo che il visualizzatore esegua la convalida dello schema XSD:
    v.ValidationType = ValidationType.Schema;
  3. Generare ed eseguire l'applicazione per utilizzare lo schema XSD per convalidare il documento XML.
Torna all'inizio

Utilizzare gli spazi dei nomi nello schema XSD

  1. Aprire ProductWithXSD.xml in Visual Studio .NET.
  2. Dichiarare nel documento uno spazio dei nomi predefinito urn:MyNamespace. Modificare inoltre il collegamento XSD in modo che venga specificato lo schema XSD per convalidare il contenuto di tale spazio dei nomi:
    <?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>Rugby jersey</ProductName></Product>
  3. Salvare le modifiche apportate a ProductWithXSD.xml.
  4. Aprire Product.xsd. Modificare il tag iniziale <xsd:schema> come segue, in modo che lo schema si applichi allo spazio dei nomi urn:MyNamespace:
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"            targetNamespace="urn:MyNamespace"            elementFormDefault="qualified">
  5. Salvare le modifiche apportate a Product.xsd.
  6. Generare ed eseguire l'applicazione per utilizzare lo schema XSD per convalidare il documento XML.
Torna all'inizio

Spazi dei nomi cache

  1. Aprire Class1.cs in Visual Studio .NET. Creare un oggetto XmlSchemaCollection all'inizio del metodo Main, come segue:
    XmlSchemaCollection cache = new XmlSchemaCollection();
  2. L'oggetto XmlSchemaCollection consente di inserire schemi nella memoria cache per migliorare le prestazioni. Ogni schema è associato a un diverso spazio dei nomi. Aggiungere il seguente codice per inserire Product.xsd nella cache:
    cache.Add("urn:MyNamespace", "C:\\MyFolder\\Product.xsd");
  3. Aggiungere la seguente istruzione dopo il codice impiegato per creare l'oggetto XmlValidatingReader, in modo da aggiungere la cache dello schema a XmlValidatingReader, perché il visualizzatore possa servirsi degli schemi in memoria:
    v.Schemas.Add(cache);
Torna all'inizio

Verificare il funzionamento

  1. Generare ed eseguire l'applicazione.
  2. Verificare che il documento XML continui a essere convalidato a fronte dello schema XSD.
  3. Modificare ProductWithXSD.xml per invalidarlo.
  4. Verificare che l'applicazione rilevi questi errori di convalida.
Torna all'inizio
Proprietà

ID articolo: 307379 - Ultima revisione: 04/12/2002 10:08:00 - Revisione: 1.0

  • Microsoft Visual Studio .NET 2002 Professional Edition
  • kbhowto kbhowtomaster KB307379
Feedback