Aracılığıyla paylaş


Yerleşik XML şema koleksiyon (sys)

Oluşturduğunuz her veritabanı önceden tanımlanmış bir vardır. sys XML şema koleksiyonsys ilişkisel şema.Bu önceden tanımlı Bu şemalar ayırır ve tüm diğer kullanıcı tarafından oluşturulan XML şemasından erişilebilir koleksiyon.Bu önceden tanımlanmış şemalarda kullanılan önekleri XQuery içinde anlamlıdır.veritabanı XML ayrılmış bir önektir.

xml = http://www.w3.org/XML/1998/namespace
xs = http://www.w3.org/2001/XMLSchema
xsi = http://www.w3.org/2001/XMLSchema-instance
fn = http://www.w3.org/2004/07/xpath-functions
sqltypes = https://schemas.microsoft.com/sqlserver/2004/sqltypes
xdt = http://www.w3.org/2004/07/xpath-datatypes
(no prefix) = urn:schemas-microsoft-com:xml-sql
(no prefix) = https://schemas.microsoft.com/sqlserver/2004/SOAP

Dikkat SqlTypes ad, bir kullanıcı tarafından oluşturulan XML şema topluluğundan başvurulan bileşenleri içerir.Karşıdan yükleyebileceğiniz SqlTypes şemadanMicrosoft Web sitesini.Yerleşik bileşenleri şunlardır:

  • XSD türü

  • XML öznitelikleri Dil, Temel, and alan

  • Bileşenlerden SqlTypes ad

Aşağıdaki sorgu, bir kullanıcı tarafından oluşturulan XML şema topluluğundan başvurulan yerleşik bileşen döndürür:

SELECT C.name, N.name, C.symbol_space_desc from sys.xml_schema_components C join sys.xml_schema_namespaces N
on ((C.xml_namespace_id = N.xml_namespace_id) AND (C.xml_collection_id = N.xml_collection_id))
join sys.xml_schema_collections SC
on SC.xml_collection_id = C.xml_collection_id
where ((C.xml_collection_id = 1) AND (C.name is not null) AND (C.scoping_xml_component_id is null) 
AND (SC.schema_id = 4))
GO

The following example shows how these components are referenced in a user schema.CREATE XML SCHEMA COLLECTION creates an XML schema collection that references the varchar type defined in the sqltypes namespace.Örnekte ayrıca başvuruda lang tanımlanan öznitelik xml ad alanı.

CREATE XML SCHEMA COLLECTION SC 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="a" type="string"/>
             <element name="b" type="string"/>
             <!-- varchar type is defined in the sys.sys collection and 
                  can be referenced in any user-defined schema -->
             <element name="c" type="s:varchar"/>
          </sequence>
          <attribute name="att" type="int"/>
          <!-- xml:lang attribute is defined in the sys.sys collection 
               and can be referenced in any user-defined schema -->
          <attribute ref="xml:lang"/>
      </complexType>
    </element>
 </schema>'
GO
 -- Cleanup
DROP xml schema collection SC 
GO

Aşağıdaki dikkat etmelisiniz:

  • Bu ad boşluklarında tüm kullanıcı tanımlı XML şema koleksiyon içeren XML şemaları değiştiremezsiniz.Bir bileşene ekleyen olduğundan, aşağıdaki XML şema koleksiyon, başarısız sqltypes Korumalı ad:

    CREATE XML SCHEMA COLLECTION SC AS '
    <schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace  
        ="https://schemas.microsoft.com/sqlserver/2004/sqltypes" > 
          <element name="root" type="string"/>
    </schema>'
    GO
    
  • Kullanamazsınız sys XML şema koleksiyon yazmak için xml sütunlar, değişkenler veya parametreler. Örneğin, aşağıdaki kod, bir hata döndürür:

    DECLARE @x xml (sys.sys)
    
  • Seri hale getirme, bu yerleşik şemalar desteklenmez.Örneğin, aşağıdaki kod, bir hata döndürür:

    SELECT XML_SCHEMA_NAMESPACE(N'sys',N'sys')
    GO
    

Aşağıdaki kodu kullanan bir XML şema koleksiyon oluşturmak, diğer bir örnek ise, varchar tanımlanan türü sqltypes ad:

CREATE XML SCHEMA COLLECTION SC 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="https://schemas.microsoft.com/sqlserver/2004/sqltypes"/>
      <simpleType name="myType">
            <restriction base="s:varchar">
                  <maxLength value="20"/>
            </restriction>
      </simpleType>
      <element name="root" type="ns:myType"/>
</schema>'
go

Aşağıdaki gösterildiği gibi bir yazılı oluşturabilirsiniz XML değişken, bir XML örnek atayın ve doğrulayın değerinin <root> öğe türü bir varchar TYPE.

DECLARE @var XML(SC)
SET @var = '<root xmlns="myNS">My data</root>'
SELECT @var.query('declare namespace sqltypes = "https://schemas.microsoft.com/sqlserver/2004/sqltypes";
declare namespace ns="myNS"; 
data(/ns:root[1]) instance of sqltypes:varchar?')
GO

The instance of sqltypes:varchar? ifade returns TRUE, because the <root> element value is of a type derived from varchar according to the schema that is associated with the @var variable.