Richtlinien und Einschränkungen für die Verwendung von XML-Schemaauflistungen auf dem Server

Aktualisiert: 14. April 2006

Die XML XSD-Überprüfung (Schema Definition Language) weist einige Einschränkungen für SQL-Spalten auf, die den SQL Server 2005 xml-Datentyp verwenden. Dieses Thema enthält Einzelheiten zu diesen Einschränkungen und stellt außerdem Richtlinien zum Ändern des XSD-Schemas für die Verwendung mit SQL Server bereit. Die Einschränkungen sind in der folgenden Tabelle aufgeführt. In den Abschnitten, die auf die Tabelle folgen, werden die Einschränkungen ausführlicher beschrieben und Richtlinien für den Umgang mit ihnen vorgestellt.

Element Einschränkung

anyType

XQuery-Spezifikationen empfehlen die lax-Überprüfung für Elemente des anyType-Datentyps. Da SQL Server die lax-Überprüfung nicht unterstützt, wird die strict-Überprüfung für Elemente des anyType-Datentyps verwendet.

minOccurs und maxOccurs

SQL Server beschränkt die Größe der Werte für diese Attribute.

sqltypes:datetime und sqltypes:smalldatetime

SQL Server nimmt keine sqltypes:datetime- oder sql:smalldatetime-Werte an.

<xsd:include>, <xsd:key>, <xsd:keyref>, <xsd:redefine> und <xsd:unique>

SQL Server unterstützt diese Elemente nicht.

<xsd:choice>

SQL Server weist Schemas zurück, die einen <xsd:choice>-Partikel ohne untergeordnete Elemente besitzen, es sei denn, der Partikel ist mit einem minOccurs-Attributwert von Null definiert.

<xsd:simpleType>-Werte

SQL Server unterstützt nur Millisekundengenauigkeit für simple-Datentypen, die Sekundenkomponenten besitzen, und beschränkt alle erkannten Enumerationen des XSD-Datentyps simple.

SQL Server unterstützt nicht den "NaN"-Wert in <xsd:simpleType>-Deklarationen.

xsi:schemaLocation und xsi:noNamespaceSchemaLocation

In SQL Server werden diese Attribute ignoriert, wenn sie in den XML-Instanzdaten vorhanden sind, die in eine Spalte oder Variable des xml-Datentyps eingefügt werden.

xs:QName

SQL Server unterstützt keine von xs:QName abgeleiteten Typen, die ein Beschränkungselement des XML-Schemas verwenden.

SQL Server unterstützt keine union-Typen, die xs:QName als Mitgliedselement besitzen.

Hinzufügen von Elementen zu einer vorhandenen Ersetzungsgruppe

SQL Server unterstützt das Hinzufügen von Elementen zu einer vorhandenen Ersetzungsgruppe in einer XML-Schemaauflistung nicht.

Kanonische Formen

Die kanonische Darstellung eines Wertes darf die Musterbeschränkung für seinen Typ nicht verletzen.

Enumerationsaspekte

SQL Server unterstützt keine XML-Schemas mit Typen, die Musteraspekte besitzen, oder Enumerationen, die diese Aspekte verletzen.

Aspektlänge

SQL Server schränkt den Bereich der zulässigen Werte für die Aspektlänge ein.

ID-Attribut

XML-Schemakomponenten können ein ID-Attribut besitzen, SQL Server speichert diese Werte jedoch nicht.

ID-Datentyp

SQL Server unterstützt keine Elemente vom Typ xs:ID oder xs:IDREF.

Lax-Überprüfung

SQL Server unterstützt keine lax-Überprüfung für Schemas, die auf SQL Server geuploadet werden.

List-Datentypen und union-Datentypen

SQL Server unterstützt keine list-Datentypen, die union-Datentypen als list-Elemente verwenden.

Lokaler Namespace

SQL Server weist Schemas zurück, die eine leere Zeichenfolge ("") als Wert für das namespace-Attribut verwenden.

Mixed-Datentyp und simple-Inhalt

SQL Server unterstützt das Beschränken eines mixed-Datentyps auf simple-Inhalt nicht.

NOTATION-Datentyp

SQL Server unterstützt den NOTATION-Datentyp nicht.

Bedingungen des Typs Nicht genügend Arbeitsspeicher

