Sdílet prostřednictvím


XmlSchemaSet pro kompilaci schématu

Popisuje XmlSchemaSetmezipaměť, ve které lze uložit a ověřit schémata jazyka XSD (XML Schema Definition Language).

XmlSchemaSet – třída

Jedná se XmlSchemaSet o mezipaměť, ve které lze ukládat a ověřovat schémata jazyka XSD (XML Schema Definition Language).

Ve System.Xml verzi 1.0 byly schémata XML načtena do XmlSchemaCollection třídy jako knihovna schémat. Ve System.Xml verzi 2.0 XmlValidatingReader jsou třídy XmlSchemaCollection zastaralé a byly nahrazeny metodami Create a XmlSchemaSet třídou v uvedeném pořadí.

Zavedli XmlSchemaSet jsme opravu řady problémů, včetně kompatibility standardů, výkonu a zastaralého formátu schématu XDR (Microsoft XML-Data Reduced).

Následuje porovnání mezi XmlSchemaCollection třídou a XmlSchemaSet třídou.

Xmlschemacollection Xmlschemaset
Podporuje schémata MICROSOFT XDR a W3C XML. Podporuje pouze schémata XML W3C.
Schémata jsou zkompilována při Add zavolání metody. Schémata nejsou kompilována při Add zavolání metody. To poskytuje zlepšení výkonu při vytváření knihovny schémat.
Každé schéma generuje jednotlivou zkompilovanou verzi, která může vést k "ostrůvkům schématu". V důsledku toho jsou všechny zahrnutí a importy vymezeny pouze v rámci tohoto schématu. Kompilovaná schémata generují jedno logické schéma, "sadu" schémat. Všechna importovaná schémata v rámci schématu přidaného do sady se přímo přidají do samotné sady. To znamená, že všechny typy jsou k dispozici pro všechna schémata.
V kolekci může existovat pouze jedno schéma pro konkrétní cílový obor názvů. Více schémat pro stejný cílový obor názvů lze přidat, pokud neexistují žádné konflikty typů.

Migrace na XmlSchemaSet

Následující příklad kódu obsahuje průvodce migrací na novou XmlSchemaSet třídu z zastaralé XmlSchemaCollection třídy. Příklad kódu znázorňuje následující hlavní rozdíly mezi těmito dvěma třídami.

Následuje příklad zastaralého XmlSchemaCollection kódu.

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);  
}  

Následuje ekvivalentní XmlSchemaSet příklad kódu.

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);  
}  

Přidávání a načítání schémat

Schémata jsou přidána do XmlSchemaSet pomocí Add metody XmlSchemaSet. Při přidání schématu do objektu XmlSchemaSetje přidruženo k identifikátoru URI cílového oboru názvů. Identifikátor URI cílového oboru názvů lze buď zadat jako parametr Add metody, nebo pokud není zadán žádný cílový obor názvů, XmlSchemaSet použije cílový obor názvů definovaný ve schématu.

Schémata se načítají z XmlSchemaSet vlastnosti SchemasXmlSchemaSet. Vlastnost SchemasXmlSchemaSet umožňuje iterovat nad XmlSchema objekty obsažené v objektu XmlSchemaSet. Vlastnost Schemas buď vrátí všechny XmlSchema objekty obsažené v objektu XmlSchemaSet, nebo vzhledem k cílovému parametru oboru názvů vrátí všechny XmlSchema objekty, které patří do cílového oboru názvů. Pokud null je zadán jako parametr cílového oboru názvů, Schemas vrátí vlastnost všechna schémata bez oboru názvů.

Následující příklad přidá books.xsd schéma v http://www.contoso.com/books oboru názvů do XmlSchemaSet, načte všechna schémata, která patří do http://www.contoso.com/books oboru názvů z XmlSchemaSeta pak zapíše tato schémata do Console.

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);  
}  

Další informace o přidávání a načítání schémat z objektu XmlSchemaSet naleznete Add v metodě a Schemas referenční dokumentaci k vlastnosti.

Kompilace schémat

Schémata v objektu XmlSchemaSet jsou zkompilována do jednoho logického schématu Compile metodou XmlSchemaSet.

Poznámka:

Na rozdíl od zastaralé XmlSchemaCollection třídy nejsou schémata při zavolání metody zkompilována Add .

Pokud se Compile metoda úspěšně provede, IsCompiled vlastnost objektu XmlSchemaSet je nastavena na truehodnotu .

Poznámka:

