• 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>
  • 相关阅读:
    nginx之proxy、cache、upstream模块学习
    lvs负载均衡
    nginx之rewrite匹配需求
    nginx之配置proxy_set_header
    nginx结合fastcgi
    转载:vsftp中的local_umask和anon_umask
    python3.6连接mysql或者mariadb
    在linux环境下安装python3.6
    元字符匹配
    sendEmail
  • 原文地址:https://www.cnblogs.com/java-oracle/p/6158455.html
Copyright © 2020-2023  润新知