Schematron

1、XML Schema:

?定义可出现在文档中的元素
?定义可出现在文档中的属性
?定义哪个元素是子元素
?定义子元素的次序
?定义子元素的数目
?定义元素是否为空,或者是否可包含文本
?定义元素和属性的数据类型
?定义元素和属性的默认值以及固定值

 

2、XML  Schematron:

Schematron 文档基本上是一组应用于 XML 数据的约束。可以以两种方式之一表达具体的 Schematron 约束:
      作为断言,这意味着对应用于实例文档的特定条件进行测试。实例文档要想有效,所有断言的计算结果都必须是 true。
      作为报告,在这种情况下也对应用的条件进行测试。但是,测试的意义与断言的意义正好相反。如果测试结果是 true,那么文档将处于无效状态。
Schematron 允许将断言和报告一起分组在称为规则 的结构中,然后将这些规则一起分组在模式 中。

可以使用 XPath 指定测试条件,还可以指定应用测试条件的上下文。Schematron 作者还可以提供在违反条件时应用的文本。这些文本应该是人可阅读的,用来向正在操纵数据实例的最终用户进行说明。另外,这些文本也可以具有更强的技术性,从而向正在构造 XML 实例的 XML 开发人员指出 XML 实例必须符合给定 Schematron 文档中定义的约束。

在本文中,我们使用 清单 1 中的简单 XML 实例文档。


清单 1. 简单 XML 文档
           
           
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.example.org Simple.xsd">
            100
            0
           


清单 1 中的 XML 实例文档引用一个称为 Simple.xsd 的模式,这个模式的内容见 清单 2。


清单 2. 简单 XML 文档的 XML 模式
           
           
            targetNamespace="http://www.example.org"
            xmlns:ex="http://www.example.org"
            elementFormDefault="qualified">
           
           
           
           
           
           
           
           


清单 2 中的 XML 模式文档声明元素 A 和元素 B 的类型是 integer。但是,XML 模式无法定义对这两个元素的值的约束 —— 例如,它们的和等于 100。但是,在 Schematron 中很容易定义这个约束,见 清单 3。


清单 3. 简单 XML 文档的 Schematron 定义
           
           
            AB Example
           
           
                 
                      
                              The sum of the values of A and B must be 100.
                      
               
           
           


尽管目前对 Schematron 的介绍还很简短,但是您可以很容易地看出这个文档的作用。对于应用这个文档的任何 XML 数据,A 和 B 的和值必须等于 100,这是由惟一的 assert 元素的 test 属性中的 XPath 表达式声明的。

 

Schematron 断言语言提供了一种机制来对使用 XPath 表达式的 XML 文档的有效性进行断言。在一个 Schematron 文档中有 6 个常用元素:schema、ns、pattern、rule、assert 和 report。Schematron 断言语言所使用的元素的命名空间 URI 是 http://www.ascc.net/xml/schematron。

元素:架构的文档元素。其子元素包括 title 元素(包含架构的可读名称)、ns 元素(用于指定架构中的 XPath 表达式所使用的 namespace<->prefix 绑定)、phase 元素(描述应该一起执行的模式组)、pattern 元素(包含要根据其验证文档的规则组)以及 diagnostics 元素(用于在文档断言失败时提供较细粒度的错误消息)。schema 元素还包含以下属性:id、version、schemaVersion、fpi、defaultPhase 和 icon。下面是 schema 元素的一个示例:


  A Schema for Books
 
 
   
     
   A book must have at least one author
     
   
 
 
   
     
   Every book that is on loan must have a return date
     
   
 

元素:它用于指定 XPath 表达式在 pattern、rule 和 assert 元素中使用的 prefix<->namespace 绑定。它有一个必需的 prefix 和 uri 属性,它们用于定义命名空间前缀和与该前缀绑定的命名空间名称。下面是 ns 元素的一个示例。


元素:pattern 包含一个 rule 元素列表。pattern 元素还包含以下属性:id、name、see 和 icon。模式的主要用途是将类似的断言分组到一起,这样我们就可以创建阶段 — 在其中为验证管道的不同阶段执行不同模式的组合。下面是 pattern 元素的一个示例:


 see="http://www.example.com/books/guidelines.html"
 name="Test for non-zero number of authors">
   
     
         A book must have at least one author
     
   
 

元素:assert 和 report 元素包含在 rule 元素中。rule 元素有一个包含 XPath 表达式的 context 属性。来自匹配 context 属性所指定的 XPath 表达式的输入文档的所有节点,随后会根据 rule 中的每个 assert 和 report 元素来测试,以检查它们是否满足断言。规则还有一个用于提供宏包含机制的 abstract 属性。当属性值为 true 时,该规则的内容可以包含在其他 rule 元素中。rule 元素可以具有一个或多个引用抽象 rule 的 extends 元素。在验证期间,rule 的 extends 元素由目标抽象 rule 的内容所替换。rule 还可以包含一个 key 元素,该元素提供一个在文档的部分之间定义交叉引用的机制,它类似于 XSLT 中的 key 元素。key 元素具有一个 name 属性,用于标识 key 和包含要与其匹配的 XPath 表达式的 path 属性。下面是 rule 元素的一个示例:


     
       A book must have at least one author
     
   
元素:assert 元素提供的机制用于测试关于元素内容模型的语句(即断言)是否为真。这个元素的 test 属性包含一个 XPath 表达式。如果使用 XPath boolean() 函数将 XPath 查询结果转换为布尔值之后结果为 false,则会出现一个验证错误。在这种情况下,assert 元素的内容将作为错误消息发出。对于错误消息,assert 元素允许混合内容(文本与元素交错)。大多数允许作为子元素的元素都是用于可视化布局的,而且是从 HTML 借用的,如 p、emph 和 dir。最后允许的子元素是 name 元素。当错误消息发出时,name 元素将被 context 元素的名称所替换。为了使架构作者能够重复使用错误消息,assert 元素可以包含一个 diagnostics 属性,这个属性可以引用架构的 diagnostics 元素中的一个或多个 diagnostic 元素。这样,如果出现验证错误,assert 元素的内容和所引用的 diagnostic 元素的内容都会被发出。assert 元素还具有以下其他属性:id、role、subject 和 icon。下面是 assert 元素的一个示例:


       A book must have at least one author

元素:除了一个至关重要的差异外,这个 report 元素与 assert 元素完全相同。如果使用 XPath boolean() 函数将 test 属性中的 XPath 查询结果转换为布尔值之后结果为 true,则会出现一个验证错误。下面是 report 元素的一个示例:


  Every book that is on loan must have a return date
 

 

你可能感兴趣的:(Schematron)