Udostępnij za pośrednictwem


Klasa XmlSchemaSet na potrzeby kompilacji schematu

XmlSchemaSetOpisuje pamięć podręczną, w której można przechowywać i weryfikować schematy języka definicji schematu XML (XSD).

Klasa XmlSchemaSet

To XmlSchemaSet pamięć podręczna, w której można przechowywać i weryfikować schematy języka definicji schematu XML (XSD).

W System.Xml wersji 1.0 schematy XML zostały załadowane do XmlSchemaCollection klasy jako biblioteka schematów. W System.Xml wersji 2.0 XmlValidatingReader klasy i XmlSchemaCollection są przestarzałe i zostały zastąpione Create odpowiednio metodami i klasą XmlSchemaSet .

Wprowadzono rozwiązanie XmlSchemaSet wielu problemów, takich jak zgodność standardów, wydajność i przestarzały format schematu Microsoft XML-Data Reduced (XDR).

Poniżej przedstawiono porównanie XmlSchemaCollection klasy i XmlSchemaSet klasy.

Xmlschemacollection Xmlschemaset
Obsługuje schematy XML XDR i W3C firmy Microsoft. Obsługuje tylko schematy XML W3C.
Schematy są kompilowane po wywołaniu Add metody. Schematy nie są kompilowane, gdy metoda jest wywoływana Add . Zapewnia to poprawę wydajności podczas tworzenia biblioteki schematów.
Każdy schemat generuje pojedynczą skompilowaną wersję, która może spowodować "wyspy schematu". W związku z tym wszystkie operacje dołączania i importowania są ograniczone tylko w ramach tego schematu. Skompilowane schematy generują pojedynczy schemat logiczny — "zestaw" schematów. Wszystkie zaimportowane schematy w schemacie, które są dodawane do zestawu, są bezpośrednio dodawane do samego zestawu. Oznacza to, że wszystkie typy są dostępne dla wszystkich schematów.
W kolekcji może istnieć tylko jeden schemat dla określonej docelowej przestrzeni nazw. Można dodać wiele schematów dla tej samej docelowej przestrzeni nazw, o ile nie ma konfliktów typów.

Migrowanie do zestawu XmlSchemaSet

Poniższy przykład kodu zawiera przewodnik migracji do nowej XmlSchemaSet klasy z przestarzałej XmlSchemaCollection klasy. W przykładzie kodu przedstawiono następujące główne różnice między dwiema klasami.

Poniżej przedstawiono przestarzały XmlSchemaCollection przykład kodu.

Dim schemaCollection As XmlSchemaCollection = New XmlSchemaCollection()  
schemaCollection.Add("http://www.contoso.com/retail", "http://www.contoso.com/retail.xsd")  
schemaCollection.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd")  
  
Dim schema As XmlSchema  
  
For Each schema in schemaCollection  
  
   Console.WriteLine(schema.TargetNamespace)  
  
Next  
XmlSchemaCollection schemaCollection = new XmlSchemaCollection();  
schemaCollection.Add("http://www.contoso.com/retail", "http://www.contoso.com/retail.xsd");  
schemaCollection.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd");  
  
foreach(XmlSchema schema in schemaCollection)  
{  
   Console.WriteLine(schema.TargetNamespace);  
}  

Poniżej przedstawiono równoważny XmlSchemaSet przykład kodu.

Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()  
schemaSet.Add("http://www.contoso.com/retail", "http://www.contoso.com/retail.xsd")  
schemaSet.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd")  
schemaSet.Compile()  
  
Dim schema As XmlSchema  
  
For Each schema in schemaSet.Schemas()  
  
   Console.WriteLine(schema.TargetNamespace)  
  
Next  
XmlSchemaSet schemaSet = new XmlSchemaSet();  
schemaSet.Add("http://www.contoso.com/retail", "http://www.contoso.com/retail.xsd");  
schemaSet.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd");  
schemaSet.Compile();  
  
foreach(XmlSchema schema in schemaSet.Schemas())  
{  
   Console.WriteLine(schema.TargetNamespace);  
}  

Dodawanie i pobieranie schematów

Schematy są dodawane do XmlSchemaSet metody przy użyciu Add metody XmlSchemaSet. Po dodaniu schematu do XmlSchemaSetobiektu jest skojarzony z docelowym identyfikatorem URI przestrzeni nazw. Docelowy identyfikator URI przestrzeni nazw można określić jako parametr Add metody lub jeśli nie określono docelowej przestrzeni nazw, XmlSchemaSet używa docelowej przestrzeni nazw zdefiniowanej w schemacie.

