DTD - 属性


在本章中,我们将讨论 DTD 属性。属性提供有关元素的更多信息,或更准确地说,它定义元素的属性。XML 属性始终采用名称/值对的形式。一个元素可以具有任意数量的唯一属性。

属性声明在很多方面与元素声明非常相似,除了一个方面;您无需声明元素允许的内容,而是为每个元素声明允许的属性列表。这些列表称为 ATTLIST 声明。

句法

DTD 属性声明的基本语法如下 -

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

在上面的语法中 -

  • 如果元素包含属性,则 DTD 属性以 <!ATTLIST 关键字开头。

  • element-name指定属性所应用的元素的名称。

  • attribute-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 )>
  • 元素名称的属性id定义如下 -

    这里属性类型是CDATA,其值是#REQUIRED

<!ATTLIST name id CDATA #REQUIRED>

属性声明规则

  • XML 文档中使用的所有属性都必须使用属性列表声明在文档类型定义 (DTD) 中声明

  • 属性只能出现在开始标签或空标签中。

  • 关键字 ATTLIST 必须大写

  • 给定元素的属性列表中不允许有重复的属性名称。

属性类型

声明属性时,您可以指定处理器应如何处理出现在值中的数据。我们可以将属性类型分为三个主要类别 -

  • 字符串类型

  • 标记化类型

  • 枚举类型

下表提供了不同属性类型的摘要 -

先生。 类型和描述
1

数据中心

CDATA 是字符数据(文本而不是标记)。它是一个字符串属性类型

2

ID

它是属性的唯一标识符。它不应出现多次。它是一种标记化属性类型

3

ID参考

它用于引用另一个元素的 ID。它用于建立元素之间的连接。它是一种标记化属性类型

4

IDREFS

它用于引用多个 ID。它是一种标记化属性类型

5

实体

它代表文档中的外部实体。它是一种标记化属性类型

6

实体

它表示文档中的外部实体的列表。它是一种标记化属性类型

7

NMT令牌

它与 CDATA 类似,属性值由有效的 XML 名称组成。它是一种标记化属性类型

8

NMT代币

它与 CDATA 类似,属性值由有效的 XML 名称列表组成。它是一种标记化属性类型

9

符号

元素将引用 DTD 文档中声明的符号。它是一个枚举属性类型

10

枚举

它允许定义一个特定的值列表,其中一个值必须匹配。它是一个枚举属性类型

属性值声明

在每个属性声明中,您必须指定该值在文档中的显示方式。您可以指定属性 -

  • 可以有一个默认值

  • 可以有一个固定值

  • 是必须的

  • 是暗示的

默认值

它包含默认值。这些值可以用单引号 (') 或双引号 (") 括起来。

句法

以下是值的语法 -

<!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>

在此示例中,我们有带有属性id 的name元素,其默认值为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> 的属性名称的唯一。如果我们尝试更改属性值,则会出现错误。

以下是无效的 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关键字来指定必须为元素名称名称提供属性id

隐含值

声明属性时,您必须始终指定值声明。如果您声明的属性没有默认值、没有固定值并且不是必需的,那么您必须将该属性声明为隐含。关键字#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,因为我们不想指定元素名称中包含的任何属性。它是可选的。