zoukankan      html  css  js  c++  java
  • 用DTD约束XML详解及示例

    文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。

    dtd的三种引入方式
        (1)引入外部的dtd文件

    <!DOCTYPE 根元素名称 SYSTEM "dtd路径">

        (2)使用内部的dtd文件

     <!DOCTYPE 根元素名称 [
                <!ELEMENT person (name,age)>
                <!ELEMENT name (#PCDATA)>
                <!ELEMENT age (#PCDATA)>
            ]>

        (3)使用外部的dtd文件(网络上的dtd文件)

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

    例如 struts2 框架配置文件 使用 外部的dtd文件

    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">

     使用dtd定义元素
                简单元素:没有子元素的元素  <!ELEMENT 元素名 约束>   如:<!ELEMENT name (#PCDATA)>
                       约束: (#PCDATA): 约束name是字符串类型
                         EMPTY : 元素为空(没有内容)
                      ANY:任意类型
                    复杂元素:有子元素的元素  <!ELEMENT 元素名称 (子元素)>  如:<!ELEMENT person (name+,age?,sex*,school)>
                 子元素后面的符号表示子元素出现的次数  + :表示一次或者多次
                                           ? :表示零次或者一次
                                           * :表示零次或者多次
                                       无 :子元素只能出现一次
                                子元素直接使用逗号进行隔开 ,表示元素出现的顺序
              子元素直接使用|隔开,表示元素只能出现其中的任意一个

    使用dtd定义属性
            语法: <!ATTLIST 元素名称 属性名称 属性类型 属性的约束>
              属性类型:CDATA: 字符串          如:<!ATTLIST  birthday  ATT  CDATA  #REQUIRED>
                枚举 : 表示只能在一定的范围内出现值,但是只能每次出现其中的一个 。如<!ATTLIST  age  ATT2  (AA|BB|CC)   #REQUIRED>
                ID: 值只能是字母或者下划线开头  <!ATTLIST name  ATT3  ID    #REQUIRED>
          属性的约束:   #REQUIRED:属性必须存在
                 #IMPLIED:属性可有可无
                                        #FIXED: 表示一个固定值   <!ATTLIST  sex ATT4  CDATA  #FIXED  "ABC">
                 直接值:不写属性,使用直接值,写了属性,使用设置那个值   <!ATTLIST school ATT5 CDATA "WWW">

    实体的定义
            语法: <!ENTITY 实体名称 "实体的值">       如:<!ENTITY TEST "HAHAHEHE">
          使用实体: &实体名称;  比如 &TEST;(注:定义实体需要写在内部dtd里面,如果写在外部的dtd里面,有某些浏览器下,内容得不到
    实例:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE person [
        <!ELEMENT person (name+,age?,sex*,school,birthday)>
        <!ELEMENT name (#PCDATA)>
        <!ATTLIST name ATT ID   #REQUIRED >
        <!ELEMENT age (#PCDATA)>
        <!ATTLIST age ATT2 (AA|BB|CC)  #REQUIRED >
        <!ELEMENT sex  (#PCDATA)>
        <!ATTLIST sex ATT4 CDATA #FIXED "ABC" >
        <!ELEMENT school  (#PCDATA)>
        <!ATTLIST school ATT5 CDATA "WWW">
        <!ELEMENT birthday (#PCDATA)>
        <!ATTLIST birthday ATT1 CDATA #IMPLIED >
        <!ENTITY TEST "HAHAHEHE">
    ]>
    <person>
        <name ATT="A1">&TEST;</name>
        <age ATT2="CC">20</age> 
        <sex ATT4="ABC">111</sex> 
        <school>1111</school>
        <birthday>2015</birthday>
    </person>

    显示结果:

  • 相关阅读:
    分母为0一定会抛异常吗?
    [译]Zookeeper的优点与局限性
    明明有class为什么还是报ClassNotFoundException?
    广告倒排索引架构与优化
    KafkaProducer源码分析
    Kafka服务端之网络连接源码分析
    Sublime常用快捷键
    sublime主题设置
    Sublime前端插件
    安装软件,更新软件,删除软件
  • 原文地址:https://www.cnblogs.com/fengmingyue/p/5954002.html
Copyright © 2011-2022 走看看