DTD约束

XML文件约束之DTD详解 目录1. 这些都是什么?为什么要学?目的是什么?2.标准的XML格式3.DTD3.1 内部DTD的定义,需要在顶部加入,语法如下:3.1.1 元素定义:3.1.2 属性定义:3.2 外部定义4.总结,思维导图本章来介绍一下,什么是XML,什么是DTD,还有一个跟DTD作用一样的Schema,以及为什么要学习这些东西,学习这两些东西的目的是什么。1. 这些都是什么?为什么要学?目的是什么? XML : 指可扩展标记语言(eXtensible Markup Language), 被设计用来传 阅读详情

原文链接:http://www.cnblogs.com/yiqiu2324/archive/2014/02/04/3537881.html



1.DTD(Document Type Definition)文件类型定义是用来约束XML文档,由于XML的可扩展,因此我们用dtd来约束XML文档中的元素(Element)和属性(Attribute).

a.对元素的声明: (XML文档中允许出现的标签)

<!ELEMENT 元素名称 元素类型>

如为元素内容:则需要使用()括起来,如

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

<!ELEMENT 书名 (#PCDATA)>

#PCDATA: 表示"书名"中嵌套的内容为普通文本字符串.

这里的PCDATA被解析的字符数据(parsed character data),PCDATA 是会被解析器解析的文本,与其相反的不会被解析CDATA区域内容

具体可以参考:http://xuqin.blog.51cto.com/5183168/887799

如为元素类型,则直接书写,DTD规范定义了如下几种类型:

EMPTY:用于定义空元素,例如<br/> <hr/>

ANY:表示元素内容为任意类型。

 

元素内容中可以使用如下方式,描述内容的组成关系

•用逗号分隔,表示内容的出现顺序必须与声明时一致。

   <!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)>

• 用|分隔,表示任选其一,即多个只能出现一个(也就是"或"的意思)

   <!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)>

•元素内容使用空格符分隔,表示出现顺序没有要求:

   <!ELEMENT MYFILE (TITLE AUTHOR EMAIL)> *

在元素内容中也可以使用+、*、?等符号表示元素出现的次数:(含义和在正则表达式中的一致)

+: 一次或多次 (书+)

?: 0次或一次 (书?)

*: 0次或多次 (书*)

l也可使用圆括号( )批量设置,例

<!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>

 

b.对元素的属性定义:

<!ATTLIST 元素名

属性名1 属性值类型设置说明

属性名2 属性值类型设置说明

……

>

例如:

<!ATTLIST 商品

类别 CDATA #REQUIRED

颜色 CDATA #IMPLIED

>

•#REQUIRED:必须设置该属性

•#IMPLIED:可以设置也可以不设置

•#FIXED:说明该属性的取值固定为一个值,在 XML 文件中不能为该属性设置其它值。但需要为该属性提供这个值

•直接使用默认值:在 XML 中可以设置该值也可以不设置该属性值。若没设置则使用默认值。

常用的属性值类型:

CDATA:表示属性值为普通文本字符串。

ENUMERATED :相当于枚举类型

例如:在一个XML文档中:

   1:  <?xml version = "1.0" encoding="GB2312" standalone="yes"?>
   2:  <!DOCTYPE 购物篮 [
   3:      <!ELEMENT 肉 EMPTY>
   4:      <!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉"> <!--肉的品种只能是()中的其中一种,默认值"鸡肉"-->
   5:  ]> 
   6:  <购物篮>
   7:      <肉 品种="鱼肉"/>
   8:      <肉 品种="牛肉"/>
   9:      <肉/>
  10:  </购物篮>

 

