XML 到 XML 映射编辑器示例自述文件

该示例项目告诉您如何在源 XML 文档和目标 XML 文档之间定义映射以及如何生成相应的 XSLT。包含了一些示例来说明映射的不同方面。XML 到 XML 映射编辑器可接受多种格式(DTD、XSD 或 XML)的输入。下表总结了每个示例采用什么样的输入和输出。
 
示例描述 DTD 作为输入/输出 XSD 作为输入/输出 HTML 模板(XML + DTD)
CD 
地址
PO
书籍
机构组织图
奥赛罗
城市
学校
职员
旅行
方向导航


常见问题:

指定 DTD 或 XSD 作为输入

问题:为什么在两个实例文档之间定义映射时需要 DTD 或 XSD 文件?我没有 DTD 或 XSD 文件。

回答:DTD 或 XSD 包含生成正确的 XSLT 所需要的类型信息。仅有实例文档不足以确定某一元素是可重复的还是不可重复的。使用 DTD 或 XSD 后,转换所需要的该级别的信息就清楚了。

如果没有 DTD,可使用 DTD 文件编辑器从 XML 文档生成一个 DTD。有了该生成的 DTD 文件后,就可调用 XML 到 XML 映射编辑器了。如果愿意,也可从该 DTD 生成一个 XSD。

问题:可以指定 XML 文档吗?

回答:如果 XML 文档包含有 DOCTYPE 或 xsi:schemaLocation 标记来指示其相应的 DTD 或 XSD 的话,可指定 XML 文档作为输入。如果实例文档成功通过 XML 编辑器的验证,则可将它用作 XML 到 XML 映射编辑器的输入。

问题:使用 DTD 或 XSD 作为输入有什么不同?

回答:如果想在 XSLT 和输出文档中使用名称空间,则应该使用 XSD 作为输入。请参阅 XML 模式和 XML 编辑器中的文档以获取有关名称空间如何工作的详细描述。XSD 示例也提供了不同的名称空间使用模式。

HTML 模板

在将 XML 文档转换为 HTML 文档中通常会用到 XSLT。

问题:因为 XHTML 和 HTML 具有类属标记,所以 DTD 不能完整描述它们。仍能用 XML 到 XML 映射编辑器来生成 XSLT 吗?

回答:虽然 DTD 不能完整描述 XHTML 和 HTML,但 DTD 只是用来提供元数据的,因此它不必是完整的。只要 DTD 定义了想要映射的那部分文档,对于 XML 到 XML 映射编辑器就足够了。

书籍机构组织图奥赛罗示例告诉您如何为 HTML 片断定义 DTD 并在目标 HTML 文档中为输出 HTML 提供模板数据。


CD 示例

一个简单的示例。在此示例中,cdtitle.xml 中有关 CD 的信息被转换为 newcdtitle.dtd 文件中所描述的另一种 XML 格式。

地址示例

此示例告诉您如何将地址描述从一种格式转换为另一种格式。它提供了标记转换和如何定义 XPath 函数的示例。

PO 示例

在此示例中,从 Web 客户端中接收到的采购订单被转换为可由机构的后端系统处理的另一种格式。它告诉您如何调用 Java bean 或外部 JavaScript 来计算一些值,例如,为请求生成一个唯一的内部标识。

书籍示例

此示例告诉您如何获取 Books.xml 中描述的书籍清单,以及如何生成样式表以便将该清单转换为 HTML,用于在 Web 浏览器中呈示。bookhtml.xml 描述了目标格式,该目标格式为一个 HTML 表。该示例也引入了排序的概念。XML 中描述的书籍的无序清单在 HTML 中按照类别和价格显示。

机构组织图示例

该示例摘自 XSLT Programmer's Reference 一书,并使用了一个常见的 stylexml.transformet 模式,即所谓的“填空”样式表模式。orgchart.xml 文件表示一个公司的组织结构图。它是以递归的结构来组织的,该结构反应了管理层次结构。生成的样式表在一个 HTML 表中显示该数据,该表显示职员的名字以及他或她的老板的名字。

奥赛罗示例

该示例同样摘自 XSLT Programmer's Reference 一书,并使用了一个常见的样式表模式,即所谓的“基于规则”样式表模式。othello.xml 文件包含了来自莎士比亚的戏剧《奥赛罗》中的一个场景。生成的样式表以一个 HTML 表的形式呈示该戏剧。该表包含两列,第一列包含说话者的名字,第二列包含对白的内容。

城市示例

这是三个分组示例中的第一个,它引入了分组的概念。该示例摘自 XSLT Programmer's Reference 一书。cities.xml 文件列示了所有城市及其相应国家或地区。可通过定义组或键来改变输出格式,以列示属于某一特定国家或地区的城市。

学校示例

这是第二个分组示例。school.xml 文件列示学校中的学生以及每个学生学习的科目。可将它转换为另一种格式来列示学校开设的科目以及登记学习每个科目的学生。

职员示例

这是第三个分组示例。employee.xml 文件包含一个职员清单,该清单是从典型的 SQL 查询创建的。employee.xml 文件是由 SQL 查询构建器生成的。该查询的结果是一个显示职员清单的平面结构。可将它转换为一个按部门分组这些职员的层次结构。

旅行示例

该示例告诉您如何合并来自多个源的数据以生成一个结果文档。hotel.xml 包含旅馆预订信息,airline.xml 包含机票预订信息。合并了这两个文件的数据来产生一个行程表。在 itinerary.dtd 文件中描述了行程表格式。

方向导航示例

在此示例中,处理加拿大和美国地址的驾驶方向导航信息被从一种格式转换为另一种格式。该示例演示如何在映射会话中动态地选择或映射一个选项的不同成员。它还演示了如何在 XML 到 XML 映射中将 <xsl:choose> 指示添加到任何目标元素或属性。