Convalidare un documento XML usando DTD, XDR o XSD in Visual Basic
Questo articolo illustra come usare la XmlValidatingReader
classe per convalidare un documento XML rispetto a un DTD, uno schema XDR o uno schema XSD in Visual Basic 2005 o in Visual Basic .NET. Descrive anche come ottimizzare la convalida memorizzando nella cache gli schemi.
Versione originale del prodotto: Visual Basic
Numero KB originale: 315533
Riepilogo
I documenti XML (Extensible Markup Language) contengono elementi e attributi e offrono un modo flessibile e potente per scambiare dati tra applicazioni e organizzazioni. Per specificare la struttura e il contenuto consentiti di un documento XML, è possibile scrivere uno schema DTD (Document Type Definition), uno schema XDR (Microsoft XML-Data Reduced) o uno schema XSD (XML Schema Definition Language).
Gli schemi XSD sono il modo preferito per specificare grammatiche XML in .NET Framework, ma sono supportati anche gli schemi DTD e XDR.
Questo articolo illustra come applicare un DTD, uno schema XDR o uno schema XSD a un documento XML in Microsoft Visual Basic 2005 o in Microsoft Visual Basic .NET. Si apprenderà quindi come usare la classe XmlValidatingReader per convalidare un documento XML rispetto alla grammatica specificata. Si apprenderà anche come usare la classe XmlSchemaCollection per memorizzare nella cache gli schemi in memoria per ottimizzare la convalida XML.
Requisiti
L'elenco seguente descrive l'hardware, il software, l'infrastruttura di rete e i Service Pack consigliati necessari: Microsoft Visual Basic 2005 o Microsoft Visual Basic .NET
Questo articolo fa riferimento agli spazi dei nomi della libreria di classi di Microsoft .NET Framework seguenti:
System.Xml
System.Xml.Schema
Questo articolo presuppone che si abbia familiarità con gli argomenti seguenti:
- Sintassi .NET di Visual Basic 2005 o Visual Basic
- Concetti XML, inclusi i problemi di convalida
Creare un documento XML
Avviare Microsoft Visual Studio 2005 o Microsoft Visual Studio .NET. Creare quindi un nuovo file XML (scegliere Nuovo dal menu File e quindi fare clic su File).
Selezionare il tipo di file XML e quindi fare clic su Apri.
Aggiungere i dati seguenti al documento XML per rappresentare un prodotto in un catalogo:
<Product ProductID="123"> <ProductName>Rugby jersey</ProductName> </Product>
Salvare il file come Product.xml in una cartella a cui sarà possibile accedere facilmente in un secondo momento (gli esempi di codice in questo articolo presuppongono una cartella denominata
C:\MyFolder
).
Creare un DTD e collegarsi al documento XML
In Visual Studio 2005 o in Visual Studio .NET scegliere Nuovo dal menu File e quindi fare clic su File.
Selezionare il tipo di file di testo e quindi fare clic su Apri.
Aggiungere le dichiarazioni DTD seguenti al file per descrivere la grammatica del documento XML:
<!ELEMENT Product (ProductName)> <!ATTLIST Product ProductID CDATA #REQUIRED> <!ELEMENT ProductName (#PCDATA)>
Salvare il file come Product.dtd nella stessa cartella del documento XML.
Riaprire Product.xml in Visual Studio 2005 o in Visual Studio .NET; a tale scopo, scegliere Apri dal menu File e quindi fare clic su File. Aggiungere un'istruzione DOCTYPE (sotto la
?xml version="1.0"
riga), come indicato di seguito. In questo modo il documento XML viene collegato al file DTD).<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE Product SYSTEM "Product.dtd">
Salvare il documento XML modificato come ProductWithDTD.xml.
Eseguire la convalida usando un DTD
In Visual Studio 2005 o in Visual Studio .NET creare un nuovo progetto di applicazione console di Visual Basic denominato ValidateXmlUsingVB.
Visual Studio 2005 o Visual Studio .NET visualizza un nuovo file denominato Module1.vb. All'inizio di questo file aggiungere due istruzioni Imports, come indicato di seguito:
Imports System.Xml ' For XmlTextReader and XmlValidatingReader Imports System.Xml.Schema ' For XmlSchemaCollection (used later)
In Module1 (prima dell'inizio della subroutine Main) dichiarare una variabile booleana denominata isValid, come indicato di seguito:
'If a validation error occurs, ' you will set this flag to False ' in the validation event handler. Private isValid As Boolean = True
Nella subroutine Main creare un oggetto XmlTextReader per leggere un documento XML da un file di testo. Creare quindi un
XmlValidatingReader
oggetto per convalidare questi dati XML:Dim r As New XmlTextReader("C:\MyFolder\ProductWithDTD.xml") Dim v As New XmlValidatingReader(r)
L'oggetto XmlValidatingReader ha una proprietà ValidationType, che indica il tipo di convalida richiesto (DTD, XDR o Schema). Impostare questa proprietà su DTD, come indicato di seguito:
v.ValidationType = ValidationType.DTD
Se si verificano errori di convalida, il lettore di convalida genera un evento di convalida. Aggiungere il codice seguente per registrare un gestore eventi di convalida (si implementerà la subroutine MyValidationEventHandler nel passaggio 8 di questa sezione):
AddHandler v.ValidationEventHandler, AddressOf MyValidationEventHandler
Aggiungere il codice seguente per leggere e convalidare il documento XML. Se si verificano errori di convalida, verrà chiamato MyValidationEventHandler per gestire l'errore. Questa subroutine verrà impostata su
isValid
False (vedere il passaggio 8 di questa sezione). È possibile controllare lo stato di isValid dopo la convalida per verificare se il documento è valido o non valido.While v.Read()' Could add code here to process the content. End While v.Close()' Check whether the document is valid or invalid. If isValid Then Console.WriteLine("Document is valid") Else Console.WriteLine("Document is invalid") End If
Dopo la subroutine Main, scrivere la subroutine MyValidationEventHandler, come indicato di seguito:
Public Sub MyValidationEventHandler(ByVal sender As Object, _ ByVal args As ValidationEventArgs) isValid = False Console.WriteLine("Validation event" & vbCrLf & args.Message) End Sub
Compilare ed eseguire l'applicazione.
L'applicazione deve segnalare che il documento XML è valido. 10. In Visual Studio 2005 o in Visual Studio .NET modificare ProductWithDTD.xml in modo che non sia valido(ad esempio, eliminare l'elemento ProductName Rugby jersey/ ProductName ). 11. Eseguire di nuovo l'applicazione.
L'applicazione deve visualizzare il messaggio di errore seguente:
Il contenuto dell'elemento dell'evento di convalida 'Product' è incompleto. Previsto 'ProductName'. Si è verificato un errore in file:///C:/MyFolder/ProductWithDTD.xml(4, 3). Documento non valido
Creare uno schema XDR e collegarlo al documento XML
In Visual Studio 2005 o in Visual Studio .NET scegliere Nuovo dal menu File e quindi fare clic su File.
Selezionare il tipo di file di testo e quindi fare clic su Apri.
Aggiungere le definizioni di schema XDR seguenti al file per descrivere la grammatica del documento XML:
<?xml version="1.0"?> <Schema name="ProductSchema" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <AttributeType name="ProductID" dt:type="int"/> <ElementType name="ProductName" dt:type="string"/> <ElementType name="Product" content="eltOnly"> <attribute type="ProductID" required="yes"/> <element type="ProductName"/> </ElementType> </Schema>
Salvare il file come Product.xdr nella stessa cartella del documento XML.
Riaprire il Product.xmloriginale e quindi collegarlo allo schema XDR, come indicato di seguito:
<?xml version="1.0" encoding="utf-8" ?> <Product ProductID="123" xmlns="x-schema:Product.xdr"> <ProductName>Rugby jersey</ProductName> </Product>
Salvare il documento XML modificato come ProductWithXDR.xml.
Eseguire la convalida usando uno schema XDR
Modificare l'applicazione in modo che XmlTextReader carichi ProductWithXDR.xml, come indicato di seguito:
Dim r As New XmlTextReader("C:\MyFolder\ProductWithXDR.xml")
Impostare su
ValidationType
XDR in modo che il lettore di convalida esegua la convalida XDR, come indicato di seguito:v.ValidationType = ValidationType.XDR
Compilare ed eseguire l'applicazione.
L'applicazione deve segnalare che il documento XML è valido.
Modificare ProductWithXDR.xml per renderlo deliberatamente non valido.
Eseguire di nuovo l'applicazione.
L'applicazione deve segnalare un errore di convalida.
Creare uno schema XSD e collegarlo al documento XML
In Visual Studio .NET scegliere Nuovo dal menu File e quindi fare clic su File.
Selezionare il tipo di file di testo e quindi fare clic su Apri.
Aggiungere la definizione dello schema XSD seguente al file per descrivere la grammatica del documento XML:
<?xml version="1.0"?> <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>
Salvare il file come Product.xsd nella stessa cartella del documento XML.
Riaprire il Product.xmloriginale e quindi collegarlo allo schema XSD, come indicato di seguito:
<?xml version="1.0" encoding="utf-8" ?> <Product ProductID="123" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Product.xsd"> <ProductName>Rugby jersey</ProductName> </Product>
Salvare il documento XML modificato come ProductWithXSD.xml.
Eseguire la convalida usando uno schema XSD
Modificare l'applicazione in modo che carichi ProductWithXSD.xml
XmlTextReader
, come indicato di seguito:Dim r As New XmlTextReader("C:\MyFolder\ProductWithXSD.xml")
Impostare su
ValidationType
Schema in modo che il lettore di convalida esegua la convalida dello schema XSD, come indicato di seguito:v.ValidationType = ValidationType.Schema
Compilare ed eseguire l'applicazione per convalidare il documento XML usando lo schema XSD.
L'applicazione deve segnalare che il documento XML è valido.
Usare gli spazi dei nomi nello schema XSD
In Visual Studio 2005 o in Visual Studio .NET aprire ProductWithXSD.xml. Dichiarare uno spazio dei nomi predefinito,
urn:MyNamespace
, nel documento. Modificare il collegamento XSD per specificare lo schema XSD per convalidare il contenuto in questo spazio dei nomi, come indicato di seguito:<?xml version="1.0" encoding="utf-8"?> <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>
Salvare ProductWithXSD.xml.
Aprire Product.xsd, fare clic sulla scheda XML e quindi modificare il tag di avvio xsd:schema come indicato di seguito, 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">
Salvare Product.xsd.
Eseguire l'applicazione per convalidare il documento XML usando lo schema XSD.
Spazi dei nomi della cache
In Visual Studio 2005 o in Visual Studio .NET aprire Module1.vb. All'inizio della subroutine Main creare un
XmlSchemaCollection
oggetto come indicato di seguito:Dim cache As New XmlSchemaCollection()
L'oggetto
XmlSchemaCollection
consente di memorizzare nella cache gli schemi in memoria per migliorare le prestazioni. Ogni schema è associato a uno spazio dei nomi diverso. Aggiungere il codice seguente per memorizzare nella cache Product.xsd:cache.Add("urn:MyNamespace", "C:\MyFolder\Product.xsd")
Dopo il codice che crea l'oggetto
XmlValidatingReader
, aggiungere l'istruzione seguente. In questo modo la cache dello schema viene aggiunta aXmlValidatingReader
, in modo che il lettore possa usare gli schemi in memoria.v.Schemas.Add(cache)
Verifica
- Compilare ed eseguire l'applicazione.
- Verificare che il documento XML sia ancora in fase di convalida rispetto allo schema XSD.
- Apportare alcune modifiche al ProductWithXSD.xml per renderlo intenzionalmente non valido.
- Verificare che l'applicazione rilevi questi errori di convalida.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per