Aracılığıyla paylaş


xml şema KOLEKSİYONU (Transact-SQL) Değiştir

Yeni şema bileşenleri için varolan xml şema koleksiyonekler.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

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

Bağımsız değişkenler

  • relational_schema
    İlişkisel şema tanımlar.Belirtilmezse, varsayılan ilişkisel şema kabul edilir.

  • sql_identifier
    SQL xml şema koleksiyontanımlayıcısıdır.

  • 'Schema Component'
    Eklemek için şema bileşenidir.

Açıklamalar

Ad alanları, zaten xml şema koleksiyoniçinde bulunmayan yeni xml şemaları eklemek için alter xml şema KOLEKSİYONU kullanın veya yeni bileşenleri koleksiyoniçinde varolan ad alanları ekleyin.

Aşağıdaki örnek, yeni bir ekler <öğesi> , varolan ad http://MySchema/test_xml_schema koleksiyon MyColl.

-- First create an XML schema collection.
CREATE XML SCHEMA COLLECTION MyColl AS '
   <schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://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="http://MySchema/test_xml_schema"> 
     <element name="anotherElement" type="byte"/> 
 </schema>'

ALTER XML SCHEMAöğe ekler <anotherElement> önceden tanımlanmış ad http://MySchema/test_xml_schema.

koleksiyon eklemek istediğiniz bileşenlerin bazıları aynı koleksiyoniçinde bulunan bileşenleri başvurursanız, kullanması gerektiğini unutmayın <import namespace="referenced_component_namespace" />.Ancak, geçerli şema ad alanındaki kullanmak için geçerli değil <xsd:import>, ve bu nedenle geçerli şema ad alanı aynı hedef ad alanı bileşenleri otomatik olarak içe aktarılır.

Koleksiyonları kaldırmak için xml şema KOLEKSİYONU (Transact-SQL) bırak.

Şema koleksiyon zaten lax doğrulama joker veya türünde bir öğe içeriyorsa, xs:anyType, bir yeni genel öðe türü ya da öznitelik bildirim şema koleksiyon ekleme tarafından şema koleksiyonkısıtlı bir yeniden doğrulaması saklı veri neden olur.

İzinler

Bir xml şema KOLEKSİYONU alter için koleksiyonalter izni gerektirir.

Daha fazla bilgi için, bkz. Bir xml şeması derlemesi üzerinde izinleri.

Örnekler

A.Veritabanında xml şema koleksiyon oluşturma

Aşağıdaki örnek xml şema koleksiyonoluştururManuInstructionsSchemaCollection. koleksiyon yalnızca bir şema ad alanı vardır.

-- 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

Alternatif olarak, şema koleksiyon bir değişkene atar ve değişkeni belirtmek CREATE XML SCHEMA COLLECTION deyim aşağıdaki gibi:

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

Örneğin, değişkendir nvarchar(max) türü.Değişken de kaynaklanabilir xml hangi durumveri türü bir dizeörtülü olarak dönüştürülür.

Daha fazla bilgi için, bkz. Depolanan xml şema koleksiyonu görüntüleme.

Şema koleksiyonları depolayabileceğiniz bir xml sütunyazın.Bu durumda, xml şema koleksiyonoluşturmak için aşağıdaki adımları gerçekleştirin:

  1. Şema koleksiyon , bir select deyim kullanarak sütun almak ve bir değişkene atar xml türü, veya bir varchar türü.

  2. Değişken adını xml şema KOLEKSİYONU oluşturma deyimbelirtin.

xml şema KOLEKSİYONU oluşturma yalnızca şema bileşenleri depolar, SQL Server anlar; xml Schema'da her şeyi veritabanında depolanmaz.Bu nedenle, xml şema koleksiyon geri tam olarak sağlanan şekilde istediğiniz, xml şemalarınızı veritabanı sütun veya başka bir klasörü bilgisayarınıza kaydetmeniz önerilir.

B.Şema koleksiyonbulunan birden çok şema ad belirtme

Birden çok xml şemaları, xml şema koleksiyonoluştururken belirtebilirsiniz.Örneğin:

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

Aşağıdaki örnek xml şema koleksiyonoluştururProductDescriptionSchemaCollection içeren iki xml şema ad alanları.

CREATE XML SCHEMA COLLECTION ProductDescriptionSchemaCollection AS 
'<xsd:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"
    xmlns="https://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="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" 
    elementFormDefault="qualified" 
    xmlns:mstns="http://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.hedef ad alanı belirtmeyen bir şema alma

İçermeyen bir şema, bir targetNamespace öznitelik koleksiyonalındığından, bileşenlerinin aşağıdaki örnekte gösterildiği gibi boş dize hedef ad alanıyla ilişkilendirilir.Varsayılan dize boş ad alanı ile ilişkili koleksiyonsonuçlar birden çok şema bileşenleri (potansiyel ilgisi olmayan) alınan bir veya daha fazla şemaları ilişkilendirme değil unutmayın.

-- 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=''