Wenn Sie mit großen XML-Schemaauflistungen arbeiten, kann eine Bedingung des Typs Nicht genügend Arbeitsspeicher auftreten. Lösungen stehen bereit.

Wiederholte Werte

SQL Server weist Schemas zurück, in denen das block- oder final-Attribut wiederholte Werte aufweist.

Schemakomponentenbezeichner

SQL Server beschränkt Bezeichner von Schemakomponenten auf eine maximale Länge von 1.000 Unicode-Zeichen. Außerdem werden keine Ersatzzeichenpaare mit Bezeichnern unterstützt.

Zeitzoneninformationen

Zeitzoneninformationen werden immer in UTC-Zeit (Universal Time Coordinate oder Greenwich Mean Time) normalisiert.

Union-Datentypen

SQL Server unterstützt keine Einschränkungen aus union-Datentypen.

Variable Genauigkeitsdezimalwerte

SQL Server unterstützt keine variablen Genauigkeitsdezimalwerte.

xsi:schemaLocation und xsi:noNamespaceSchemaLocation

SQL Server ignoriert die folgenden Attribute, wenn sie in den XML-Instanzdaten vorhanden sind, die in eine Spalte oder Variable des xml-Datentyps eingefügt werden.

  • xsi:schemaLocation
  • xsi:noNamespaceSchemaLocation

&lt;xsd:include&gt;

Das W3C XSD include-Element (World-Wide Web Consortium) stellt Unterstützung für Schemamodularität zur Verfügung, indem ein XML-Schema in mehrere physikalische Dateien partitioniert werden kann. Zurzeit unterstützt SQL Server dieses Element nicht. XML-Schemas, die dieses Element enthalten, werden vom Server zurückgewiesen.

Als Lösung können XML-Schemas, die die <xsd:include>-Direktive enthalten, so vorverarbeitet werden, dass die Inhalte aller enthaltenen Schemas kopiert und in einem einzigen Schema für den Upload auf den Server zusammengeführt werden. Weitere Informationen finden Sie unter Präprozessortool für XML-Schemas.

&lt;xsd:unique&gt;, &lt;xsd:key&gt; und &lt;xsd:keyref&gt;

Zurzeit unterstützt SQL Server die folgenden XSD-basierten Einschränkungen zum Erzwingen der Eindeutigkeit oder zum Einrichten von Schlüsseln oder Schlüsselverweisen nicht:

  • <xsd:unique>
  • <xsd:key>
  • <xsd:keyref>

XML-Schemas, die diese Elemente enthalten, können nicht registriert werden.

Kanonische Formen und Musterbeschränkungen

Der XSD-Musteraspekt ermöglicht das Beschränken des lexikalischen Speicherplatzes für simple-Datentypen. Wenn einem Datentyp eine Musterbeschränkung auferlegt wird, für den mehrere mögliche lexikalische Darstellungen vorhanden sind, können einige Werte bei der Überprüfung unerwartetes Verhalten bewirken. Dieses Verhalten tritt auf, weil die lexikalischen Darstellungen dieser Werte nicht in der Datenbank gespeichert werden. Daher werden die Werte in ihre kanonischen Darstellungen konvertiert, wenn sie als Ausgabe serialisiert werden. Wenn ein Dokument einen Wert enthält, dessen kanonische Form nicht der Musterbeschränkung für seinen Datentyp genügt, wird das Dokument zurückgewiesen, wenn ein Benutzer versucht, diesen Wert erneut einzufügen.

Um dies zu verhindern, weist SQL Server 2005 alle XML-Dokumente, die Werte enthalten, die nicht erneut eingefügt werden können, aufgrund einer Verletzung der Musterbeschränkung durch ihre kanonischen Formen zurück. Die Überprüfung des Wertes "33.000" mit einem von xs:decimal abgeleiteten Datentyp mit einer Musterbeschränkung von "33\.0+" schlägt z. B. fehl. Zwar genügt "33.000" diesem Muster, die kanonische Form "33" jedoch nicht.

Aus diesem Grund sollten Sie Sorgfalt walten lassen, wenn Sie Musteraspekte auf Datentypen anwenden, die aus den folgenden primitiven Datentypen abgeleitet sind: boolean, decimal, float, double, dateTime, time, date, hexBinary und base64Binary. SQL Server gibt eine Warnung aus, wenn Sie eine dieser Komponenten einer Schemaauflistung hinzufügen.