ID

  表示属性的设置值为一个唯一值。

  ID 属性的值只能由字母,下划线开始,不能出现空白字符

  例如:

   1:  <?xml version = "1.0" encoding="GB2312" ?>
   2:   
   3:  <!DOCTYPE 联系人列表[
   4:      <!ELEMENT 联系人列表 ANY>
   5:      <!ELEMENT 联系人(姓名,EMAIL)>
   6:      <!ELEMENT 姓名(#PCDATA)>
   7:      <!ELEMENT EMAIL(#PCDATA)>
   8:      <!ATTLIST 联系人 编号 ID #REQUIRED>
   9:  ]>
  10:   
  11:  <联系人列表>
  12:      <联系人 编号="a1">
  13:          <姓名>张三</姓名>
  14:          <EMAIL>zhang@it315.org</EMAIL>
  15:       </联系人>
  16:      <联系人 编号="a2">
  17:          <姓名>李四</姓名>
  18:          <EMAIL>li@it315.org</EMAIL>
  19:      </联系人>
  20:  </联系人列表>

ENTITY(实体),在后面的综合例子中展现

 

 

2.XML文档引用dtd文档进行约束:

book.xml:

   1:  <?xml version="1.0" encoding="GBK" standalone="no"?>
   2:  <!DOCTYPE 书架 SYSTEM "book.dtd"> <!--从外部引用dtd文档,book.xml与book.dtd在同一目录下,DOCTYPE与SYSTEM 所有字母均大写-->
   3:  <书架>
   4:  <书>
   5:      <书名>&bookname;</书名>
   6:      <作者 姓名="王五"/>
   7:      <售价>50元</售价>
   8:      <页面作者 个人爱好="上网" 网站职务="页面作者" 联系信息=""/>
   9:   </书>
  10:  </书架>
  11:  <!--
  12:  1. #REQUIRED :网站职务="设计",页面作者元素中一旦写了网站职务属性,那么该属性的值只能写 "页面作者"
  13:  否则报错: Attribute "网站职务" with value "设计" must have a value of "页面作者"
  14:  2.对于属性个人爱好的属性值,你写了,其属性值可以任意更改,但是不写默认为 "上网"
  15:   -->

 

book.dtd:

   1:  <!ENTITY % commonType "CDATA">
   2:  <!ENTITY % name "(张三|李四|王五)"><!--参数实体:在dtd文件内部使用-->
   3:  <!ENTITY bookname "java web"> <!--引用实体:在xml文档中通过&bookname;引用-->
   4:   
   5:  <!ELEMENT 书架 (书+)>
   6:  <!ELEMENT 书 (书名,作者,售价,页面作者)>
   7:  <!ELEMENT 书名 (#PCDATA)>
   8:  <!ELEMENT 作者 (#PCDATA)>
   9:  <!ELEMENT 售价 (#PCDATA)>
  10:  <!ELEMENT 页面作者 (#PCDATA)>
  11:  <!ATTLIST 页面作者
  12:     姓名  %commonType; #IMPLIED
  13:     年龄    CDATA #IMPLIED
  14:     联系信息 CDATA #REQUIRED
  15:     网站职务 CDATA #FIXED "页面作者"
  16:     个人爱好 CDATA "上网"   
  17:    >
  18:   <!ATTLIST 作者 
  19:      姓名   %name; #REQUIRED 
  20:   >
  21:   <!--这里相当与:
  22:       姓名  (张三|李四|王五) #REQUIRED
  23:    -->
  24:   <!--
  25:   网站职务 CDATA #FIXED "页面作者":固定值
  26:   个人爱好 CDATA "上网": 默认值-->
  27:   
  28:   
不论是参数实体还是引用实体都起到了一改全改的作用,提高代码复用性.
看一下新建的一个html文档:
   1:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   2:  <html xmlns="http://www.w3.org/1999/xhtml">
   3:  <head>
   4:  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   5:  <title>无标题文档</title>
   6:  </head>
   7:   
   8:  <body>
   9:  </body>
  10:  </html>
第一行: DOCTYPE(文档类型定义语句)中PUBLIC关键字:表明该html文件所遵循的是一个由权威机构制定的,公开提供给特定行业或公共使用的DTD文件,而不是某个组织内部的规范文件,我们可以在浏览器的地址栏输入该网址下载到该dtd文件,里面就是对html文档的约束.
第二行:<html xmlns="http://www.w3.org/1999/xhtml">具体可以参考W3C的教程:http://www.w3school.com.cn/tags/tag_prop_xmlns.asp
第四行:参照:http://www.w3school.com.cn/tags/tag_meta.asp#meta_prop_http-equiv 其中charset="utf-8"那么浏览器的html解析引擎会以utf-8解码
 
 

3.最后根据dtd文件来写出相应的xml文档:

 
<!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 "CATALOG.dtd">
<CATALOG>
    <PRODUCT NAME="电脑桌" CATEGORY="Table" PLANT="Chicago">
        <SPECIFICATIONS>
           产品说明
        </SPECIFICATIONS>
        <OPTIONS>
        
        </OPTIONS>
        <PRICE>
        
        </PRICE>
 
    </PRODUCT>
</CATALOG>
 

西门子博途系列学习笔记SCL(三)______自由口通讯(RS485轮询程序) 西门子博途V16系列学习笔记SCL(三)___自由口通讯轮询程序(RS485) 西门子博途系列学习笔记SCL(三)______自由口通讯(RS485轮询程序) 文章目录西门子博途V16系列学习笔记SCL(三)___自由口通讯轮询程序(RS485)前言一、FreePort自由口通讯是什么?二、使用步骤1.模块参数定义2.定义FB功能块参数:3.程序代码如下(每天写代码100行,学不会你来找我):总结 前言 很长时间都没有更新了,主要是最近在学习罗克韦尔的STUDIO5000PLC编程软件,怎么说,和博 阅读详情

相关推荐

AD9371实战:如何用ZCU106搭建JESD204B TX时钟链(含关键参数计算)

本文详细解析了如何基于Xilinx ZCU106开发板为AD9371搭建JESD204B TX时钟链。文章从系统需求出发,逐步推导出从IQ采样率到GTH线速率的关键参数计算公式,并提供了在Vivado中配置GTH收发器(包括QPLL选择、分频比设置)的实战步骤与调试技巧,旨在帮助硬件工程师快速实现稳定可靠的JESD204B高速数据传输链路。

weixin_29164843的博客 293

XML约束技术之一:DTD约束

1.XML约束*Tip:XML约束概述什么是XML约束在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。为什么需要XML约束常用的约束技术XML DTDXML Schema*Tip:DTD约束快束入门DTD(Document Type Defin

jionjionyoushen的专栏 1111

MySQL 优化 - index_merge 导致查询偶发变慢

今天遇到了一个有意思的问题,线上数据库 CPU 出现了偶发的抖动。定位到原因是一条查询语句偶发变慢造成的,随后通过调整表中的索引解决。优化器通过某种机制检测到 index_merge 能带来性能提升,某些情况下不会带来提升,反而会耗费更长的时间,属于优化器的缺陷,可以通过调整表中的索引来解决。

分享既学习 1255

DTD约束的基本使用与讲解

DTD,全称为“文档类型定义”(Document Type Definition),是一种定义 XML 或 HTML 等文档的结构的方式。DTD 通常包含对元素、属性、实体、命名空间等方面的定义。DTD 主要用于指定 XML 或 HTML 文档中元素、属性、实体等的定义和规范。使用 DTD 可以定义标记、元素、实体、注释等,从而确保 XML 或 HTML 等文档的结构和格式的正确性。DTD 可以内联在 XML 或 HTML 文档中,也可以作为一个外部文件引用,以进行重复使用。

万维网连五洲,二进制写尽天下事,喜欢结识新伙伴寻找志同道合的朋友,欢迎一起探讨学习 2313

MPN – 制造商物料编号(延伸)

此外,用户还可以在物料主数据中定义阻止MPN材料的原因,以及在采购订单创建时,是否可以将现有的MPN材料修改为其他MPN材料,从而实现对MPN材料的精细控制和管理。通过使用AMPL,用户可以指定每个MPN材料是否仅能为特定工厂或整个企业所有工厂采购、采购的时间段、是否必须属于特定修订级别、是否只能从特定制造商工厂采购以及是否被阻止及其原因。通过AMPL管理,企业可以规范采购流程,避免使用未经批准的材料,从而提高采购的透明度和效率,同时也为质量控制提供了保障‌。3、QM中的制造商物料。质量信息记录QI01。

yanzibing99的博客 2486

Unity 代码混淆<混淆插件(Obfuscator Pro 3.9.4)>

Unity 代码混淆<混淆插件(Obfuscator Pro 3.9.4)> 插件导入项目 导入后打开OPS/Obfuscator/Obfuscator Pro Settings 打开后可以看到界面如下 可以在上面界面中选择你需要混淆的类,方法,字段,属性,事件,参数。需要混淆的程序集的选择。如果有些程序集混淆后会有问题也可以添加到白名单里不被混淆 根据自己需求取选择 这个界面是是否添加添加随机代码的 如果使用了上面的插件可以使用 插件下载网址:https://download.cs

Xing_Cheng_Yun的博客 5100

day075:XML的约束:DTD约束文档、DTD约束文档的三种引入方法、DTD语法规则

用来限定xml文件中可使用的标签以及属性。

ZuoQi的博客 1612

[机器学习] 第二章 模型评估与选择 2.ROC:roc_curve原理及源代码详解

代码见:https://github.com/Carrie-Yi/machine_learning/tree/main/roc_curve

心宝的博客 1493

xml之dtd约束详解

dtd约束 ELEMENT:定义标签 ATTLIST:定义属性 我们自定义一个dtd约束文件 <!ELEMENT Programmers (Programmer*) > <!-- 定义Programmers标签下有Programmer标签,*是正则规则,代表0次或多次 --> <!ELEMENT Programmer (name,age,code)> <!-- 定义Programmers标签下有name,age,code标.

林高禄 9643

让 Claude Code 接管 SAP 事务流, 用 Python 和 SAP GUI Scripting 做一个真正能干活的 AI Agent

摘要:SAP系统自动化面临的核心瓶颈在于繁琐的GUI操作而非分析能力不足。通过整合Claude AI、Python和SAP GUI Scripting技术,可构建能直接操作SAP界面的智能代理。该方案利用SAP官方提供的脚本接口,实现事务码执行、界面导航、数据提取等自动化操作,特别适用于DMLT过账引擎等复杂错误分析场景。相比传统SQL导出方案,这种GUI级自动化能处理树控件、ALV表格等复杂界面元素,且无需额外API开发,直接在现有SAP GUI会话上工作,在保持原有权限体系的同时显著提升效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 321

某手短视频用户主页视频列表爬虫实战:从原理到完整实现

随着短视频平台的迅猛发展,某手(为保护平台隐私,本文以“某手”代指实际目标)已经成为国内最大的短视频社交平台之一,拥有数亿日活用户。对于数据分析师、内容创作者和市场营销人员而言,获取某个用户主页的视频列表具有重要的研究价值——无论是分析头部创作者的内容策略,还是监测竞品的发布频率与互动数据,爬虫技术都成为不可或缺的工具。然而,在2024-2025年的技术环境下,某手已经构建了多层次的反爬机制:包括接口签名加密、请求参数动态混淆、设备指纹检测、IP行为分析以及Web端无限滚动加载的异步数据获取方式。

2201_76125261的博客 540

DTD约束&schema约束学习

DTD约束 概念 ​ DTD是文档类型定义(Document Type Definition)。DTD 可以定义在 XML 文档中出现的元素、这些元素出现的次序、它们如何相互嵌套以及XML文档结构的其它详细信息。 约束体验 体验效果说明:当编写xml文档时不符合指定dtd约束时,进行提示xml编写错误,如下图: 体验步骤: 步骤1:复制bookshelf.dtd文件 步骤2:bookshelf.dtd文件内容如下 <!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者

weixin_43521028的博客 1231

c#上位机最强教程之环境安装

本文介绍了.NET 6开发环境的安装配置指南。主要内容包括:1)安装.NET 6 SDK和Runtime的方法及验证步骤;2)Visual Studio 2022的安装流程;3)创建第一个.NET 6控制台项目;4)项目结构解析和配置文件说明。文章还提供了实践练习和常见问题解答,帮助初学者快速搭建开发环境并运行简单程序。适用于零基础开发者,学习时间约10分钟。

飞上云层 316

XML——XML文件约束之DTD详解

本文介绍了XML文件约束的概念,重点介绍了使用DTD约束XML文件,介绍了DTD的引用方式以及定义元素和属性的语法

Gavin 4万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

XML之DTD约束

一 DTD约束的基础知识 1 什么是DTD约束? DTD即是文档类型定义,可定义合法的XML文档构建模块,它使用一系列合法的元素来定义文档的结构。 2 内部的 DOCTYPE 声明 假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中: &lt;!DOCTYPE 根元素 [元素声明]&gt; 3 外部文档声明 假如 DTD 位于 XML 源文件的外...

Geffin的博客 407

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

xml之dtd约束

xml之dtd约束 xml约束的技术:主要有dtd约束和schema约束(面试题) 本次为dtd约束. dtd快速入门 dtd文件后缀为 dtd 看xml有多少个元素(标签),有几个元素(标签),就写几个<!ELEMENT>(大写) 看是复杂元素还是简单元素, 复杂元素:拥有子元素 * 格式:<!ELEMENT 元素名称 (子元素)> * 注意:中间必须要用空格 简单元素...

weixin_45311284的博客 268

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

XML的dtd约束

 XML约束之DTD的使用(1)为什么要有约束? XML都是用户自定义的标签,若出现小小的错误,软件程序将不能正确地获取文件中的内容而报错。(如:Tomcat)XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为约束。两个概念:格式良好的XML:遵循XML语法的XML。有效的XML:遵循约束文档的XML总之:约束文档定义了在XML中允许出现的元素名称、属性及元素出现的顺序等等。...

赵国闯 廊坊师范学院 信息技术提高班 315
上一篇: jdbc连接数据库
下一篇: 执行力领导力
冷静BB
博客等级 码龄12年 298粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值