Sdílet prostřednictvím


Použití anotovaných XSD schémat v dotazech (SQLXML 4.0)

platí pro:SQL Serverazure SQL Database

Můžete specifikovat dotazy proti anotovanému schématu pro získání dat z databáze tím, že zadáte dotazy XPath v šabloně proti schématu XSD.

Prvek <sql:xpath-query> vám umožňuje zadat dotaz XPath proti XML pohledu definovanému anotovaným schématem. Anotované schéma, proti kterému má být dotaz XPath vykonáno, je identifikováno pomocí atributu mapping-schema elementu <sql:xpath-query> .

Šablony jsou platné XML dokumenty, které obsahují jeden nebo více dotazů. Dotazy FOR XML a XPath vracejí fragment dokumentu. Šablony fungují jako kontejnery pro fragmenty dokumentů; šablony tak umožňují specifikovat jeden prvek nejvyšší úrovně.

Příklady v tomto tématu používají šablony k určení dotazu XPath proti anotovanému schématu za účelem získání dat z databáze.

Například uvažujme toto anotované schéma:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="Person.Contact" >  
     <xsd:complexType>  
       <xsd:attribute name="ContactID" type="xsd:string" />   
       <xsd:attribute name="FirstName" type="xsd:string" />   
       <xsd:attribute name="LastName"  type="xsd:string" />   
     </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Pro ilustraci je toto schéma XSD uloženo v souboru s názvem Schema2.xml. Poté můžete provést dotaz XPath proti anotovanému schématu specifikovanému v následujícím souboru šablony (Schema2T.xml):

<sql:xpath-query   
     xmlns:sql="urn:schemas-microsoft-com:xmlsql"  
     >  
          Person.Contact[@ContactID="1"]  
</sql:xpath-query>  

Poté můžete vytvořit a použít SQLXML 4.0 Test Script (Sqlxml4test.vbs) k vykonání dotazu jako součásti šablonového souboru. Pro více informací viz Annotated XDR Schemas (zastaralé v SQLXML 4.0).

Použití schémat inline mapování

Anotované schéma lze zahrnout přímo do šablony a poté lze v šabloně zadat dotaz XPath proti inline schématu. Šablona může být také updategram.

Šablona může obsahovat více inline schémat. Pro použití inline schématu zahrnutého v šabloně zadejte atribut id s unikátní hodnotou na prvku <xsd:schema> a poté použijte #idvalue k odkazu na inline schéma. Atribut id se chová identicky s sql:id ({urn:schemas-microsoft-com:xml-sql}id) používaným v XDR schématech.

Například následující šablona specifikuje dvě schémata s inline-anotacemi:

<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'>  
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'  
        xmlns:ms='urn:schemas-microsoft-com:mapping-schema'  
        id='InLineSchema1' sql:is-mapping-schema='1'>  
  <xsd:element name='Employees' ms:relation='HumanResources.Employee'>  
    <xsd:complexType>  
      <xsd:attribute name='LoginID'   
                     type='xsd:string'/>  
      <xsd:attribute name='Title'   
                     type='xsd:string'/>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
  
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'  
        xmlns:ms='urn:schemas-microsoft-com:mapping-schema'  
        id='InLineSchema2' sql:is-mapping-schema='1'>  
  <xsd:element name='Contacts' ms:relation='Person.Contact'>  
    <xsd:complexType>  
  
      <xsd:attribute name='ContactID'   
                     type='xsd:string' />  
      <xsd:attribute name='FirstName'   
                     type='xsd:string' />  
      <xsd:attribute name='LastName'   
                     type='xsd:string' />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
  
<sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql'   
        mapping-schema='#InLineSchema1'>  
    /Employees[@LoginID='adventure-works\guy1']  
</sql:xpath-query>  
  
<sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql'   
        mapping-schema='#InLineSchema2'>  
    /Contacts[@ContactID='1']  
</sql:xpath-query>  
</ROOT>  

Šablona také specifikuje dva dotazy XPath. Každý z <prvků dotazu> xpath jednoznačně identifikuje mapovací schéma tím, že specifikuje atribut mapping-schema.

Když v šabloně specifikujete inline schéma, musí být na prvku <xsd:schema> specifikována také anotace sql:is-mapping-schema. Schéma sql:is-mapping-nabývá Booleovské hodnoty (0=nepravda, 1=pravda). Inline schéma s sql:is-mapping-schema="1" je považováno za inline anotované schéma a není vráceno v XML dokumentu.

Anotace sql:is-mapping-schema patří do jmenného prostoru šablon urn:schemas-microsoft-com:xml-sql.

Pro otestování tohoto příkladu uložte šablonu (InlineSchemaTemplate.xml) do lokálního adresáře a poté vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) k vykonání šablony. Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

Kromě zadání atributu mapping-schema na prvku <sql:xpath-query> v šabloně (když je dotaz XPath) nebo na <prvku updg:sync> v updategramu můžete udělat následující:

  • Specifikujte atribut mapping-schema na ROOT> prvku< (globální deklarace) v šabloně. Toto mapovací schéma se pak stává výchozím schématem, které budou používat všechny uzly XPath a updategram, které nemají explicitní anotaci mapovacího schématu .

  • Specifikujte atribut mapovacího schématu pomocí objektu ADO Command .

Atribut mapping-scheme, který je specifikován v <xpath-query> nebo <updg:sync> , má nejvyšší prioritu; objekt ADO Command má nejnižší prioritu.

Všimněte si, že pokud zadáte dotaz XPath v šabloně a nespecifikujete mapovací schéma, proti kterému se dotaz XPath vykonává, dotaz XPath je považován za dotaz typu dbobject . Například zvažte tuto šablonu:

<sql:xpath-query   
     xmlns:sql="urn:schemas-microsoft-com:xmlsql">  
          Production.ProductPhoto[@ProductPhotoID='100']/@LargePhoto  
</sql:xpath-query>  

Šablona specifikuje dotaz XPath, ale nespecifikuje mapovací schéma. Tento dotaz je proto považován za dotaz typu dbobject , kde Production.ProductPhoto je název tabulky a @ProductPhotoID='100' je predikát, který najde produktovou fotografii s ID hodnotou 100. @LargePhoto je sloupec, ze kterého se hodnota získává.