Określanie za pomocą relacji sql:relationship (schematu XDR)
Ważne: |
|---|
Ten temat jest dołączane jako odniesienia dla starszych aplikacji.Żadna praca przyszłego rozwoju są wykonywane z tej funkcji.Unikaj używania tej funkcji w nowych prac rozwojowych.Zamiast tego użyj adnotacjami schematów XSD tworzenia widoków XML.Aby uzyskać więcej informacji, zobacz Wprowadzenie do adnotacjami schematów XSD (SQLXML 4.0).Można przekonwertować istniejące schematy XDR adnotacjami schematów XSD.Aby uzyskać więcej informacji, zobacz Konwertowanie adnotacjami schematy XDR równoważne schematów XSD (SQLXML 4.0). |
Może być powiązane elementy w dokumencie XML.Elementy mogą być zagnieżdżane hierarchicznie i może być określony identyfikator, IDREF lub IDREFS relacje między elementami.
Na przykład w schematu XDR <klienta> zawiera element <zamówienia> elementów podrzędność.<Klienta> element mapowany na tabela, która zawiera dane klientów (takich jak Sales.Customer w AdventureWorks2008R2 bazy danych).<Zamówienia> element mapowany do tabela, która przechowuje dane zamówienie w tej samej bazy danych (np. Sales.SalesORderHeader).Tych tabel podstawowych, Sales.Customer i Sales.SalesOrderHeader są powiązane, ponieważ klienci składanie zamówień.To IDKlienta w tabela Sales.SalesOrderHeader klucz obcy odnoszące się do klucz podstawowy IDKlienta w tabela Sales.Customer.Można ustanowić te relacje między mapowania elementów schematu za pomocą <sql:relationship> adnotacji.
W adnotacjami schematu XDR <sql:relationship> adnotacji jest używany do zagnieżdżać elementy schematu hierarchicznie na podstawie klucz podstawowy i relacje klucz obcy między tabel podstawowych, do którego tablica elementów.Określając <sql:relationship> adnotacji, należy zidentyfikować:
tabela podstawowa (Sales.Customer) i tabela obca (Sales.SalesOrderHeader) i
Warunek łączyć niezbędne (IDklienta w Sales.SalesOrderHeader jest kluczem obcym, odnoszące się do IDKlienta klucz podstawowy w tabela Sales.Customer).
Informacje te są używane do generowania odpowiednich hierarchii (dla każdego <klienta> element, odnośnych <zamówienia> elementy są wyświetlane jako elementy podrzędność).
Określono następujące atrybuty o podanie nazwy tabela i informacji niezbędnych łączyć, z <sql:relationship> adnotacji.Te atrybuty są prawidłowe tylko z sql:relationship element:
key-relation
Określa podstawowy relacji (tabela).key
Określa klucz podstawowy key-relation.Jeśli klucz podstawowy składa się z wielu kolumn, wartości są określone spacji między nimi.Brak pozycyjne mapowania między wartościami określonymi dla wielokolumnowego klucza i odpowiadający mu klucz obcy.foreign-relation
Określa obcego relacji (tabela).foreign-key
Określa klucz obcy w foreign-relation do key w key-relation.Jeśli klucz obcy składa się wiele atrybutów (kolumn), spacji między nimi są określone wartości klucza obcego.Brak pozycyjne mapowania między wartościami określonymi dla wielokolumnowego klucza i odpowiadający mu klucz obcy.
Ostrzeżenie
Użytkownik musi zapewnić, że Microsoft SQL Server typy danych key i foreign-key są takie, że ich można niejawnie konwertować Jeśli to konieczne.
sql:relationship Tag mogą być dodawane tylko do <elementu> lub <atrybut> elementów schematu adnotacjami.Gdy sql:relationship określony dla atrybut, powinny być sql:relation i sql:field określona dla atrybut zapewnić, że jedna wartość jest pobierana (wiele atrybut tej samej nazwy są nieprawidłowe w formacie XML).Gdy sql:relationship jest określony w elemencie relacji może spowodować pojedynczą wartość lub zestaw wartości.
sql:relationship Tag jest używany do określenia pojedynczego logiczną relacją między dwa podmioty.Atrybuty określają stosunków i pól używanych do definiowania relacji logicznych.Wiele wystąpień sql:relationship można określić w element lub atrybut w schemacie adnotacjami, która wskazuje złożonych relacji między element lub atrybut i jego zamkniętego elementu.Wszystkie wystąpienia sql:relationship są używane razem, do definiowania złożonych relacji.
Gdy wiele wystąpień sql:relationship tag są określone w element lub atrybut, kolejność jest istotna.
sql:key-fields Adnotacji musi być określona w elemencie zawierające element podrzędność i sql:relationship, definicja między elementem i podrzędność, które nie oferuje klucz podstawowy z tabela określonej w elemencie nadrzędnym.Aby uzyskać więcej informacji, zobacz Identyfikowanie przy użyciu kolumn klucz sql:klucz-pól (SQLXML 4.0).Do wytworzenia właściwego zagnieżdżanie w wyniku, zalecane jest sql:key-fields określonych w wszystkie schematy.
Ostrzeżenie
W schemacie mapowania relacyjnego wartości, takie jak nazwa tabela i nazwę kolumna są przypadek-poufne.
Przykłady
Aby utworzyć próbki pracy przy użyciu poniższych przykładach, musi spełniać określone wymagania.Aby uzyskać więcej informacji, zobacz Wymagania dotyczące uruchamianie przykładów SQLXML.
A.Określ sql:relationship na <element>
Obejmuje to adnotacjami schematu XDR <klienta> i <zamówienia> elementów.<Zamówienia> element jest podrzędność element <klienta> elementu.
W schemacie sql:relationship adnotacji jest określona na <zamówienia> podrzędność elementu.Adnotacja identyfikuje IDKlienta w tabela Sales.SalesOrderHeader jako klucz obcy, odnoszące się do klucz podstawowy IDKlienta w tabela Sales.Customer.Zatem zamówienia należących do klienta są wyświetlane jako element podrzędność tego <klienta> elementu.
<?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="Order" sql:relation="Sales.SalesOrderHeader" >
<AttributeType name="CustomerID" />
<AttributeType name="SalesOrderID" />
<AttributeType name="OrderDate" />
<attribute type="CustomerID" />
<attribute type="SalesOrderID" />
<attribute type="OrderDate" />
</ElementType>
<ElementType name="Customer" sql:relation="Sales.Customer" >
<AttributeType name="CustomerID" />
<attribute type="CustomerID" />
<element type="Order" >
<sql:relationship
key-relation="Sales.Customer"
key="CustomerID"
foreign-key="CustomerID"
foreign-relation="Sales.SalesOrderHeader" />
</element>
</ElementType>
</Schema>
Ostrzeżenie
W schemacie mapowania relacyjnego wartości, takie jak nazwa tabela i nazwa kolumna są przypadek-poufne.W poprzednim przykładzie klientów jest wartością sql:relation atrybut.Odpowiednie key-relation wartość atrybut musi być również klientów.
Aby przetestować przykładowe kwerendy XPath względem schematu
Kod schematu skopiować i wkleić go do pliku tekstowego.Zapisz plik jako xdr.xml relacji sql.
Skopiuj następujący szablon i wkleić go do pliku tekstowego.Zapisz plik jako sql relacji xdrT.xml w tym samym katalogu, w którym zapisano sql relacji xdr.xml.Kwerenda w szablonie wybiera odbiorcy z IDKlienta 1.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="sql-relationship-xdr.xml"> Customer[@CustomerID="1"] </sql:xpath-query> </ROOT>Ścieżka katalogu określonego dla mapowania schematu (sql relacji xdr.xml) jest katalog, w którym zapisany szablon.Ścieżka bezwzględna również można określić, na przykład:
mapping-schema="C:\SqlXmlTest\sql-relationship-xdr.xml"Tworzenie i używanie szablon wykonać skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).
Aby uzyskać więcej informacji, zobacz Przy użyciu ADO SQLXML wykonanie kwerendy 4.0.
Oto częściowe zestaw wyników:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer CustomerID="1">
<Order CustomerID="1" SalesOrderID="43860" OrderDate="2005-08-01T00:00:00" />
<Order CustomerID="1" SalesOrderID="44501" OrderDate="2005-11-01T00:00:00" />
<Order CustomerID="1" SalesOrderID="45283" OrderDate="2006-02-01T00:00:00" />
<Order CustomerID="1" SalesOrderID="46042" OrderDate="2006-05-01T00:00:00" />
</Customer>
</ROOT>
B.Określ sql:relationship na <atrybut> i utworzyć odwołania do dokumentu przy użyciu Identyfikatora i IDREFS.
W tym przykładzie lokalny dokument odniesienia są określane przy użyciu Identyfikatora i IDREFS.Schematu XDR próbka składa się z <klienta> element, który mapuje do tabela Sales.Customer.Ten element składa się z <zamówienia> element podrzędność, który mapuje do tabela Sales.SalesOrderHeader.
W przykładzie sql:relationship jest określona dwukrotnie:
sql:relationshipokreślone na <zamówienia> podrzędność elementu.Zatem zamówienia należących do odbiorcy pojawi się jako element podrzędność tego <klienta> elementu.
sql:relationshippodano także na OrderIDList atrybut <klienta> elementu.Ten atrybut jest zdefiniowany jako typ IDREFS odnoszące się do SalesOrderID atrybutu (atrybut typu ID) <zamówienia> elementu.Dlatego sql:relationship jest wymagane.W takim przypadek sql:relationship adnotacji pozwala listy zamówień należących do klientowi pojawiają się z tą <klienta> elementu.
Atrybuty określone jako IDREFS można odwoływać się do Identyfikatora typu atrybutów, umożliwiając łącza intradocument.
Ponieważ numery nie są prawidłowe wartości Identyfikatora (musi być nazwą tokeny) sql:id-prefix został użyty do wprowadź identyfikator zamówienia wartość ciąg.Aby uzyskać więcej informacji, zobacz Tworzenie sql:id prawidłowy identyfikator IDREF i przy użyciu atrybutów typu IDREFS-prefiks (schematu XDR).
<?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="Order" sql:relation="Sales.SalesOrderHeader" >
<AttributeType name="SalesOrderID" dt:type="id" sql:id-prefix="Ord-" />
<AttributeType name="OrderDate" />
<attribute type="SalesOrderID" />
<attribute type="OrderDate" />
</ElementType>
<ElementType name="Customer" sql:relation="Sales.Customer">
<AttributeType name="CustomerID" />
<attribute type="CustomerID" />
<AttributeType name="OrderIDList" dt:type="idrefs"
sql:id-prefix="Ord-"/>
<attribute type="OrderIDList" sql:relation="Sales.SalesOrderHeader"
sql:field="SalesOrderID">
<sql:relationship
key-relation="Sales.Customer"
key="CustomerID"
foreign-relation="Sales.SalesOrderHeader"
foreign-key="CustomerID" />
</attribute>
<element type="Order">
<sql:relationship key-relation="Sales.Customer"
key="CustomerID"
foreign-relation="Sales.SalesOrderHeader"
foreign-key="CustomerID" />
</element>
</ElementType>
</Schema>
Aby przetestować przykładowe kwerendy XPath względem schematu
Kod schematu skopiować i wkleić go do pliku tekstowego.Zapisz plik jako idIdref xdr.xml.
Skopiuj następujący szablon i wkleić go do pliku tekstowego.Zapisz plik jako xdrT.xml idIdref w tym samym katalogu, w którym zapisano idIdref xdr.xml.Kwerenda w szablonie wybiera odbiorcy z IDKlienta 1.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="idIdref-xdr.xml"> Customer[@CustomerID="1"] </sql:xpath-query> </ROOT>Ścieżka katalogu określonego dla mapowania schematu (idIdref xdr.xml) jest katalog, w którym zapisany szablon.Ścieżka bezwzględna również można określić, na przykład:
mapping-schema="C:\SqlXmlTest\idIdref-xdr.xml"Tworzenie i używanie szablon wykonać skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).
Aby uzyskać więcej informacji, zobacz Przy użyciu ADO SQLXML wykonanie kwerendy 4.0.
Zestaw wyników jest następujący:
<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="2005-08-01T00:00:00" />
<Order SalesOrderID="Ord-44501" OrderDate="2005-11-01T00:00:00" />
<Order SalesOrderID="Ord-45283" OrderDate="2006-02-01T00:00:00" />
<Order SalesOrderID="Ord-46042" OrderDate="2006-05-01T00:00:00" />
</Customer>
</ROOT>
C.Określ sql:relationship na wiele elementów
W tym przykładzie adnotacjami schematu XDR składa się z <klienta>, <zamówienia>, i <OD> elementów.
The <Order> element is a child element of the <Customer> element.sql:relationship is specified on the <Order> child element so that orders belonging to a customer appear as child elements of <Customer>.
The <Order> element includes the <OD> child element.sql:relationship is specified on the <OD> child element so that the order details belonging to an order appear as child elements of that <Order> element.
<?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="OD" sql:relation="Sales.SalesOrderDetail" >
<AttributeType name="SalesOrderID" />
<AttributeType name="ProductID" />
<attribute type="SalesOrderID" />
<attribute type="ProductID" />
</ElementType>
<ElementType name="Order" sql:relation="Sales.SalesOrderHeader" >
<AttributeType name="CustomerID" />
<AttributeType name="SalesOrderID" />
<AttributeType name="OrderDate" />
<attribute type="CustomerID" />
<attribute type="SalesOrderID" />
<attribute type="OrderDate" />
<element type="OD" >
<sql:relationship
key-relation="Sales.SalesOrderHeader"
key="SalesOrderID"
foreign-key="SalesOrderID"
foreign-relation="Sales.SalesOrderDetail" />
</element>
</ElementType>
<ElementType name="Customer" sql:relation="Sales.Customer" >
<AttributeType name="CustomerID" />
<attribute type="CustomerID" />
<element type="Order" >
<sql:relationship
key-relation="Sales.Customer"
key="CustomerID"
foreign-key="CustomerID"
foreign-relation="Sales.SalesOrderHeader" />
</element>
</ElementType>
</Schema>
Aby przetestować przykładowe kwerendy XPath względem schematu
Kod schematu skopiować i wkleić go do pliku tekstowego.Zapisz plik jako sql relacji multi-xdr.xml.
Skopiuj następujący szablon i wkleić go do pliku tekstowego.Zapisz plik jako sql relacji multi-xdrT.xml w tym samym katalogu, w którym zapisano sql relacji multi-xdr.xml.W szablonie zwraca informacje o zamówieniach nabywcy, którego IDKlienta ma wartość 1 i SalesOrderID jest 43860.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="sql-relationship-multi-xdr.xml"> /Customer[@CustomerID="1"]/Order[@SalesOrderID=43860] </sql:xpath-query> </ROOT>Ścieżka katalogu określonego dla mapowania schematu (sql relacji multi-xdr.xml) jest katalog, w którym zapisany szablon.Ścieżka bezwzględna również można określić, na przykład:
mapping-schema="C:\SqlXmlTest\sql-relationship-multi-xdr.xml"Tworzenie i używanie szablon wykonać skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).
Aby uzyskać więcej informacji, zobacz Przy użyciu ADO SQLXML wykonanie kwerendy 4.0.
Zestaw wyników jest następujący:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order CustomerID="1" SalesOrderID="43860" OrderDate="2005-08-01T00:00:00">
<OD SalesOrderID="43860" ProductID="761" />
<OD SalesOrderID="43860" ProductID="770" />
<OD SalesOrderID="43860" ProductID="758" />
<OD SalesOrderID="43860" ProductID="765" />
<OD SalesOrderID="43860" ProductID="732" />
<OD SalesOrderID="43860" ProductID="762" />
<OD SalesOrderID="43860" ProductID="738" />
<OD SalesOrderID="43860" ProductID="768" />
<OD SalesOrderID="43860" ProductID="753" />
<OD SalesOrderID="43860" ProductID="729" />
<OD SalesOrderID="43860" ProductID="763" />
<OD SalesOrderID="43860" ProductID="756" />
</Order>
</ROOT>
D.Określanie relacji pośrednich
W tym przykładzie adnotacjami schematu XDR składa się z <klienta> i <OD> elementów.Relacja między tymi elementami jest pośrednie (Sales.Customer tabela jest powiązana z tabeli Sales.SalesOrderDetail za pośrednictwem tabeli Sales.SalesOrderHeader).Dotyczą klienta szczegóły zamówienia, najpierw relację między tabelą Sales.Customer i Sales.SalesOrderHeader tabela jest określony.Następnie określono relacji między tabelami Sales.SalesOrderHeader i Sales.SalesOrderDetail.
Jest to schemat:
<?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="OD" sql:relation="Sales.SalesOrderDetail" >
<AttributeType name="SalesOrderID" />
<AttributeType name="ProductID" />
<AttributeType name="UnitPrice" />
<attribute type="SalesOrderID" />
<attribute type="ProductID" />
<attribute type="UnitPrice" />
</ElementType>
<ElementType name="Customer" sql:relation="Sales.Customer" >
<AttributeType name="CustomerID" />
<attribute type="CustomerID" />
<element type="OD" >
<sql:relationship
key-relation="Sales.Customer"
key="CustomerID"
foreign-relation="Sales.SalesOrderHeader"
foreign-key="CustomerID"/>
<sql:relationship
key-relation="Sales.SalesOrderHeader"
key="SalesOrderID"
foreign-relation="Sales.SalesOrderDetail"
foreign-key="SalesOrderID" />
</element>
</ElementType>
</Schema>
Aby przetestować przykładowe kwerendy XPath względem schematu
Kod schematu skopiować i wkleić go do pliku tekstowego.Zapisz plik jako pośredniego xdr.xml relacji.
Skopiuj następujący szablon i wkleić go do pliku tekstowego.Zapisz plik jako pośredniego relacji xdrT.xml w tym samym katalogu, w którym zapisano pośrednich xdr.xml relacji.Kwerenda w szablonie zwraca informacje o zamówieniach nabywcy, którego IDKlienta wynosi 1.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" > <sql:xpath-query mapping-schema="indirect-relationship-xdr.xml" > /Customer[@CustomerID="1"] </sql:xpath-query> </ROOT>Ścieżka katalogu określonego dla mapowania schematu (pośrednie relacji xdr.xml) jest katalog, w którym zapisany szablon.Ścieżka bezwzględna również można określić, na przykład:
mapping-schema="C:\SqlXmlTest\indirect-relationship-xdr.xml"Tworzenie i używanie szablon wykonać skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).
Aby uzyskać więcej informacji, zobacz Przy użyciu ADO SQLXML wykonanie kwerendy 4.0.
Oto wynik częściowy:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer CustomerID="1">
<OD SalesOrderID="43860" ProductID="761" UnitPrice="503.3507" />
<OD SalesOrderID="43860" ProductID="770" UnitPrice="503.3507" />
<OD SalesOrderID="43860" ProductID="758" UnitPrice="1049.7528" />
<OD SalesOrderID="43860" ProductID="765" UnitPrice="503.3507" />
...
</Customer>
</ROOT>
E.Określanie relacji łączyć multikey
Określając za pomocą łączyć sql:relationship, można określić łączyć obejmujące dwa lub więcej kolumn.W takim przypadek nazwa kolumna key i foreign-key są wyświetlane przy użyciu miejsca.
W tym przykładzie założono, istnieje tych dwóch tabel w tymczasowej bazie danych (takich jak tempdb):
dbo.NABYW (fname, lname)
dbo.Nika (IDZamówienia, fname lname)
Kolumny fname i lname tworzą klucz podstawowy z tabela Nabywca.IDZamówienia jest klucz podstawowy tabela nika.Fname i lname tabela nika są klucze obce, odnoszące się do fname i lname klucz podstawowy z tabela Nabywca.
This schema consists of <Cust> and <Ord> elements.sql:relationship is used to join them.
<?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="Ord" sql:relation="Ord" >
<AttributeType name="OrderID" />
<attribute type="OrderID" />
</ElementType>
<ElementType name="Cust" sql:relation="Cust" >
<AttributeType name="fname" />
<AttributeType name="lname" />
<attribute type="fname" />
<attribute type="lname" />
<element type="Ord" >
<sql:relationship
key-relation="Cust"
key="fname lname"
foreign-relation="Ord"
foreign-key="fname lname"/>
</element>
</ElementType>
</Schema>
Aby przetestować przykładowe kwerendy XPath względem schematu
Utwórz dwie tabele: NABYW i Ord.
USE tempdb CREATE TABLE dbo.Cust( fname varchar(20), lname varchar(20) ) CREATE TABLE dbo.Ord ( OrderID int primary key, fname varchar(20), lname varchar(20) ) GODodać przykładowe dane:
INSERT INTO Cust values ('Nancy', 'Davolio') INSERT INTO Cust values('Andrew', 'Fuller') INSERT INTO Ord values (1,'Nancy', 'Davolio') INSERT INTO Ord values (2,'Nancy', 'Davolio') INSERT INTO Ord values (3,'Andrew', 'Fuller')Kod schematu skopiować i wkleić go do pliku tekstowego.Zapisz plik jako łączyć multikey-xdr.xml.
Skopiuj następujący szablon i wkleić go do pliku tekstowego.Zapisz plik jako multikey łączyć xdrT.xml w tym samym katalogu, w którym zapisano łączyć multikey-xdr.xml.Kwerenda w szablonie zwraca informacje o odbiorcy.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" > <sql:xpath-query mapping-schema="multikey-join-xdr.xml" > /Cust </sql:xpath-query> </ROOT>Ścieżka katalogu określonego dla mapowania schematu (łączyć multikey-xdr.xml) jest katalog, w którym zapisany szablon.Ścieżka bezwzględna również można określić, na przykład:
mapping-schema="C:\SqlXmlTest\multikey-join-xdr.xml"Tworzenie i używanie szablon wykonać skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).
Aby uzyskać więcej informacji, zobacz Przy użyciu ADO SQLXML wykonanie kwerendy 4.0.
Oto wynik częściowy:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Cust fname="Andrew" lname="Fuller">
<Ord OrderID="3" />
</Cust>
<Cust fname="Nancy" lname="Davolio">
<Ord OrderID="1" />
<Ord OrderID="2" />
</Cust>
</ROOT>
Ważne: