开始使用 Schematron
开始使用 Schematron 和 Altova 的 XMLSpy®
引言
本文以 Schematron 优秀教程中的第一个示例为例,展示了如何创建 XML 输入、.sch Schematron 模式文件,以及如何在 Altova 的 XMLSpy® XML 编辑器和“XML ValidatorBuddy”插件中即时验证所有内容。一旦您了解了它的工作原理,您也可以用同样的方式尝试教程中的其他示例。
本文中所述的一切内容,也都在 Schematron in XMLSpy - Chapter 2 中以 Flash 动画的形式展示。观看动画将有助于您理解本文的内容。
背景
XML 实例文件通常会与 W3C 模式进行验证,W3C 模式通常也是一个 XML 文件,文件扩展名为 .xsd。市面上有许多 XML 解析器支持此类验证。W3C 模式描述了可能的 XML 实例的结构以及元素和属性的数据类型。W3C 模式不提供任何方法来对 XML 实例应用语义检查。为了弥补这一点,Schematron 提供了一种定义规则的方法,用于在语义层面检查 XML。
工作原理
在 XMLSpy® 中使用 Schematron 验证之前,您需要安装“XML ValidatorBuddy”插件。您可以从 Download.com 下载安装程序。
输入 XML 和 Schematron 模式来自教程的 这部分。您可以从那里获取 XML,或者直接从下方复制并创建 XMLSpy® 中的新文档。
<?xml version="1.0" encoding="utf-8"?>
<doc>
<chapter id="c1">
<title>chapter title</title>
<para>Chapter content</para>
</chapter>
<chapter id="c2">
<title>chapter 2 title</title>
<para>Content</para>
</chapter>
<chapter id="c3">
<title>Title</title>
<para>Chapter 3 content</para>
</chapter>
</doc>
此时,我们需要保存 XML 输入文件。这是为了之后将其添加到 XMLSpy® 中的 Project 文件夹。使用“File | Save”命令进行保存,保存在您喜欢的位置。假设我们选择 input1.xml 作为文件名。
仅当两个文件都添加到 XMLSpy® 的同一个 Project 文件夹中时,“XML ValidatorBuddy”插件才会根据 Schematron 规则验证 XML。出于这个原因,我们在当前 Project 中创建一个“Schematron”Project 文件夹。如果 XMLSpy® 中没有加载 Project,请创建一个新的 Project 或打开一个现有 Project,然后将新文件夹添加到其中。右键单击新 Project 文件夹,然后使用上下文菜单底部的最后一个命令打开属性对话框。在相关编辑字段中,为该文件夹键入 xml;sch 作为文件扩展名。然后关闭对话框即可。
要添加 input1.xml,请将 input1.xml 设置为活动文档,然后选择新 Project 文件夹。然后使用“Project | Add Active File to Project”命令将其添加到文件夹中。文档会立即显示在 Project 文件夹中。
我们现在要创建一个新的 .sch 文件,但是 XMLSpy® 中的“Create new document”对话框默认不提供此文件类型。因此,我们需要添加此文件扩展名。您可以在“Options”对话框的“File types”选项卡中完成此操作。使用“Add new file extension”按钮,然后键入“sch”作为扩展名。在“Description”字段中键入类似“Schematron Schema”的内容也会有所帮助。
下一步是创建 Schematron 模式。本教程提供了一个空的 Schematron 文件模板,我们用它在 XMLSpy® 中创建一个新的 .sch 文档。
<?xml version="1.0" encoding="utf-8"?>
<iso:schema xmlns=http://purl.oclc.org/dsdl/schematron
xmlns:iso=http://purl.oclc.org/dsdl/schematron
xmlns:dp=http://www.dpawson.co.uk/ns# queryBinding='xslt2'
schemaVersion='ISO19757-3'>
<iso:title>Test ISO schematron file. Introduction mode</iso:title>
<iso:ns prefix='dp' uri='http://www.dpawson.co.uk/ns#'/>
<!-- Your constraints go here -->
</iso:schema>
之后,使用“Edit | Pretty-print XML text”来格式化 XML。这也会检查到目前为止创建的 XML 是否格式正确。
现在我们可以回到教程,将第一章中的 Schematron 规则复制到模式中。
<iso:pattern>
<iso:rule context="chapter">
<iso:assert test="title">A chapter should have a title</iso:assert>
</iso:rule>
</iso:pattern>
从上面复制 <iso:pattern>
元素,并将其粘贴到之前生成的 Schematron 模式中 <!-- Your constraints go here -->
注释的位置。此时完整的模式应如下所示:
<?xml version="1.0" encoding="utf-8"?>
<iso:schema xmlns=“http://purl.oclc.org/dsdl/schematron“
xmlns:iso=http://purl.oclc.org/dsdl/schematron
xmlns:dp=“http://www.dpawson.co.uk/ns#“
queryBinding=“xslt2“ schemaVersion=“ISO19757-3“>
<iso:title>Test ISO schematron file. Introduction mode</iso:title>
<iso:ns prefix=”dp” uri=”http://www.dpawson.co.uk/ns#”/>
<!-- Your constraints go here -->
<iso:pattern>
<iso:rule context="chapter">
<iso:assert test="title">A chapter should have a title</iso:assert>
</iso:rule>
</iso:pattern>
</iso:schema>
这样 Schematron 模式就完成了,我们可以保存它,然后将其添加到 XMLSpy® 中的 Project 文件夹,input1.xml 文档已添加到其中。我建议的文件名是 chapter1.sch。一旦 .sch Schematron 模式与 XML 输入实例在同一个 Project 文件夹中,我们就可以在 XMLSpy® 中使用“XML ValidatorBuddy”插件窗口的 Schematron 选项卡上的“Validate”按钮来验证它。在没有任何修改的情况下,input1.xml 现在应该是有效的。您可以通过将其中一个 title 元素放入注释中,使 XML 对 Schematron 模式无效。
XML 现在无效,“XML ValidatorBuddy”插件窗口会报告错误。
请注意,在验证输入实例之前,无需将其保存到磁盘。“XML ValidatorBuddy”插件直接从 XMLSpy® 的文本视图获取内容进行验证。
历史
- 2011 年 8 月 16 日 更新网络链接
- 2008 年 5 月 11 日 文章创建