ALTER XML SCHEMA COLLECTION (Transact-SQL)

Platí na:SQL ServerAzureSQL Managed Instance

Přidává nové komponenty schématu do stávající kolekce XML schémat.

Transact-SQL konvence syntaxe

Syntax

ALTER XML SCHEMA COLLECTION [ relational_schema. ]sql_identifier ADD 'Schema Component'  

Arguments

relational_schema
Identifikuje název relačního schématu. Pokud není zadáno, předpokládá se výchozí relační schéma.

sql_identifier
Je SQL identifikátor pro kolekci XML schématu.

'Komponenta schématu'
Je složka schématu pro vložení.

Remarks

Použijte je ALTER XML SCHEMA COLLECTION k přidání nových XML schémat, jejichž jmenné prostory nejsou již v kolekci XML schémat, nebo k přidání nových komponent do stávajících jmenných prostorů v kolekci.

Následující příklad přidává nový <prvek> do existujícího jmenného prostoru https://MySchema/test_xml_schema v kolekci MyColl.

-- First create an XML schema collection.  
CREATE XML SCHEMA COLLECTION MyColl AS '  
   <schema   
    xmlns="http://www.w3.org/2001/XMLSchema"   
    targetNamespace="https://MySchema/test_xml_schema">  
      <element name="root" type="string"/>   
  </schema>'  
-- Modify the collection.   
ALTER XML SCHEMA COLLECTION MyColl ADD '  
  <schema xmlns="http://www.w3.org/2001/XMLSchema"   
         targetNamespace="https://MySchema/test_xml_schema">   
     <element name="anotherElement" type="byte"/>   
 </schema>';  

ALTER XML SCHEMA přidává prvek <anotherElement> do dříve definovaného jmenného prostoru https://MySchema/test_xml_schema.

Všimněte si, že pokud některé komponenty, které chcete přidat do kolekce, odkazují na komponenty, které už jsou ve stejné kolekci, musíte použít <import namespace="referenced_component_namespace" />. Není však platné používat aktuální jmenný prostor schématu v <xsd:import>, a proto jsou komponenty ze stejného cílového jmenného prostoru jako současný jmenný prostor schématu automaticky importovány.

Pro odstranění kolekcí použijte DROP XML SCHEMA COLLECTION (Transact-SQL).

Pokud kolekce schémat již obsahuje laxní validační žolík nebo prvek typu xs:anyType, přidání nového globálního prvku, typu nebo atributu do kolekce schématu způsobí opětovnou validaci všech uložených dat, která jsou omezena kolekcí schématu.

Permissions

Ke změně je XML SCHEMA COLLECTION potřeba ALTER povolení ke sbírce.

Examples

A. Vytváření XML schématu v databázi

Následující příklad vytvoří kolekci ManuInstructionsSchemaCollectionschémat XML . Kolekce má pouze jeden obor názvů schématu.

-- Create a sample database in which to load the XML schema collection.  
CREATE DATABASE SampleDB;  
GO  
USE SampleDB;  
GO  
CREATE XML SCHEMA COLLECTION ManuInstructionsSchemaCollection AS  
N'<?xml version="1.0" encoding="UTF-16"?>  
<xsd:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"   
   xmlns          ="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"   
   elementFormDefault="qualified"   
   attributeFormDefault="unqualified"  
   xmlns:xsd="http://www.w3.org/2001/XMLSchema" >  
  
    <xsd:complexType name="StepType" mixed="true" >  
        <xsd:choice  minOccurs="0" maxOccurs="unbounded" >   
            <xsd:element name="tool" type="xsd:string" />  
            <xsd:element name="material" type="xsd:string" />  
            <xsd:element name="blueprint" type="xsd:string" />  
            <xsd:element name="specs" type="xsd:string" />  
            <xsd:element name="diag" type="xsd:string" />  
        </xsd:choice>   
    </xsd:complexType>  
  
    <xsd:element  name="root">  
        <xsd:complexType mixed="true">  
            <xsd:sequence>  
                <xsd:element name="Location" minOccurs="1" maxOccurs="unbounded">  
                    <xsd:complexType mixed="true">  
                        <xsd:sequence>  
                            <xsd:element name="step" type="StepType" minOccurs="1" maxOccurs="unbounded" />  
                        </xsd:sequence>  
                        <xsd:attribute name="LocationID" type="xsd:integer" use="required"/>  
                        <xsd:attribute name="SetupHours" type="xsd:decimal" use="optional"/>  
                        <xsd:attribute name="MachineHours" type="xsd:decimal" use="optional"/>  
                        <xsd:attribute name="LaborHours" type="xsd:decimal" use="optional"/>  
                        <xsd:attribute name="LotSize" type="xsd:decimal" use="optional"/>  
                    </xsd:complexType>  
                </xsd:element>  
            </xsd:sequence>  
        </xsd:complexType>  
    </xsd:element>  
</xsd:schema>' ;  
GO  
-- Verify - list of collections in the database.  
SELECT *  
FROM sys.xml_schema_collections;  
-- Verify - list of namespaces in the database.  
SELECT name  
FROM sys.xml_schema_namespaces;  
  
-- Use it. Create a typed xml variable. Note the collection name   
-- that is specified.  
DECLARE @x xml (ManuInstructionsSchemaCollection);  
GO  
--Or create a typed xml column.  
CREATE TABLE T (  
        i int primary key,   
        x xml (ManuInstructionsSchemaCollection));  
