声明语句:必须在第一行出现,并且不能有空白;
有两种办法来实现
第一种:规定DTD内部
课上做的小练习:
<?xmlversion="1.0" encoding="UTF-8"?>
<!DOCTYPEbookinfo
[
<!ELEMENTbookinfo (title,author,publish,price)>
<!ELEMENT title(#PCDATA)>
<!ELEMENT author(#PCDATA)>
<!ELEMENT publish(publisher,ISBN,pubdate)>
<!ELEMENTpublisher (#PCDATA)>
<!ELEMENT ISBN(#PCDATA)>
<!ELEMENT pubdate(#PCDATA)>
<!ELEMENT price(#PCDATA)>
<!ATTLIST titlesrc CDATA #REQUIRED>
<!ATTLIST authortype CDATA "text/javascript">
<!ATTLIST publishid ID #IMPLIED>
<!ATTLIST pricetype (text|radio|checkbox) #IMPLIED>
<!ATTLIST ISBNfor IDREF #IMPLIED>
]>
<bookinfo>
<titlesrc="www">三国演义</title>
<authortype="text/javascript">罗贯中</author>
<publishid="a">
<publisher>河北软件出版社</publisher>
<ISBNfor="a">978-7-121-08311-2</ISBN>
<pubdate>20110920</pubdate>
</publish>
<pricetype="radio">$350</price>
</bookinfo>
<!DOCTYPE 根元素名称 [
元素规则(声明元素名,
<!ELEMENT 元素名称 类型》
类型:
EMPTY:空元素
ANY:可以包含任何内容,也可以为空
PCDATA:文体(不能使用特殊符号&><’”)(解析,&),还可以显示CDATA
CDATA:可以出现任何信息,把内容当作字符来显示
(子元素列表):逗号分隔,严格按照声明顺序来使用相应的子元素;
根元素只能有一个
如果在子元素后边加?(子元素?)该子元素可以出现0-1次
如果在子元素后边加+ :可以出现1-无数次
*:子元素可以出现0-无数次
(子元素1|子元素2):两个不能同时出现,可以出现子元素1或子元素2的其中一个
(子元素1,(子元素2,子元素3)?):()该组出现0-1次顺序不变
有外部DTD有点类似于CSS,DTA写的太长的话,把它剪切到外部
外部DTD:
文件:扩展名 .dtd
绝对路径:http://www.zhy.com/index.dtd
<!DOCTYPE 根元素名称 SYSTEM”URI/URL”>
<!DOCTYPE 根元素名称 PUBLC“公共名称” “URL”》
注意:中文xmlspy存在“必须既是SYSTEM 又是PUBLIC
属性规则
<!ATTLIST 元素名
属性名1 类型 默认值
……
>
类型:
CDATA:表示值为字符;
例如:<!ATTLISTtest3 name CDATA “zhy”>
(en1|en2……):枚举类型(只能从给定的集合选择对应值)
默认值值:
#REQUIRED:该元素必须有该属性值;
#IMPLIED:表示该属性值可有可无;
#FIXED:表示该属性有固定值;
Default:
ID:表示值为唯一ID
IDREF:参照已存在ID
IDREFS:值为一个或多个参照已存在(其他)ID\
多个参数中间用“空格”为分隔符,不能使用“逗号”
NMTOKEN:值为合法的XML名称;
NMTOKENS:由空格分隔开的多个XML名称
ENTITY:在DTD中声明实体名
ENTITIES:在DTD中声明用空格分隔的实体名;
NOTATION:在DTD声明中的注释
Html是为了显示信息的。
文档显示依赖的环境越多,浏览器开发就越困难不同浏览器的兼容性。
XML是为了保存数据的
XML标记命名规则
1)标记必须以英文字母或下划线“_”作为开头,如果在XML声明中把encoding属性值设置为“GB2312”,那么也可以使用中文开头
2)XML标记名严格区分大小写;
3)标记名不可以XML三个字母为开头(不论大小写);
4)除了开始字符外,其他字符必须是英文、数字、下划线、连接线和点“.”;
例如:
<abc> <_xy> <书号> <Hell-OK>
不合法:
<123a> <-hello> <书号> <XML123> <ra%>等;