Die unpräzise Serialisierung von Gleitkommawerten weist ein ähnliches Problem auf. Aufgrund des von SQL Server 2005 verwendeten Gleitkommaserialisierungsalgorithmus ist es möglich, dass ähnliche Werte die gleiche kanonische Form gemeinsam verwenden. Wenn ein Gleitkommawert serialisiert und dann erneut eingefügt wird, kann sich sein Wert geringfügig ändern. In seltenen Fällen kann dieser Vorgang zu einem Wert führen, der einen der folgenden Aspekte für seinen Datentyp beim erneuten Einfügen verletzt: enumeration, minInclusive, minExclusive, maxInclusive oder maxExclusive. Damit dies verhindert wird, weist SQL Server 2005 alle Werte von Datentypen zurück, die von xs:float oder xs:double abgeleitet sind und nicht serialisiert und erneut eingefügt werden können.

Platzhalterzeichen und Inhaltsüberprüfung

Platzhalterzeichen werden verwendet, um die Flexibilität der zulässigen Inhalte in einem Inhaltsmodell zu erhöhen. Diese Zeichen werden in der XSD-Sprache auf folgende Weise unterstützt:

  • Elementplatzhalterzeichen. Diese werden durch das <xsd:any>-Element dargestellt.
  • Attributplatzhalterzeichen. Diese werden durch das <xsd:anyAttribute>-Element dargestellt.

Beide Platzhalterzeichenelemente (<xsd:any> und <xsd:anyAttribute>) unterstützen die Verwendung eines processContents-Attributs. Auf diese Weise können Sie einen Wert angeben, der angibt, wie XML-Anwendungen die Überprüfung des Dokumentinhalts durchführen, der diesen Platzhalterzeichenelementen zugeordnet ist. Die folgenden Werte und Auswirkungen werden bereitgestellt:

  • Der strict-Wert gibt an, dass der Inhalt vollständig überprüft wird.
  • Der skip-Wert gibt an, dass der Inhalt nicht überprüft wird.
  • Der lax-Wert gibt an, dass nur Elemente und Attribute überprüft werden, für die Schemadefinitionen verfügbar sind.

Lax-Überprüfung

Für Schemas, die auf SQL Server geuploadet werden, wird die lax-Überprüfung nicht unterstützt. Wenn das processContents-Attribut durch Platzhalterzeichenelemente angegeben wird, muss dieses daher auf skip oder strict festgelegt werden. Wenn processContents="lax" angegeben wird, weist der Server das Schema zurück.

Aufgrund dieses Verhaltens werden alle Elemente, die als xsd:anyType typisiert sind, mit strict-Verarbeitung überprüft. Als Ergebnis müssen ihre untergeordneten Elemente und Attribute in der Schemaauflistung definiert sein, mit der das Instanzdokument überprüft wird.

anyType-Elemente

Die XQuery-Spezifikationen empfehlen lax-Überprüfung für Elemente des anyType-Datentyps. Da SQL Server die lax-Überprüfung nicht unterstützt, wird die strict-Überprüfung für Elemente des anyType-Datentyps verwendet.

Das folgende Beispiel zeigt die strict-Überprüfung und erstellt eine XML-Schemaauflistung. Eines der Schemaelemente weist den anyType-Datentyp auf. Anschließend werden typisierte xml-Variablen erstellt; das Beispiel zeigt außerdem die strict-Überprüfung des Elements von Typ anyType.

CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://ns">
   <element name="e" type="anyType"/>
   <element name="a" type="byte"/>
   <element name="b" type="string"/>
 </schema>'
GO

Das folgende Beispiel ist erfolgreich, weil die strict-Überprüfung von <e> erfolgreich ist:

DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><b>data</b></e>'
GO

Das folgende Beispiel schlägt fehl. Die Instanz wird zurückgewiesen, weil die strict-Überprüfung des Elements <e> die Definition von Element <c> nicht im Schema findet:

DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><c>Wrong</c><b>data</b></e>'
GO

Auch die XML-Instanz im folgenden Beispiel wird zurückgewiesen, weil keine Deklaration für Element <c> im Namespace http://whatever vorhanden ist. Der Namespace ist also nicht vorhanden.

DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><c xmlns="http://whatever">Wrong</c><b>data</b></e>'
SELECT @var
GO

