Megosztás a következőn keresztül:


XmlSchemaSet sémafordításhoz

Azt a gyorsítótárat ismerteti, amelyben az XmlSchemaSetXML-sémadefiníciós (XSD) sémák tárolhatók és érvényesíthetők.

Az XmlSchemaSet osztály

Ez XmlSchemaSet egy gyorsítótár, ahol az XML-sémadefiníciós (XSD) sémák tárolhatók és érvényesíthetők.

Az 1.0-s verzióban System.Xml az XML-sémák sématárként lettek betöltve egy XmlSchemaCollection osztályba. A System.Xml 2.0-s verzióban az XmlValidatingReader osztályok elavultak XmlSchemaCollection , és felváltották a Create metódusok, illetve az XmlSchemaSet osztály.

Ez XmlSchemaSet számos probléma megoldására lett bevezetve, beleértve a szabványok kompatibilitását, a teljesítményt és az elavult Microsoft XML-Data Reduced (XDR) sémaformátumot.

Az alábbiakban az osztály és az XmlSchemaCollectionXmlSchemaSet osztály összehasonlítása található.

XmlSchemaCollection XmlSchemaSet
Támogatja a Microsoft XDR- és W3C XML-sémákat. Csak a W3C XML-sémákat támogatja.
A rendszer a metódus meghívásakor állítja össze a Add sémákat. A rendszer nem fordítja le a sémákat a Add metódus meghívásakor. Ez teljesítménybeli javulást biztosít a sématár létrehozása során.
Minden séma létrehoz egy egyéni lefordított verziót, amely "sémaszigeteket" eredményezhet. Ennek eredményeképpen az összes bele és importálás csak ezen a sémán belül van hatókörbe foglalva. A lefordított sémák egyetlen logikai sémát, sémakészletet hoznak létre. A készlethez hozzáadott sémákban lévő importált sémák közvetlenül hozzá lesznek adva a készlethez. Ez azt jelenti, hogy minden típus elérhető az összes sémához.
A gyűjteményben csak egy séma létezhet egy adott célnévtérhez. Ugyanahhoz a célnévtérhez több séma is hozzáadható, ha nincsenek típusütközések.

Migrálás az XmlSchemaSetre

Az alábbi példakód útmutatást nyújt az új XmlSchemaSet osztályba való migráláshoz az elavult XmlSchemaCollection osztályból. A példakód a következő főbb különbségeket mutatja be a két osztály között.

Az alábbiakban az elavult XmlSchemaCollection kód példáját mutatjuk be.

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

Az alábbiakban az egyenértékű XmlSchemaSet kód példáját mutatjuk be.

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

Sémák hozzáadása és beolvasása

A rendszer sémákat ad hozzá a XmlSchemaSet rendszer a .Add /> XmlSchemaSetmetódussal. Ha egy séma hozzá van adva egy XmlSchemaSetcélnévtér URI-éhez. A célnévtér URI-ja paraméterként adható meg a Add metódushoz, vagy ha nincs megadva célnévtér, a XmlSchemaSet séma által definiált célnévteret használja.

A sémák lekérése XmlSchemaSet a .Schemas /> XmlSchemaSettulajdonság használatával történik. A Schemas tulajdonság lehetővé XmlSchemaSet teszi, hogy iteráljon a XmlSchemaXmlSchemaSet. A Schemas tulajdonság vagy a XmlSchema célnévtérben XmlSchemaSettalálható összes objektumot adja vissza, vagy egy célnévtér paraméterrel visszaadja a XmlSchema célnévtérhez tartozó összes objektumot. Ha null a célnévtér paramétereként van megadva, a tulajdonság a Schemas névtér nélküli összes sémát visszaadja.

Az alábbi példa hozzáadja a books.xsd sémát a http://www.contoso.com/books névtérben egyhez XmlSchemaSet, lekéri a http://www.contoso.com/books névtérhez tartozó összes sémát a XmlSchemaSetnévtérből, majd beírja ezeket a sémákat a Consolenévtérbe.

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

A sémák objektumokból való hozzáadásáról és lekéréséről XmlSchemaSet a metódussal és a AddSchemas tulajdonságreferenciával kapcsolatos dokumentációban talál további információt.

Sémák összeállítása

A sémák egy XmlSchemaSet logikai sémába vannak lefordítva a CompileXmlSchemaSet.

Feljegyzés

Az elavult XmlSchemaCollection osztálytól eltérően a sémák nem lesznek lefordítva a Add metódus meghívásakor.

Ha a Compile metódus sikeresen végrehajtja a parancsot, a IsCompiled tulajdonság XmlSchemaSet értéke a következő lesz true: .

Feljegyzés

