如何对照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 文档,而另一个则不是。这里是相关的步骤:
- 生成/检索 XML 模式(通常称为 XSD 文件,扩展名为 xsd)
- 生成/检索要对照 XML 模式进行验证的 XML 文档实例
- 加载 XML 模式定义文件
- 加载 XML 文档实例
- 使用 DOM 分析器来对照相应的 XML 模式验证 XML 文档
- 输出结果:一条指示 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
- 通过右击相应的链接和选择保存的目标选项来下载和将 Customer.xsd、Customer1.xml、Customer2.xml 和 Validate.java 保存在您选择的一个方便的目录中。从这里开始,我们指的下载目录就是 <CODE> 目录。
- 在 Windows 中打开一个命令提示符,或在 Linux/UNIX 中打开一个 shell 窗口,并转至 <CODE> 目录。
- 确保您的 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;
- 类似地,添加 <JDK_HOME>/bin 目录到 PATH 环境变量中。这里,<JDK_HOME> 是您解压缩 JDK 软件的目录。
- 使用以下命令编译 Validate.java:
$javac Validate.java
- 在命令提示符下运行 Validate.class。
语法: java Validate <Path of XML Schema Document> < Path of XML Document> 例如, $java Validate Customer.xsd Customer1.xml
- Customer1.xml 是一个有效的文件,您将看到一条指示成功的消息。不过,Customer2.xml 不是一个关于 XML 模式 Customer.xsd 的有效文档。当您试图验证该文件时,您将得到一条错误消息。
$java Validate Customer.xsd Customer2.xml
当运行了以上命令时,您将看到一条指示失败原因的消息。
资源
小结
该方法文档说明了如何对照 XML 模式来验证 XML 文档。
|