&lt;xsd:redefine&gt;

Das W3C XSD redefine-Element stellt Unterstützung zum Neudefinieren von Schemakomponenten zur Verfügung. Die Unterstützung dieser Direktive kann jedoch die Leistung beeinträchtigen und erfordert außerdem, dass in SQL Server alle Instanzen des xml-Datentyps erneut überprüft werden, die mit dem neu definierten Schema verknüpft sind. Deshalb unterstützt SQL Server dieses Element nicht. XML-Schemas, die das <xsd:redefine>-Element enthalten, werden vom Server zurückgewiesen.

Gehen Sie zum Aktualisieren des Schemas oder seiner Komponenten stattdessen folgendermaßen vor.

  1. Heben Sie die Typisierung aller Spalten des xml-Datentyps (XML DT) auf, die die Schemaauflistung verwenden.
  2. Löschen Sie die vorhandene XML-Schemaauflistung für den betroffenen Namespace.
  3. Erstellen Sie eine neue XML-Schemaauflistung für den Namespace mit den geänderten Schemakomponenten.
  4. Typisieren Sie alle Spalten als XML DT mithilfe der neuen Auflistung neu, deren Typisierung in Schritt 1 aufgehoben wurde.

xs:QName

SQL Server unterstützt keine von xs:QName abgeleiteten Typen, die ein Beschränkungselement des XML-Schemas verwenden.

Aktuell unterstützt SQL Server keine union-Typen, die QName als Mitgliedstyp besitzen. Die folgende CREATE XML SCHEMA COLLECTION-Anweisungen kann das XML-Schema nicht laden, weil sie den xs:QName-Typ als Mitgliedstyp von union festlegen:

CREATE XML SCHEMA COLLECTION QNameLimitation1 AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="myUnion">
        <xs:union memberTypes="xs:int xs:QName"/>
    </xs:simpleType>
</xs:schema>'
GO

CREATE XML SCHEMA COLLECTION QNameLimitation2 AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="myUnion">
        <xs:union memberTypes="xs:integer">
   <xs:simpleType>
    <xs:list itemType="xs:QName"/>
   </xs:simpleType>
  </xs:union>
    </xs:simpleType>
</xs:schema>'
GO

Beide Anweisungen führen zu einem Fehler.

union-Datentypen als list-Elemente

SQL Server unterstützt zurzeit keine Schemas, die list-Datentypen mit union-Datentypelementen enthalten. Das folgende Beispielschema zeigt einen Versuch, die Verwendung eines union-Datentyps mit einem list-Elementdatentyp zu unterstützen:

CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
   <simpleType name="unionType">
      <union memberTypes="string byte"/>
   </simpleType>
   <simpleType name="listType">
      <list itemType="ns:unionType"/>
   </simpleType>
</schema>'
GO

Das Schema wird vom Server mit folgendem Fehler zurückgewiesen:

"Ungültiger Elementtyp für den 'http://ns:listType'-Listentyp. Der Elementtyp einer Liste darf nicht selbst eine Liste sein, und Vereinigungstypen und von 'ID' abgeleitete Typen dürfen in dieser Version nicht als Elementtypen verwendet werden."

Werte für &lt;xsd:simpleType&gt;

SQL Server unterstützt nur Millisekundengenauigkeit für simple-Datentypen, die Sekundenkomponenten besitzen. Außerdem werden XML-Instanzen mit dateTime-Werten, die keine Zeitzonen enthalten, vom Server zurückgewiesen. Die folgende Tabelle führt die Beschränkungen auf, basierend auf allen erkannten XSD-Enumerationen des simple-Datentyps, die angewendet werden.

SQL Server unterstützt darüber hinaus nicht den "NaN"-Wert in <xsd:simpleType>-Deklarationen. Schemas, die "NaN"-Werte enthalten, werden vom Server zurückgewiesen.

simple-Datentyp Einschränkung

duration

Die Jahresangabe muss im Bereich zwischen -2^31 und 2^31-1 liegen. Monat, Tag, Stunde, Minute und Sekunde müssen im Bereich zwischen 0 und 9999 liegen. Die Sekundenangabe weist eine zusätzliche dreistellige Genauigkeit rechts neben dem Dezimaltrennzeichen auf.

dateTime

