zoukankan      html  css  js  c++  java
  • 四、XML语言学习(2)

    XML约束之DTD

    1、XML都是用户自定义标签,若出现小小的错误,软件程序将不能正确地获取文件中的内容而报错。
    XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为约束
    格式良好的XML:遵循XML语法的XML
    有效的XML:遵循约束文档的XML

    2、在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束
    常用的约束技术
    XML DTD
    XML Schema

    3、DTD约束
    DTD(Document Type Definition),全称为文档类型定义
    文件清单:book.xml
    <?xml version="1.0" ?>
    <!DOCTYPE 书架 SYSTEM "book.dtd">
    <书架>
    <书>
    <书名>葵花宝典</书名>
    <作者>东方不败</作者>
    <售价>59.00元</售价>
    </书>
    <书>
    <书名>九阳神功</书名>
    <作者>张无忌</作者>
    <售价>57.00元</售价>
    </书>
    </书架>

    文件清单:book.dtd

    <!ELEMENT 书架 (书+)>
    <!ELEMENT 书 (书名,作者,售价)>
    <!ELEMENT 书名 (#PCDATA)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ELEMENT 售价 (#PCDATA)>

    DTD文件应使用UTF-8或Unicode

    4、将DTD与XML文档关联三种方式
    DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写
    使用内部DTD
    使用外部DTD
    使用公共DTD

    5、在xml文件内编写DTD
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <!DOCTYPE 书架 [
    <!ELEMENT 书架 (书+)>
    <!ELEMENT 书 (书名,作者,售价)>
    <!ELEMENT 书名 (#PCDATA)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ELEMENT 售价 (#PCDATA)>
    ]>
    <书架>
    <书>
    <书名>Java就业培训教程</书名>
    <作者>张孝祥</作者>
    <售价>39.00元</售价>
    </书>
    ...
    </书架>

    6、引入外部DTD文档
    ML使用DOCTYPE声明语句来指明它所遵循的DTD文档,有两种形式:
    当引用的DTD文档在本地时,采用如下方式:
    <!DOCTYPE 根元素 SYSTEM “DTD文档路径”>
    如:<!DOCTYPE 书架 SYSTEM “book.dtd”>
    当引用的DTD文档在公共网络上时,采用如下方式:
    <!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>
    如:<!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

    7、DTD约束语法细节
    元素定义
    属性定义
    实体定义

    (1)DTD-定义元素
    在DTD文档中使用ELEMENT关键字来声明一个XML元素。
    语法:<!ELEMENT 元素名称 使用规则>

    使用规则:
    (#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)
    EMPTY:用于指示元素的主体为空。比如<br/>
    ANY:用于指示元素的主体内容为任意类型。
    (子元素):指示元素中包含的子元素

    定义子元素及描述它们的关系:
    如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。
    如: <!ELEMENT FILE (TITLE,AUTHOR,EMAIL)
    如果子元素用“|”分开,说明任选其一。
    如:<!ELEMENT FILE (TITLE|AUTHOR|EMAIL)
    用+、*、?来表示元素出现的次数
    +:表示至少出现一次,一次或多次
    *:表示可有可无,零次、一次或多次
    ?:表示可以有也可以无,有的话只能有一次。零次或一次

    元素内容类型
    #PCDATA :表明可包含任何字符数据,但不能包含子元素
    EMPTY:如果一个元素的CONTENT被声明为EMPTY,表明该元素不能包含任何子元素和文本,仅可以使用属性
    ANY:表示该元素中可以包含任何在DTD中定义的元素内容

    元素定义:
    <!ELEMENT 元素名称 元素内容声明>
    ?:表示对象只能出现一次
    * :表示对象可以出现任意多次
    + :表示最少出现一次,可以多次
    ():表示给元素分组
    | :表示在列出对象中选择一个
    , :表示对象按指定顺序出现

    例如:
    <! ELEMENT 书籍(著作+)>
    <! ELEMENT 著作(书名,作者*,出版社,页数,价格)>
    <! ELEMENT 书名(正书名,副书名)>
    <! ELEMENT 出版社(#PCDATA)>

    (2)属性(ATTLIST)定义元素
    <! ATTLIST 元素名称
    属性名 属性类型 约束
    属性名 属性类型 约束
    ...
    >

    属性值类型:
    CDATA:表示属性的取值为普通的文本字符串
    ENUMERATED (DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)
    ID:表示属性的取值不能重复,属性的值只能由字母,下划线开始,不能出现空白字符

    属性约束设置说明
    #REQUIRED:表示该属性必须出现
    #IMPLIED:表示该属性可有可无
    #FIXED:表示属性的取值为一个固定值。语法:#FIXED "固定值"
    直接值:表示属性的取值为该默认值

    <!ATTLIST 页面作者
    姓名 CDATA #IMPLIED
    年龄 CDATA #IMPLIED
    联系信息 CDATA #REQUIRED
    网站职务 CDATA #FIXED "页面作者"
    个人爱好 CDATA "上网"
    >

    (3)实体定义
    体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
    在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。

    <!ENTITY 实体名称 “实体内容”>
    引用方式(注意是在XML中使用):&实体名称;

    DTD中定义:
    <!ENTITY copyright “传智播客版权所有”>
    XML中引用:
    &copyright;

  • 相关阅读:
    轻量级Spring定时任务(Spring-task)
    Mysql语句优化建议
    python时间日期处理
    subprocess
    Tkinter初体验
    java基础
    java JVM
    NFV
    java加载properties文件的六种方法总结
    悲观锁和乐观锁的区别
  • 原文地址:https://www.cnblogs.com/highpointengineer/p/10563854.html
Copyright © 2011-2022 走看看