DTD - 属性

在本章中,我们将讨论DTD属性. Attribute提供了有关元素的更多信息,或者更确切地说,它定义了元素的属性. XML属性始终采用名称 - 值对的形式.元素可以包含任意数量的唯一属性.

属性声明与元素声明非常相似,除了一个;您可以为每个元素声明一个允许的属性列表,而不是为元素声明允许的内容.这些列表称为ATTLIST声明.

语法

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

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

在上面的语法 :

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

  • 元素名称指定名称属性适用的元素.

  • 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 name 定义为下面给出的 :

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

 
<!ATTLIST name id CDATA #REQUIRED>

属性声明规则

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

  • 属性可能仅出现在开始或空标记中.

  • 关键字ATTLIST必须为大写

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

属性类型

声明属性时,您可以指定处理器应如何处理值中显示的数据.我们可以将属性类型分为三个主要类别 :

  • 字符串类型

  • 标记类型

  • 枚举类型

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

Sr.No.Type&说明
1

CDATA

CDATA是字符数据(文本而非标记).它是字符串属性类型.

2

ID

它是属性的唯一标识符.它不应该出现多次.它是标记属性类型.

3

IDREF

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

4

IDREFS

它用于引用多个ID.它是标记属性类型.

5

ENTITY

它代表文档中的外部实体.它是标记属性类型.

6

ENTITIES

它表示文档中的外部实体列表.它是标记属性类型.

7

NMTOKEN

它类似于CDATA,属性值由有效的XML名称组成.它是标记化属性类型.

8

NMTOKENS

它类似于CDATA,属性值包含有效XML名称列表.它是标记属性类型.

9

注释

元素将被引用到DTD文档中声明的符号.它是枚举属性类型.

10

枚举

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

属性值声明

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

  • 是否可以设置默认值

  • 可以有固定值

  • 是必需的

  • 隐含

默认值

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

语法

以下是value : 的语法;

 
<!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 ,其默认值为 0 .默认值被包含在双引号中.

固定值

当您要指定属性时,使用#FIXED关键字后跟固定值值是常量,不能更改.固定属性的常见用法是指定版本号.

语法

以下是固定值的语法 :

 
<!ATTLIST element-name attribute-name attribute-type #FIXED"value">

其中#FIXED是定义的属性值.

示例

以下是一个简单的属性声明示例,其中包含FIXED值 :

 
<?xml version ="1.0" ?&GT; 
<!DOCTYPE地址[
<!ELEMENT地址(公司)*> 
<!ELEMENT公司(#PCDATA)> 
<!ATTLIST公司名称NMTOKEN #FIXED"it1352"> 
]> 
< address> 
< company name ="it1352">我们是一个免费的在线教学教师</company> 
</address>

在这个例子中我们使用了关键字#FIXED,它表示值"it1352"是属性 name

以下是无效的DTD :

<?xml version = "1.0"?>

<!DOCTYPE address [
  <!ELEMENT address (company)*>
  <!ELEMENT company (#PCDATA)>
  <!ATTLIST company name NMTOKEN #FIXED "IT屋">
]>

<address>
  <company name = "IT屋">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关键字指定必须为元素名称<i提供属性 id > name

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 中的任何属性.这是可选的.