1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
<!--
-
- This file is part of the OpenLink Software Virtuoso Open-Source (VOS)
- project.
-
- Copyright (C) 1998-2012 OpenLink Software
-
- This project is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; only version 2 of the License, dated June 1991.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-->
<?xml version="1.0" encoding="ISO-8859-1"?>
<refentry id="MS-A-3b">
<refmeta>
<refentrytitle>Using Annotated XSD Schemas for Creating XML Views</refentrytitle>
<refmiscinfo>tutorial</refmiscinfo>
</refmeta>
<refnamediv>
<refname></refname>
<refpurpose>Using sql:relationship to Specify Relationship on multiple elements.</refpurpose>
</refnamediv>
<refsect1 id="MS-A-3ba">
<title>Example. Specifying sql:relationship on multiple elements.</title>
<para>
In this example, the annotated XSD schema contains the 'Customer', 'Order', and 'OD'
elements. The 'Order' element is a subelement of the 'Customer' element. <sql:relationship>
is specified on the 'Order' subelement; therefore, orders that belong to a customer appear as subelements
of 'Customer'.
The 'Order' element includes the 'OD' subelement. 'sql:relationship' is specified
on 'OD' subelement,
so the order details that pertain to an order appear as subelements of that 'Order' element.
</para>
<programlisting><![CDATA[
<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="Demo.demo.Customers"
parent-key="CustomerID"
child="Demo.demo.Orders"
child-key="CustomerID" />
<sql:relationship name="OrderOrderDetail"
parent="Demo.demo.Orders"
parent-key="OrderID"
child="Demo.demo.Order_Details"
child-key="OrderID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customer" sql:relation="Demo.demo.Customers" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Order" sql:relation="Demo.demo.Orders"
sql:relationship="CustOrders" maxOccurs="unbounded" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="OrderDetail"
sql:relation="Demo.demo.Order_Details"
sql:relationship="OrderOrderDetail"
maxOccurs="unbounded" >
<xsd:complexType>
<xsd:attribute name="OrderID" type="xsd:integer" />
<xsd:attribute name="ProductID" type="xsd:string" />
<xsd:attribute name="Quantity" type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="OrderID" type="xsd:integer" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
]]></programlisting>
<para>Let the schema is written to the file 'Cust_Order_OD.xsd', then after loading this file by
<function>xml_load_mapping_schema_decl</function> function, the first example will produce a result for the XPath query:
</para>
<programlisting><![CDATA[
XPATH [__view 'Cust_Order_OD'] /Customer[@CustomerID="QUEEN"];
]]></programlisting>
<para>
the second example will produce a result for the XQuery query:
</para>
<programlisting><![CDATA[
select xquery_eval('<doc>{for $r in xmlview("Cust_Order_OD")/*[@CustomerID="QUEEN"] return $r}</doc>', xtree_doc('<q/>'))
]]></programlisting>
</refsect1>
</refentry>
|