XML语义约束

深碍√TFBOYSˉ_ 2023-10-05 18:27 81阅读 0赞

文章目录

  • DTD约束
    • 节点约束
    • 数据类型约束
    • 标签属性约束
    • 引用DTD文件
  • XML Schema
    • 节点约束
    • 数据类型约束
    • 标签属性约束
    • 范围约束
    • XML Schema引用
  • 示例

DTD约束

节点约束

创建DTD文件对XML文档的结构进行进行约束,防止未定义的节点出现在文档中。

  1. <!ELEMENT hr (employee)>
  2. <!ELEMENT employee (name, age, salary, department)>
  3. <!ELEMENT department (dname, address)>

使用ELEMENT标签进行节点的约束,第一个参数为节点名称,‘()’中的参数为子节点的名称且子节点需按顺序出现,注意要在父节点和子节点间要以空格隔开,否则无法生效。

限制节点的同时也会限制节点的个数,所以需要对DTD进行合理的节点数的约束。

  1. <!-- hr下最小出现一个employee节点 -->
  2. <!ELEMENT hr (employee+)>
  3. <!-- hr下可以出现任意个节点数 -->
  4. <!ELEMENT hr (employee*)>
  5. <!-- hr下最多可以出现1个employee节点 -->
  6. <!ELEMENT hr (employee?)>

数据类型约束

通过DTD标签对节点的数据类型进行约束,防止出现异常的数据类型。

  1. <!ATTLIST name (#PCDATA)>

使用ATTLIST标签对标签的内容进行属性限制PCDATA为文本类型。

标签属性约束

  1. <!ATTLIST employee no CDATA "">

第一个参数为标签名,第二个参数为标签需要添加的属性,第三个参数为属性的数据类型,第四个参数为属性的默认值。

引用DTD文件

在XML文件中引用

  1. <!DOCTYPE 根节点名 SYSTEM "DTD文件路径">

XML Schema

节点约束

  1. <element name="hr">
  2. <complexType>
  3. <sequence>
  4. <element name="employee">
  5. <complexType>
  6. <sequence>
  7. <element name="name"></element>
  8. <element name="age"></element>
  9. <element name="salary"></element>
  10. <element name="department">
  11. <complexType>
  12. <sequence>
  13. <element name="dname"></element>
  14. <element name="address"></element>
  15. </sequence>
  16. </complexType>
  17. </element>
  18. </sequence>
  19. </complexType>
  20. </element>
  21. </sequence>
  22. </complexType>
  23. </element>

element表示表示节点,属性name表示节点名称。

complexType标签表示复杂节点,当包含子节点时必须使用该标签。

sequence标签表示子节点必须按顺序排列。

默认的节点个数约束为1个,可以通过设置element标签中的minOccurs,maxOccurs属性灵活设置节点的个数:

  1. <element name="employee" minOccurs="1" maxOccurs="9999"><!-- 设置employee节点可以出现1-9999次 -->
  2. ...
  3. </element>

数据类型约束

在XML Schema中可以灵活的为节点添加数据类型限制。通过element标签中的type属性,可以限制节点的数据类型,例如:

  1. <element name="name" type="string"></element>
  2. <element name="age" type="integer"></element>
  3. <element name="salary" type="integer"></element>

标签属性约束

通过为节点添加attribute标签,可以为节点添加属性,例如:

  1. <element name="employee">
  2. <attribute name="no" type="string" use="required"></attribute>
  3. </element>

name:属性名称

type:属性的数据类型

use:是否为必须

范围约束

相较于DTD的约束方式,XML Schema还可以对数值范围进行约束,可以为节点添加simpleType标签定义范围,例如:

  1. <element name="age">
  2. <simpleType>
  3. <restriction base="integer"><!-- 将年龄范围限制在18-60岁之间 -->
  4. <minInclusive value="18"></minInclusive>
  5. <maxInclusive value="60"></maxInclusive>
  6. </restriction>
  7. </simpleType>
  8. </element>

XML Schema引用

在XML的根节点中加入以下属性,便可将Schema加入引用。

  1. <hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="hr.xsd">
  2. ...
  3. </hr>

示例

  1. <!-- hr.xml -->
  2. <?xml version="1.0" encoding="utf-8" ?>
  3. <hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:noNamespaceSchemaLocation="hr.xsd">
  5. <employee no="3001">
  6. <name>Tom</name>
  7. <age>18</age>
  8. <salary>4000</salary>
  9. <department>
  10. <dname>产品部</dname>
  11. <address>物联网大厦B-803</address>
  12. </department>
  13. </employee>
  14. <employee no="3002">
  15. <name>Jack</name>
  16. <age>30</age>
  17. <salary>4000</salary>
  18. <department>
  19. <dname>产品部</dname>
  20. <address>物联网大厦B-803</address>
  21. </department>
  22. </employee>
  23. </hr>
  24. <!-- hr.xsd -->
  25. <?xml version="1.0" encoding="UTF-8" ?>
  26. <schema xmlns="http://www.w3.org/2001/XMLSchema">
  27. <element name="hr">
  28. <complexType>
  29. <sequence>
  30. <element name="employee" maxOccurs="9999">
  31. <complexType>
  32. <sequence>
  33. <element name="name" type="string"/>
  34. <element name="age" type="integer"/>
  35. <element name="salary" type="integer"/>
  36. <element name="department">
  37. <complexType>
  38. <sequence>
  39. <element name="dname" type="string"/>
  40. <element name="address" type="string"/>
  41. </sequence>
  42. </complexType>
  43. </element>
  44. </sequence>
  45. <attribute name="no" type="string" use="required"/>
  46. </complexType>
  47. </element>
  48. </sequence>
  49. </complexType>
  50. </element>
  51. </schema>

发表评论

表情:
评论列表 (有 0 条评论,81人围观)

还没有评论,来说两句吧...

相关阅读

    相关 XML 约束

    > 一个 XML 文档一旦有了约束,那么这个 XML 文档就只能使用约束中创建的元素及属性。如果约束没有创建 `<a>` 元素,那么 XML 文档就不能使用 `<a>` 元素。

    相关 XML约束

    相关阅读 1. [XML约束][XML] 2. [Xml 格式数据的生成和解析][Xml] 3. [XML解析器][XML 1] XML约束概述 一个XML

    相关 XML约束

    一、什么是xml约束 在XML技术里,可以编写一个文档约束一个XML文档的书写规范,这称之为XML约束。 常用的XML约束技术: 1. XML DTD 2. X

    相关 XML约束

    一、什么是xml约束 在XML技术里,可以编写一个文档约束一个XML文档的书写规范,这称之为XML约束。 常用的XML约束技术: 1. XML DTD 2. X

    相关 XML——Schema约束

    一、Schema约束快速入门 1、 XML Schema文件自身就是一个XML文件,但它的扩展名通常为.xsd。 2、一个XML Schema文档通常称之为模式文档(约

    相关 XML约束

    xml约束:规定在xml文件中可以写什么不可以写什么。 dtd约束 内部dtd:在xml内部定义dtd 外部dtd:在外部文件中定义dtd