Tworzenie prawidłowy identyfikator IDREF i za pomocą atrybutów typu IDREFS sql:prefix (SQLXML 4.0)
Atrybut może być określony jest atrybut typu ID.Następnie można używać atrybutów określonych jako IDREF lub IDREFS do odwoływania się do atrybuty typu IDENTYFIKATORA włączania łącza między dokumentami.
Identyfikator, IDREF i IDREFS odpowiadają klucza podstawowego/klucz obcy relacji (klucz podstawowy klucz i obcy) w bazie danych z kilku różnic.W dokumencie XML wartości atrybutów typu ID musi być różne.Jeśli Identyfikator klienta and Identyfikator zamówienia atrybuty są określane jako identyfikator typu dokumentu XML, te wartości muszą być różne.Jednak w bazie danych, identyfikator klienta oraz identyfikator zamówienia kolumny może mieć te same wartości.(Na przykład identyfikator klienta = 1 i IDZamówienia = 1 są prawidłowe w bazie danych).
Identyfikator, IDREF i IDREFS atrybutów jest nieprawidłowy:
Wartości IDENTYFIKATORA musi być unikatowa w obrębie dokumentu XML.
Dla każdego IDREF i IDREFS wskazane wartości IDENTYFIKATORA musi być w dokumencie XML.
Wartość IDENTYFIKATORA, IDREF i IDREFS musi być nazwany tokenu.(Na przykład, wartość całkowita 101 nie może być wartością IDENTYFIKATORA).
Atrybuty typu identyfikator, IDREF i IDREFS nie mogą być mapowane do kolumn typu text, ntext, lub image lub inne dane binarne (na przykład, wpisz timestamp).
Jeśli dokument XML zawiera wiele identyfikatorów, należy użyć sql:prefix adnotacji w celu zapewnienia, że wartości są unikatowe.
Należy zauważyć, że sql:prefix Nie można użyć adnotacji z XSD stała atrybut.
Przykłady
Aby utworzyć próbek pracy przy użyciu poniższych przykładach, musi spełniać określone wymagania.Aby uzyskać więcej informacji zobaczWymagania dotyczące uruchamianie SQLXML przykłady.
A.Określanie nazwy i IDREFS typów
W schemacie następujące <Odbiorcy> element składa się z <Zamówienia> element podrzędność. The <Order> element also has a podrzędność element, the <OrderDetail> element.
The OrderIDList atrybut of <Customer> is an IDREFS type atrybut that refers to the OrderID atrybut of the <Order> element.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="CustOrders"
parent="Sales.Customer"
parent-key="CustomerID"
child="Sales.SalesOrderHeader"
child-key="CustomerID" />
<sql:relationship name="OrderOrderDetail"
parent="Sales.SalesOrderHeader"
parent-key="SalesOrderID"
child="Sales.SalesOrderDetail"
child-key="SalesOrderID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customer" sql:relation="Sales.Customer" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader"
sql:relationship="CustOrders" maxOccurs="unbounded" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="OrderDetail"
sql:relation="Sales.SalesOrderDetail"
sql:relationship="OrderOrderDetail"
maxOccurs="unbounded" >
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="ProductID" type="xsd:string" />
<xsd:attribute name="OrderQty" type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="SalesOrderID"
type="xsd:ID" sql:prefix="ord-" />
<xsd:attribute name="OrderDate" type="xsd:date" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="OrderIDList" type="xsd:IDREFS"
sql:relation="Sales.SalesOrderHeader" sql:field="SalesOrderID"
sql:relationship="CustOrders" sql:prefix="ord-">
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Aby przetestować kwerendę XPath próbki względem schematu
Skopiować powyższy kod schematu i wkleić go do pliku tekstowego.Zapisz plik jako sqlPrefix.xml.
Skopiuj następujący szablon i wkleić go do pliku tekstowego.Zapisz plik jako sqlPrefixT.xml w tym samym katalogu, w którym zapisano sqlPrefix.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="sqlPrefix.xml"> /Customer[@CustomerID=1] </sql:xpath-query> </ROOT>To ścieżka do katalogu określonego dla mapowania schematu (sqlPrefix.xml) jest względna w stosunku do katalogu, w którym są zapisywane w szablonie.Ścieżka bezwzględna również można określić, na przykład:
mapping-schema="C:\SqlXmlTest\sqlPrefix.xml"Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonać tego szablonu.
Aby uzyskać więcej informacji zobacz Przy użyciu obiektu ADO w celu wykonać kwerendy SQLXML.
Jest to wynik częściowy:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer CustomerID="1" OrderIDList="ord-43860 ord-44501 ord-45283 ord-46042">
<Order SalesOrderID="ord-43860" OrderDate="2001-08-01" CustomerID="1">
<OrderDetail SalesOrderID="43860" ProductID="729" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="732" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="738" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="753" OrderQty="2" />
...
</Order>
...
</Customer>
</ROOT>