XML&DTD

本文介绍了XML(可扩展标记语言)的基础概念,包括其与HTML的区别、用途(数据交换与配置文件)、语法要点(声明、元素和属性定义)。深入探讨了DTD(文档类型定义)的作用和两种常见约束技术——DTD和XMLSchema。实例演示了DTD的编写和在XML文件中的引用。
摘要由CSDN通过智能技术生成

XML

什么是XML

  • HTML:超文本标记语言:用来表示

  • XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML。它被设计的宗旨是传输数据,而非显示数据。是一种通用的数据交换格式。JSON

  • XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0规范。

  • XML标签没有被预定义,需要用户自行定义标签。

  • 应用

    • 数据交换格式

    • 配置文件

XML常见应用

  • XML技术除用于描述有关系的数据

  • 在Java开发中,传统的配置文件是*.properties属性文件(key=value),而XML表示的数据更为丰富。

  • 还经常用作软件配置文件,以描述程序模块之间的关系。(如后面将要学习到的Struts、Spring和Hibernate都是基于XML作为配置文件的)

  • 在一个软件系统中,通过XML配置文件可以提高系统的灵活性。即程序的行为是通过XML文件来配置的,而不是硬编码

XML语法

<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person pid="p1" sex="男" qq="12345">
        <name>刘德华</name>
        <age>10</age>
        <contact>
            <phone>1234567</phone>
        </contact>
        <br/>
    </person>
    <person pid="p2">
        <name>张惠妹</name>
        <age>35</age>
        <contact>
            <email>123@qq.com</email>
        </contact>
    </person>
</persons>
  1. XML声明是XML文档的第一句,其格式如下

<?xml version="1.0" encoding="UTF-8"?>
  1. 区分大小写

  2. XML文档有且只有一个根元素

    • 案例中为persons

  3. 属性值使用引号

    • 在HTML代码里面,属性值可以加引号,也可以不加。但是XML规定,所有属性值必须加引号(可以是单引号,也可以是双引号,建议使用双引号),否则将被视为错误。

  4. 所有的标记必须有相应的结束标记

    • 在HTML中,标记可以不成对出现,而在XML中,所有标记必须成对出现,有一个开始标记,就必须有一个结束标记,否则将被视为错误

DTD

XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为约束

常用的约束技术

  • XML DTD

    • DTD(Document Type Definition):文档类型定义

    • 这种约束文件的扩展为:dtd

  • XML Schema

    • DTD替代技术

    • 这种约束文件的扩展为:xsd

DTD语法

DTD文档的语法主要涉及以下内容的定义:

  1. 元素

  2. 定义属性

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons[
    <!ELEMENT persons (person+)>
    <!ELEMENT person (name,age,contact,br?)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT contact (phone|email)>
    <!ELEMENT phone (#PCDATA)>
    <!ELEMENT email (#PCDATA)>
    <!ELEMENT br EMPTY>
    <!ATTLIST person
        pid ID #REQUIRED
        sex (男|女) "男"
        qq CDATA #IMPLIED
    >
]>
<persons>
    <person pid="p1" sex="男" qq="12345">
        <name>刘德华</name>
        <age>10</age>
        <contact>
            <phone>1234567</phone>
        </contact>
        <br/>
    </person>
    <person pid="p2">
        <name>张惠妹</name>
        <age>35</age>
        <contact>
            <email>123@qq.com</email>
        </contact>
    </person>
</persons>

编写DTD的方式

  1. 内部DTD

<!DOCTYPE 根元素[]>
<!DOCTYPE persons[]>

DTD约束文档可以在XML文档中直接定义,也可以作为单独的文档进行编写(单独的文档必须以UTF-8编码进行保存)

  1. 引用外部DTD

    • 当引用的DTD文档在本地时,采用如下方式:

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

    对应的DTD文档格式

    <!ELEMENT persons (person+)>
    <!ELEMENT person (name,age,contact,br?)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT contact (phone|email)>
    <!ELEMENT phone (#PCDATA)>
    <!ELEMENT email (#PCDATA)>
    <!ELEMENT br EMPTY>
    <!ATTLIST person
        pid ID #REQUIRED
        sex (男|女) "男"
        qq CDATA #IMPLIED
    >
    • 当引用的DTD文档在公共网络上时,采用如下方式:

    <!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
    • 例如1:

    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

  • 在xml文件引用外部DTD

    • 引入外部公共DTD: <!DOCTYPE 根元素 public publicId url>

    • 引入外部本地DTD: <!DOCTYPE 根元素 SYSTEM "文件名">

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons PUBLIC "http://com.donkee.persons" "https://gitee.com/donkee99/config-demo/raw/master/persons.dtd">
<persons>

</persons>

DTD-定义元素

  1. 在DTD文档中使用ELEMENT关键字来声明一个XML元素。

语法:<!ELEMENT 元素名称 使用规则>
  1. 使用规则:

  • (#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)

  • EMPTY:用于指示元素的主体为空。比如

  • ANY:用于指示元素的主体内容为任意类型。

  • (子元素):指示元素中包含的子元素

  • 定义子元素及描述它们的关系:

  • 如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。

如: <!ELEMENT person (name,age,contact,br?)>
  • 如果子元素用“|”分开,说明任选其一。

<!ELEMENT contact (phone|email)>
  • 用+、*、?来表示元素出现的次数

    • 如果元素后面没有+*?:表示必须且只能出现一次

    • +:表示至少出现一次,一次或多次

    • *:表示可有可无,零次、一次或多次

    • ?:表示可以有也可以无,有的话只能有一次。零次或一次

<!ELEMENT persons (person+)>
<!ELEMENT person (name,age,contact,br?)>

DTD--定义属性

  • 属性值类型:

    • CDATA:表示属性的取值为普通的文本字符串

  • ENUMERATED (DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如 (男|女)

  • ID:表示属性的取值不能重复

  • 设置说明

    • #REQUIRED:表示该属性必须出现

    • #IMPLIED:表示该属性可有可无

    • #FIXED:表示属性的取值为一个固定值。语法:#FIXED "固定值"

    • 直接值:表示属性的取值为该默认值

总结

总结本章内容

作业

  1. 编写以下config.xml文件对应的DTD约束

<?xml version="1.0" encoding="UTF-8"?>

<config>
    <action path="/userRegAction" type="com.donkee.action.UserRegAction">
        <forward name="success" path="/reg.jsp" redirect="true" />
        <forward name="failed" path="/index.jsp" redirect="false" />
    </action>
    <action path="/userLoginAction" type="com.donkee.action.UserLoginAction">
        <forward name="success" path="/login.jsp" redirect="false" />
        <forward name="b" path="/welcome.jsp" redirect="true" />
    </action>
    <action path="/userAction" type="com.donkee.action.UserAction">
        <forward name="list" path="/user_list.jsp" redirect="false" />
        <forward name="b" path="/welcome.jsp" redirect="true" />
    </action>
</config>
  1. 写一个DTD限制servlet相应的DTD约束a

<servlet>
	<servlet-name>HelloServlet</servlet-name>
	<servlet-class>com.donkee.action.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>HelloServlet</servlet-name>
	<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值