Die Stundenangabe im Zeitzonen-Unterfeld muss innerhalb des gültigen Bereichs von -14 bis +14 liegen. Die Jahresangabe muss im Bereich zwischen -9999 und 9999 liegen. Die Monatsangabe muss im Bereich zwischen 1 und 12 liegen. Die Tagesangabe muss im Bereich zwischen 1 und 31 liegen und muss außerdem ein gültiges Kalenderdatum sein. SQL Server erkennt z. B. ein ungültiges Datum (wie etwa 1974-02-31) und gibt einen Fehler zurück. Der Monat Februar hat nicht 31 Tage.

date

Die Jahresangabe muss im Bereich zwischen -9999 und 9999 liegen. Die Monatsangabe muss im Bereich zwischen 1 und 12 liegen. Die Tagesangabe muss im Bereich zwischen 1 und 31 liegen und muss außerdem ein gültiges Kalenderdatum sein. SQL Server erkennt z. B. ein ungültiges Datum (wie etwa 1974-02-31) und gibt einen Fehler zurück. Der Monat Februar hat nicht 31 Tage.

gYearMonth

Die Jahresangabe muss im Bereich zwischen -9999 und 9999 liegen.

gYear

Die Jahresangabe muss im Bereich zwischen -9999 und 9999 liegen.

gMonthDay

Die Monatsangabe muss im Bereich zwischen 1 und 12 liegen. Die Tagesangabe muss im Bereich zwischen 1 und 31 liegen.

gDay

Die Tagesangabe muss im Bereich zwischen 1 und 31 liegen.

gMonth

Die Monatsangabe muss im Bereich zwischen 1 und 12 liegen.

decimal

Werte dieses Typs müssen dem Format des numeric-Datentyps von SQL entsprechen. Dieses Format stellt intern die Unterstützung für Zahlen dar, die insgesamt bis zu 38-stellig sein können, wobei 10 dieser Dezimalstellen für fraktionale Genauigkeit reserviert sind.

float

Werte dieses Typs müssen dem Format des real-Datentyps von SQL entsprechen.

double

Werte dieses Typs müssen dem Format des float-Datentyps von SQL entsprechen.

string

Werte dieses Typs müssen dem Format des nvarchar(max)-Datentyps von SQL entsprechen.

anyURI

Werte dieses Typs dürfen nicht länger als 4.000 Unicode-Zeichen sein.

Variable Genauigkeitsdezimalwerte

Der xs:decimal-Datentyp stellt Dezimalzahlen mit variabler Genauigkeit dar. Für minimal konforme XML-Prozessoren müssen Dezimalzahlen mit mindestens totalDigits=18 unterstützt werden. In SQL Server werden totalDigits=38, unterstützt, die fraktionalen Ziffern sind jedoch auf 10 beschränkt. In SQL Server werden keine variablen Genauigkeitsdezimalwerte unterstützt. Alle xs:decimal-instanziierten Werte werden intern durch den Server mithilfe des SQL-Datentyps numeric (38, 10) dargestellt.

Zeitzoneninformationen

Für die simple-Typen date, time und dateTime werden die Zeitzoneninformationen immer in UTC-Zeit (Universal Time Coordinate, die auch als Greenwich Mean Time bezeichnet wird) normalisiert.

Das folgende Schema deklariert z. B. ein Element des dateTime-Datentyps namens <e>:

CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
   <element name="e" type="dateTime"/>
</schema>'
GO

Für Elemente des dateTime-Datentyps konvertiert der Server die bereitgestellte Zeit mithilfe des Offsetwertes ("-05:00") in GMT und gibt die entsprechende GMT-Zeit zurück.

DECLARE @var XML(MySampleCollection)
SET @var = '<e xmlns="http://ns">1999-05-31T13:20:00-05:00</e>'
SELECT @var
-- time zone is specified. Value is converted to Zulu before being stored
-- will come back as <e xmlns="http://ns">1999-05-31T18:20:00Z</e>
GO

Aspektlänge

Die Aspekte length, minLength und maxLength werden als long-Datentyp gespeichert. Dieser Datentyp ist ein 32-Bit-Typ. Der Bereich der zulässigen Werte ist daher 2^31.

minOccurs und maxOccurs

Die Werte für minOccurs- und maxOccurs-Attribute müssen in ganze 4-Byte-Zahlen passen. Schemas, die diese Bedingung nicht erfüllen, werden vom Server zurückgewiesen.

