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 คำหลักที่เราไม่ต้องการระบุคุณลักษณะใด ๆ ที่จะรวมอยู่ในองค์ประกอบชื่อ เป็นทางเลือก