xml 验证

XML 确认


符合语法的XML文档称为结构良好的XML文档。

通过DTD验证的XML文档称为有效的XML文档。


"结构良好的" XML文档

一个结构良好的XML文档应该使用正确的语法。

一个结构良好的XML文档应该遵守XML语法规则,前面一章给出的例子就是一个结构良好的XML文档:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note> 


"有效的" XML文档

一个有效的XML文档应该遵守DTD的描述。

一个有效的XML文档也是一个结构良好的XML文档,同时还必须符合DTD的规则。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "InternalNote.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note> 


XML DTD

DTD定义了XML文档中可用的合法元素。

DTD的意图在于定义XML文档的合法建筑模块。他通过定义一系列合法的元素决定了XMl文档的内部结构。结构良好的XML文档不一定是有效的XML文档,但有效的XML文档一定是结构良好的XML文档。如果你想了解更多关于DTD的知识可以参考DTD 指南


XML Schema 

XML Schema(XML模式)是基于XML的DTD的替代品。

W3C使得DTD和Schema可以相互替代,读者可以在Schema 指南中了解到更多信息。


错误

XML文档中发生的错误将导致XML程序停止。

 

W3C的XML规范声明:如果程序在处理XML文档中发现一个有效的错误,那么此程序应该终止。这就是XML软件相对于容易编写的原因。所有的XML文档地都应该是协调一致的。

在HTML中,HTML文件可能包含很多错误,(比如一个元素有开始标记没有结束标记)这也是HTML浏览器体积之所以很大的一个原因,当他们发现错误的时候,他们有各自不同的方法来决定此HTML文件应该如何显示。

在XML中决不会发生这种情况。

DTD的意图在于定义XML文档的合法构建模块。他通过定义一系列合法的元素决定了XMl文档的内部结构。结构良好的XML文档不一定是有效的XML文档,但有效的XML文档一定是结构良好的XML文档。 

DTD分为内部文档和外部文档

内部文档:<!DOCTYPE root-element [element-declarations]>

含有内部DTD的XML文档一例

<?xml version="1.0"?>

<!DOCTYPE note[

<!ELEMENT note (to,from,heading,body)>

<!ELEMENT to (#PCDATA)>

<!ELEMENT from (#PCDATA)>

<!ELEMENT heading (#PCDATA)>

<!ELEMENT body (#PCDATA)>

]>

<note>

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Dont't forget me this weekend</body>

</note>

 !DOCTYPE note 定义文档的根元素为note

!ELEMENT note定义note元素包含4个元素:to,from,heading,body

!ELEMENT  to 定义类型为"#PCDATA"的to元素

。。。

外部DTD声明:<!DOCTYPE root-element SYSTEM "filename">

<?xml version="1.0" ?>

<!DOCTYPE note SYSTEM "note.dtd">

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

note.dtd

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
为什么用DTD?
XML文档可以存储固定格式的数据
不同的开发组可以按一定格式交换数据
应用程序可以验证来自外部的文档是否有效
当然也可以验证自己的文档

 

在Java中进行XML验证可以使用Java API for XML Processing (JAXP)提供的工具,如下所示: 1. 创建Schema对象 首先,需要创建一个Schema对象,它可以从一个xsd文件中加载。可以使用javax.xml.validation.SchemaFactory类来创建Schema对象。 ```java SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = factory.newSchema(new File("path/to/xsd")); ``` 2. 创建Validator对象 接下来,需要创建Validator对象,它将使用Schema对象对XML文件进行验证。可以使用javax.xml.validation.Validator类来创建Validator对象。 ```java Validator validator = schema.newValidator(); ``` 3. 执行验证 最后,使用Validator对象的validate方法,对XML文件进行验证。 ```java validator.validate(new StreamSource(new File("path/to/xml"))); ``` 如果XML文件通过了验证,validate方法将正常返回;否则,将抛出SAXException异常,其中包含详细的错误信息。 完整的代码示例: ```java import javax.xml.XMLConstants; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import java.io.File; public class XmlValidator { public static void main(String[] args) throws Exception { SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = factory.newSchema(new File("path/to/xsd")); Validator validator = schema.newValidator(); validator.validate(new StreamSource(new File("path/to/xml"))); } } ``` 其中,"path/to/xsd"和"path/to/xml"分别表示xsd文件和xml文件的路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值