美文网首页
XML(二)XML约束

XML(二)XML约束

作者: 徒手說梦话 | 来源:发表于2020-09-09 19:39 被阅读0次

XML约束

DTD

DTD(Document Type Define),dtd文件中描述并规定了元素、属性和其他内容在xml文档中的使用规则。DTD文件的后缀名为 .dtd

语法

描述元素的语法格式:

<!ELEMENT元素名 (内容模式)>
  1. EMPTY:元素不能包含子元素和文本(空元素)
  2. (#PCDATA):可以包含任何字符数据,但是不能在其中包含任何子元素
  3. ANY:元素内容为任意的,主要是使用在元素内容不确定的情况下
  4. 修饰符:() | + * ? ,
    • () 用来给元素分用组
    • | 在列出的元素中选择一个
    • +表示该元素最少出现一次,可以出现多次 (1或n次)
    • *表示该元素允许出现零次到任意多次(0到n次)
    • ?表示该元素可以出现,但只能出现一次 (0到1次)
    • ,对象必须按指定的顺序出现
<!ELEMENTstudents (stu*)>
<!ELEMENTstu (id|name|age)*>

说明,

  • 根元素students里面可以出现
  • stu子元素0到n次stu元素中的属性有id、name、age子元素
  • id、name、age子元素出现的顺序没有要求
  • id、name、age子元素都可以出现0~n次

描述属性的语法格式:

<!ATTLIST 元素名称
属性名称 属性类型 属性特点
属性名称 属性类型 属性特点
>

属性类型:

  1. CDATA:属性值可以是任何字符(包括数字和中文)
  2. ID:属性值必须唯一,属性值必须满足xml命名规则
  3. IDREF:属性的值指向文档中其它地方声明的ID类型的值。
  4. IDREFS:同IDREF,但是可以具有由空格分开的多个引用。
  5. enumerated:(枚举值1|枚举值2|枚举值3...),属性值必须在枚举值中

属性特点:

  1. REQUIRED:元素的所有示例都必须有该属性

  2. IMPLIED :属性可以不出现

  3. default-value:属性可以不出现,但是会有默认值
  4. FIXED :属性可以不出现,但是如果出现的话必须是指定的属性值

<!ELEMENT students (student+)>
<!ELEMENT student (name,age?,score*)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ATTLIST name firstName CDATA #IMPLIED>
<!ELEMENT age (#PCDATA)><!ATTLIST age xuAge CDATA  #FIXED "20">
<!ELEMENT score (#PCDATA)>
<!ATTLIST score sel (60|80|100) #REQUIRED>

引入

内部的DTD,DTD和xml文档在同一个文件中。(不常用)

<?xml version="1.0" encoding="UTF-8"?>
<!-- 内部DTD -->
<!DOCTYPE students[
<!ELEMENT students (stu)>
<!ELEMENT stu (id,name,age)>
<!ELEMENT id   (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age  (#PCDATA)>
]>
<students>
    <stu>
        <id>1</id>
        <name>tom</name>
        <age>20</age>
    </stu>
</students>

外部的DTD,DTD和xml文档不在同一个文件中。(常用)

<?xml version="1.0" encoding="UTF-8"?>
<!-- 外部DTD -->
<!DOCTYPE students SYSTEM "dtd/students.dtd">
<students>
    <stu>
        <id>1</id>
        <name>tom</name>
        <age>20</age>
    </stu>
</students>

在XML中,引入外部的一个DTD文件的方式,有俩种:

1.本地DTD文件引入,这种方式一般都是自己编写DTD,然后自己使用。

<!DOCTYPE 根元素 SYSTEM "DTD文件的路径">

2.公共DTD文件引入,这种方式可以让很多人使用共同的一个DTD文件。

<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">

使用

DTD在使用的时候,分为俩种情况

  • 本地DTD
  • 公共DTD
本地DTD的引入:
<?xmlversion="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "dtd/students.dtd">

注意,只有DTD验证通过了,XML文件才是有效的,Eclipse中就不会报错了。

如果是公共DTD的引入:

这里使用hibernate框架的XML配置文件和DTD文件:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    
</hibernate-configuration>

其中,这里的重点是XML文件中的头部声明:

<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

说明,

  • Eclipse默认会根据第一个双引号中的内容,查找对应的DTD所在位置
  • 如果有DTD文件,那么就读取并验证,同时可以根据DTD的内容给出自动提示的信息(Alt+/)
  • 如果没有DTD文件,那么就根据第二个双引号中的内容(URL地址),去网络中下载并读取、验证

如果有网的情况下,Eclipse会自动给我们下载xml文档,但是没有网的情况下,需要我们自己手动在Eclipse中进行配置,配置的目的,就是将这个XML,和其对应的DTD文件进行关联,以便让Eclipse可以通过第一个双引号中的内容,找到它关联的DTD文件,然后读取并验证

赋值XML头部声明中第一个双引号中间的内容,这个内容作为key,要去配置的value就是DTD的存放位置:

-//Hibernate/Hibernate Configuration DTD 3.0//EN

然后再Window-》Preferences中,搜索xml,并选择XML Catalog:


image-20200909191152079.png

点击Add按钮,将上面复制的内容粘贴到key的位置,key type选择public ID,然后选择到DTD存放的位置:


image-20200909191251202.png

最后,保存关闭即可。这时候,在XML中,按提示快捷键(alt+/),就可以看到Eclipse给我们提示的内容了,这个内容就是hibernate框架官方要求我们在配置文件中编写的内容!

Schema

Schema文件也可以用来对XML文件内容进行约束、验证,Eclipse也可以根据schema验证进行自动提示

Schema本身单词的含义就是:提要,纲要

Schema和DTD区别

  • DTD文件中是DTD的专用语法,Schema文件中就是正常的XML语法,所以Schema文件其实也是个XML文件
  • DTD文件的后缀是.dtd,Schema文件的后缀是.xsd,xsd的意思为XML Schema Definition
  • DTD文件中的约束条件相对简单,Schema文件中的约束条件更加详细、复杂
  • Schema的出现是为了替代DTD文件,但是平时的使用中,俩者都会见到

例如XML文件中的头部声明:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-4.3.xsd">

说明

  • xmlns,指定了当前XML中,标签所属的默认命名空间地址
  • xmlns:context,指定了当前XML中,context作为前缀开头的标签所属的命名空间地址
  • xmlns:xsi,指定了当前XML中,所使用的schema实例的命名空间地址,xsi(XMLSchema-instance)
  • xsi:schemaLocation,指定了当前XML中,所使用的schema文件都有哪些,已经分别对应的URL地址

和DTD类似,这里已经有了schema文件具体的URL地址,在联网的情况下,Eclipse也会默认去下载、读取、验证的。但如果由于其他未知原因,下载失败了,我们仍然需要自己在Eclipse中进行手动配置。

Window-》Preferences中,搜索xml,并选择XML Catalog:

先复制该schema文件的URL地址:

http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
image-20200909192753096.png

相关文章

  • XML(二)XML约束

    XML约束 DTD DTD(Document Type Define),dtd文件中描述并规定了元素、属性和其他内...

  • 3/30day22_XML_XML约束

    day22_XML_XML约束 思维导图 复习 今日内容 XML XML约束 XML的学习 XML概念 XML的介...

  • xml约束

    什么是xml约束 在xml技术里,编写一个文档/文件来约束一个xml文档的书写规范、称为xml约束。因为没有约束 ...

  • XML约束

    xml约束:规范了xml文件数据内容格式的编写规则 xml约束技术: DTD约束:语法相对简单,功能也相对简单 s...

  • xml约束

    定义约束tes.xsd 引用约束my.xml

  • XML约束和解析

    XML基本语法 XML解析 一 XML约束 在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之...

  • XML中的DTD约束

    什么是约束? 在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这就是XML约束。约束定义了文档的结...

  • XML基本语法

    授课内容 XML语法 XML约束 XML解析【重点】 以应用为主 一 XML基本概述 1. XML简单的历史介绍 ...

  • XML约束——DTD约束

    约束 XML技术中,可以编写一个文档来约束一个XML的书写规范,约束文档定义了在XML中允许出现的元素名称、属性及...

  • XML约束——Schema约束

    Schema与DTD XML Schema符合XML语法结构。 DOM、SAX等XML API很容易解析出XML ...

网友评论

      本文标题:XML(二)XML约束

      本文链接:https://www.haomeiwen.com/subject/djryektx.html