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頭之後是文檔類型聲明,通常稱爲DOCTYPEDOCTYPE通知解析器DTD與此XML文檔相關聯。 DOCTYPE聲明在元素名稱的開頭有一個感嘆號(!)。如下所示 -

    <!DOCTYPE address [
  • 以下是DTD的主體,這裏聲明瞭元素和屬性 -

    <!ELEMENT address ( name )>
    <!ELEMENT name ( #PCDATA )>
  • 元素名稱定義屬性id,它的屬性類型是CDATA,它的值爲#REQUIRED

<!ATTLIST name id CDATA #REQUIRED>

屬性聲明規則

  • 必須使用屬性列表聲明在文檔類型定義(DTD)中聲明XML文檔中使用的所有屬性.
  • 屬性可能只出現在開始或空標籤中。
  • 關鍵字ATTLIST必須爲大寫
  • 對於給定元素,屬性列表中不允許重複的屬性名稱。

1. 屬性類型

聲明屬性時,可以指定處理器應如何處理值中顯示的數據。可以將屬性類型分爲三個主要類別 -

  • 字符串類型
  • 標記類型
  • 枚舉類型

下表提供了不同屬性類型的摘要 -

  • 字符串類型
  • 標記類型
  • 枚舉類型

下表提供了不同屬性類型的說明 -

序號

類型

描述

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

它允許定義其中一個值必須匹配的特定值列表。 它是枚舉屬性類型。

2. 屬性值聲明

在每個屬性聲明中,必須指定值在文檔中的顯示方式。可以指定屬性爲 -

  • 有一個默認值
  • 有固定的值
  • 是必需的
  • 是隱含的

2.1. 默認值
它包含默認值。 值可以用單引號(‘)或雙引號(「)括起來。

語法

以下是指定值的語法 -

<!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。默認值包含在雙引號中。

2.2. 固定值

如果要指定屬性值是常量且無法更改,則使用#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 "hiyizhi">
]>

<address>
  <company name = "hiyizhi">we are a free online teaching faculty</company>
</address>

在這個例子中,使用了關鍵字#FIXED,它表示"hiyizhi"值是元素<company>的屬性名稱的唯一值。 如果嘗試更改屬性值,則會出錯。

以下是無效的DTD -

<?xml version = "1.0"?>

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

<address>
  <company name = "abc">we are a free online teaching faculty</company>
</address>

2.3. 必需值

只要想要指定需要屬性,可使用#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">
      Max Su
   </name>
</address>

在此示例中,使用#REQUIRED關鍵字指定必須爲name元素提供屬性id

2.4. 隱含值

聲明屬性時,必須始終指定值聲明。 如果聲明的屬性沒有默認值,沒有固定值,並且不是必需的,那麼必須聲明該屬性是隱含的。 關鍵字#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關鍵字,因爲我們不希望指定要包含在元素名稱中的任何屬性。 它是可選的。