JavaScript 中 xml 约束

本文详细介绍了DTD与Schema两种XML约束方式的编写步骤、特点及应用。从DTD的元素、属性定义到实体定义,再到Schema的复杂元素指示器与约束属性,全面解析XML文档结构的验证方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、dtd 约束

【1】编写步骤

【2】xml 文件引入 dtd 文件方法

【3】dtd 元素定义

【4】dtd 属性定义

【5】dtd 定义实体

2、schema 约束

【1】属性

【2】特点

【3】编写步骤

【4】复杂元素指示器

【5】约束属性


1、dtd 约束

【1】编写步骤

  1. 看 xml 中有多少个元素,有几个就在 dtd 文件中写几个 <!ELEMENT>
  2. 判断元素是简单元素还是复杂元素
    1. 简单元素:没有子元素   
      <!ELEMENT  元素名称  (#PCDATA)>
    2. 复杂元素:有子元素的元素   
      <!ELEMENT  元素名称  (子元素)>
  3. 需要在 xml 文件中引入 dtd 文件
    <!DOCTYPE  根元素名称  SYSTEM  "dtd文件的路径">

【2】xml 文件引入 dtd 文件方法

  1. 内部引入
    <!DOCTYPE students [
            <!ELEMENT students (student*)>
            <!ELEMENT student (name,age,sex)>
            <!ELEMENT name (#PCDATA)>
            <!ELEMENT age (#PCDATA)>
            <!ELEMENT sex (#PCDATA)>
            <!ATTLIST student number ID #REQUIRED>
            ]>
  2. 外部引入
    1. 本地:<!DOCTYPE  根元素名称  SYSTEM  "dtd文件路径">
    2. 网络:<!DOCTYPE  根元素名称  PUBLIC  "dtd名称"  "dtd文件的URL">
  • 内部引入:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
        <!ELEMENT students (student*)>
        <!ELEMENT student (name,age,sex)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        <!ELEMENT sex (#PCDATA)>
        <!ATTLIST student number ID #REQUIRED>
        ]>
<students>
    <student number="s001">
        <name></name>
        <age></age>
        <sex></sex>
    </student>
</students>
  • 外部引入:

xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "student.dtd">
<students>
    <student number="s001">
        <name></name>
        <age></age>
        <sex></sex>
    </student>
</students>

dtd 文件

<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>

【3】dtd 元素定义

  • 语法:<!ELEMENT  元素名  约束>
  • 简单元素:<!ELEMENT  name  (#PCDATA)>
    • (#PCDATA):约束 name 是字符串类型
    • EMPTY:约束元素为空
    • AND:约束任意元素
  • 复杂元素:<!ELEMENT  student  (name+,age?,sex*)>
    • <!ELEMENT  元素名称  (子元素)>
    • 表示元素出现的次数:
      • +:表示一次或者多次
      • ?:表示零次或者一次
      • *:表示零次或者多次
    • 子元素直接使用逗号隔开
      • 表示元素出现的顺序
    • 子元素直接使用 | 隔开
      • 表示元素只能出现其中的任意一个

【4】dtd 属性定义

  • 语法:<!ATTLIST  元素名称  属性名称  属性类型  属性的约束>
  • 属性类型
    • CDATA:字符串
    •  | :枚举(aa|bb|cc)
    • ID:值只能是字符串或者下划线开头
  • 属性的约束
    • #REQUIRED:表示属性必须存在
    • #IMPLIED:表示属性可有可无
    • #FIXED:表示一个固定值
    • 直接值:直接设置

【5】dtd 定义实体

  • 语法:<!ENTITY  实体名称  "实体的值">   rg:<!ENTITY  NAME  "一颗星">
  • 使用实体:&NAME;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
        <!ELEMENT students (student*)>
        <!ELEMENT student (name,age,sex)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        <!ELEMENT sex (#PCDATA)>
        <!ATTLIST age num (18|19|20) #REQUIRED>
        <!ATTLIST student number ID #REQUIRED>
        <!ENTITY  NAME "一颗星">
        ]>
<students>
    <student number="s001">
        <name>&NAME;</name>
        <age num="18"></age>
        <sex></sex>
    </student>
</students>

2、schema 约束

【1】属性

在 schema 文件里面开头有几个属性

  • xmlns="http://www.w3.org/2001/XMLSchema"
    • 表示当前xml是一个约束文件
  • targetNamespace="http://www.oneStar.cn"
    • 使用schema约束文件,直接通过这个地址引入约束文件,可以是个随意的地址
  • elementFormDefault="qualified">
    • 表示质量良好

【2】特点

  • schema 是 xml 语句,符合 xml 语法
  • 一个 xml 中可以有多个 schema,多个 schema 使用命名空间来区分
  • dtd 文件里面只有 PCDATA 类型,但 schema 里面可以支持更多的数据类型
  • schema 语法更加的复杂
  • 以 .xsd 为后缀名

【3】编写步骤

  • 看 xml 中有多少个元素,有多少个元素就写多少个 <element>
  • 看是简单元素还是复杂元素
    • 复杂元素:
      <complexType>
          <sequence>
              子元素
          </sequence>
      </complexType>
    • 简单元素:写在复杂元素<sequence>里面
      <sequence>
              <element name="name" type="string"></element>
      </sequence>
  • 在 xml 中引入 xsd 文件
    • <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      • 表示该文件时被约束文件
    • xmlns="http://www.oneStar.cn"
      • 是约束文件里面的 targetNamespace
    • xsi:schemaLocation="http://www.oneStar.cn person.xsd">
      • targetNamespace + 空格 + 约束文档的地址路径

person.xsd约束文件

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.oneStar.cn"
        elementFormDefault="qualified">
    <element name="person">
        <complexType>
            <sequence>
                <element name="name" type="string"></element>
                <element name="age" type="int"></element>
            </sequence>
        </complexType>
    </element>
</schema>

person.xml被约束文件

<?xml version="1.0" encoding="UTF-8"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.oneStar.cn"
        xsi:schemaLocation="http://www.oneStar.cn person.xsd">
    <name>一颗星</name>
    <age>18</age>
</person>

【4】复杂元素指示器

  • <sequence>:表示元素的出现顺序
  • <all>:表示元素只能出现一次
  • <choice>:表示元素只能出现其中一个
  • <maxOccurs="unbounded">:表示元素出现的次数,unbounded表示不限制次数
  • <any></any>:表示任意元素

【5】约束属性

  • 位置:写在复杂元素里面的 </complexType> 之前
    <attribute name="id1" type="int" use="required"></attribute>
    • name:属性名称
    • type:属性类型  int   string
    • use:属性是否必须出现   required
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ONESTAR博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值