1. DTD 验证:
DTD 是一种用于描述 XML 文档结构的语法规范。通过将 DTD 嵌入到 XML 文档中或者使用外部 DTD 文件,可以对 XML 文档进行验证。
内部 DTD:
<!DOCTYPE bookstore [
<!ELEMENT bookstore (book+)>
<!ELEMENT book (title, author, price)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<bookstore>
<book>
<title>Harry Potter</title>
<author>J.K. Rowling</author>
<price>29.99</price>
</book>
</bookstore>
在上述例子中,<!DOCTYPE> 声明包含了 DTD 规则,定义了 <bookstore> 和 <book> 等元素的结构。这可以确保文档符合规定的结构。
外部 DTD:
外部 DTD 是存储在独立文件中的 DTD 规则。XML 文档通过声明引用外部 DTD 文件进行验证。
<!DOCTYPE bookstore SYSTEM "bookstore.dtd">
<bookstore>
<book>
<title>Harry Potter</title>
<author>J.K. Rowling</author>
<price>29.99</price>
</book>
</bookstore>
bookstore.dtd 文件内容:
<!ELEMENT bookstore (book+)>
<!ELEMENT book (title, author, price)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
2. XML Schema 验证:
XML Schema 是一种更为强大和灵活的验证方式,它用 XML 格式定义了文档的结构、数据类型、关系等信息。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element name="book" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="author" type="xs:string"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
在上述例子中,XML Schema 定义了 <bookstore> 元素包含多个 <book> 元素,每个 <book> 元素包含 <title>、<author> 和 <price> 元素,而且 <price> 的类型是 xs:decimal。
XML 文档引用 XML Schema 进行验证:
<bookstore xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="bookstore.xsd">
<book>
<title>Harry Potter</title>
<author>J.K. Rowling</author>
<price>29.99</price>
</book>
</bookstore>
在上述例子中,xsi:noNamespaceSchemaLocation 属性指定了 XML Schema 的位置,确保文档符合规定的结构和数据类型。
无论使用 DTD 还是 XML Schema,XML 验证都有助于确保 XML 文档的合法性和一致性。选择使用哪种验证方式通常取决于具体的需求和项目规范。
转载请注明出处:http://www.zyzy.cn/article/detail/14531/XML