Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
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).
Wybierz typ pliku XML, a następnie kliknij przycisk Otwórz.
Dodaj następujące dane do dokumentu XML, aby reprezentować produkt w wykazie:
<Product ProductID="123"> <ProductName>Rugby jersey</ProductName> </Product>
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
).
Tworzenie identyfikatora DTD i łączenie z dokumentem XML
W programie Visual Studio 2005 lub visual Studio .NET wskaż polecenie Nowy w menu Plik, a następnie kliknij pozycję Plik.
Wybierz typ pliku tekstowego, a następnie kliknij przycisk Otwórz.
Dodaj następujące deklaracje DTD do pliku, aby opisać gramatykę dokumentu XML:
<!ELEMENT Product (ProductName)> <!ATTLIST Product ProductID CDATA #REQUIRED> <!ELEMENT ProductName (#PCDATA)>
Zapisz plik jako Product.dtd w tym samym folderze co dokument XML.
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">
Zapisz zmodyfikowany dokument XML jako ProductWithDTD.xml.
Przeprowadzanie walidacji przy użyciu dtd
W programie Visual Studio 2005 lub visual Studio .NET utwórz nowy projekt aplikacji konsolowej Visual Basic o nazwie ValidateXmlUsingVB.
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)
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
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)
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
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
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
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
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
Tworzenie schematu XDR i łączenie z dokumentem XML
W programie Visual Studio 2005 lub visual Studio .NET wskaż polecenie Nowy w menu Plik, a następnie kliknij pozycję Plik.
Wybierz typ pliku tekstowego, a następnie kliknij przycisk Otwórz.
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>
Zapisz plik jako Product.xdr w tym samym folderze co dokument XML.
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>
Zapisz zmodyfikowany dokument XML jako ProductWithXDR.xml.
Przeprowadzanie walidacji przy użyciu schematu XDR
Zmodyfikuj aplikację tak, aby element XmlTextReader ładował ProductWithXDR.xml w następujący sposób:
Dim r As New XmlTextReader("C:\MyFolder\ProductWithXDR.xml")
ValidationType
Ustaw wartość XDR, aby weryfikowanie czytnika przeprowadza walidację XDR w następujący sposób:v.ValidationType = ValidationType.XDR
Skompiluj i uruchom aplikację.
Aplikacja powinna zgłosić, że dokument XML jest prawidłowy.
Zmodyfikuj ProductWithXDR.xml , aby celowo było nieprawidłowe.
Uruchom ponownie aplikację.
Aplikacja powinna zgłosić błąd weryfikacji.
Tworzenie schematu XSD i łączenie z dokumentem XML
W programie Visual Studio .NET wskaż polecenie Nowy w menu Plik, a następnie kliknij pozycję Plik.
Wybierz typ pliku tekstowego, a następnie kliknij przycisk Otwórz.
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>
Zapisz plik jako Product.xsd w tym samym folderze co dokument XML.
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>
Zapisz zmodyfikowany dokument XML jako ProductWithXSD.xml.
Przeprowadzanie walidacji przy użyciu schematu XSD
Zmodyfikuj
XmlTextReader
aplikację tak, aby ładowała ProductWithXSD.xml w następujący sposób:Dim r As New XmlTextReader("C:\MyFolder\ProductWithXSD.xml")
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
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
W programie Visual Studio 2005 lub w programie Visual Studio .NET otwórz ProductWithXSD.xml. Zadeklaruj domyślną przestrzeń nazw ,
urn:MyNamespace
w 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>
Zapisz ProductWithXSD.xml.
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">
Zapisz plik Product.xsd.
Uruchom aplikację, aby zweryfikować dokument XML przy użyciu schematu XSD.
Przestrzenie nazw pamięci podręcznej
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()
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")
Po kodzie, który tworzy
XmlValidatingReader
obiekt, dodaj następującą instrukcję. Spowoduje to dodanie pamięci podręcznej schematu doXmlValidatingReader
elementu , aby czytelnik mógł używać schematów w pamięci.v.Schemas.Add(cache)
Weryfikacja
- Skompiluj i uruchom aplikację.
- Sprawdź, czy dokument XML jest nadal weryfikowany względem schematu XSD.
- Wprowadź pewne zmiany w ProductWithXSD.xml , aby celowo uczynić go nieprawidłowym.
- Sprawdź, czy aplikacja wykrywa te błędy sprawdzania poprawności.