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 )>
  • รหัสแอตทริบิวต์สำหรับชื่อองค์ประกอบถูกกำหนดตามที่ระบุด้านล่าง -

    นี่คือประเภทแอตทริบิวต์CDATAและค่าที่เป็น#REQUIRED

<!ATTLIST name id CDATA #REQUIRED>

กฎของการประกาศคุณสมบัติ

  • แอตทริบิวต์ทั้งหมดที่ใช้ในเอกสาร XML ต้องถูกประกาศใน Document Type Definition (DTD) โดยใช้ Attribute-List Declaration

  • แอตทริบิวต์อาจปรากฏในแท็กเริ่มต้นหรือว่างเปล่าเท่านั้น

  • คำหลัก ATTLIST ต้องเป็นตัวพิมพ์ใหญ่

  • ไม่อนุญาตให้ใช้ชื่อแอตทริบิวต์ที่ซ้ำกันภายในรายการแอตทริบิวต์สำหรับองค์ประกอบที่ระบุ

ประเภทคุณสมบัติ

เมื่อประกาศแอตทริบิวต์คุณสามารถระบุได้ว่าโปรเซสเซอร์ควรจัดการกับข้อมูลที่ปรากฏในค่าอย่างไร เราสามารถแบ่งประเภทแอตทริบิวต์ได้ 3 ประเภทหลัก -

  • ประเภทสตริง

  • ประเภท Tokenized

  • ประเภทแจกแจง

ตารางต่อไปนี้แสดงข้อมูลสรุปของประเภทแอตทริบิวต์ต่างๆ -

ซีเนียร์ ประเภทและคำอธิบาย
1

CDATA

CDATA เป็นข้อมูลตัวอักษร (ข้อความไม่ใช่มาร์กอัป) มันเป็นString ประเภทแอตทริบิวต์

2

ID

เป็นตัวระบุเฉพาะของแอตทริบิวต์ ไม่ควรปรากฏมากกว่าหนึ่งครั้ง มันเป็นtokenized ประเภทแอตทริบิวต์

3

IDREF

ใช้เพื่ออ้างอิง ID ขององค์ประกอบอื่น ใช้เพื่อสร้างการเชื่อมต่อระหว่างองค์ประกอบต่างๆ มันเป็นtokenized ประเภทแอตทริบิวต์

4

IDREFS

ใช้เพื่ออ้างอิงหลาย ID มันเป็นtokenized ประเภทแอตทริบิวต์

5

ENTITY

แสดงถึงเอนทิตีภายนอกในเอกสาร มันเป็นtokenized ประเภทแอตทริบิวต์

6

ENTITIES

แสดงรายการของเอนทิตีภายนอกในเอกสาร มันเป็นtokenized ประเภทแอตทริบิวต์

7

NMTOKEN

คล้ายกับ CDATA และค่าแอตทริบิวต์ประกอบด้วยชื่อ XML ที่ถูกต้อง มันเป็นtokenized ประเภทแอตทริบิวต์

8

NMTOKENS

คล้ายกับ CDATA และค่าแอตทริบิวต์ประกอบด้วยรายการชื่อ XML ที่ถูกต้อง มันเป็นtokenized ประเภทแอตทริบิวต์

9

NOTATION

องค์ประกอบจะอ้างอิงกับสัญกรณ์ที่ประกาศในเอกสาร DTD มันเป็นนับจำนวนประเภทแอตทริบิวต์

10

Enumeration

อนุญาตให้กำหนดรายการเฉพาะของค่าที่ค่าใดค่าหนึ่งต้องตรงกัน มันเป็นนับจำนวนประเภทแอตทริบิวต์

การประกาศค่าคุณสมบัติ

ภายในการประกาศแอตทริบิวต์แต่ละรายการคุณต้องระบุว่าค่าจะปรากฏในเอกสารอย่างไร คุณสามารถระบุได้ว่าแอตทริบิวต์ -

  • สามารถมีค่าเริ่มต้น

  • สามารถมีค่าคงที่

  • ต้องระบุ

  • โดยนัย

ค่าเริ่มต้น

ประกอบด้วยค่าเริ่มต้น ค่าสามารถอยู่ในเครื่องหมายคำพูดเดี่ยว (') หรือเครื่องหมายคำพูดคู่ (")

Syntax

ต่อไปนี้เป็นไวยากรณ์ของค่า -

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

โดยที่default-valueคือค่าแอตทริบิวต์ที่กำหนด

Example

ต่อไปนี้เป็นตัวอย่างง่ายๆของการประกาศแอตทริบิวต์ด้วยค่าเริ่มต้น -

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

ในตัวอย่างนี้เรามีชื่อองค์ประกอบที่มีคุณลักษณะประจำตัวประชาชนที่มีค่าเริ่มต้นเป็น0 ค่าดีฟอลต์อยู่ภายในเครื่องหมายคำพูดคู่

ค่าคงที่

คำหลัก #FIXED ตามด้วยค่าคงที่ใช้เมื่อคุณต้องการระบุว่าค่าแอตทริบิวต์เป็นค่าคงที่และไม่สามารถเปลี่ยนแปลงได้ การใช้แอตทริบิวต์คงที่โดยทั่วไปคือการระบุหมายเลขเวอร์ชัน

Syntax

ต่อไปนี้เป็นไวยากรณ์ของค่าคงที่ -

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

โดยที่ #FIXED คือค่าแอตทริบิวต์ที่กำหนด

Example

ต่อไปนี้เป็นตัวอย่างง่ายๆของการประกาศแอตทริบิวต์ด้วยค่าคงที่ -

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

Syntax

ต่อไปนี้เป็นไวยากรณ์ของ #REQUIRED -

<!ATTLIST element-name attribute-name attribute-type #REQUIRED>

โดยที่ #REQUIRED คือประเภทแอตทริบิวต์ที่กำหนด

Example

ต่อไปนี้เป็นตัวอย่างง่ายๆของการประกาศแอตทริบิวต์ DTD ด้วยคำหลัก #REQUIRED -

<?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 ถูกใช้เพื่อระบุแอตทริบิวต์เป็นนัย

Syntax

ต่อไปนี้เป็นไวยากรณ์ของ #IMPLIED -

<!ATTLIST element-name attribute-name attribute-type #IMPLIED>

โดยที่ #IMPLIED คือประเภทแอตทริบิวต์ที่กำหนด

Example

ต่อไปนี้เป็นตัวอย่างง่ายๆของ #IMPLIED

<?xml version = "1.0"?>

<!DOCTYPE address [
   <!ELEMENT address ( name )>
   <!ELEMENT name ( #PCDATA )>
   <!ATTLIST name id CDATA #IMPLIED>
]>

<address>
   <name />
</address>

ในตัวอย่างนี้เราได้ใช้ #IMPLIED คำหลักที่เราไม่ต้องการระบุคุณลักษณะใด ๆ ที่จะรวมอยู่ในองค์ประกอบชื่อ เป็นทางเลือก