Schematy są pobierane z XmlSchemaSet obiektu przy użyciu Schemas właściwości XmlSchemaSet. Właściwość Schemas obiektu XmlSchemaSet umożliwia iterowanie XmlSchema obiektów zawartych w obiekcie XmlSchemaSet. Właściwość Schemas zwraca wszystkie XmlSchema obiekty zawarte w XmlSchemaSetobiekcie lub, biorąc pod uwagę docelowy parametr przestrzeni nazw, zwraca wszystkie XmlSchema obiekty należące do docelowej przestrzeni nazw. Jeśli null zostanie określony jako docelowy parametr przestrzeni nazw, Schemas właściwość zwraca wszystkie schematy bez przestrzeni nazw.

Poniższy przykład dodaje books.xsd schemat w http://www.contoso.com/books przestrzeni nazw do XmlSchemaSetelementu , pobiera wszystkie schematy należące do http://www.contoso.com/books przestrzeni nazw z XmlSchemaSetprogramu , a następnie zapisuje te schematy w Consoleobiekcie .

Dim schemaSet As XmlSchemaSet = New XmlSchemaSet  
schemaSet.Add("http://www.contoso.com/books", "books.xsd")  
  
Dim schema As XmlSchema  
  
For Each schema In schemaSet.Schemas("http://www.contoso.com/books")  
  
   schema.Write(Console.Out)  
  
Next  
XmlSchemaSet schemaSet = new XmlSchemaSet();  
schemaSet.Add("http://www.contoso.com/books", "books.xsd");  
  
foreach (XmlSchema schema in schemaSet.Schemas("http://www.contoso.com/books"))  
{  
   schema.Write(Console.Out);  
}  

Aby uzyskać więcej informacji na temat dodawania i pobierania schematów z XmlSchemaSet obiektu, zobacz Add metodę i dokumentację referencyjną Schemas właściwości.

Kompilowanie schematów

Schematy w obiekcie XmlSchemaSet są kompilowane w jednym schemacie logicznym za pomocą Compile metody XmlSchemaSet.

Uwaga

W przeciwieństwie do przestarzałej XmlSchemaCollection klasy schematy nie są kompilowane podczas wywoływania Add metody.

Compile Jeśli metoda zostanie wykonana pomyślnie, IsCompiled właściwość właściwości XmlSchemaSet jest ustawiona na truewartość .

Uwaga

Nie IsCompiled ma to wpływu na właściwość , jeśli schematy są edytowane w XmlSchemaSetpliku . Aktualizacje poszczególnych schematów w obiekcie XmlSchemaSet nie są śledzone. W związku z tym właściwość może być true nawet wtedy, IsCompiled gdy jeden ze schematów zawartych w XmlSchemaSet obiekcie został zmieniony, o ile nie dodano ani nie usunięto schematów z klasy XmlSchemaSet.

Poniższy przykład dodaje books.xsd plik do XmlSchemaSet pliku , a następnie wywołuje metodę Compile .

Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()  
schemaSet.Add("http://www.contoso.com/books", "books.xsd")  
schemaSet.Compile()  
XmlSchemaSet schemaSet = new XmlSchemaSet();  
schemaSet.Add("http://www.contoso.com/books", "books.xsd");  
schemaSet.Compile();  

Aby uzyskać więcej informacji na temat kompilowania schematów w obiekcie , zobacz dokumentację referencyjną XmlSchemaSetCompile metody.

Ponowne przetwarzanie schematów

Ponowne przetwarzanie schematu w obiekcie XmlSchemaSet wykonuje wszystkie kroki przetwarzania wstępnego wykonywane na schemacie, gdy Add wywoływana jest metoda XmlSchemaSet . Jeśli wywołanie Reprocess metody zakończy się pomyślnie, IsCompiled właściwość XmlSchemaSet właściwości jest ustawiona na false.

Metoda Reprocess powinna być używana, gdy schemat w XmlSchemaSet obiekcie został zmodyfikowany po wykonaniu XmlSchemaSet kompilacji.

Poniższy przykład ilustruje ponowne przetwarzanie schematu dodanego XmlSchemaSet do metody przy użyciu Reprocess metody . XmlSchemaSet Po skompilowaniu przy użyciu Compile metody , a schemat dodany do XmlSchemaSet obiektu jest modyfikowany, IsCompiled właściwość jest ustawiona na true wartość , mimo że schemat w XmlSchemaSet obiekcie został zmodyfikowany. Reprocess Wywołanie metody wykonuje wszystkie wstępne przetwarzanie wykonywane przez metodę Add i ustawia IsCompiled właściwość na false.

Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()  
Dim schema As XmlSchema = schemaSet.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd")  
schemaSet.Compile()  
  
Dim element As XmlSchemaElement = New XmlSchemaElement()  
schema.Items.Add(element)  
element.Name = "book"  
element.SchemaTypeName = New XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema")  
  
schemaSet.Reprocess(schema)  
XmlSchemaSet schemaSet = new XmlSchemaSet();  
XmlSchema schema = schemaSet.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd");  
schemaSet.Compile();  
  
