当前位置: 首页 > news >正文

XML DTD学习

DTD:文档类型定义 (Document Type Definition)

一、DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用

1、声明于XML源文件。

1 <!DOCTYPE 根元素  [元素声明]>
<?xml version="1.0"  encoding="UTF-8"?>
<!-- XML文档的内部声明 --> <!DOCTYPE 书架 [ <!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)> ]> <书架> <> <书名>影响力</书名> <作者>罗伯特.西奥迪尼</作者> <售价>45</售价> </> </书架>

2、外部文档声明

1 <!DOCTYPE 根元素 SYSTEM "文件名">

book.dtd 文件:

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

book.xml 文件:

<?xml version="1.0"  encoding="UTF-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<!-- book.dtd 外部声明 -->
<书架>
    <>
         <书名>影响力</书名>
         <作者>罗伯特.西奥迪尼</作者>
         <售价>45</售价>
    </>
</书架>

 二、构建模块

所有的XML文档都是有一下简单的构建模块构成:元素、属性、实体、PCDATA、CDATA 组成

PCDATA 的意思是被解析的字符数据(parsed character data),可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。

CDATA 的意思是字符数据(character data),CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

三、元素的声明:

<!ELEMENT 元素名称 类别>
或者
<!ELEMENT 元素名称 (元素内容)>

元素类型包括:空元素EMPTY、只有 PCDATA 的元素、带有任何内容的元素、带有子元素(序列)的元素。

  EMPTY类型规定了元素不能有值但可以有属性,不能包括文本。ANY类型则规定一个元素下面可以包括子元素,文本,属性,将根元素设置为ANY后 子元素出现的次数和顺序将不受限制。(#PCDATA) 则规定元素下面不能包括子元素,且元素的值是字符串。

<!ELEMENT 元素名称 EMPTY>
<!ELEMENT br EMPTY>
<!ELEMENT 元素名称 (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT 元素名称 ANY>
<!ELEMENT note ANY>
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>
<!ELEMENT note (to,from,heading,body)>

关于子元素出现的次数

<!ELEMENT 元素名称 (子元素名称+)>   <!-- +:至少出现一次 -->
<!ELEMENT 元素名称 (子元素名称*)>   <!-- *:出现零次或者多次 -->
<!ELEMENT 元素名称 (子元素名称?)>   <!-- ?:出现零次或者一次 -->

 四、属性的声明

<!ATTLIST 元素名称 属性名称 属性类型 默认值>

#REQUIRED:属性值是必需的

#IMPLIED:属性不是必需的

#FIXED value:属性值是固定的

五、实体

<!ENTITY 实体名称 "实体的值">

<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">

<author>&writer;&copyright;</author>

六、实战演练:

<!DOCTYPE CATALOG [

<!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)>

]>

根据上面的ddt,对应写出自己的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE CATALOG SYSTEM "CATALOG.dtd" >
<CATALOG>
    <PRODUCT NAME="apple"  PARTNUM="30">
        <SPECIFICATIONS WEIGHT="30" POWER="30"> </SPECIFICATIONS>
        <OPTIONS></OPTIONS>
        <PRICE MSRP="40" WHOLESALE="89" STREET ="90"  SHIPPING ="20"></PRICE>
        <NOTES></NOTES>
    </PRODUCT>
</CATALOG>

DTD入门学习结束!

转载于:https://www.cnblogs.com/lyjs/p/4853338.html

相关文章:

  • 又是一番风味
  • 配置 ASP.NET Linux( CentOS 6.5 ) 运行环境 MONO + Jexus
  • 读书笔记 - 《黑天鹅》
  • bootstrap-scrollspy
  • 著名博客
  • 弹出和收起软键盘
  • [译]Dynamics AX 2012 R2 BI系列-分析的架构
  • AngularJS 初用总结
  • MTK Android Driver :Audio音频参数
  • 我眼中的下拉刷新
  • mahout安装和测试
  • bootstrap : 学习笔记
  • 更新SDK
  • BZOJ 1567: [JSOI2008]Blue Mary的战役地图( 二分答案 + hash )
  • CUDA 中 单精度浮点操作和 双精度浮点操作
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • angular2 简述
  • CentOS6 编译安装 redis-3.2.3
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Fastjson的基本使用方法大全
  • FastReport在线报表设计器工作原理
  • HTTP 简介
  • in typeof instanceof ===这些运算符有什么作用
  • js正则,这点儿就够用了
  • Nacos系列:Nacos的Java SDK使用
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • vuex 学习笔记 01
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 大快搜索数据爬虫技术实例安装教学篇
  • 多线程事务回滚
  • 关于使用markdown的方法(引自CSDN教程)
  • 官方解决所有 npm 全局安装权限问题
  • 力扣(LeetCode)357
  • 利用DataURL技术在网页上显示图片
  • 浏览器缓存机制分析
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 数据结构java版之冒泡排序及优化
  • 学习HTTP相关知识笔记
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 数据可视化之下发图实践
  • #includecmath
  • (10)ATF MMU转换表
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (二)Linux——Linux常用指令
  • (十三)Maven插件解析运行机制
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)母版页和相对路径
  • *2 echo、printf、mkdir命令的应用
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Framework .NET Core与 .NET 的区别