Udostępnij za pośrednictwem


Weryfikowanie dokumentu XML przy użyciu dtD, XDR lub XSD w Visual Basic

W tym artykule pokazano, jak używać XmlValidatingReader klasy do weryfikowania dokumentu XML względem dtD, schematu XDR lub schematu XSD w Visual Basic 2005 lub Visual Basic .NET. Opisuje również sposób optymalizacji weryfikacji przez buforowanie schematów.

Oryginalna wersja produktu: Visual Basic
Oryginalny numer KB: 315533

Podsumowanie

Rozszerzalne dokumenty języka Markup Language (XML) zawierają elementy i atrybuty oraz zapewniają elastyczny i zaawansowany sposób wymiany danych między aplikacjami i organizacjami. Aby określić dozwoloną strukturę i zawartość dokumentu XML, możesz napisać schemat definicji typu dokumentu (DTD), schematu XDR (XML-Data Reduced) firmy Microsoft lub schematu języka XSD (XML Schema Definition Language).

Schematy XSD są preferowanym sposobem określania gramatyki XML w programie .NET Framework, ale obsługiwane są również schematy DTD i XDR.

W tym artykule dowiesz się, jak zastosować dtD, schemat XDR lub schemat XSD do dokumentu XML w programie Microsoft Visual Basic 2005 lub na platformie Microsoft Visual Basic .NET. Następnie dowiesz się, jak używać klasy XmlValidatingReader do weryfikowania dokumentu XML pod kątem określonej gramatyki. Dowiesz się również, jak używać klasy XmlSchemaCollection do buforowania schematów w pamięci jako sposobu optymalizacji weryfikacji XML.

Wymagania

Poniższa lista zawiera opis zalecanego sprzętu, oprogramowania, infrastruktury sieciowej i dodatków Service Pack, które są potrzebne: Microsoft Visual Basic 2005 lub Microsoft Visual Basic .NET

W tym artykule opisano następujące przestrzenie nazw biblioteki klas programu Microsoft .NET Framework:

  • System.Xml
  • System.Xml.Schema

W tym artykule założono, że znasz następujące tematy:

  • Składnia programu Visual Basic 2005 lub Visual Basic .NET
  • Pojęcia dotyczące kodu XML, w tym problemy z walidacją