A IsCompiled tulajdonságra nincs hatással, ha a sémák a XmlSchemaSet. Frissítések az egyes sémák XmlSchemaSet nincsenek nyomon követve. Ennek eredményeképpen a IsCompiled tulajdonság akkor is lehet true , ha a benne található XmlSchemaSet sémák egyikét módosították, mindaddig, amíg a séma nem lett hozzáadva vagy eltávolítva a XmlSchemaSetrendszerből.

Az alábbi példa hozzáadja a fájlt a books.xsdXmlSchemaSet metódushoz, majd meghívja a metódust 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();  

A sémák összeállításáról további információt a módszer referenciadokumentációjában XmlSchemaSetCompile talál.

Sémák újrafeldolgozása

A séma újrafeldolgozása a sémán XmlSchemaSet végrehajtott összes előfeldolgozási lépést végrehajtja a Add metódus meghívásakor XmlSchemaSet . Ha a Reprocess metódus hívása sikeres, a IsCompiled metódus tulajdonsága a XmlSchemaSet következőre falsevan állítva: .

A Reprocess metódust akkor kell használni, ha a séma a XmlSchemaSet fordítást követően XmlSchemaSet módosult.

Az alábbi példa egy, a XmlSchemaSet metódushoz hozzáadott séma újrafeldolgozását Reprocess mutatja be. Miután lefordította a XmlSchemaSetCompile metódust, és a séma hozzá lett adva a XmlSchemaSet módosításhoz, a IsCompiled tulajdonság akkor is úgy van beállítva, hogy true a séma módosult XmlSchemaSet . A metódus meghívása Reprocess végrehajtja a metódus által Add végrehajtott összes előfeldolgozást, és a tulajdonságot a IsCompiled következőre falseállítja be: .

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

A sémák XmlSchemaSetújrafeldolgozásával kapcsolatos további információkért tekintse meg a módszer referenciadokumentációját Reprocess .

Séma keresése

A módszer XmlSchemaSet használatával Contains ellenőrizheti, hogy egy séma szerepel-e egy XmlSchemaSet. A Contains metódus egy célnévteret vagy egy XmlSchema objektumot keres. Mindkét esetben a Contains metódus akkor ad true vissza értéket, ha a séma a XmlSchemaSet; egyéb esetben falsea következőben található.

A séma ellenőrzéséről további információt a módszer referenciadokumentációjában Contains talál.

Sémák eltávolítása

A rendszer eltávolítja XmlSchemaSet a sémákat a RemoveRemoveRecursiveXmlSchemaSet. A Remove metódus eltávolítja a megadott sémát a XmlSchemaSetrendszerből, míg a RemoveRecursive metódus eltávolítja a megadott sémát és az összes sémát, amelyből importálja a sémát XmlSchemaSet.

Az alábbi példa azt szemlélteti, hogy több sémát ad hozzá egyhez XmlSchemaSet, majd a RemoveRecursive metódussal eltávolítja az egyik sémát és az összes importált sémát.

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

A sémák egyből XmlSchemaSetvaló eltávolításával kapcsolatos további információkért tekintse meg a módszerek referenciadokumentációját RemoveRemoveRecursive .

Sémafeloldás és xs:importálás

Az alábbi példák a XmlSchemaSet sémák importálásának viselkedését mutatják be, ha egy adott névtérhez több séma is létezik egy XmlSchemaSetadott névtérben.

Vegyük például azt XmlSchemaSet , amely több sémát tartalmaz a http://www.contoso.com névtérhez. A rendszer hozzáad egy sémát a következő xs:import irányelvvel a XmlSchemaSetkövetkezőhöz.

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

A XmlSchemaSet névtér sémájának importálására tett kísérletek az http://www.contoso.com URL-címből http://www.contoso.com/schema.xsd való betöltésével. Az importálási sémában csak a sémadokumentumban deklarált sémadeklaráció és -típusok érhetők el, annak ellenére, hogy a http://www.contoso.com névtérben más sémadokumentumok is találhatók.XmlSchemaSet Ha a schema.xsd fájl nem található az http://www.contoso.com/schema.xsd URL-címen, a rendszer nem importálja a http://www.contoso.com névtér sémáját az importálási sémába.

XML-dokumentumok érvényesítése

Az XML-dokumentumok a sémák alapján érvényesíthetők egy XmlSchemaSet. Az XML-dokumentumot úgy érvényesítheti, hogy XmlSchemaSetSchemas sémát ad hozzá egy XmlReaderSettings objektum tulajdonságához, vagy hozzáad egy XmlSchemaSetSchemas objektum tulajdonságához XmlReaderSettings . Ezt XmlReaderSettings követően az osztály metódusa CreateXmlReader az objektum létrehozásához XmlReader és az XML-dokumentum érvényesítéséhez használja az objektumot.

Az XML-dokumentumok XmlSchemaSettel XmlSchemaSetvaló érvényesítésével kapcsolatos további információkért lásd az XML-séma (XSD) érvényesítését az XmlSchemaSettel.

Lásd még