使用 sql:relation (XDR 結構描述)

重要注意事項重要事項

這個主題是舊版應用程式的參考。未來將不會繼續開發這項功能,請避免在新的開發工作中使用此功能,而是改用註解式 XSD 結構描述建立 XML 檢視。如需詳細資訊,請參閱<註解式 XSD 結構描述簡介 (SQLXML 4.0)>。您可以將現有註解式 XDR 結構描述轉換為 XSD 結構描述。如需詳細資訊,請參閱<將註解式 XDR 結構描述轉換為等效 XSD 結構描述 (SQLXML 4.0)>。

加入 sql:relation 註解,將 XDR 結構描述中的 XML 節點對應至資料庫資料表。資料表/檢視表名稱會指定為 sql:relation 註解的值。

sql:relation 註解可以加入到 XDR 結構描述中的 <ElementType><element><attribute> 節點。sql:relation 會指定此結構描述中 <ElementType><element><attribute> 與資料庫內資料表/檢視表之間的對應。

<ElementType> 上指定 sql:relation 時,這個註解的範圍會套用到該 <ElementType> 中的所有屬性和子元素規格。因此,它提供了寫入註解的捷徑。在 <element> 上直接指定 sql:relation 時,也會有範圍設定導入 <ElementType> 內指定的屬性。<AttributeType> 上會忽略 sql:relation 註解。

當 Microsoft SQL Server 中有效的識別碼卻在 XML 中無效時,sql:relation 註解就很有用處。例如,"Order Details" 在 SQL Server 中是有效的資料表名稱,但是在 XML 中是無效的。在這種情況下,可以使用 sql:relation 註解來指定對應,例如:

<ElementType name="OD" sql:relation="[Order Details]">

範例

若要使用下列範例建立工作範例,您必須符合某些需求。如需詳細資訊,請參閱<執行 SQLXML 範例的需求>。

A. 在包含屬性的 <ElementType> 上指定 sql:relation

在此範例中,XDR 結構描述是由 <Contacts> 元素所組成 (其中包含 ContactIDFirstNameLastName 屬性)。sql:relation 註解是指定於 <ElementType> 上,將 <Contacts> 元素對應至 Person.Contact 資料表。此對應的範圍適用於 <ElementType> 中的所有屬性。因此,所有屬性都會對應至 Person.Contact 資料表內的資料行。

預設對應會發生於屬性,例如,屬性對應至 Person.Contact 資料表中同名的資料行。

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />
    <AttributeType name="FirstName" />
    <AttributeType name="LastName" />

    <attribute type="ContactID" />
    <attribute type="FirstName" />
    <attribute type="LastName" />
  </ElementType>
</Schema>

針對結構描述測試範例 XPath 查詢

  1. 複製上述的結構描述程式碼,並將其貼到文字檔中。將檔案儲存為 sqlRelationXdr.xml。

  2. 複製下列範本,並將其貼到文字檔中。將檔案儲存為 sqlRelationXdrT.xml 並放在與 sqlRelationXdr.xml 相同的目錄中。範本中的查詢會選取 ContactID 為 1 的連絡人。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sqlRelationXdr.xml">
        /Contacts[@ContactID="1"]
      </sql:xpath-query>
    </ROOT>
    

    指定給對應結構描述的目錄路徑相對於儲存範本的相關目錄。也可以指定絕對路徑,例如:

    mapping-schema="C:\MyDir\sqlRelationXdr.xml"
    
  3. 建立及使用 SQLXML 4.0 測試指令碼 (Sqlxml4test.vbs) 來執行範本。

    如需詳細資訊,請參閱<使用 ADO 執行 SQLXML 4.0 查詢>。

部分結果集如下:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
    <Contacts ContactID="1" FirstName="Gustavo" 
              LastName="Achong" /> 
</ROOT>

B. 在包含子元素和屬性的 <ElementType> 上指定 sql:relation

在此範例中,XDR 結構描述是由 <Contacts> 元素所組成,其中包含 ContactID 屬性及 <FirstName><LastName> 子元素。sql:relation 註解是指定於 <ElementType> 上,將 <Contacts> 元素對應至 Person.Contact 資料表。此對應的範圍適用於 <ElementType> 中的所有屬性。因此,所有屬性都會對應至 Person.Contact 資料表內的資料行。

預設的對應發生於屬性。屬性會對應至 Person.Contact 資料表內同名的資料行。

在此範例中,content 屬性是在 <FirstName><LastName> 子元素上指定。如果沒有 content=textOnly 屬性,子元素將不會分別對應到 Person.Contact 資料表中的 FirstName 和 LastName 資料行,因為元素預設會對應到資料表,而不是欄位。

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">

  <ElementType name="FirstName" content="textOnly"/>
  <ElementType name="LastName" content="textOnly"/>
  <ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />

    <attribute type="ContactID" />
    <element type="FirstName" />
    <element type="LastName"  />
  </ElementType>
</Schema>

有另外一個方法可取代 content=textOnly 屬性的指定,您可以在 element 定義中指定 sql:field 註解,以便將子元素 (FirstName、LastName) 對應到對應的資料行名稱,如下列替代範例所示:

<element type="FirstName" sql:field="FirstName" />
<element type="LastName" sql:field="LastName" />

針對結構描述測試範例 XPath 查詢

  1. 複製上述的結構描述程式碼,並將其貼到文字檔中。將檔案儲存為 UsingSqlRelationXdr.xml。

  2. 複製下列範本,並將其貼到文字檔中。將檔案儲存為 UsingSqlRelationXdrT.xml 並放在與 UsingSqlRelationXdr.xml 相同的目錄中。範本中的查詢會選取 ContactID 為 1 的連絡人。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="UsingSqlRelationXdr.xml">
        /Contacts[@ContactID="1"]
      </sql:xpath-query>
    </ROOT>
    

    指定給對應結構描述 (UsingSqlRelationXdr.xml) 的目錄路徑相對於儲存範本的目錄。也可以指定絕對路徑,例如:

    mapping-schema="C:\MyDir\UsingSqlRelationXdr.xml"
    
  3. 建立及使用 SQLXML 4.0 測試指令碼 (Sqlxml4test.vbs) 來執行範本。

    如需詳細資訊,請參閱<使用 ADO 執行 SQLXML 4.0 查詢>。

部分結果集如下:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts ContactID="1"> 
    <FirstName>Gustavo</FirstName>
    <LastName>Achong</LastName>
  </Contacts>
</ROOT>