黑马程序员技术交流社区

标题: XML dtd约束学习总结!!! [打印本页]

作者: 29198102shihao    时间: 2013-7-19 16:52
标题: XML dtd约束学习总结!!!
XML的约束,规定xml的具体格式,要看懂XML约束文档,才会去怎么写xml文档
二DTD文件(document type definition),本身不是XML文件,用于定义和规定XML的结构,或验证格式有效性,做框架的时候才需要写dtd,但要读懂!!
IE对DTD不支持校验
只能用开发工具,可以是Myeclipse!也可以XMLspy
有效的XML文件:1本身语法正确2符合DTD规定
1Altova  XMLspy 开发XML的好工具,最好用英文版!中文版可能有问题
1tools-option-textfont 设置字体
2建立独立的XML(不需要验证)
file-new-xml document cancel不需要dtd,定义独立xml
3工具链用于检查xml的两个标记:黄色代表 格式正规的xml  绿色代表:有效的xml
4右下角有实体,双击可用

2DTD文件使用:
1内部DTD文件,直接放在xml文档里:
需要将dtd内容放在<! DCOTYPE  poem[ dtd内容 ]>里面,并放在声明下:

<?xml version=”1.0”?>
//以下是dtd文件
<! DCOTYPE  poem[                   poem是根元素!一个xml只有一个
<! ELEMENT空格 poem 空格(author,title,content)>   定义根元素的子元素,规定xml里:1三个元素必须都要出现且只出现一次,2三个元素必须要按顺序出现!
<! ELEMENT title 空格 (#PCDATA)>   接着定义子元素#PCDATA 元素内容是纯字符
<! ELEMENT author (#PCDATA)>
<! ELEMENT content (#PCDATA)>
]>
//以下是xml文档内容:
1三个元素必须都要出现且只出现一次,2三个元素必须要按顺序出现!
<poem>
< author ></ author >
< title ></ title >
< content ></ content >
</poem>



3外部DTD文件
XML文件是通过DCOTYPE声明语句来指定它所遵循的dtd文件!引用外部dtd文件
1<! DCOTYPE  文档根节点名 SYSTEM  “DTD文件路径”> 遵循自己手写的dtd
2<! DCOTYPE  文档根节点名 PUBLIC “dtd名称” “dtd文件url”  > 遵循公共的dtd文件
放在头声明的下面


1new –dtd文件:直接定义元素!不需要DCOTYPE

<! ELEMENT 空格 poem空格 (author,title,content)>  
<! ELEMENT

2new –xml
<?xml version=”1.0”?>
<! DCOTYPE 空格 根元素 空格SYSTEM 空格“dtd路径”>  引入外部dtd文件
xml内容。。。

4dtd定义元素:所有<! ELEMENT>都是并列定义的,无论是子是父
<! ELEMENT 空格 元素名 空格 元素类型>
元素类型:
1EMPTY 空元素  <! ELEMENT 元素名EMPTY >  不加括号空标签
2ANY 任意内容  <! ELEMENT 元素名ANY >  标签内可以放任意东西
3#PCDATA 纯文本  <! ELEMENT 元素名(#PCDATA) >  要加括号!且不包含子元素!
4组合类型:(元素1,元素2)指定元素所包含的子元素,并且按指定顺序!
5带dtd修饰符的组合类型:<! ELEMENT 家庭 (人+,家电*)>
+:(人+)  子元素出现 >=1次  子元素出现次数吗
| :(人|狗) 或 出现人或狗元素
():分组  ((人|狗),猪)  
*(成员*)  子元素出现 >=0次
?(成员?)  0或1次
,是按顺序 (人,家电,狗)  元素出现的顺序,且必须出现,只能出现一次!
<! ELEMENT 家庭 (人*,家电)>  人元素就算有多个,都要出现在家电之前

5 dtd定义元素属性:<!ATTLIST>和<! ELEMENT>也都是并列定义的,写在哪都行,可以写在所有ELEMENT后面
1定义属性格式:
<!ATTLIST  元素名 属性名 属性类型 属性特点>
同时定义多个属性:
<!ATTLIST  元素名
属性名 属性类型 属性特点
属性名 属性类型 属性特点
>
或者分别定义多个属性<!ATTLIST>

2属性类型
  1CDATA纯字符
2NMTOKEN:CDATA除去空格
3ID 该元素的属性值唯一 (当xml文档中多次出现该元素时,属性值要唯一,具有标识元素的功能) <person id=10/> <person id=11/>
4 IDREF 该元素的属性值只能参照引用 xml文档中其他元素已赋值的ID属性
<!ATTLIST  people  rel  ID  #REQUIRED >
<!ATTLIST  people  p  IDREF   #IMPLIED >
<people rel=”p1” >   
<people rel=”p2” p=”p1” >   

5 IDREFS  引用参照多个ID  <people  p=”p1空格 p2”>
6 Enumerated
<!ATTLIST  people  rel  (single|married|divorcr) #REQUIRED >
属性rel只能是以上三个值之一

3属性特点 1#REQUIRED必有属性  2#IMPLIED 属性可有可无  3#FIXED”asd” 属性固定值asd   4“ddd”属性默认值ddd

6命名空间:同名元素可以出现,但为了区别两个同名但功能不同的元素,类似于java的包
命名空间放在任意位置,就把他当做包名
<?xml version=”1.0”?>
<h:table  
xmlns:h=”http://www.w3.org”>  </h:table>
放在<h:table> <h:td>  </h:td></h:table>里的元素都要加命名空间的前缀!
1自定义的命名空间
h是命名空间的前缀名!元素是在h命名空间下,随便取名
xmlns:h是命名空间的定义,命名空间的值是个url,和包名类域名类似么就是为了区分不同的命名空间,url不会去访问,只是为了区分的字符串!随便写url
1<h:table  
xmlns:h=”http://www.w3.org”>  
<h:tr>
<h:td>  </h:td>
</h:tr>
</h:table>
2<f:table  
xmlns:f=”http://www.abd.org”>  
<f:tr>
<f:td>  </f:td>
</f:tr>
</f:table>
这样两个同名元素放在一个xml文档就可以区分了
2系统的命名空间 命名空间名可以随便改,但一般不改。url必须要严格按照人家定义的写,不能再随便写!
如:shema就是个特殊的xml





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2