Schemakomponentenbezeichner

SQL Server beschränkt Bezeichner von Schemakomponenten auf eine maximale Länge von 1.000 Unicode-Zeichen und weist Schemas zurück, die Bezeichner enthalten, die die maximale Länge überschreiten. Außerdem werden keine Ersatzzeichenpaare mit Bezeichnern unterstützt.

Enumerationsaspekte

SQL Server weist XML-Schemas mit Typen zurück, die Musteraspekte besitzen, oder Enumerationen, die diese Aspekte verletzen. Das folgende Schema würde z. B. zurückgewiesen, weil der enthaltene Enumerationswert einen Wert mit einer Mischung aus Groß- und Kleinschreibung umfasst. Ein weiterer Grund für die Zurückweisung besteht darin, dass dieser Wert den Musterwert verletzt, der Werte ausschließlich auf Kleinbuchstaben beschränkt.

CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
    <simpleType name="MyST">
       <restriction base="string">
          <pattern value="[a-z]*"/>
       </restriction>
    </simpleType>

    <simpleType name="MyST2">
       <restriction base="ns:MyST">
           <enumeration value="mYstring"/>
       </restriction>
    </simpleType>
</schema>'
GO

&lt;xsd:choice&gt;

SQL Server weist Schemas zurück, die einen <xsd:choice>-Partikel ohne untergeordnete Elemente besitzen, es sei denn, der Partikel ist mit einem minOccurs-Attributwert von Null definiert.

Wiederholte Werte in einem Final- oder Block-Attribut

Das block-Attribut ermöglicht das Blockieren von Typ- und Elementersetzungen aus der Instanz. Das final-Attribut verhindert die Ableitung anderer komplexer Typen aus einem Datentyp.

SQL Server weist Schemas zurück, in denen das block- oder final-Attribut wiederholte Werte aufweist, z. B. "restriction restriction" oder "extension extension".

Lokaler Namespace

Der lokale Namespace muss für das <xsd:any>-Element angegeben werden. SQL Server weist Schemas zurück, die eine leere Zeichenfolge ("") als Wert für das namespace-Attribut verwenden. SQL Server verlangt die ausdrückliche Verwendung von "##local" für die Angabe, dass ein nicht qualifiziertes Element oder Attribut als Instanz des Platzhalterzeichens verwendet wird.

ID-Attribut

Jede XML-Schemakomponente kann ein ID-Attribut aufweisen. In SQL Server wird die Eindeutigkeit für <xsd:attribute>-Deklarationen des ID-Typs erzwungen. Diese Werte werden jedoch nicht gespeichert. Der Bereich für das Erzwingen der Eindeutigkeit wird durch die [CREATE | ALTER] XML SCHEMA COLLECTION-Anweisung festgelegt.

ID-Datentyp

SQL Server unterstützt keine Elemente vom Typ xs:ID, xs:IDREF oder xs:IDREFS. Ein Schema darf keine Elemente dieses Typs oder durch Beschränkung oder Erweiterung von diesem Typ abgeleitete Elemente deklarieren.

NOTATION-Datentyp

SQL Server unterstützt zurzeit den NOTATION-Datentyp nicht. Schemas, die Definitionen für Notationen enthalten, werden vom Server zurückgewiesen.

Mixed-Datentyp und Simple-Inhalt

In der folgenden XML-Schemaauflistung ist myComplexTypeA ein complex-Datentyp, der leer sein kann. Dies bedeutet, dass für beide Elemente des Typs minOccurs auf 0 festgelegt wurde. Der Versuch, eine Einschränkung auf simple-Inhalte wie in der myComplexTypeB-Deklaration durchzuführen, wird nicht unterstützt. Die Erstellung der folgenden XML-Schemaauflistung schlägt fehl:

CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns"
xmlns:ns1="http://ns1">

    <complexType name="myComplexTypeA" mixed="true">
        <sequence>
            <element name="a" type="string" minOccurs="0"/>
            <element name="b" type="string" minOccurs="0" maxOccurs="23"/>
        </sequence>
    </complexType>


    <complexType name="myComplexTypeB">
        <simpleContent>
            <restriction base="ns:myComplexTypeA">
                <simpleType>
                    <restriction base="int">
                        <minExclusive value="25"/>
                    </restriction>
                </simpleType>
            </restriction>
        </simpleContent>
    </complexType>
