首页 > 其他分享 >DTD学习笔记

DTD学习笔记

时间:2023-09-04 16:03:40浏览次数:69  
标签:xml 实体 -- 元素 笔记 DTD 学习 属性


 
作者fbysss
关键字:XML

一个定义Email的例子

<?xml version="1.0">
<!DOCTYPE message[
   <!ELEMENT message(header,body,signature,footer)>  --定义了message的子元素
   <!ELEMENT header(date,from,to,subject,banner)>    --header还有子元素
   <!ELEMENT footer ANY>         
   <!ELEMENT body (#PCDATA)>
]>

元素的命名:元素名的第一个字母必须是字母、或下划线(_)、或冒号(:),
后跟字母、数字、句号(.)、冒号、下划线、连结号(-)的组合,并且不能包含空白符,不能以“xml”开头。

一、元素声明:
<!ELEMENT name content>
其中,name是一个标准xml标记的名字。比如dict,city等,content由以下几种构成:
1.EMPTY--定义空元素,该元素只能有属性而不会有字符数据或子元素 比如<img src="aaa.jpg"/>或者<img src="aaa.jpg"></img>
2.ANY--可以是任何内容  (除了根元素,其它最好不要使用)
3.#PCDATA类型--不包含其它子元素而只包含字符数据(数字字母和符号都可以,但不包括子元素节点)的元素,应

该说,这是最常用的类型了。
它代表“已编译的字符数据”(parsed character data)
4.子元素类型--描述包含在本元素中的子元素顺序和重复次数的内容模型
(1)序列:所有子元素必须出现且仅出现一次,而且要依次出现。序列中不能出现#PCDATA。
<!ELEMENT message(header,body,signature,footer)> 就是一个序列定义,xml中的body必须在header之后出现
(2)选择:
<!ELEMENT message(header,body,signature,(footer|foot2))>
也就是或的意思,一目了然,不多写了
5.混合类型:某元素既包含子元素又包含已编译的字符数据。语法:
<!ELEMENT pick(#PCDATA |one|two|three)*>
二、元素声明指示符:
?:元素出现0次或者1次
*:0-n次
+:1-n次
(): 一组要共同匹配的表达式
|:OR,或
,:AND,要求严格遵从顺序要求
例子1:<!ELEMENT header(date,from,to+,subject,banner)> to元素必须有,而且可以有多个。比如
<to>aaa</to>
<to>bbb</to>
例子2:
<!ELEMENT body  (paragraph* )>
<!ELEMENT paragraph* (#PCDATA)>
<paragraph>元素可有可无,也可以有多个
三、属性定义<!ATTLIST 元素名称 属性名称 类型 默认值|#IMPLIED [#REQUIRED|#FIXED]>
例子:<!ELEMENT year (#PCDATA)>
      <!ATTLIST year format CDATA #IMPLIED>
其中,CDDATA表示属性的值由字符数据组成,而不含标记符(似乎有点像#PCDATA)。#IMPLIED表示属性没有默认值,#REQUIRED表示必须设定这个属性,#FIX表示固定不变的值。
四、实体定义
    一种替代机制,节省输入字符和时间。
1.内部一般实体:
<!ENTITY sss "the author is fbysss">
在xml中输入&sss;解析的时候,会自动解析为"the author is fbysss"
MSDN上也有说明:http://msdn2.microsoft.com/zh-cn/library/ms256483.aspx2.外部一般实体
<!ENTITY sss SYSTEM "sss.ent">
sss.ent是一个外部文件,内容就是the author is fbysss
3.参数实体

<?xml version="1.0" standalone="no"?> --standalone="no"表示本xml需要外部文件的支持
<!DOCTYPE message[
...
...
<!ENTITY % date SYSTEM "message.ent">  --注意%两边必须有空格
%date;
]>

---------------------------------------------------------
message.ent的内容如下

<!ELEMENT data (day,month,year)>
<!ELEMENT day (#PCDATA)>
<!ELEMENT month (#PCDATA)>
<!ATTLIST month type(numeric|character) #REQUIRED>
<!ELEMENT year (#PCDATA)>
<!ATTLIST year format type(numeric|character) "numeric">


----------------------------------------------------------

%date;这句相当于把message.ent的内容包含了进来。

4.不可解析的实体:
    用于嵌入非文本的内容,要加关键字NDATA
<!ENTITY sssphoto SYSTEM "sss.jpg" NDATA jpg>--这里也可以使用Url比如

http://www.fbysss.com/images/sss.jpg<!ENTITY NOTATION jpg SYSTEM "image/jpeg">

嵌入多个不可解析实体(见http://edu.cnzz.cn/NewsInfo/396.aspx)

在某些特殊场合下,一个单一的属性甚至一个标识号,可能需要引用不止一个的不可析实体。就可以声明占位符

元素的属性为ENTITIES类型。ENTITIES属性值由空格分隔的多个不可析实体名组成,每个实体名都指向一个外部

非XML格式数据资源,并且必须在DTD中声明所有实体。例如,可以用这种方法编写一个以幻灯放映元素来切换不

同的图片,DTD需要如下形式的声明:

<!ELEMENT SLIDESHOW EMPTY>
<!ATTLIST SLIDESHOW SOURCES ENTITIES #REQUIRED>
<!NOTATION JPEG SYSTEM "image/jpeg"
<!ENTITY HARM SYSTEM "charm.jpg" NDATA JPEG>
<!ENTITY MARJORIE SYSTEM "marjorie.jpg" NDATA JPEG>
<!ENTITY POSSUM SYSTEM "possum.jpg" NDATA JPEG>
<!ENTITY BLUE SYSTEM "blue.jpg" NDATA JPEG>

然后,在文档中需要幻灯放映出现的位置上,就可插入如下标记:

<SLIDESHOW SOURES="CHARM MARJORIE POSSUM BLUE">

五、DTD引用:有内部DTD、外部个人DTD和外部公用DTD,用的最多的就是外部公用了
外部公用DTD引用
DTD名称只能包含字母、
数字、空格和下面的符号:_%$#@()+:=/!*;?。同时,DTD名称还必须符合一些标准的规定。
例如,ISO标准的DTD以“ISO”三个字母开头;被改进的非ISO标准的DTD以加号“+”开头;未被改进的非ISO标准的DTD以减号“-”开头。无论是哪一种情况,开始部分后面都跟着两个斜杠“//”及DTD所有者的名称。在这个名称之后又是两个斜杠“//”,再然后是DTD所描述的文件的类型。最后,在又一对斜杠之后是语言的种类(参见ISO 639)。

标签:xml,实体,--,元素,笔记,DTD,学习,属性
From: https://blog.51cto.com/u_16245757/7351713

相关文章

  • eclipse下wtp+HibernateTools开发笔记
    作者fbysss关键字:eclipse,hibernate准备包:HibernateTools-3.1.0.beta4.zipGEF-SDK-3.1.1.ziphibernate-3.1.2.zipJEM-SDK-1.1.0.1.zipwtp-sdk-M200602010238.zip1.新建一个javaProject,建立src目录,建立com.sss.common包,2.Java->BuilderPa......
  • tomcat 5日志配置笔记(解决中文乱码)
    作者:fbysss关键字:Tomcat日志环境:linux前言:采用默认的tomcat日志,无法解决中文信息输出乱码的问题。tomcat5中,可以使用log4j或者javalogging配置文件对日志输出进行配置。以下是相关试验记录。如果common/lib下没有common-logging.jar和log4j.jar输出正常的日志。catalina.out记录......
  • Tomcat 项目迁移至weblogic 10笔记
    作者:fbysss关键字:TomcatWeblogicOS:WindowsXPWebAppServer:Tomat5.5WebLogic server10(中文版)IDE:Beaworkshopforweblogicplatform。一.IDE注意事项创建动态web项目,选择是否共享j2ee库,如果共享,则需要域的共享库里面包含项目所需的库,比如beeHivenetUi;不共享,则将所需的库......
  • IDL学习笔记(5)-IDL中菜单的创建方法
    作者:fbysss关键字:IDL一、下拉菜单promenutestbase=WIDGET_BASE(MBAR=bar)menu1=WIDGET_BUTTON(bar,VALUE='MENU1',/MENU)button1=WIDGET_BUTTON(menu1,VALUE='ONE')button2=WIDGET_BUTTON(menu1,VALUE='TWO')button3=WIDGET_BUT......
  • IDL学习笔记(4)-字体设置
    作者:fbysss关键字:IDL   在WIDGET_系列方法中,字体可以使用FONT='宋体*12*bold*Italic'的形式来设置(Widget_Label和Widget_Button都有),但是字体颜色好像没法改变,对于Widget_Button,只能折衷使用BITMAP实现,而Widget_Label就无法了。   IDLgrFont实现方式:myFont=OBJ_NEW('ID......
  • 【学习笔记】AS3快速上手笔记
    作者:fbysss关键字:AS3,ActionScript引言:如果有java、javascript基础,AS语法很好理解,有一个上午足够。看了本文,基本可编写代码调试。1.      开发工具FlashBuilder。新建一个【ActionScript】项目,会自动生成一个as文件,可以直接在里面写代码测试。从结构上看,这个文件是一个类,......
  • Oracle sqlldr笔记
    需求:有两列0X开头的guid,需要合并并转换为10进制数值。控制文件如下:LOADDATAINFILE“/home/xxxdbfile/xxxdb/xxx.txt”truncateINTOTABLExxx_USER.TTTTTTABLEFIELDTERMINATEBY“”TRAILINGNULLCOLS—这个是指如果上面的列中,有空的列载入,不报错(IDsequence(max,1),......
  • java ClassLoader笔记(一)
    作者:fbysss关键字:ClassLoader一、SunJDKClassloader体系1.层次关系Bootstrap:加载rt.jar<-Extension:加载 jre/ext/*.jar <-System:加载CLASSPATH中的jar<-UserDefined加载用户自定义包类2.特殊点  BootstrapClassLoader为C++所写,ExtensionClassLoader的parent为null,其中......
  • linux学习 Centos 7(二)
    linux学习Centos7(二)常用的基本命令目录管理绝对路径、相对路径绝对路径路径的全称:C:\ProgramData\360safe\xxx.xx在360safe目录下,xxx.xx的相对路径就是\xxx.xxcd切换目录绝对路径:/开头相对路径:../homecd:切换目录命令cd./:当前目录cd..:返回上一级目录ls......
  • Markdown语法学习
    Markdown学习标题:(#+空格,几级就是几个,最多6级)二级标题三级标题四级标题字体Hello,World!(两边**,加粗)Hello,World!(两边*,斜体)Hello,World!(两边***,斜体)Hello,World!(两边~~,斜体)引用Java学习(>+空格)分割线三个---回车三个***回车图片(可以是本地也可以是网上)![截图](C:\Us......