Vlastnost IsCompiled není ovlivněna, pokud jsou schémata upravena v režimu XmlSchemaSet. Aktualizace jednotlivých schémat nejsou XmlSchemaSet sledována. V důsledku toho může být true vlastnost i v případě, IsCompiled že některá ze schémat obsažených v objektu XmlSchemaSet byla změněna, pokud nebyla přidána nebo odebrána žádná schémata z objektu XmlSchemaSet.

Následující příklad přidá books.xsd soubor do XmlSchemaSet a pak zavolá metodu 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();  

Další informace o kompilaci schémat v referenční XmlSchemaSetCompile dokumentaci k metodě.

Opětovné zpracování schémat

Opětovné zpracování schématu XmlSchemaSet ve schématu provede všechny kroky předběžného zpracování provedené ve schématu při Add zavolání metody XmlSchemaSet . Pokud volání Reprocess metody je úspěšné, IsCompiled vlastnost je nastavena XmlSchemaSet na false.

Metoda Reprocess by se měla použít, když bylo změněno schéma po XmlSchemaSetXmlSchemaSet provedení kompilace.

Následující příklad ukazuje opětovné zpracování schématu přidaného XmlSchemaSet do metody.Reprocess Po kompilaci XmlSchemaSet pomocí Compile metody a schéma přidané do je XmlSchemaSet změněno, vlastnost je nastavena natrue, IsCompiled i když schéma v objektu XmlSchemaSet bylo změněno. Reprocess Volání metody provádí všechny předběžné zpracování provedené Add metodou a nastaví IsCompiled vlastnost 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);  

Další informace o opětovném zpracování schématu v referenční XmlSchemaSetReprocess dokumentaci k metodě.

Kontrola schématu

Můžete použít Contains metodu XmlSchemaSet kontroly, zda schéma je obsaženo v objektu XmlSchemaSet. Metoda Contains přebírá cílový obor názvů nebo XmlSchema objekt, který chcete zkontrolovat. V obou případech metoda vrátí, Contains pokud schéma je obsaženo v ; XmlSchemaSetjinak vrátí false.true

Další informace o kontrole schématu najdete v Contains referenční dokumentaci k metodě.

Odebrání schémat

Schémata jsou odebrána z XmlSchemaSet pomocí Remove a RemoveRecursive metody XmlSchemaSet. Metoda Remove odebere zadané schéma z XmlSchemaSet, zatímco RemoveRecursive metoda odebere zadané schéma a všechna schémata, která importuje z XmlSchemaSet.

Následující příklad znázorňuje přidání více schémat do objektu XmlSchemaSeta následné použití RemoveRecursive metody k odebrání jednoho ze schémat a všech schémat, která importuje.

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);  
   }  
}  

Další informace o odebírání schémat ze schémat XmlSchemaSetnaleznete v Remove referenční dokumentaci k metodám.RemoveRecursive

Rozlišení schématu a xs:import

Následující příklady popisují XmlSchemaSet chování při importu schémat, pokud existuje více schémat pro daný obor názvů v objektu XmlSchemaSet.

Představte si XmlSchemaSet například, že obsahuje více schémat pro http://www.contoso.com obor názvů. Do souboru je přidáno schéma s následující xs:import direktivou XmlSchemaSet.

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

Pokusy XmlSchemaSet o import schématu http://www.contoso.com pro obor názvů načtením z http://www.contoso.com/schema.xsd adresy URL. V importovaném schématu jsou k dispozici pouze deklarace schématu a typy deklarované v dokumentu schématu, i když existují další dokumenty schématu http://www.contoso.com pro obor názvů v XmlSchemaSetsouboru . schema.xsd Pokud soubor nelze najít na http://www.contoso.com/schema.xsd adrese URL, nenaimportuje se do schématu importu žádné schéma oboru http://www.contoso.com názvů.

Ověřování dokumentů XML

Dokumenty XML lze ověřit na schématech v objektu XmlSchemaSet. Dokument XML ověříte přidáním schématu XmlSchemaSetSchemas do vlastnosti XmlReaderSettings objektu nebo přidáním XmlSchemaSet vlastnosti Schemas objektu XmlReaderSettings . Objekt XmlReaderSettings se pak používá Create metodou XmlReader třídy k vytvoření objektu XmlReader a ověření dokumentu XML.

Další informace o ověřování dokumentů XML pomocí , XmlSchemaSetnaleznete v tématu Xml Schema (XSD) Ověřování pomocí XmlSchemaSet.

Viz také