XmlSchemaElement element = new XmlSchemaElement();  
schema.Items.Add(element);  
element.Name = "book";  
element.SchemaTypeName = new XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema");  
  
schemaSet.Reprocess(schema);  

Aby uzyskać więcej informacji na temat ponownego przetwarzania schematu w elemencie XmlSchemaSet, zobacz dokumentację referencyjną Reprocess metody.

Sprawdzanie schematu

Możesz użyć Contains metody , XmlSchemaSet aby sprawdzić, czy schemat jest zawarty w obiekcie XmlSchemaSet. Metoda Contains przyjmuje docelową przestrzeń nazw lub XmlSchema obiekt do sprawdzenia. W obu przypadkach metoda zwraca wartość Contains , jeśli schemat jest zawarty w obiekcie XmlSchemaSet; w przeciwnym razie zwraca wartość false.true

Aby uzyskać więcej informacji na temat sprawdzania schematu, zobacz dokumentację referencyjną Contains metody.

Usuwanie schematów

Schematy są usuwane z XmlSchemaSet metody Remove i RemoveRecursive .XmlSchemaSet Metoda Remove usuwa określony schemat z XmlSchemaSetklasy , podczas gdy RemoveRecursive metoda usuwa określony schemat i wszystkie schematy, które importuje z XmlSchemaSetklasy .

W poniższym przykładzie pokazano dodawanie wielu schematów do XmlSchemaSetelementu , a następnie użycie RemoveRecursive metody w celu usunięcia jednego ze schematów i wszystkich importowanych schematów.

Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()  
schemaSet.Add("http://www.contoso.com/retail", "http://www.contoso.com/retail.xsd")  
schemaSet.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd")  
schemaSet.Add("http://www.contoso.com/music", "http://www.contoso.com/music.xsd")  
  
Dim schema As XmlSchema  
  
For Each schema In schemaSet.Schemas()  
  
   If schema.TargetNamespace = "http://www.contoso.com/music" Then  
      schemaSet.RemoveRecursive(schema)  
   End If  
  
Next  
XmlSchemaSet schemaSet = new XmlSchemaSet();  
schemaSet.Add("http://www.contoso.com/retail", "http://www.contoso.com/retail.xsd");  
schemaSet.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd");  
schemaSet.Add("http://www.contoso.com/music", "http://www.contoso.com/music.xsd");  
  
foreach (XmlSchema schema in schemaSet.Schemas())  
{  
   if (schema.TargetNamespace == "http://www.contoso.com/music")  
   {  
      schemaSet.RemoveRecursive(schema);  
   }  
}  

Aby uzyskać więcej informacji na temat usuwania schematów z obiektu , zobacz dokumentację referencyjną XmlSchemaSetmetod i RemoveRecursive .Remove

Rozpoznawanie schematu i xs:import

W poniższych przykładach opisano XmlSchemaSet zachowanie importowania schematów, gdy w XmlSchemaSetobiekcie istnieje wiele schematów dla danej przestrzeni nazw.

Rozważmy na przykład element XmlSchemaSet zawierający wiele schematów dla http://www.contoso.com przestrzeni nazw. Schemat z następującą xs:import dyrektywą jest dodawany do elementu XmlSchemaSet.

<xs:import namespace="http://www.contoso.com" schemaLocation="http://www.contoso.com/schema.xsd" />  

Próba XmlSchemaSet zaimportowania schematu http://www.contoso.com dla przestrzeni nazw przez załadowanie go z http://www.contoso.com/schema.xsd adresu URL. Tylko deklaracja schematu i typy zadeklarowane w dokumencie schematu są dostępne w schemacie importowania, mimo że istnieją inne dokumenty schematu dla http://www.contoso.com przestrzeni nazw w XmlSchemaSetpliku . schema.xsd Jeśli nie można znaleźć pliku pod http://www.contoso.com/schema.xsd adresem URL, żaden schemat http://www.contoso.com przestrzeni nazw nie zostanie zaimportowany do schematu importowania.

Weryfikowanie dokumentów XML

Dokumenty XML można zweryfikować względem schematów w elemecie XmlSchemaSet. Dokument XML można zweryfikować, dodając schemat do XmlSchemaSetSchemas właściwości XmlReaderSettings obiektu lub dodając element XmlSchemaSet do Schemas właściwości XmlReaderSettings obiektu. Następnie XmlReaderSettings obiekt jest używany przez Create metodę XmlReader klasy do utworzenia XmlReader obiektu i zweryfikowania dokumentu XML.

Aby uzyskać więcej informacji na temat sprawdzania poprawności dokumentów XML przy użyciu elementu XmlSchemaSet, zobacz Sprawdzanie poprawności schematu XML (XSD) przy użyciu elementu XmlSchemaSet.

Zobacz też