Freigeben über


Regeln für das Ableiten von Schemaknotentypen und -struktur

In diesem Thema wird beschrieben, wie der Schemainferenzprozess die Knotentypen in einem XML-Dokument in eine XSD-Struktur (XML Schema Definition Language) übersetzt.

Elementinferenceregeln

In diesem Abschnitt werden die Ableitungsregeln für Elementdeklarationen beschrieben. Es gibt acht Strukturen von Elementdeklarationen, die abgeleitet werden:

  1. Element des einfachen Typs

  2. Leeres Element

  3. Leeres Element mit Attributen

  4. Element mit Attributen und einfachem Inhalt

  5. Element mit einer Sequenz von direkt untergeordneten Elementen

  6. Element mit einer Sequenz von direkt untergeordneten Elementen und Attributen

  7. Element mit einer Sequenz von Auswahlmöglichkeiten direkt untergeordneter Elemente

  8. Element mit einer Sequenz von Auswahlmöglichkeiten direkt untergeordneter Elemente und Attribute

Hinweis

Alle complexType Deklarationen werden als anonyme Typen abgeleitet. Das einzige globale Element, das abgeleitet wurde, ist das Stammelement; alle anderen Elemente sind lokal.

Weitere Informationen zum Schemainferenzprozess finden Sie unter Inferring schemas from XML Documents.

Element eines einfachen Typs

In der folgenden Tabelle sind die XML-Eingaben für die InferSchema Methode und das generierte XML-Schema aufgeführt. Das fett formatierte Element zeigt das Schema, das für das einfache Typelelement abgeleitet wurde.

Weitere Informationen zum Schemainferenzprozess finden Sie unter Inferring schemas from XML Documents.

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 sind die XML-Eingaben für die InferSchema Methode und das generierte XML-Schema aufgeführt. Das fett formatierte Element zeigt das Schema, das für das leere Element abgeleitet wurde.

Weitere Informationen zum Schemainferenzprozess finden Sie unter Inferring schemas from XML Documents.

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 sind die XML-Eingaben für die InferSchema Methode und das generierte XML-Schema aufgeführt. Die fett formatierten Elemente zeigen das Schema an, das für das leere Element mit Attributen abgeleitet wurde.

Weitere Informationen zum Schemainferenzprozess finden Sie unter Inferring schemas from XML Documents.

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 sind die XML-Eingaben für die InferSchema Methode und das generierte XML-Schema aufgeführt. Die fett formatierten Elemente zeigen das Schema, das für ein Element mit Attributen und einfachen Inhalten abgeleitet wurde.

Weitere Informationen zum Schemainferenzprozess finden Sie unter Inferring schemas from XML Documents.

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 sind die XML-Eingaben für die InferSchema Methode und das generierte XML-Schema aufgeführt. Die fett formatierten Elemente stellen das für ein Element mit einer Sequenz von direkt untergeordneten Elementen hergeleitete Schema dar.

Hinweis

Selbst wenn ein Element nur ein untergeordnetes Element aufweist, wird es weiterhin als Sequenz behandelt.

Weitere Informationen zum Schemainferenzprozess finden Sie unter Inferring schemas from XML Documents.

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 sind die XML-Eingaben für die InferSchema Methode und das generierte XML-Schema aufgeführt. Die fett formatierten Elemente zeigen das Schema, das für ein Element mit einer Abfolge von untergeordneten Elementen und Attributen abgeleitet wurde.

Hinweis

Selbst wenn ein Element nur ein untergeordnetes Element aufweist, wird es weiterhin als Sequenz behandelt.

Weitere Informationen zum Schemainferenzprozess finden Sie unter Inferring schemas from XML Documents.

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 sind die XML-Eingaben für die InferSchema Methode und das generierte XML-Schema aufgeführt. 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 Attribut maxOccurs des Elements xs:choice wird auf "unbounded" im abgeleiteten Schema festgelegt.

Weitere Informationen zum Schemainferenzprozess finden Sie unter Inferring schemas from XML Documents.

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 sind die XML-Eingaben für die InferSchema Methode und das generierte XML-Schema aufgeführt. 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 Attribut maxOccurs des Elements xs:choice wird auf "unbounded" im abgeleiteten Schema festgelegt.

Weitere Informationen zum Schemainferenzprozess finden Sie unter Inferring schemas from XML Documents.

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>

Attributverarbeitung

Wenn innerhalb eines Knotens ein neues Attribut gefunden wird, wird es der abgeleiteten Definition des Knotens mit use="required"hinzugefügt. Wenn derselbe Knoten das nächste Mal in der Instanz gefunden wird, vergleicht der Ableitungsprozess Attribute der aktuellen Instanz mit den bereits abgeleiteten. Wenn in der Instanz einige der bereits abgeleiteten fehlen, use="optional" wird der Attributdefinition hinzugefügt. Neue Attribute werden vorhandenen Deklarationen mit use="optional"hinzugefügt.

Vorkommenseinschränkungen

Während des Schemaabschlussprozesses werden die Attribute `minOccurs` und `maxOccurs` für abgeleitete Komponenten eines Schemas generiert, mit den Werten `"0"` oder `"1"` und `"1"` oder `"unbounded"`. Die Werte "1" und "unbounded" werden nur verwendet, wenn die Werte "0" und "1" das XML-Dokument nicht validieren können (z. B. wenn MinOccurs="0" ein Element nicht genau beschreibt, wird minOccurs="1" verwendet).

Gemischter Inhalt

Wenn ein Element gemischten Inhalt enthält (z. B. Text, der mit Elementen interspersiert ist), wird das mixed="true" Attribut für die abgeleitete komplexe Typdefinition generiert.

Andere Knotentyp-Ableitungsregeln

In der folgenden Tabelle werden die Ableitungsregeln für die Verarbeitung von Anweisungen, Kommentaren, Entitätsreferenzen, CDATA, Dokumenttyp und Namespaceknoten beschrieben.

Knotentyp Sprachübersetzung
Verarbeitungsanweisung Ignoriert.
Kommentar Ignoriert.
Entitätsreferenz 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ätsreferenzen gefunden werden und der Leser keine Entitäten erweitert, wird eine Ausnahme ausgelöst.
CDATA Alle <![CDATA[ … ]] Abschnitte in einem XML-Dokument werden als xs:string interpretiert.
Dokumenttyp Ignoriert.
Namensräume Ignoriert.

Weitere Informationen zum Schemainferenzprozess finden Sie unter Inferring schemas from XML Documents.

Siehe auch