Using Annotated XSD Schemas for Creating XML Views tutorial
Using sql:relation and sql:field

## Preliminaries

The sql:relation annotation maps an XML node in the XSD schema to a database table. The name of a table (view) is specified as the value of the sql:relation annotation. When sql:relation is specified on an element, the scope of this annotation applies to all attributes and subelements that are described in the complex type definition of that element, therefore, providing a shortcut in writing annotations. The sql:relation annotation also may be used if identifiers that are valid in SQL are not valid in XML. For example, 'Order Details' is a valid table name in SQL, but not in XML. In such cases, the sql:relation annotation can be used to specify the mapping, for example: <xsd:element name="OrderDetails" sql:relation="Order Details"> ... The sql:field annotation maps an XML node in the schema to a database column. It's not allowed to specify sql:field on an empty content element.

## Example

In this example, the XSD schema consists of an 'Emp' element of complex type with 'FirstName', 'LastName' and 'title' child elements and the 'EmpID' attribute. The sql:relation annotation maps the 'Emp' element to the Demo.demo.Employees table. The sql:field annotation maps the 'title' element to the 'Title' column and the 'EmpID' attribute to the "EmployeeID" column. No annotations are specified for the 'FirstName' and 'LastName' elements. This results in a default mapping of the elements to the columns with the same names.

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
      <xsd:element name="Emp" sql:relation="Demo.demo.Employees" >
       <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="FirstName"
                         type="xsd:string" />
            <xsd:element name="LastName"
                         type="xsd:string" />
            <xsd:element name="title"
    		     sql:field="Title"
                         type="xsd:string" />
         </xsd:sequence>
         <xsd:attribute name="EmpID"  sql:field="EmployeeID"  type="xsd:integer" />
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>

Let the schema is written to the file 'EmpSchema.xsd', then after loading this file by `xml_load_mapping_schema_decl` function, the first example will produce a result for the XPath query:

    XPATH [__view 'EmpSchema'] /*

the second example will produce a result for the XQuery query:

     select xquery_eval('<doc>{for $r in xmlview("EmpSchema")/* return $r}</doc>', xtree_doc('<q/>'));

<doc> is necessary for serialization (any name instead 'doc' is possible)