DTD

简介:

一、什么是DTD
    文档类型定义
    Document Type Definition
    DTD用来描述xml文档结构,一个DTD文档包含:
        元素的定义规则
        元素之间的关系规则
        属性的定义规则
二、为什么要有DTD
    1.有了DTD,每个xml文件可以携带一个自身格式的描述
    2.有了DTD,不同组织的人可以使用一个通用DTD用来交换数据
    3.应用程序可以使用一个标准DTD校验外部接收的xml数据是否有效
三、如何编写一个DTD文档
    1.语法
        DTD文档的声明及引用
        内部DTD文档(Students.xml)
        <!DOCTYPE 根元素 [定义内容]>
        外部DTD文档
        <!DOCTYPE 根元素 SYSTEM "DTD文件路径">
        内外部DTD文档结合
        <!DOCTYPE 根元素 SYTEM "DTD文件路径" [定义内容]>
四、元素的定义
    语法
        <!ELEMENT NAME CONTENT>
    ELEMENT:关键字
    NAME:元素名称
    CONTENT:元素类型
        EMPTY:该元素不能包含子元素和文本,但可以有属性
        #PCDATA:可以包含任何字符数据,但是不能在其中包含任何子元素
        纯元素类型:只包含子元素,并且这些子元素外没有文本
        ANY:该元素可以包含任何在DTD中定义的元素内容
    符号:
    <!DOCTYPE CCTV-6[
        <!ELEMENT CCTV-6 (电影+)>
        <!ELEMENT 电影 (名称,主演+,类型?,片长)>
        <!ELEMENT 名称 (#PCDATA)>
        <!ELEMENT 主演 (#PCDATA)>
        <!ELEMENT 类型 (#PCDATA)>
        <!ELEMENT 片长 (#PCDATA)>
        
    ]>
定义属性的语法结构
    语法
        <!ATTLIST 元素名称
            属性名称 属性类型 属性特点
            ...
        >
    属性类型:CDATA
        <!ELEMENT 人
            姓名 CDATA #REQUIRED
        >
    属性类型ID取值必须是唯一的。
        <!ATTLIST 公司职员
            编号 ID #REQUIRED
            姓名 CDATA #REQUIRED
        >
    属性类型IDREF/IDREFS
        
    属性类型Enumerated
        <!ATTLIST person 性别(男|女) #REQUIRED>
    属性特点
        #REQUIRED必须出现
        <!ATTLIST 元素名 属性名 属性类型 #REQUIRED>
        #IMPLIED可以省略
        <!ATTLIST 元素名 属性名 属性类型 #IMPLIED>
        #FIXED必须是固定值
        <!ATTLIST 元素名 属性名 属性类型 #FIXED "VALUE">
        #Default默认值
        <!ATTLIST 元素名 属性名 属性类型 "value">
    <!ELEMENT 家庭 (人+,家电*)>
    <!ELEMENT 人 EMPTY>
    <!ELEMENT 家电 EMPTY>
    <!ATTLIST 人
        名字 CDATA #REQUIRED
        年龄 CDATA #REQUIRED
        性别 (男|女) "女"
        住址 CDATA #FIXED "北京"
        爱好 CDATA #IMPLIED
    >
    <!ATTLIST 家电
        名称 CDATA #REQUIRED
        数量 CDATA #REQUIRED
    >
实体
    语法
        <!ENTITY 实体名 "实体值">

本文转自  素颜猪  51CTO博客,原文链接:http://blog.51cto.com/suyanzhu/1561410

相关文章
|
Java 测试技术 数据库
基于 SpringBoot+Vue+Java 的智慧外贸系统(数据库,附源码,教程)
基于 SpringBoot+Vue+Java 的智慧外贸系统(数据库,附源码,教程)
|
存储 监控 安全
【RISC-V 理论篇】SBI 规范解读(下)
【RISC-V 理论篇】SBI 规范解读(下)
929 0
|
NoSQL MongoDB 数据库
MongoDB 分页神器:limit() 和 skip() 方法详解
MongoDB 分页神器:limit() 和 skip() 方法详解
302 1
|
10月前
|
存储 弹性计算 调度
基于Knative的LLM推理场景弹性伸缩方案
Knative的基于请求弹性配置与大语言模型(LLM)的推理场景高度契合。此外,它的资源降配特性可以显著帮助用户降低成本。本文详细介绍基于 Knative 的 LLM 推理场景弹性伸缩方案。
|
9月前
|
人工智能 缓存 自然语言处理
自建 DeepSeek 时代已来,联网搜索如何高效实现
自建 DeepSeek 时代已来,联网搜索如何高效实现
|
IDE Java 测试技术
【如何学习Python自动化测试】—— 自动化测试环境搭建
【如何学习Python自动化测试】—— 自动化测试环境搭建
239 0
|
存储 大数据 云计算
云计算:技术与应用的融合之美
云计算:技术与应用的融合之美
631 0
|
数据采集 人工智能 文字识别
高能力全透明双语大语言模型MAP-Neo完全开源,开放所有细节!
近年来,大型语言模型 (LLMs) 在各种任务中取得了前所未有的性能提升。然而,由于商业利益,最强大的模型(如 GPT、Gemini 和Claude)只能通过API访问,并未公开训练细节。
|
运维 监控 算法
面向全栈可观测的分布式链路追踪
全栈可观测App提供了一套完整的分析工具,从数据统计分析能力到数据关联,再到具备智能化和自动化特性的相关工具,以解决人们在可观测性方面所遇到的问题。未来,我们将持续提供更加丰富和强大的分析工具来满足用户的需求。
61731 6
|
边缘计算 运维 Anolis
干货满满,8 大技术分享!龙蜥社区走进中兴通讯 MeetUp 圆满结束
10位技术大咖与现场参会者探讨了边缘及嵌入式场景下泛操作系统技术的发展与生态建设。
下一篇
开通oss服务