XML之DTD和SCHEMA

schema&dtd

一个文档满足了 XML 文档格式规定才算是一个 XML 文档,但是随便一个 XML 文档其实对我们意义不大,因为 XML 并不是为哪项特定应用而设计的,其结构也千变万化,所以我们必须规定 XML 文档的结构以便我们创建,解析和交换 XML 文档.

<?xml version="1.0"?>

<!DOCTYPE note [

  <!ELEMENT note (to,from,head,body)>

  <!ELEMENT to      (#PCDATA)>

  <!ELEMENT from    (#PCDATA)>

  <!ELEMENT head(#PCDATA)>

  <!ELEMENT body    (#PCDATA)>

]>

<note>

  <to>zhudansheng</to>

  <from>zhudansheng1987</from>

  <head>header</head>

  <body>forget</body>

</note>

 

DTD 里面的结构块:

l  Elements

<message>some message in between</message>

这就是一个元素, element 是组成 XML 的主要成分。

常用写法:

<!ELEMENT element-name EMPTY> element 比如: <br />

<!ELEMENT element-name ANY> 包含任何内容的 element ,前提是内容合法。

<!ELEMENT element-name (#PCDATA)> 只含有字符信息的 element

<!ELEMENT element-name (child-element-name,child-element-name,.....)> 包含若干子 element element 。注意,子节点必须按照这里定义的顺序出现。

下面是关于出现次数的一些写法:

<!ELEMENT element-name (child-name)> 子节点出现且只出现一次。

<!ELEMENT element-name (child-name+)> 一次或者多次。

<!ELEMENT element-name (child-name*)> 零次或者多次。

下面是一些组合用法:

<!ELEMENT note (to,from,header,(message|body))> | ”用法提供“或”的功能。

<!ELEMENT note (#PCDATA|to|from|header|message)*> 这句的意思是 note 元素可以包含零个或者多个( #PCDATA|to|from|header|message )中任意的一个元素或文本。

 

l  Attributes

属性是用来对元素的附加特性进行描述,他以名值对的形式出现。如:

<img src="computer.gif" />

下面是属性的表示方法:

<!ATTLIST element-name attribute-name attribute-type default-value>

Attribute Types:

Value

Explanation

CDATA

文本

(en1|en2|..)

规定属性值必须是列表中的一个

ID

属性值必须唯一

IDREF

属性值是另外一个 elementID

IDREFS

属性值是一个 ID 列表

NMTOKEN

属性值是一个合法的 XML name

NMTOKENS

属性值是一个合法的 XML name 列表

ENTITY

属性值是一个 entity

ENTITIES

属性值是一个 entity 列表

NOTATION

属性值是一个 notation

xml:

属性值是一个预定义 xml value

Default Value:

Value

Explanation

value

默认值
<!ATTLIST square width CDATA "0">

#REQUIRED

属性是必须的
<!ATTLIST element-name attribute_name attribute-type #REQUIRED>

#IMPLIED

属性是可选的
<!ATTLIST element-name attribute-name attribute-type #IMPLIED>

#FIXED value

属性是固定值的
<!ATTLIST element-name attribute-name attribute-type #FIXED "value">

那么假如我们想要规定 payment 元素的一个叫做 type 的属性,他必须是 check 或者 cash ,而且默认是 cash ,我们需要这样写:

<!ATTLIST payment type (check|cash) "cash">

 

l  Entities

Entity References

Character

&lt;

&gt;

&amp

&

&quot;

"

&apos;

'

这个不用多说了 J 。在 HTML 里我们不是常用 &nbsp; 么,哈哈。

但是值得一提的是 entity 可以自定义 J ,上面的不过是 XML 预定义的而已。

Entity 的定义既可以是内部的,也可以是外部的。

内部定义:

<!ENTITY writer "Donald Duck.">

<!ENTITY copyright "Copyright W3Schools.">

这两行定义了两个 entity ,下面是在 XML 文档里的引用

<author>&writer;&copyright;</author>

外部定义:

<!ENTITY writer SYSTEM "http://www.w3schools.com/dtd/entities.dtd">

<!ENTITY copyright SYSTEM "http://www.w3schools.com/dtd/entities.dtd">

这里定义了两个外部 entity ,但是不影响引用。

<author>&writer;&copyright;</author>

 

有些像宏定义,不是么?

 

l  PCDATA

Parsed character data

PCDATA 在经过 XML 解释器的时候会被解析,其中的标签和 Entity 都会被按照 XML 的规定解释。

比如 <body> 会被认为是一个 element 的开始,而一个 &amp; 会被解释为 &

l  CDATA

PCDATA 相对的一种用法,里面的字符保持原样,不会被解释器解释

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值