• XML的DTD约束


    DTD约束:DTD的声明和引用

     1.内部DTD文档

    <!DOCTYPE 根元素 [定义内容]>

      2.外部DTD文档

      <!DOCTYPE 根元素 SYSTEM "DTD文件路径">  
    或者
    <!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文件的URL">

     3、DTD元素基本语法: <!ELEMENT 元素名称  类别> 或 <!ELEMENT 元素名称 (元素内容)>

      - ELEMENT是关键字,是不能修改的  

      -元素类型,必须要大写!CONTENT的内容有三种写法:

    (1)EMPTY——表示该元素不能包含子元素和文本,但可以有属性。 
    (2)ANY——表示该元素可以包含任何在该DTD中定义的元素内容 
    (3)#PCDATA——可以包含任何字符数据,但是不能在其中包含任何子元素

    组合类型,有下述的的修饰符可以使用: 

    符号用途示例示例说明
    () 用来给元素分组 (古龙|金庸),(王朔|余杰) 分成两组
    | 在列出的对象中选择一个 (男人|女人) 表示男人或者女人必须出现,两者至少选其一
    + 该对象必须出现一次或者多次 (成员+) 表示成员必须出现,而却可以出现多个成员
    * 该对象允许出现0次或者多次 (爱好*) 爱好可以出现两次到多次
    ? 该对象必须出现0次或者1次 (菜鸟?) 菜鸟可以出现,也可以不出现,如果出现的话,最多只能出现一次
    , 对象必须按指定的顺序出现 (西瓜,苹果,香蕉) 表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现

     例如:

    <!ELEMENT 家庭 (人+,家电*)>
    <!ELEMENT to  EMPTY>
    <!ELEMENT body (#PCDATA)>

     4、属性的定义:

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

     属性的类型:(1) CDATA (2) ID (3) IDREF/IDREFS (4) Enumerated (5) ENTITY/ENTITIES

    (1)属性类型-CDATA,表示属性值可以是任何字符(包括中文和数字)

     (2)属性类型-ID,表明该属性的取值必须是唯一的,但是属性的值不能是以数字开头!

    (3)属性类型-IDREF/IDREFS 

    (4)属性类型-Enumerated,事先定义好一些值,属性的值必须在所列出的值的范围内。

    (5)属性类型-ENTITY,实体

      实体定义: 
    - 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。 
    - 在DTD定义中,一条!ENTITY语句用于定义一个实体。 
    - 实体可分为两种类型:引用实体和参数实体。引用实体是被XML文档应用的,而参数实体是被DTD文件本身应用的。

    ①引用实体:<!ENTITY 实体名称 "实体内容">

    <!ENTITY copyright "I am a programmer">
    ....
    &copyright;

     ②参数实体:<!ENTITY % 实体名称 "实体内容">

    <!ENTITY % TAG_NAME "姓名|EMAIL|电话|地址">
    
    <!ELEMENT 个人信息 (%TAG_NAME;|生日)>
    <!ELEMENT 客户信息 (%TAG_NAME;|公司名)>

    属性的特点:

    (1) #REQUIRED,表示这个属性必须给,不给就报错 
    (2) #IMPLIED,表示这个属性可以给也可以不给 
    (3) #FIXED value,表示这个属性必须给一个固定的value值 
    (4) Default value,表示这个属性如果没有值,就分配一个默认的value值

     DTD实际案例:

    DTD文件:

    <!ENTITY AUTHOR "John Doe">
    <!ENTITY COMPANY "JD Power Tools, Inc.">
    <!ENTITY EMAIL "jd@jd-tools.com">
    
    <!ELEMENT CATALOG (PRODUCT+)>
    
    <!ELEMENT PRODUCT
    (SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
    <!ATTLIST PRODUCT
    NAME CDATA #IMPLIED
    CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
    PARTNUM CDATA #IMPLIED
    PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
    INVENTORY (InStock|Backordered|Discontinued) "InStock">
    
    <!ELEMENT SPECIFICATIONS (#PCDATA)>
    <!ATTLIST SPECIFICATIONS
    WEIGHT CDATA #IMPLIED
    POWER CDATA #IMPLIED>
    
    <!ELEMENT OPTIONS (#PCDATA)>
    <!ATTLIST OPTIONS
    FINISH (Metal|Polished|Matte) "Matte" 
    ADAPTER (Included|Optional|NotApplicable) "Included"
    CASE (HardShell|Soft|NotApplicable) "HardShell">
    
    <!ELEMENT PRICE (#PCDATA)>
    <!ATTLIST PRICE
    MSRP CDATA #IMPLIED
    WHOLESALE CDATA #IMPLIED
    STREET CDATA #IMPLIED
    SHIPPING CDATA #IMPLIED>
    
    <!ELEMENT NOTES (#PCDATA)>

     对应的XML:

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE CATALOG SYSTEM "product.dtd">
    <CATALOG>
        <PRODUCT NAME="康帅傅矿泉水" CATEGORY="Table" PARTNUM="12" PLANT="Chicago">
            <SPECIFICATIONS WEIGHT="20" POWER="18">这里是细节</SPECIFICATIONS>
            <PRICE>25</PRICE>
            <PRICE>28</PRICE>
        </PRODUCT>
    </CATALOG>
  • 相关阅读:
    request.getParameter() 、 request.getInputStream()和request.getReader() 使用体会
    HTTP之Content-Length
    关于spring3中No Session found for current thread!and Transaction的配置和管理(转)
    Java数据类型和MySql数据类型对应一览
    Spring MVC 解读——View,ViewResolver(转)
    LeetCode 441. Arranging Coins
    LeetCode 415. Add Strings
    LeetCode 400. Nth Digit
    LeetCode 367. Valid Perfect Square
    LeetCode 326. Power of Three
  • 原文地址:https://www.cnblogs.com/java-oracle/p/6158455.html
Copyright © 2020-2023  润新知