基于表的映射最容易理解。它将文档视为单独一个表或者一个表集,列数据可表示为纯PCDATA元素或者属性(attributes)。下面这个示范文档结构演示了基于表的映射:
<TableName>
<Row ColumnName0="Value0" ColumnNameN-1="ValueN-1"
>
<ColumnName1>Value1</ColumnName1>
. . .
<ColumnNameN>ValueN</ColumnNameN>
<Row>
<Row ColumnName0="Value0">
<ColumnName1>Value1</ColumnName1>
. . .
<ColumnNameN>ValueN</ColumnNameN>
<Row>
. . .
</TableName>
这种方式是对纯数据进行建模,无需一个文档,与关系模型非常相似。但是,它只适用于xml文档的一个有限的子集。
采用基于对象的映射,xml-DBMS则根据一种面向对象的方案将xml文档映射到数据库。在这个方案中,元素类型通常被视为类,而属性(attribute)和PCDATA被视为那些类的属性(properties)。这样一来,xml文档就可作为一个对象树来建模,其中的对象特定于文档中的数据。然后,可以将这些对象映射到数据库。下面这个示范文档结构演示了基于对象的映射:
<orders>
<order>
<order_id>OID12345</order_id>
<user_id>UID745632</user_id>
<posted_at>12.05.2003</posted_at>
<type>34</type>
<cargo>
<cargo_id>CID4553</cargo_id>
<title>Carrot</title>
<code>crt-568</code>
<quantity>3</quantity>
<weight>5</weight>
<danger>low</danger>
</cargo>
<cargo>
<cargo_id>CID4554</cargo_id>
<title>Potatoes</title>
<code>ptts-389</code>
<quantity>7</quantity>
<weight>9</weight>
<danger>high</danger>
</cargo>
</order>
</orders>
各种映射方式的细节超出了本书的范围,所以我会以上例为基础讲解一个实际的例子,它演示了如何在xml和DBMS之间进行转换。