Riferimento alla raccolta di XML Schema predefinita (sys)Reference the Built-in XML Schema Collection (sys)

Per ogni database creato è disponibile una raccolta di XML Schema sys predefinita nello schema relazionale sys .Every database you create has a predefined sys XML schema collection in the sys relational schema. Tale raccolta riserva questi schemi predefiniti, ai quali è possibile accedere da qualsiasi altra raccolta XML Schema creata dall'utente.It reserves these predefined schemas, and they can be accessed from any other user-created XML schema collection. I prefissi utilizzati negli schemi predefiniti sono significativi in XQuery.The prefixes used in these predefined schemas are meaningful in XQuery. L'unico prefisso riservato è xml .Only xml is a reserved prefix.

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 = http://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) = http://schemas.microsoft.com/sqlserver/2004/SOAP  

Si noti che lo spazio dei nomi sqltypes contiene componenti ai quali è possibile fare riferimento da qualsiasi raccolta di XML Schema creata dall'utente.Note that the sqltypes namespace contains components that can be referenced from any user-created XML schema collection. È possibile scaricare lo schema sqltypes da questo sito Web Microsoft.You can download the sqltypes schema from this Microsoft Web site. I componenti predefiniti sono:The built-in components include the following:

  • I tipi XSDXSD types

  • Gli attributi XML lang, basee spaceXML attributes lang, base, and space

  • I componenti dello spazio dei nomi sqltypesComponents of the sqltypes namespace

    La query seguente restituisce i componenti predefiniti ai quali è possibile fare riferimento da una raccolta XML Schema creata dall'utente:The following query returns built-in components that can be referenced from a user-created XML schema collection:

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  

Nell'esempio seguente viene illustrato come viene fatto riferimento a tali componenti in uno schema utente.The following example shows how these components are referenced in a user schema. CREATE XML SCHEMA COLLECTION consente di creare una raccolta di XML Schema che fa riferimento al varchar tipo definito nello spazio dei nomi sqltypes .CREATE XML SCHEMA COLLECTION creates an XML schema collection that references the varchar type defined in the sqltypes namespace. e inoltre all'attributo lang definito nello spazio dei nomi xml .The example also references the lang attribute that is defined in the xml namespace.

CREATE XML SCHEMA COLLECTION SC AS '  
<schema   
   xmlns="http://www.w3.org/2001/XMLSchema"   
   targetNamespace="myNS"  
   xmlns:ns="myNS"  
   xmlns:s="http://schemas.microsoft.com/sqlserver/2004/sqltypes" >   
   <import namespace="http://www.w3.org/XML/1998/namespace"/>  
   <import namespace="http://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  

Si noti quanto segue:You should note the following:

  • Non è possibile modificare XML Schema con questi spazi dei nomi in nessuna raccolta XML Schema definita dall'utente.You cannot modify XML schemas with these namespaces in any user-defined XML schema collection. Ad esempio, la raccolta XML Schema seguente genera un errore perché aggiunge un componente allo spazio dei nomi protetto sqltypes :For example, the following XML schema collection fails, because it is adding a component to the sqltypes protected namespace:

    CREATE XML SCHEMA COLLECTION SC AS '  
    <schema xmlns="http://www.w3.org/2001/XMLSchema"   
    targetNamespace    
        ="http://schemas.microsoft.com/sqlserver/2004/sqltypes" >   
          <element name="root" type="string"/>  
    </schema>'  
    GO  
    
  • Non è possibile utilizzare la raccolta XML Schema sys nelle colonne, variabili o parametri di tipo xml .You cannot use the sys XML schema collection to type xml columns, variables, or parameters. Il codice seguente, ad esempio, restituisce un errore:For example, the following code returns an error:

    DECLARE @x xml (sys.sys)  
    
  • La serializzazione di questi schemi predefiniti non è supportata.Serialization of these built-in schemas is not supported. Il codice seguente, ad esempio, restituisce un errore:For example, the following code returns an error:

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

    Il codice seguente rappresenta un altro esempio nel quale viene creata una raccolta XML Schema che utilizza il tipo varchar definito nello spazio dei nomi sqltypes:The following code is another example in which you create an XML schema collection that uses the varchar type defined in the sqltypes namespace:

CREATE XML SCHEMA COLLECTION SC AS '  
<schema xmlns="http://www.w3.org/2001/XMLSchema"   
        targetNamespace="myNS" xmlns:ns="myNS"  
        xmlns:s="http://schemas.microsoft.com/sqlserver/2004/sqltypes">  
   <import     
     namespace="http://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  

Come illustrato nell'esempio seguente, è possibile creare una variabile XML tipizzata, assegnarvi un'istanza XML e verificare che il valore del tipo di elemento <root> corrisponda a un tipo varchar.As shown in the following, you can create a typed XML variable, assign an XML instance to it, and verify that the value of the <root> element type is a varchar type.

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

L'espressione instance of sqltypes:varchar?restituisce TRUE, perché il valore dell'elemento <root> è di un tipo derivato da varchar in base allo schema associato alla variabile @var.The instance of sqltypes:varchar? expression 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.

Vedere ancheSee Also

Raccolte di XML Schema (SQL Server)XML Schema Collections (SQL Server)