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.
Add Az osztály metódusától eltérően a XmlSchemaCollection sémák nem lesznek lefordítva a Add metódus meghívásakorXmlSchemaSet. A Compile metódust XmlSchemaSet a példakód kifejezetten meghívja.
Egy iteráláshoz XmlSchemaSeta Schemas tulajdonságot kell használnia XmlSchemaSet.
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 .
A sémák lekérése XmlSchemaSet a .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.xsd
XmlSchemaSet 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 false
van á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 false
a 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.