Freigeben über


Regeln zum Herleiten einfacher Typen

Beschreibt das Herleiten der Datentypen für Attribute und Elemente mit der XmlSchemaInference-Klasse.

Die XmlSchemaInference-Klasse leitet den Datentyp für Attribute und Elemente als einfache Typen her. In diesem Abschnitt werden die möglichen hergeleiteten Typen, das Zusammenführen mehrerer unterschiedlicher Werte zu einem einzelnen Typ und die Behandlung von schemadefinierten xsi-Attributen beschrieben.

Hergeleitete Typen

Die XmlSchemaInference-Klasse leitet Elemente und Attribute als einfache Typen her und fügt im resultierenden Schema einen Attributtyp ein. Bei allen hergeleiteten Typen handelt es sich um einfache Typen. Basistypen oder Facets sind keine Bestandteile des resultierenden Schemas.

Die Werte werden einzeln, in der Reihenfolge ihres Vorhandenseins im XML-Dokument überprüft. Der Typ für einen Wert wird zum Zeitpunkt der Überprüfung des Werts hergeleitet. Wenn ein Typ für ein Attribut oder ein Element hergeleitet wurde und für das Attribut oder das Element ein Wert festgestellt wird, der nicht mit dem aktuell hergeleiteten Typ übereinstimmt, stuft die XmlSchemaInference-Klasse den Typ für jede Regelgruppe hoch. Diese Regeln werden weiter unten im Abschnitt "Heraufstufen von Typen" erläutert.

In der folgenden Tabelle werden die für das resultierende Schema möglichen hergeleiteten Typen aufgeführt.

Einfacher Typ Beschreibung
boolean True, false, 0, 1.
byte Ganze Zahlen im Bereich von -128 bis 127.
unsignedByte Ganze Zahlen im Bereich von 0 bis 255.
short Ganze Zahlen im Bereich von -32768 bis 32767.
unsignedShort Ganze Zahlen im Bereich von 0 bis 65535.
int Ganze Zahlen im Bereich von -2147483648 bis 2147483647.
unsignedInt Ganze Zahlen im Bereich von 0 bis 4294967295.
long Ganze Zahlen im Bereich von -9223372036854775808 bis 9223372036854775807.
unsignedLong Ganze Zahlen im Bereich von 0 bis 18446744073709551615.
Ganze Zahl Eine endliche Anzahl von Ziffern, möglichst mit dem Präfix "-".
decimal Numerische Werte mit einer Genauigkeit von 0 bis 28 Stellen.
float Dezimalzahlen, nach denen optional "E" oder "e" folgt, gefolgt von einem Ganzzahlenwert als Exponent. Dezimalwerte können im Bereich von -16777216 bis 16777216 liegen. Exponentenwerte können im Bereich von -149 bis 104 liegen.

Float ermöglicht spezielle Werte, mit denen unendliche und nicht numerische Werte dargestellt werden. Besondere Werte für Float sind 0, -0, INF, -INF, NaN.
double Die gleichen Werte wie bei float, allerdings können die Dezimalwerte im Bereich von -9007199254740992 bis 9007199254740992 und die Exponentenwerte zwischen –1075 und 970 liegen.

Double ermöglicht spezielle Werte, mit denen unendliche und nicht numerische Werte dargestellt werden. Besondere Werte für Float sind 0, -0, INF, -INF, NaN.
duration Das W3C-Format für duration.
dateTime Das W3C-Format für dateTime.
Uhrzeit Das W3C-Format für time.
date Die Werte für Jahreszahlen sind auf einen Bereich von 0001 bis 9999 beschränkt.
gYearMonth Das gregorianische Monats- und Zeitformat von W3C.
string Ein oder mehrere Unicode-Zeichen.

Typerweiterung

Die XmlSchemaInference-Klasse überprüft Attribut- und Elementwerte der Reihenfolge nach. Wenn Werte festgestellt werden, wird der am weitesten eingeschränkte Typ ohne Vorzeichen hergeleitet. Wenn für ein Attribut oder ein Element ein Typ hergeleitet wurde und einer neuer Wert festgestellt wird, der nicht mit dem aktuell hergeleiteten Typ übereinstimmt, wird der hergeleitete Typ auf einen neuen Typ heraufgestuft. Dieser Typ entspricht sowohl dem aktuell hergeleiteten Typ als auch dem neuen Wert. Die XmlSchemaInference-Klasse berücksichtigt beim Heraufstufen hergeleiteter Typen vorherige Werte.

Betrachten Sie beispielsweise die folgenden XML-Ausschnitte aus zwei XML-Dokumenten:

<MyElement1 attr1="12" />

<MyElement1 attr1="52344" />

Wenn der erste attr1-Wert festgestellt wird, wird der Typ von attr1 auf der Grundlage des Werts unsignedByte als 12 hergeleitet. Wenn der zweite attr1-Wert festgestellt wird, wird der Typ auf der Grundlage des aktuell hergeleiteten Typs unsignedShort und des aktuellen Werts unsignedByte auf 52344 heraufgestuft.

Betrachten Sie nun die folgenden XML-Daten aus zwei XML-Dokumenten:

<MyElement2 attr2="0" />

<MyElement2 attr2="true" />

Wenn der erste attr2-Wert festgestellt wird, wird der Typ von attr2 auf der Grundlage des Werts unsignedByte als 0 hergeleitet. Wenn der zweite attr2-Wert festgestellt wird, wird der Typ auf der Grundlage des aktuell hergeleiteten Typs string und des aktuellen Werts unsignedByte auf true heraufgestuft, da die XmlSchemaInference-Klasse beim Heraufstufen des hergeleiteten Typs vorherige Werte berücksichtigt. Wenn jedoch beide Instanzen von attr2 im selben XML-Dokument und nicht, wie im Beispiel oben dargestellt, in zwei unterschiedlichen Dokumenten festgestellt worden wären, wäre attr2 als boolean hergeleitet worden.

Vom https://www.w3.org/2001/XMLSchema-instance-Namespace ignorierte Attribute

Bei den folgenden Attributen handelt es sich um schemadefinierte Attribute, die während der Schemaherleitung ignoriert werden.

Attribut Beschreibung
xsi:type Wenn ein Element mit der Angabe xsi:type festgestellt wird, wird xsi:type ignoriert.
xsi:nil Wenn ein Element mit einem xsi:nil-Attribut festgestellt wird, weist dessen Elementdeklaration im hergeleiteten Schema den Wert nillable="true" auf. Ein Element, dessen xsi:nil-Attribut auf true festgelegt wurde, darf keine untergeordneten Elemente besitzen.
xsi:schemaLocation Wenn xsi:schemaLocation festgestellt wird, wird dies ignoriert.
xsi:noNamespaceSchemaLocation Wenn xsi:noNamespaceSchemaLocation festgestellt wird, wird dies ignoriert.

Siehe auch