GO  
-- Clean up.  
DROP TABLE T;  
GO  
DROP XML SCHEMA COLLECTION ManuInstructionsSchemaCollection;  
Go  
USE master;  
GO  
DROP DATABASE SampleDB;  

Případně můžete kolekci schémat přiřadit k proměnné a zadat proměnnou v CREATE XML SCHEMA COLLECTION příkazu následujícím způsobem:

DECLARE @MySchemaCollection nvarchar(max);  
SET @MySchemaCollection  = N' copy the schema collection here';  
CREATE XML SCHEMA COLLECTION AS @MySchemaCollection;   

Proměnná v příkladu je typu nvarchar(max) . Proměnná může být také typu xml dat, v takovém případě je implicitně převedena na řetězec.

Další informace naleznete v tématu Zobrazení uložené kolekce schémat XML.

Sbírky schémat můžete ukládat do sloupce typu xml . V tomto případě vytvořte kolekci schémat XML provedením následujících kroků:

  1. Sbírku schémat z tohoto sloupce načtěte pomocí příkazu SELECT a přiřadíte ji proměnné typu xml nebo typu varchar .

  2. Zadejte název proměnné v CREATE XML SCHEMA COLLECTION příkazu.

Ukládá CREATE XML SCHEMA COLLECTION pouze ty komponenty schématu, kterým SQL Server rozumí; vše v XML schématu není uloženo v databázi. Pokud tedy chcete, aby se sbírka XML schémat vrátila přesně tak, jak byla poskytnuta, doporučujeme uložit svá XML schémata do sloupce databáze nebo jiné složky na vašem počítači.

B. Specifikace více jmenných prostorů schémat v kolekci schémat

Při vytváření kolekce schémat XML můžete zadat více schémat XML. Příklad:

CREATE XML SCHEMA COLLECTION N'  
<xsd:schema>....</xsd:schema>  
<xsd:schema>...</xsd:schema>';  

Následující příklad vytvoří kolekci ProductDescriptionSchemaCollection schématu XML, která obsahuje dva obory názvů schématu XML.

CREATE XML SCHEMA COLLECTION ProductDescriptionSchemaCollection AS   
'<xsd:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"  
    xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"   
    elementFormDefault="qualified"   
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" >  
    <xsd:element name="Warranty"  >  
        <xsd:complexType>  
            <xsd:sequence>  
                <xsd:element name="WarrantyPeriod" type="xsd:string"  />  
                <xsd:element name="Description" type="xsd:string"  />  
            </xsd:sequence>  
        </xsd:complexType>  
    </xsd:element>  
</xsd:schema>  
 <xs:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"   
    xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"   
    elementFormDefault="qualified"   
    xmlns:mstns="https://tempuri.org/XMLSchema.xsd"   
    xmlns:xs="http://www.w3.org/2001/XMLSchema"  
    xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" >  
    <xs:import   
namespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" />  
    <xs:element name="ProductDescription" type="ProductDescription" />  
        <xs:complexType name="ProductDescription">  
            <xs:sequence>  
                <xs:element name="Summary" type="Summary" minOccurs="0" />  
            </xs:sequence>  
            <xs:attribute name="ProductModelID" type="xs:string" />  
            <xs:attribute name="ProductModelName" type="xs:string" />  
        </xs:complexType>  
        <xs:complexType name="Summary" mixed="true" >  
            <xs:sequence>  
                <xs:any processContents="skip" namespace="http://www.w3.org/1999/xhtml" minOccurs="0" maxOccurs="unbounded" />  
            </xs:sequence>  
        </xs:complexType>  
</xs:schema>'  
;  
GO   
-- Clean up  
DROP XML SCHEMA COLLECTION ProductDescriptionSchemaCollection;  
GO  

C. Import schématu, které nespecifikuje cílový jmenný prostor

Pokud je schéma, které neobsahuje atribut targetNamespace, importováno do kolekce, jeho komponenty jsou přiřazeny k prázdnému jmennému prostoru řetězce, jak je ukázáno v následujícím příkladu. Všimněte si, že nepřiřazení jednoho nebo více schémat importovaných do kolekce vede k tomu, že více komponent schématu (potenciálně nesouvisejících) je přiřazeno k výchozímu prázdnému jmennému prostoru řetězců.

-- Create a collection that contains a schema with no target namespace.  
CREATE XML SCHEMA COLLECTION MySampleCollection AS '  
<schema xmlns="http://www.w3.org/2001/XMLSchema"  xmlns:ns="http://ns">  
<element name="e" type="dateTime"/>  
</schema>';  
GO  
-- query will return the names of all the collections that   
--contain a schema with no target namespace  
SELECT sys.xml_schema_collections.name   
FROM   sys.xml_schema_collections   
JOIN   sys.xml_schema_namespaces   
ON     sys.xml_schema_collections.xml_collection_id =   
       sys.xml_schema_namespaces.xml_collection_id   
WHERE  sys.xml_schema_namespaces.name='';  

Viz také

CREATE XML SCHEMA COLLECTION (Transact-SQL)
DROP XML SCHEMA COLLECTION (Transact-SQL)
EVENTDATA (Transact-SQL)
Porovnání typovaného XML s nezatypovaným XML
Požadavky a omezení pro kolekce schémat XML na serveru