</schema>
'
GO

sqltypes:datetime und sqltypes:smalldatetime

In SQL Server 2005 müssen alle von xs:date, xs:time und xs:dateTime abgeleiteten Typen Zeitzonen besitzen. Sqltypes:datetime und sqltypes:smalldatetime sind zwei dieser Datentypen. Die datetime- und smalldatetime-Datentypen von SQL weisen jedoch keine Zeitzonen auf. Der Grund liegt darin, dass die Musteraspekte für sqltypes:datetime und sqltypes:smalldatetime keine Zeitzonen zulassen. Folglich nimmt SQL Server keine sqltypes:datetime- oder sql:smalldatetime-Werte an.

Sie können in benutzerdefinierten Schemas zwar auf sqltypes:datetime und sqltypes:smalldatetime verweisen, sie können die XML-Dokumente jedoch nicht überprüfen, die Werte dieser Datentypen enthalten. Daher sind diese Datentypen unbrauchbar. In der folgenden XML-Schemaauflistung ist das <c>-Element des sqltypes.datetime-Datentyps definiert:

CREATE XML SCHEMA COLLECTION SC_datetime AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="myNS"
xmlns:ns="myNS"
xmlns:s="https://schemas.microsoft.com/sqlserver/2004/sqltypes"
>       <import namespace="http://www.w3.org/XML/1998/namespace"/>
      <import namespace="https://schemas.microsoft.com/sqlserver/2004/sqltypes"/>
       <element name="root">
            <complexType>
                  <sequence>
                        <element name="c" type="s:datetime"/>
                  </sequence>
            </complexType>
      </element>
</schema>'
GO

Die folgende Zuweisung schlägt fehl:

DECLARE @var xml(SC_datetime)
SET @var = '<x:root xmlns:x="myNS"><c>1953-01-01T00:00:00.000</c></x:root>'
GO

Hinzufügen von Elementen zu einer vorhandenen Ersetzungsgruppe

Das Hinzufügen von Elementen zu einer vorhandenen Ersetzungsgruppe in einer XML-Schemaauflistung wird nicht unterstützt. Eine Ersetzungsgruppe in einem XML-Schema ist insofern eingeschränkt, als das Headelement und alle seine Memberelemente in der gleichen {CREATE | ALTER} XML SCHEMA COLLECTION-Anweisung definiert werden müssen. Sie können z. B. Folgendes ausführen:

CREATE XML SCHEMA COLLECTION col AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="e1"/>
    <xs:element name="e2" substitutionGroup="e1"/>
</xs:schema>'

Der folgende Code führt jedoch zu einem Fehler, weil das Headelement e1 in einer CREATE XML SCHEMA COLLECTION-Anweisung und das Ersatzelement e2 in einer anderen ALTER XML SCHEMA COLLECTION-Anweisung definiert wurde:

CREATE XML SCHEMA COLLECTION col AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="e1"/>
</xs:schema>'
GO

ALTER XML SCHEMA COLLECTION col add N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="e2" substitutionGroup="e1"/>

</xs:schema>'
GO

Union-Typen

Einschränkungen für union-Typen werden nicht unterstützt. So schlägt beispielsweise die folgende CREATE XML SCHEMA COLLECTION-Anweisung fehl:

CREATE XML SCHEMA COLLECTION particlesIk026valid AS N'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xsdtesting" xmlns:x="http://xsdtesting" elementFormDefault="qualified">
    <xsd:simpleType name="U1">
        <xsd:union>
            <xsd:simpleType>
                <xsd:restriction base="xsd:integer" />
            </xsd:simpleType>
            <xsd:simpleType>
                <xsd:restriction base="xsd:string" />
            </xsd:simpleType>
        </xsd:union>
    </xsd:simpleType>
    <xsd:simpleType name="U2">
        <xsd:restriction base="x:U1" />
    </xsd:simpleType>
    <xsd:complexType name="B">
        <xsd:choice>
            <xsd:element name="c1" type="x:U1" />
            <xsd:element name="c2" />
        </xsd:choice>
    </xsd:complexType>
    <xsd:complexType name="R">
        <xsd:complexContent>
            <xsd:restriction base="x:B">
                <xsd:choice>
                    <xsd:element name="c1" type="x:U2" />
                    <xsd:element name="c2" />
                </xsd:choice>
            </xsd:restriction>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:element name="doc">
        <xsd:complexType>
            <xsd:choice>
                <xsd:element name="elem" type="x:R" />
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>'

