一、属性的声明:
a) 任何标记的属性都必须在DTD文档中进行声明,都要通过关键字
<!ATTLIST elem_nameattr_name attr_type default_value>
定义。
b) 所有标记的属性,即便是同名属性,都要在各个标记中声明。
如publisher中有address属性,person中也有address属性,则需要分别在两个标记中进行声明。
c) 可以多次为一个标记声明不同的属性。
如book有language和publisher两个属性,可以声明为
<!ATTLIST book language CDATA “english”>
<!ATTLIST book publisher CDATA “tsinghua”>
也可以同时依次为一个标记声明多个属性。
如:
<!ATTLIST book language CDATA “english” publisher CDATA “tsinghua“>
(不提倡使用)
d) attr_type的四种类型:
i. 默认属性值,不指定;
ii. #REQUIRED——属性值必须指定;
iii. #IMPLIED——属性值可选用或不用;
iv. #FIXED——属性值可以没有,但如果有则必须和指定值保持一致。
e) e.g.
test328.dtd
<?xmlversion="1.0" encoding="UTF-8"?>
<!ELEMENT books (book*)>
<!ELEMENT book(name|author|price)*>
<!ATTLIST book languageCDATA #FIXED "english">
<!ATTLIST book publisherCDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author(#PCDATA)>
<!ELEMENT price(#PCDATA)>
test328.xml
<?xmlversion="1.0" encoding="UTF-8"?>
<!DOCTYPE books SYSTEM"test328.dtd">
<books>
<book language="english" publisher="ecnu">
<name>xml programming</name>
<author>Jason</author>
<price>$100</price>
</book>
</books>
二、 属性的内容类型
a) CDATA型:该类型的属性值不能含有“<”和“””,但实体可以出现在该字符串中;
b) Enumerated型:必须从枚举过的数据类型中选取,如(true|false);
c) ID型:要求文档中所有标记ID类型的属性值一定不能相同;
d) ENTITY型:用于标识外部不可解析的实体,如二进制文件;
e.g.(会报错?)
<?xmlversion="1.0" encoding="UTF-8"?>
<!DOCTYPE books [
<!ELEMENT books (book)*>
<!ELEMENT book (#PCDATA)>
<!ATTLIST book pic ENTITY#REQUIRED>
<!ENTITY pic1 SYSTEM"haha.jpg">
<!ENTITY pic2 SYSTEM"monkey.jpg">
]>
<books>
<book pic="&pic1;">haha</book>
<book pic="&pic2;">monkey</book>
</books>
e) ENTITIES型:与ENTITY类似,但其指定的是一个实体序列,如多张图片,多个音频等。
e.g.(会报错?)
<?xmlversion="1.0" encoding="UTF-8"?>
<!DOCTYPE books [
<!ELEMENT books (book)*>
<!ELEMENT book (#PCDATA)>
<!ATTLIST book pic ENTITIES #REQUIRED>
<!ENTITY pic1 SYSTEM "haha.jpg">
<!ENTITY pic2 SYSTEM "monkey.png">
]>
<books>
<book pic="&pic1; &pic2;">haha</book>
</books>
f) NOTATION型:对于不可解析的实体,为了将其展现出来或进行应用,通过该关键字告诉用什么样的软件进行支持。
如:dtd中声明
<!NOTATION JPG SYSYEM “c:/mspaint.exe”>
<books>
<book pic="&pic1; &pic2;" display=”JPG”>haha</book>
</books>
g) IDREF型:用于表示XML文档中标记之间关系的一种类型,其值必须是文档中被定义好的某一标记的ID类型的属性值。
如:
<?xmlversion="1.0" encoding="UTF-8"?>
<!DOCTYPE books [
<!ELEMENT books (book)*>
<!ELEMENT book (#PCDATA)>
<!ATTLIST book isbn ID#REQUIRED>
<!ATTLIST book lastversionIDREF #IMPLIED>
]>
<books>
<book isbn="P301">haha</book>
<book isbn="P103" lastversion="P301">HA</book>
</books>
h) IDREFS型:类似于IDREF,但可以引用多个ID,多个ID之间用空格隔开。
i) NMTOKEN型:限制作为其值的属性类型,规定了一种合法的命名机制,必须由英文字母、数字、“.”、“_”和“-”组成,不能包括空格。
e.g.
<?xmlversion="1.0" encoding="UTF-8"?>
<!DOCTYPE books [
<!ELEMENT books (book)*>
<!ELEMENT book (#PCDATA)>
<!ATTLIST book isbn ID#REQUIRED>
<!ATTLIST book referencesIDREFS #IMPLIED>
<!ATTLIST book publisherNMTOKEN #IMPLIED>
]>
<books>
<book isbn="P301">haha</book>
<book isbn="P302">HA</book>
<book isbn="P103" references="P301 P302" publisher="Tsinghua_University">A</book>
</books>
j) NMTOKENS型:能够给一个标记赋予几个满足NMTOKEN型的字符串,不同的字符串都在一个引号中,彼此用空格隔开。