DTD - 属性
在本章中,我们将讨论 DTD 属性。属性提供有关元素的更多信息,或者更准确地说,它定义了元素的属性。XML 属性始终采用名称-值对的形式。元素可以具有任意数量的唯一属性。
属性声明在很多方面与元素声明非常相似,除了一点之外;您不是为元素声明允许的内容,而是为每个元素声明一个允许的属性列表。这些列表称为 ATTLIST 声明。
语法
DTD 属性声明的基本语法如下 −
<!ATTLIST element-name attribute-name attribute-type attribute-value>
在上述语法中 −
如果元素包含属性,则 DTD 属性以 <!ATTLIST 关键字开头。
element-name 指定属性适用的元素的名称。
attribute-name 指定包含在 element-name 中的属性的名称。
attribute-type 定义属性的类型。我们将在以下部分中对此进行更多讨论。
attribute-value 采用属性必须定义的固定值。我们将在以下部分中对此进行更多讨论。
示例
以下是 DTD 中属性声明的一个简单示例 −
<?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address ( name )> <!ELEMENT name ( #PCDATA )> <!ATTLIST name id CDATA #REQUIRED> ]> <address> <name id = "123">Tanmay Patil</name> </address>
让我们来看看上面的代码 −
从 XML 声明开始,使用以下语句 −
<?xml version = "1.0"?>
紧接着 XML 标头的是文档类型声明,通常称为 DOCTYPE,如下所示 −
DOCTYPE 通知解析器 DTD 与此 XML 文档相关联。DOCTYPE 声明在元素名称的开头有一个感叹号 (!)。
<!DOCTYPE address [
以下是 DTD 的主体。这里我们声明了元素和属性 −
<!ELEMENT address ( name )> <!ELEMENT name ( #PCDATA )>
元素 name 的属性 id 定义如下 −
此处的属性类型为 CDATA,其值为 #REQUIRED。
<!ATTLIST name id CDATA #REQUIRED>
属性声明规则
XML 文档中使用的所有属性都必须使用属性列表声明在文档类型定义 (DTD) 中声明
属性只能出现在开始或空标记中。
关键字 ATTLIST 必须大写
给定元素的属性列表中不允许有重复的属性名称。
属性类型
声明属性时,您可以指定处理器应如何处理值中出现的数据。我们可以将属性类型分为三大类 −
字符串类型
标记类型
枚举类型
下表总结了不同的属性类型 −
Sr.No. | Type & Description |
---|---|
1 | CDATA CDATA 是字符数据(文本而非标记)。它是 字符串属性类型。 |
2 | ID 它是属性的唯一标识符。它不应出现多次。它是 标记化属性类型。 |
3 | IDREF 它用于引用另一个元素的 ID。它用于在元素之间建立连接。它是一个标记化属性类型。 |
4 | IDREFS 它用于引用多个 ID。它是一个标记化属性类型。 |
5 | ENTITY 它表示文档中的外部实体。它是一个标记化属性类型。 |
6 | ENTITIES 它表示文档中的外部实体列表。它是一个标记化属性类型。 |
7 | NMTOKEN 它类似于 CDATA,属性值由有效的 XML 名称组成。它是一个标记化属性类型。 |
8 | NMTOKENS 它类似于 CDATA,属性值由有效 XML 名称列表组成。它是一个标记化属性类型。 |
9 | NOTATION 元素将引用 DTD 文档中声明的符号。它是一个枚举属性类型。 |
10 | Enumeration 它允许定义一个特定的值列表,其中一个值必须匹配。它是一个枚举属性类型。 |
属性值声明
在每个属性声明中,您必须指定值在文档中的显示方式。您可以指定属性是否为 −
可以有默认值
可以有固定值
是必需的
是隐含的
默认值
它包含默认值。值可以用单引号(')或双引号(")括起来。
语法
以下是值 − 的语法
<!ATTLIST element-name attribute-name attribute-type "default-value">
其中 default-value 是定义的属性值。
示例
以下是使用默认值声明属性的简单示例 −
<?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address ( name )> <!ELEMENT name ( #PCDATA )> <!ATTLIST name id CDATA "0"> ]> <address> <name id = "123"> Tanmay Patil </name> </address>
在此示例中,我们有一个 name 元素,其属性 id 的默认值为 0。默认值被括在双引号中。
固定值
当您想要指定属性值是常量且无法更改时,使用 #FIXED 关键字后跟固定值。固定属性的常见用途是指定版本号。
语法
以下是固定值 − 的语法
<!ATTLIST element-name attribute-name attribute-type #FIXED "value" >
其中 #FIXED 是定义的属性值。
示例
以下是使用 FIXED 值声明属性的简单示例 −
<?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address (company)*> <!ELEMENT company (#PCDATA)> <!ATTLIST company name NMTOKEN #FIXED "tutorialspoint"> ]> <address> <company name = "tutorialspoint">we are a free online teaching faculty</company> </address>
在此示例中,我们使用了关键字 #FIXED,它表示值"tutorialspoint"是元素 <company> 的属性 name 的唯一值。如果我们尝试更改属性值,则会出现错误。
以下是无效的 DTD −
<?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address (company)*> <!ELEMENT company (#PCDATA)> <!ATTLIST company name NMTOKEN #FIXED "tutorialspoint"> ]> <address> <company name = "abc">we are a free online teaching faculty</company> </address>
必需值
每当您想要指定某个属性是必需的时,请使用 #REQUIRED 关键字。
语法
以下是 #REQUIRED 的语法 −
<!ATTLIST element-name attribute-name attribute-type #REQUIRED>
其中 #REQUIRED 是定义的属性类型。
示例
以下是使用 #REQUIRED 关键字声明 DTD 属性的简单示例 −
<?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address ( name )> <!ELEMENT name ( #PCDATA )> <!ATTLIST name id CDATA #REQUIRED> ]> <address> <name id = "123"> Tanmay Patil </name> </address>
在此示例中,我们使用了 #REQUIRED 关键字来指定必须为元素名称 name 提供属性 id
IMPLIED 值
声明属性时,必须始终指定值声明。如果您声明的属性没有默认值、没有固定值且不是必需的,则必须将该属性声明为 implied。关键字 #IMPLIED 用于将属性指定为 implied。
语法
以下是 #IMPLIED − 的语法
<!ATTLIST element-name attribute-name attribute-type #IMPLIED>
其中 #IMPLIED 是定义的属性类型。
示例
以下是 #IMPLIED 的一个简单示例
<?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address ( name )> <!ELEMENT name ( #PCDATA )> <!ATTLIST name id CDATA #IMPLIED> ]> <address> <name /> </address>
在此示例中,我们使用了关键字 #IMPLIED,因为我们不想指定任何要包含在元素 name 中的属性。它是可选的。