Große XML-Schemaauflistungen und Bedingungen des Typs Nicht genügend Arbeitsspeicher

Während eines Aufrufs der integrierten XML_SCHEMA_NAMESPACE()-Funktion für eine große XML-Schemaauflistung oder beim Löschen großer XML-Schemaauflistungen kann eine Bedingung des Typs Nicht genügend Arbeitsspeicher auftreten. Die folgenden Lösungen beheben dieses Problem:

  • Wenn die Systemlast hoch ist, verwenden Sie den DROP_XML_SCHEMA_COLLECTION-Befehl. Schlägt dies fehl, schalten Sie die Datenbank mithilfe der ALTER DATABASE-Anweisung in den Einzelbenutzermodus um und versuchen dann nochmals, DROP XML SCHEMA COLLECTION auszuführen. Wenn die XML-Schemaauflistung in master-, model- oder tempdb-Datenbanken vorhanden ist, ist ein Neustart des Servers für den Einzelbenutzermodus erforderlich.
  • Wenn Sie XML_SCHEMA_NAMESPACE aufrufen, können Sie versuchen, einen einzelnen XML-Schemanamespace abzurufen. Sie können den Aufruf auch zu einem Zeitpunkt durchführen, wenn die Systemlast geringer ist, oder den Aufruf im Einzelbenutzermodus versuchen.

Nicht deterministische Inhaltsmodelle

SQL Server weist XML-Schemas mit nicht deterministischen Inhaltsmodellen zurück.

Im folgenden Beispiel wird versucht, ein XML-Schema mit einem nicht deterministischen Inhaltsmodell zu erstellen. Der Code schlägt fehl, da unklar ist, ob das <root>-Element eine Sequenz mit zwei <a>-Elementen oder ob das <root>-Element zwei Sequenzen mit jeweils einem <a>-Element haben sollte.

CREATE XML SCHEMA COLLECTION MyCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="root">
        <complexType>
            <sequence minOccurs="1" maxOccurs="2">
                <element name="a" type="string" minOccurs="1" maxOccurs="2"/>
            </sequence>
        </complexType>
    </element>
</schema>
'
GO

Das Schema kann durch Verschieben der Vorkommenseinschränkung an einen eindeutigen Speicherort korrigiert werden. So kann z. B. die Einschränkung zum enthaltenden Sequenzpartikel verschoben werden:

<sequence minOccurs="1" maxOccurs="4">
    <element name="a" type="string" minOccurs="1" maxOccurs="1"/>
</sequence>

Oder die Einschränkung kann zum enthaltenen Element verschoben werden:

<sequence minOccurs="1" maxOccurs="1">
     <element name="a" type="string" minOccurs="1" maxOccurs="4"/>
</sequence>

Verhalten von SQL Server 2005 mit Service Pack 1

Nicht deterministische Inhaltsmodelle werden akzeptiert, wenn die Vorkommenseinschränkungen 0,1 oder unbegrenzt lauten.

Das folgende Beispiel wird in SQL Server 2005 zurückgewiesen, wird jedoch von einem Server mit SQL Server SP1 akzeptiert.

CREATE XML SCHEMA COLLECTION MyCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="root">
        <complexType>
            <sequence minOccurs="0" maxOccurs="unbounded">
                <element name="a" type="string" minOccurs="0" maxOccurs="1"/>
                <element name="b" type="string" minOccurs="1" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
</schema>
'
GO

Siehe auch

Verweis

Richtlinien und Einschränkungen für die Verwendung von XML-Schemaauflistungen auf dem Server
Berechtigungen für eine XML-Schemaauflistung
Verwalten von XML-Schemaauflistungen auf dem Server

Konzepte

XML-Datentyp
Typisiertes im Vergleich zu nicht typisiertem XML
Grundlegendes zur Einschränkung für die eindeutige Partikelzuordnung (Unique Particle Attribution)

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

14. April 2006

Neuer Inhalt:
  • Ein Abschnitt, in dem das Verhalten nicht deterministischer Inhaltsmodelle in SP1 beschrieben wird, wurde hinzugefügt.