天天看点

JavaScript 中 xml 约束

目录

​​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 + 空格 + 约束文档的地址路径
<?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>      
<?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

继续阅读