Tworzenie dokumentu XML

  1. Uruchom program Microsoft Visual Studio 2005 lub microsoft Visual Studio .NET. Następnie utwórz nowy plik XML (w menu Plik wskaż polecenie Nowy, a następnie kliknij pozycję Plik).

  2. Wybierz typ pliku XML, a następnie kliknij przycisk Otwórz.

  3. Dodaj następujące dane do dokumentu XML, aby reprezentować produkt w wykazie:

    <Product ProductID="123">
        <ProductName>Rugby jersey</ProductName>
    </Product>
    
  4. Zapisz plik jako Product.xml w folderze, do którego będzie można łatwo uzyskać dostęp później (przykłady kodu w tym artykule zakładają folder o nazwie C:\MyFolder).

  1. W programie Visual Studio 2005 lub visual Studio .NET wskaż polecenie Nowy w menu Plik, a następnie kliknij pozycję Plik.

  2. Wybierz typ pliku tekstowego, a następnie kliknij przycisk Otwórz.

  3. Dodaj następujące deklaracje DTD do pliku, aby opisać gramatykę dokumentu XML:

    <!ELEMENT Product (ProductName)>
    <!ATTLIST Product ProductID CDATA #REQUIRED>
    <!ELEMENT ProductName (#PCDATA)>
    
  4. Zapisz plik jako Product.dtd w tym samym folderze co dokument XML.

  5. Otwórz ponownie Product.xml w programie Visual Studio 2005 lub Visual Studio .NET. W tym celu wskaż polecenie Otwórz w menu Plik, a następnie kliknij przycisk Plik. Dodaj instrukcję DOCTYPE (poniżej ?xml version="1.0" wiersza) w następujący sposób. Spowoduje to połączenie dokumentu XML z plikiem DTD.

    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE Product SYSTEM "Product.dtd">
    
  6. Zapisz zmodyfikowany dokument XML jako ProductWithDTD.xml.

Przeprowadzanie walidacji przy użyciu dtd

  1. W programie Visual Studio 2005 lub visual Studio .NET utwórz nowy projekt aplikacji konsolowej Visual Basic o nazwie ValidateXmlUsingVB.

  2. Program Visual Studio 2005 lub Visual Studio .NET wyświetla nowy plik o nazwie Module1.vb. Na początku tego pliku dodaj dwie instrukcje Import w następujący sposób:

    Imports System.Xml ' For XmlTextReader and XmlValidatingReader
    Imports System.Xml.Schema ' For XmlSchemaCollection (used later)
    
  3. W module1 (przed rozpoczęciem podprocji Main) zadeklaruj zmienną logiczną o nazwie isValid w następujący sposób:

    'If a validation error occurs,
    ' you will set this flag to False 
    ' in the validation event handler. 
    Private isValid As Boolean = True
    
  4. W podroutynie Main utwórz obiekt XmlTextReader, aby odczytać dokument XML z pliku tekstowego. Następnie utwórz XmlValidatingReader obiekt, aby zweryfikować te dane XML:

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithDTD.xml")
    Dim v As New XmlValidatingReader(r)
    
  5. Obiekt XmlValidatingReader ma właściwość ValidationType, która wskazuje typ wymaganej weryfikacji (DTD, XDR lub Schema). Ustaw tę właściwość na DTD w następujący sposób:

    v.ValidationType = ValidationType.DTD
    
  6. Jeśli wystąpią jakiekolwiek błędy walidacji, moduł sprawdzania poprawności generuje zdarzenie weryfikacji. Dodaj następujący kod, aby zarejestrować procedurę obsługi zdarzeń weryfikacji (zaimplementujesz podprotynę MyValidationEventHandler w kroku 8 tej sekcji):

    AddHandler v.ValidationEventHandler, AddressOf MyValidationEventHandler
    
  7. Dodaj następujący kod, aby odczytać i zweryfikować dokument XML. Jeśli wystąpią jakiekolwiek błędy walidacji, program MyValidationEventHandler zostanie wywołany w celu obsługi błędu. Ta podroutyna zostanie ustawiona isValid na wartość False (zobacz krok 8 tej sekcji). Stan parametru isValid można sprawdzić po weryfikacji, aby sprawdzić, czy dokument jest prawidłowy, czy nieprawidłowy.

    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
    
  8. Po podproszeniu Main zapisz podroutywę MyValidationEventHandler w następujący sposób:

    Public Sub MyValidationEventHandler(ByVal sender As Object, _
     ByVal args As ValidationEventArgs)
         isValid = False
         Console.WriteLine("Validation event" & vbCrLf & args.Message)
    End Sub
    
  9. Skompiluj i uruchom aplikację.

Aplikacja powinna zgłosić, że dokument XML jest prawidłowy. 10. W programie Visual Studio 2005 lub w programie Visual Studio .NET zmodyfikuj ProductWithDTD.xml, aby był nieprawidłowy (na przykład usuń element ProductName Rugby jersey/ ProductName ). 11. Ponownie uruchom aplikację.

Aplikacja powinna wyświetlić następujący komunikat o błędzie:

Element zdarzenia weryfikacji "Product" ma niekompletną zawartość. Oczekiwano "ProductName". Wystąpił błąd w file:///C:/MyFolder/ProductWithDTD.xml(4, 3). Dokument jest nieprawidłowy

  1. W programie Visual Studio 2005 lub visual Studio .NET wskaż polecenie Nowy w menu Plik, a następnie kliknij pozycję Plik.

  2. Wybierz typ pliku tekstowego, a następnie kliknij przycisk Otwórz.

  3. Dodaj do pliku następujące definicje schematu XDR, aby opisać gramatykę dokumentu 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>
    
  4. Zapisz plik jako Product.xdr w tym samym folderze co dokument XML.

  5. Otwórz ponownie oryginalny Product.xml, a następnie połącz go ze schematem XDR w następujący sposób:

    <?xml version="1.0" encoding="utf-8" ?>
    <Product ProductID="123" xmlns="x-schema:Product.xdr"> 
        <ProductName>Rugby jersey</ProductName>
    </Product>
    
  6. Zapisz zmodyfikowany dokument XML jako ProductWithXDR.xml.

Przeprowadzanie walidacji przy użyciu schematu XDR

  1. Zmodyfikuj aplikację tak, aby element XmlTextReader ładował ProductWithXDR.xml w następujący sposób:

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithXDR.xml")
    
  2. ValidationType Ustaw wartość XDR, aby weryfikowanie czytnika przeprowadza walidację XDR w następujący sposób:

    v.ValidationType = ValidationType.XDR
    
  3. Skompiluj i uruchom aplikację.

    Aplikacja powinna zgłosić, że dokument XML jest prawidłowy.

  4. Zmodyfikuj ProductWithXDR.xml , aby celowo było nieprawidłowe.

  5. Uruchom ponownie aplikację.

    Aplikacja powinna zgłosić błąd weryfikacji.

  1. W programie Visual Studio .NET wskaż polecenie Nowy w menu Plik, a następnie kliknij pozycję Plik.

  2. Wybierz typ pliku tekstowego, a następnie kliknij przycisk Otwórz.

  3. Dodaj następującą definicję schematu XSD do pliku, aby opisać gramatykę dokumentu 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>
    
  4. Zapisz plik jako Product.xsd w tym samym folderze co dokument XML.

  5. Otwórz ponownie oryginalny Product.xml, a następnie połącz go ze schematem XSD w następujący sposób:

    <?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>
    
  6. Zapisz zmodyfikowany dokument XML jako ProductWithXSD.xml.

Przeprowadzanie walidacji przy użyciu schematu XSD

  1. Zmodyfikuj XmlTextReader aplikację tak, aby ładowała ProductWithXSD.xml w następujący sposób:

    Dim r As New XmlTextReader("C:\MyFolder\ProductWithXSD.xml")
    
  2. Ustaw wartość ValidationType na Wartość Schema (Schemat), aby czytnik sprawdzania poprawności wykonał walidację schematu XSD w następujący sposób:

    v.ValidationType = ValidationType.Schema
    
  3. Skompiluj i uruchom aplikację, aby zweryfikować dokument XML przy użyciu schematu XSD.

    Aplikacja powinna zgłosić, że dokument XML jest prawidłowy.

Używanie przestrzeni nazw w schemacie XSD

  1. W programie Visual Studio 2005 lub w programie Visual Studio .NET otwórz ProductWithXSD.xml. Zadeklaruj domyślną przestrzeń nazw , urn:MyNamespacew dokumencie. Zmodyfikuj połączenie XSD, aby określić schemat XSD w celu zweryfikowania zawartości w tej przestrzeni nazw w następujący sposób:

    <?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>
    
  2. Zapisz ProductWithXSD.xml.

  3. Otwórz plik Product.xsd, kliknij kartę XML, a następnie zmodyfikuj tag start xsd:schema w następujący sposób, aby schemat był stosowany do przestrzeni nazw urn:MyNamespace:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     targetNamespace="urn:MyNamespace"
     elementFormDefault="qualified">
    
  4. Zapisz plik Product.xsd.

  5. Uruchom aplikację, aby zweryfikować dokument XML przy użyciu schematu XSD.

Przestrzenie nazw pamięci podręcznej

  1. W programie Visual Studio 2005 lub visual Studio .NET otwórz Module1.vb. Na początku podprocji Main utwórz XmlSchemaCollection obiekt w następujący sposób:

    Dim cache As New XmlSchemaCollection()
    
  2. Obiekt XmlSchemaCollection umożliwia buforowanie schematów w pamięci w celu zwiększenia wydajności. Każdy schemat jest skojarzony z inną przestrzenią nazw. Dodaj następujący kod, aby buforować plik Product.xsd:

    cache.Add("urn:MyNamespace", "C:\MyFolder\Product.xsd")
    
  3. Po kodzie, który tworzy XmlValidatingReader obiekt, dodaj następującą instrukcję. Spowoduje to dodanie pamięci podręcznej schematu do XmlValidatingReader elementu , aby czytelnik mógł używać schematów w pamięci.

    v.Schemas.Add(cache)
    

Weryfikacja

  1. Skompiluj i uruchom aplikację.
  2. Sprawdź, czy dokument XML jest nadal weryfikowany względem schematu XSD.
  3. Wprowadź pewne zmiany w ProductWithXSD.xml , aby celowo uczynić go nieprawidłowym.
  4. Sprawdź, czy aplikacja wykrywa te błędy sprawdzania poprawności.