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
|
<!--
-
- This file is part of the OpenLink Software Virtuoso Open-Source (VOS)
- project.
-
- Copyright (C) 1998-2006 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-3a">
<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 an attribute</refpurpose>
</refnamediv>
<refsect1 id="MS-A-3aa">
<title>Example.</title>
<para>
The schema in this example includes a 'Customer' element with 'CustomerID' and
'ContactName' child
elements and an OrderIDList attribute of IDREFS type. The 'Customer' element maps to the Customers table.
By default, the scope of this mapping applies to all the child elements or attributes unless sql:relation
is specified on the child element or attribute, in which case, the appropriate primary-key/foreign-key
relationship must be defined using the 'relationship' element. And the child element or attribute,
which specifies the different table using the relation annotation, must also specify the relationship annotation.
</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" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customer" sql:relation="Demo.demo.Customers" type="CustomerType" />
<xsd:complexType name="CustomerType" >
<xsd:sequence>
<xsd:element name="ContactName" type="xsd:string" />
<xsd:element name="CompanyName" type="xsd:string" />
<xsd:element name="City" type="xsd:string" />
</xsd:sequence>
<xsd:attribute name="OrderIDList"
type="xsd:IDREFS"
sql:relation="Demo.demo.Orders"
sql:field="OrderID"
sql:relationship="CustOrders" >
</xsd:attribute>
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:schema>
]]></programlisting>
<para>Let the schema is written to the file 'Cust_Order_attr.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_attr'] /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_attr")/*[@CustomerID="QUEEN"] return $r}</doc>', xtree_doc('<q/>')); ]]>
</programlisting>
</refsect1>
</refentry>
|