Regeln für Rückschlussschemaknotentypen und Struktur
In diesem Thema wird beschrieben, wie der Schemarückschlussprozess die in einem XML-Dokument auftretenden Knotentypen in eine XSD-Struktur (XML Schema Definition) übersetzt.
Rückschlussregeln für Elemente
In diesem Abschnitt werden die Rückschlussregeln für Elementdeklarationen erläutert. Es existieren acht Strukturen zur Elementdeklaration, die hergeleitet werden können:
Einfaches Element
Leeres Element
Leeres Element mit Attributen
Element mit Attributen und einfachem Inhalt
Element mit einer Sequenz von direkt untergeordneten Elementen
Element mit einer Sequenz von direkt untergeordneten Elementen und Attributen
Element mit einer Sequenz von Auswahlmöglichkeiten direkt untergeordneter Elemente
Element mit einer Sequenz von Auswahlmöglichkeiten direkt untergeordneter Elemente und Attribute
Hinweis
Alle complexType
-Deklarationen werden als anonyme Typen hergeleitet. Das einzige globale hergeleitete Element ist das Stammelement. Alle anderen Elemente sind lokal.
Weitere Informationen zum Schemarückschlussprozess finden Sie unter Herleiten von Schemata aus XML-Dokumenten.
Element eines einfachen Typs
In der folgenden Tabelle wird die XML-Eingabe für die InferSchema-Methode und das generierte XML-Schema dargestellt. Das fett formatierte Element stellt das Schema dar, das für das Element eines einfachen Typs hergeleitet wird.
Weitere Informationen zum Schemarückschlussprozess finden Sie unter Herleiten von Schemata aus XML-Dokumenten.
XML | Schema |
---|---|
<?xml version="1.0"?> <root>text</root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root" type="xs:string" /> </xs:schema> |
Leeres Element
In der folgenden Tabelle wird die XML-Eingabe für die InferSchema-Methode und das generierte XML-Schema dargestellt. Das fett formatierte Element stellt das für das leere Element hergeleitete Schema dar.
Weitere Informationen zum Schemarückschlussprozess finden Sie unter Herleiten von Schemata aus XML-Dokumenten.
XML | Schema |
---|---|
<?xml version="1.0"?> <empty/> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="empty" /> </xs:schema> |
Leeres Element mit Attributen
In der folgenden Tabelle wird die XML-Eingabe für die InferSchema-Methode und das generierte XML-Schema dargestellt. Die fett formatierten Elemente stellen das für das leere Element mit Attributen hergeleitete Schema dar.
Weitere Informationen zum Schemarückschlussprozess finden Sie unter Herleiten von Schemata aus XML-Dokumenten.
XML | Schema |
---|---|
<?xml version="1.0"?> <empty attribute1="text"/> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="empty"> <xs:complexType> <xs:attribute name="attribute1" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:schema> |
Element mit Attributen und einfachem Inhalt
In der folgenden Tabelle wird die XML-Eingabe für die InferSchema-Methode und das generierte XML-Schema dargestellt. Die fett formatierten Elemente stellen das für ein Element mit Attributen und einfachem Inhalt hergeleitete Schema dar.
Weitere Informationen zum Schemarückschlussprozess finden Sie unter Herleiten von Schemata aus XML-Dokumenten.
XML | Schema |
---|---|
<?xml version="1.0"?> <root attribute1="text">value</root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="attribute1" type="xs:string" use="required" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:schema> |
Element mit einer Sequenz von direkt untergeordneten Elementen
In der folgenden Tabelle wird die XML-Eingabe für die InferSchema-Methode und das generierte XML-Schema dargestellt. Die fett formatierten Elemente stellen das für ein Element mit einer Sequenz von direkt untergeordneten Elementen hergeleitete Schema dar.
Hinweis
Ein Element wird auch wie eine Sequenz behandelt, wenn es nur über ein direkt untergeordnetes Element verfügt.
Weitere Informationen zum Schemarückschlussprozess finden Sie unter Herleiten von Schemata aus XML-Dokumenten.
XML | Schema |
---|---|
<?xml version="1.0"?> <root> <subElement/> </root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="subElement" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
Element mit einer Sequenz von direkt untergeordneten Elementen und Attributen
In der folgenden Tabelle wird die XML-Eingabe für die InferSchema-Methode und das generierte XML-Schema dargestellt. Die fett formatierten Elemente stellen das für ein Element mit einer Sequenz von direkt untergeordneten Elementen und Attributen hergeleitete Schema dar.
Hinweis
Ein Element wird auch wie eine Sequenz behandelt, wenn es nur über ein direkt untergeordnetes Element verfügt.
Weitere Informationen zum Schemarückschlussprozess finden Sie unter Herleiten von Schemata aus XML-Dokumenten.
XML | Schema |
---|---|
<?xml version="1.0"?> <root attribute1="text"> <subElement1/> <subElement2/> </root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="subElement1" /> <xs:element name="subElement2" /> </xs:sequence> <xs:attribute name="attribute1" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:schema> |
Element mit einer Sequenz und Auswahlmöglichkeiten von direkt untergeordneten Elementen
In der folgenden Tabelle wird die XML-Eingabe für die InferSchema-Methode und das generierte XML-Schema dargestellt. Die fett formatierten Elemente stellen das für ein Element mit einer Sequenz und Auswahlmöglichkeiten von direkt untergeordneten Elementen hergeleitete Schema dar.
Hinweis
Das maxOccurs
-Attribut des xs:choice
-Elements wird im hergeleiteten Schema auf "unbounded"
festgelegt.
Weitere Informationen zum Schemarückschlussprozess finden Sie unter Herleiten von Schemata aus XML-Dokumenten.
XML | Schema |
---|---|
<?xml version="1.0"?> <root> <subElement1/> <subElement2/> <subElement1/> </root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:choice maxOccurs="unbounded"> <xs:element name="subElement1" /> <xs:element name="subElement2" /> </xs:choice> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
Element mit einer Sequenz und Auswahlmöglichkeit von direkt untergeordneten Elementen und Attributen
In der folgenden Tabelle wird die XML-Eingabe für die InferSchema-Methode und das generierte XML-Schema dargestellt. Die fett formatierten Elemente stellen das für ein Element mit einer Sequenz und Auswahlmöglichkeit von direkt untergeordneten Elementen und Attributen hergeleitete Schema dar.
Hinweis
Das maxOccurs
-Attribut des xs:choice
-Elements wird im hergeleiteten Schema auf "unbounded"
festgelegt.
Weitere Informationen zum Schemarückschlussprozess finden Sie unter Herleiten von Schemata aus XML-Dokumenten.
XML | Schema |
---|---|
<?xml version="1.0"?> <root attribute1="text"> <subElement1/> <subElement2/> <subElement1/> </root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:choice maxOccurs="unbounded"> <xs:element name="subElement1" /> <xs:element name="subElement2" /> </xs:choice> </xs:sequence> <xs:attribute name="attribute1" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:schema> |
Verarbeitung von Attributen
Sobald eine neues Attribut in einem Knoten auftritt, wird es der hergeleiteten Definition des Knotens mit use="required"
hinzugefügt. Wenn derselbe Knoten das nächste Mal in der Instanz gefunden wird, werden die Attribute der aktuellen Instanz mit den bereits hergeleiteten im Rückschlussprozess verglichen. Wenn einige der bereits hergeleiteten Attribute in der Instanz nicht vorhanden sind, wird der Attributdefinition use="optional"
hinzugefügt. Neue Attribute werden vorhandenen Deklarationen mit use="optional"
hinzugefügt.
Beschränkungen hinsichtlich des Vorkommens
Während des Schemarückschlussprozesses wird das minOccurs
-Attribut und das maxOccurs
-Attribut mit den Werten "0"
oder "1"
und "1"
oder "unbounded"
für hergeleitete Komponenten eines Schemas generiert. Die Werte "1"
und "unbounded"
werden nur verwendet, wenn die Werte "0"
und "1"
keine Validierung für das XML-Dokument durchführen können (wenn MinOccurs="0"
ein Element beispielsweise nicht genau beschreibt, wird minOccurs="1"
verwendet).
Gemischter Inhalt
Wenn ein Element gemischte Inhalte (z. B. Text mit eingefügten Elementen) enthält, wird das mixed="true"
-Attribut für die hergeleitete komplexe Typdefinition generiert.
Rückschlussregeln für andere Knotentypen
In der folgenden Tabelle sind Rückschlussregeln für Verarbeitungsanweisungs-, Kommentar-, Entitätsverweis-, CDATA-, Dokumenttypen- und Namespaceknoten dargestellt.
Knotentyp | Übersetzung |
---|---|
Verarbeitungsanweisung | Ignoriert. |
Kommentar | Ignoriert. |
Entitätsverweis | Die XmlSchemaInference-Klasse behandelt keine Entitätsverweise. Wenn ein XML-Dokument Entitätsverweise enthält, müssen Sie einen Reader verwenden, der die Entitäten erweitert. Sie können beispielsweise eine XmlTextReader-Klasse mit der EntityHandling-Eigenschaft übergeben, die auf den ExpandEntities-Member als Parameter festgelegt ist. Wenn Entitätsverweise auftreten und der Reader Entitäten nicht erweitert, wird eine Ausnahme ausgelöst. |
CDATA | Alle <![CDATA[ … ]] -Abschnitte in einem XML-Dokument werden als xs:string hergeleitet. |
Dokumenttyp | Ignoriert. |
Namespaces | Ignoriert. |
Weitere Informationen zum Schemarückschlussprozess finden Sie unter Herleiten von Schemata aus XML-Dokumenten.