XML 验证是一种用于检查 XML 文档是否符合特定规范或结构的过程。通常,XML 验证包括验证文档的结构、数据类型、命名空间等方面。有两种主要的 XML 验证方式:DTD(Document Type Definition)验证和 XML Schema 验证。

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.pingtaimeng.com/article/detail/14531/XML