关于使用XSD进行XML验证的问题

时间:2010-04-09 11:25:10

标签: xml validation xsd

我希望创建一个XSD文档,为我验证一些XML。例如,假设XML文档旨在描述书籍:

<?xml version="1.0" encoding="UTF-8"?>
<book>
    <comment>Bob's very first book</comment>
    <name>Bob's book</name>
    <author>Bob</author>
    <year>2009</year>
    <publisher>
        <name>Dan's book publishing enterprise</name>
        <address>123 Fake St.</address>
    </publisher>
</book>

我们也要说我只关心三个要素 - 名字,作者和年份。它们是必需的,应根据模式进行验证。我不控制我收到的XML文件,因此元素的顺序无关紧要,任何其他元素都不允许通过XSD验证。

遵循这些要求,我尝试构建一个能够进行此类验证的XSD架构,但我无法做到这一点。可以按任何顺序定义元素的约束排除了sequence指标。我剩下的是allchoice指标。 all是明显的选择,但它不允许我使用any元素。

我也玩弄了这个想法:

<include schemaLocation="year.xsd"/>
<include schemaLocation="name.xsd"/>
<include schemaLocation="author.xsd"/>
....
    <sequence>
        <any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </sequence>

虽然如果在XML文件中找到,名称年份和作者将被验证,但这不会检查强制性元素 - 我无法指定年份,作者和书名需要通过验证。

有没有人能给我提示如何构建一个XSD文档来验证一些无序的必需元素,并且仍然允许XML文件中的未定义元素通过验证?

谢谢!

1 个答案:

答案 0 :(得分:1)

我很确定你不能用XML Schema做到这一点。建议:

  • 使用XSLT准备文档以进行验证。
  • 使用Schematron