DTD - 屬性



本章將討論 DTD 屬性。屬性提供了關於元素的更多資訊,更準確地說,它定義了元素的一個屬性。XML 屬性始終採用名稱-值對的形式。一個元素可以擁有任意數量的唯一屬性。

屬性宣告在許多方面都非常類似於元素宣告,只有一個例外;您宣告的是每個元素允許的屬性列表,而不是宣告元素允許的內容。這些列表稱為 ATTLIST 宣告。

語法

DTD 屬性宣告的基本語法如下:

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

在上文的語法中:

  • 如果元素包含屬性,則 DTD 屬性以 <!ATTLIST 關鍵字開頭。

  • 元素名稱指定應用屬性的元素的名稱。

  • 屬性名稱指定包含在元素名稱中的屬性的名稱。

  • 屬性型別定義屬性的型別。我們將在以下部分詳細討論這一點。

  • 屬性值採用屬性必須定義的固定值。我們將在以下部分詳細討論這一點。

示例

以下是 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 告知解析器此 XML 文件與一個 DTD 關聯。DOCTYPE 宣告的元素名稱開頭有一個感嘆號 (!) 。

<!DOCTYPE address [
  • 以下是 DTD 的主體。這裡我們聲明瞭元素和屬性:

<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
  • 元素 name 的屬性 id 定義如下:

    這裡的屬性型別是 CDATA,其值為 #REQUIRED

<!ATTLIST name id CDATA #REQUIRED>

屬性宣告規則

  • XML 文件中使用的所有屬性都必須使用屬性列表宣告在文件型別定義 (DTD) 中宣告。

  • 屬性只能出現在開始標記或空標記中。

  • 關鍵字 ATTLIST 必須大寫。

  • 對於給定的元素,屬性列表中不允許出現重複的屬性名稱。

屬性型別

宣告屬性時,您可以指定處理器如何處理值中出現的資料。我們可以將屬性型別分為三大類:

  • 字串型別

  • 標記化型別

  • 列舉型別

下表總結了不同的屬性型別:

序號 型別和描述
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

列舉

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

屬性值宣告

在每個屬性宣告中,您必須指定值在文件中將如何出現。您可以指定屬性:

  • 可以具有預設值

  • 可以具有固定值

  • 是必需的

  • 是隱含的

預設值

它包含預設值。值可以包含在單引號 (') 或雙引號 (") 中。

語法

以下是值的語法:

<!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 是定義的屬性值。

示例

以下是一個帶有固定值的屬性宣告的簡單示例:

<?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 的語法:

<!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 中的屬性。它是可選的。

廣告
© . All rights reserved.