如何对照XML 模式来验证 XML 文档

日期:2003 年 9 月 25 日

完成此方法文档后,您应该能够了解如何:
•使用 Oracle XDK 来对照 XML 模式文档验证 XML 文档
•使用由 Oracle XDK 提供的基本 API 来进行 XML 模式验证

引言

大多数使用 XML 数据的应用程序希望被使用的数据遵循一种特定的格式。一个原始 XML 文件将是一个完好形成的 XML 文档。然而,一个完好形成的 XML 文档不能对它的结构提供任何保证。为了使用文档来做一些有意义的事情,应当有一种方法来指定如何组织 XML 文档的结构。这就是 XML 模式引起人们注意的地方。 XML 模式指定了 XML 文档的结构和在属性和值上的限制条件。任何遵循 XML 模式定义的 XML 文档都被认为是关于该 XML 模式的一个完全形成的 XML 文档。

为 Java 提供的 Oracle XDK (XML Developer's Kit) 通过提供所需的 API,简化了对照 XMl 模式验证 XML 文档。有了这些强大的 Java API 的帮助,用户可以轻松地加载、验证和处理关于 XML 模式的 XML 文档。

软件需求


说明

该方法文档使用了一个简单的用户 XML 模式 — 该模式存储了关于用户的一些详细信息 — 和一个显示如何对照该 XML 模式来验证两个 XML 文档的 Java 程序。XML 模式定义文件有关于 XML 文档总体结构、属性、属性的数据类型和属性值的限制条件(如果有的话)的信息。 两个 XML 实例中,一个是关于该用户 XML 模式的有效 XML 文档,而另一个则不是。这里是相关的步骤:

  1. 生成/检索 XML 模式(通常称为 XSD 文件,扩展名为 xsd)
  2. 生成/检索要对照 XML 模式进行验证的 XML 文档实例
  3. 加载 XML 模式定义文件
  4. 加载 XML 文档实例
  5. 使用 DOM 分析器来对照相应的 XML 模式验证 XML 文档
  6. 输出结果:一条指示 XML 文档是否有效的消息

参考下面给出的列表 1。该代码段列出了用户 XML 模式。


<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="CUSTOMER">
<xs:complexType>
<xs:sequence>
<xs:element name="FIRSTNAME" type="xs:string"/>
<xs:element name="LASTNAME" type="xs:string"/>
<xs:element name="ADDRESS">
<xs:complexType>
<xs:sequence>
<xs:element name="LINE1" type="xs:string"/>
<xs:element name="LINE2" type="xs:string"/>
<xs:element name="CITY"/>
<xs:element name="ZIP" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="BIRTHDATE" type="xs:date"/>
</xs:sequence>
<xs:attribute name="ID" type="xs:double"/>
</xs:complexType>
</xs:element>
</xs:schema>

列表 1 — Customer.xsd


参考下面给出的列表 2 。该代码段列出了作为该用户模式的一个实例的 XML 文档。

<?xml version="1.0" encoding="UTF-8"?>
<CUSTOMER ID="568945">
<FIRSTNAME>Arnold</FIRSTNAME>
<LASTNAME>McEriccson</LASTNAME>
<ADDRESS>
<LINE1>31, Nomadic Avevnue</LINE1>
<LINE2>Pasadena Clove</LINE2>
<CITY>WoolTown, MT</CITY>
<ZIP>45263</ZIP>
</ADDRESS>
<BIRTHDATE>1967-08-13</BIRTHDATE>
</CUSTOMER>

列表 2 — Customer1.xml


参考下面给出的列表 3。该代码段显示了执行验证的 Java 代码。

    XSDBuilder builder = new XSDBuilder();
URL url = createURL(xsdURI);

// Build XML Schema Object
XMLSchema schemadoc = (XMLSchema) builder.build(url);

DOMParser dp = new DOMParser();

url = createURL(xmlURI);

// Set Schema Object for Validation
dp.setXMLSchema(schemadoc);
dp.setValidationMode(XMLParser.SCHEMA_VALIDATION);
dp.setPreserveWhitespace(true);

dp.setErrorStream(System.out);

try {
System.out.println("Parsing " + xmlURI);
dp.parse(url);
System.out.println("The input file <" + xmlURI +
"> parsed without errors");
} catch (XMLParseException pe) {
System.out.println("Parser Exception:" + pe.getMessage());
} catch (Exception e) {
System.out.println("NonParserException:" + e.getMessage());
}

列表 3 — Validate.java


编译和运行示例

  1. 通过右击相应的链接和选择保存的目标选项来下载和将 Customer.xsdCustomer1.xmlCustomer2.xmlValidate.java 保存在您选择的一个方便的目录中。从这里开始,我们指的下载目录就是 <CODE> 目录。

  2. 在 Windows 中打开一个命令提示符,或在 Linux/UNIX 中打开一个 shell 窗口,并转至 <CODE> 目录。

  3. 确保您的 CLASSPATH 包含 xmlparserv2.jar 文件。为此,编辑 CLASSPATH 项目并添加该文件。这个 jar 文件可以在 <XDK_HOME>/lib 目录中找到。这里,<XDK_HOME> 是 您解压缩 Oracle XDK 9i/v10 软件的目录。

    要在 Linux/UNIX 中添加 CLASSPATH 项目,执行:

    $ CLASSPATH=$CLASSPATH:<XDK_HOME>/lib/xmlparserv2.jar
    $ export CLASSPATH


    要在 Windows 中添加 CLASSPATH 项目,执行:

    > set CLASSPATH=%CLASSPATH%;<XDK_HOME>\lib\xmlparserv2.jar;
  4. 类似地,添加 <JDK_HOME>/bin 目录到 PATH 环境变量中。这里,<JDK_HOME> 是您解压缩 JDK 软件的目录。

  5. 使用以下命令编译 Validate.java
    $javac Validate.java

  6. 在命令提示符下运行 Validate.class
    语法:
    java Validate <Path of XML Schema Document> < Path of XML Document>

    例如,
    $java Validate Customer.xsd Customer1.xml


  7. Customer1.xml 是一个有效的文件,您将看到一条指示成功的消息。不过,Customer2.xml 不是一个关于 XML 模式 Customer.xsd 的有效文档。当您试图验证该文件时,您将得到一条错误消息。

    $java Validate Customer.xsd Customer2.xml

    当运行了以上命令时,您将看到一条指示失败原因的消息。


资源


小结

该方法文档说明了如何对照 XML 模式来验证 XML 文档。


寄送此页面
Printer View 打印机视图