DTD(文档类型约束)

本期内容:

 一、什么是格式良好XML

XML的含义:

        HTML:超文本标记语言

        XML:可扩展标记语言

XML的作用:

        数据交换

        做配置

标准的XML格式:

  1. 有且只有一个根元素(多了则报错,如下)

 

2.XML标签大小写正确区分

 

3.正确使用结束标签(如下是少了一个结束标签,没有对应,应填入在横线上:</person>

 4.正确嵌套标签

 5.使用了合法的标签名

 6.定义有效的属性

 以上都是错误的演示,标准的XML的格式如下

 二、元素定义

        目的:给出约束

在XML加入DTD声明(引用DTD约束):

        <!DOCTYPE root[]>

 

元素的分类:ELEMENT必须大写

        空元素:<!ELEMENT element-name EMPTY>

        文本元素:<!ELEMENT element-name (#PCDATA)>

        混合元素:<!ELEMENT element-name (e1,e2)>

元素限制:

        与(,)非(|)

        出现次数:0或1:?

                          0~N:*

                          1~N:+

如:

     persons为混合元素,用到了:<!ELEMENT element-name (e1,e2)>

     person出现了多次,使用了:1~N:+

      name为文本元素,使用:<!ELEMENT element-name (#PCDATA)>

      contact内中一个有phone,另一个是email,使用了:非(|)

<?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 br EMPTY>
]>
<persons>
    <person>
        <name>张小明</name>
        <age>10</age>
        <contact>
            <phone>1234567</phone>
        </contact>
        <br/>
    </person>
    <person>
        <name>张大明</name>
        <age>35</age>
        <contact>
            <email>123@qq.com</email>
        </contact>
    </person>
</persons>

引用DTD约束之后,则不能添加其他不符的元素,否则报错

三、属性定义

语法:

<ATTLIST element-name att_name type desc>

属性类型type:

        ID:代表是唯一的属性

    (男|女):选择类别

       CDATA:文本类别

       IDREF:依赖于ID的类别

属性描述:

        #REQUIRED:必填

        #IMPLIED:非必填

        ‘ :默认值(只有type为(男|女)类型时,desc才可以用默认值的方式)

 四.列题

写一个DTD限制config.xml:

        <?xml version="1.0" encoding="UTF-8"?>
    <!--
        config标签:可以包含0~N个action标签
    -->
    <!DOCTYPE config [
    <!ELEMENT config (action*)>
    <!ELEMENT action (forward*)>
    <!ELEMENT forward EMPTY>
    <!ATTLIST action 
        path CDATA  #REQUIRED
        type CDATA #REQUIRED
    >
    <!ATTLIST forward 
        name CDATA  #REQUIRED
        path CDATA #REQUIRED
        redirect (false|true) 'false'
    >
    ]>
<config>
    <!--
        action标签:可以饱含0~N个forward标签 path:以/开头的字符串,并且值必须唯一 非空 ,子控制器对应的路径
        type:字符串,非空,子控制器的完整类名
    -->
    <action path="/registerAction" type="test.action.RegisterAction">
        <forward name="success" path="/index.jsp" redirect="true" />
        <forward name="failed" path="/register.jsp" redirect="false" />
    </action>
    <action path="/loginAction" type="test.action.LoginAction">
        <forward name="a" path="/index.jsp" redirect="false" />
        <forward name="b" path="/welcome.jsp" redirect="true" />
    </action>
</config>

写一个DTD限制servlet相关标签:

   <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app [
    <!ELEMENT web-app (servlet+,servlet-mapping+)>
    <!ELEMENT servlet (servlet-name,servlet-class)>
    <!ELEMENT servlet-mapping (servlet-name,url-pattern+)>
    <!ELEMENT servlet-name (#PCDATA)>
    <!ELEMENT servlet-class (#PCDATA)>
    <!ELEMENT url-pattern (#PCDATA)>
]>
<web-app>
  <servlet>
      <servlet-name>jrebelServlet</servlet-name>
      <servlet-class>com.zking.xml.JrebelServlet</servlet-class>
  </servlet>
  <servlet>
      <servlet-name>jrebelServlet2</servlet-name>
      <servlet-class>com.zking.xml.JrebelServlet2</servlet-class>
  </servlet>
  
  <servlet-mapping>
      <servlet-name>jrebelServlet</servlet-name>
      <url-pattern>/jrebelServlet</url-pattern>
  </servlet-mapping>
  
  
  <servlet-mapping>
      <servlet-name>jrebelServlet2</servlet-name>
      <url-pattern>/jrebelServlet2</url-pattern>
      <url-pattern>/jrebelServlet3</url-pattern>
  </servlet-mapping>
</web-app>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值