DTD - เอนทิตี
เอนทิตีใช้เพื่อกำหนดทางลัดไปยังอักขระพิเศษภายในเอกสาร XML เอนทิตีหลัก ๆ มีได้ 4 ประเภท -
เอนทิตีในตัว
เอนทิตีอักขระ
เอนทิตีทั่วไป
เอนทิตีพารามิเตอร์
ไวยากรณ์การประกาศเอนทิตี
โดยทั่วไปสามารถประกาศเอนทิตีได้ internally หรือ externally. ให้เราเข้าใจสิ่งเหล่านี้และไวยากรณ์ของพวกเขาดังนี้ -
เอนทิตีภายใน
หากมีการประกาศเอนทิตีภายใน DTD จะเรียกว่าเอนทิตีภายใน
Syntax
ต่อไปนี้เป็นไวยากรณ์สำหรับการประกาศเอนทิตีภายใน -
<!ENTITY entity_name "entity_value">
ในไวยากรณ์ข้างต้น -
entity_name คือชื่อของเอนทิตีตามด้วยค่าภายในอัญประกาศคู่หรืออัญประกาศเดี่ยว
entity_value เก็บค่าสำหรับชื่อเอนทิตี
ค่าเอนทิตีของเอนทิตีภายในถูกยกเลิกการอ้างอิงโดยการเพิ่มคำนำหน้า & ไปยังชื่อเอนทิตีเช่น & entity_name
Example
ต่อไปนี้เป็นตัวอย่างง่ายๆสำหรับการประกาศเอนทิตีภายใน -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE address [
<!ELEMENT address (#PCDATA)>
<!ENTITY name "Tanmay patil">
<!ENTITY company "TutorialsPoint">
<!ENTITY phone_no "(011) 123-4567">
]>
<address>
&name;
&company;
&phone_no;
</address>
ในตัวอย่างข้างต้นนั้นชื่อนิติบุคคลชื่อ , บริษัทและphone_noจะถูกแทนที่ด้วยค่าของพวกเขาในเอกสาร XML ค่าเอนทิตีถูกยกเลิกการอ้างอิงโดยการเพิ่มคำนำหน้า & ไปยังชื่อเอนทิตี
บันทึกไฟล์นี้เป็นไฟล์ sample.xmlและเปิดในเบราว์เซอร์ใด ๆ คุณจะพบว่าค่านิติบุคคลสำหรับชื่อ , บริษัท , phone_noจะถูกแทนที่ตามลำดับ
เอนทิตีภายนอก
หากมีการประกาศเอนทิตีภายนอก DTD จะเรียกว่าเอนทิตีภายนอก คุณสามารถอ้างถึงเอนทิตีภายนอกได้โดยใช้ตัวระบุระบบหรือตัวระบุสาธารณะ
Syntax
ต่อไปนี้เป็นไวยากรณ์สำหรับการประกาศเอนทิตีภายนอก -
<!ENTITY name SYSTEM "URI/URL">
ในไวยากรณ์ข้างต้น -
name คือชื่อนิติบุคคล
SYSTEM คือคำหลัก
URI/URL คือที่อยู่ของแหล่งภายนอกที่อยู่ภายในเครื่องหมายคำพูดคู่หรือเดี่ยว
Types
คุณสามารถอ้างถึง DTD ภายนอกได้โดยใช้ -
System Identifiers - ตัวระบุระบบช่วยให้คุณระบุตำแหน่งของไฟล์ภายนอกที่มีการประกาศ DTD
ดังที่คุณเห็นมีคำหลัก SYSTEM และการอ้างอิง URI ที่ชี้ไปยังตำแหน่งของเอกสาร ไวยากรณ์มีดังนี้ -
<!DOCTYPE name SYSTEM "address.dtd" [...]>
Public Identifiers - ตัวระบุสาธารณะเป็นกลไกในการค้นหาทรัพยากร DTD และเขียนไว้ดังนี้ -
ดังที่คุณเห็นเริ่มต้นด้วยคีย์เวิร์ด PUBLIC ตามด้วยตัวระบุพิเศษ ตัวระบุสาธารณะใช้เพื่อระบุรายการในแค็ตตาล็อก ตัวระบุสาธารณะสามารถทำตามรูปแบบใดก็ได้ อย่างไรก็ตามรูปแบบที่ใช้กันทั่วไปเรียกว่าFormal Public Identifiers หรือ FPI
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
Example
ให้เราทำความเข้าใจกับหน่วยงานภายนอกด้วยตัวอย่างต่อไปนี้ -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
<name>
Tanmay Patil
</name>
<company>
TutorialsPoint
</company>
<phone>
(011) 123-4567
</phone>
</address>
ด้านล่างนี้เป็นเนื้อหาของไฟล์ DTD address.dtd -
<!ELEMENT address (name, company, phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
เอนทิตีในตัว
ตัวแยกวิเคราะห์ XML ทั้งหมดต้องรองรับเอนทิตีในตัว โดยทั่วไปคุณสามารถใช้การอ้างอิงเอนทิตีเหล่านี้ได้ทุกที่ คุณยังสามารถใช้ข้อความปกติภายในเอกสาร XML เช่นในเนื้อหาองค์ประกอบและค่าแอตทริบิวต์
มีเอนทิตีในตัวห้ารายการที่มีบทบาทใน XML ที่มีรูปแบบดี ได้แก่ -
เครื่องหมายและ: & amp;
คำพูดเดียว: & apos;
มากกว่า: & gt;
น้อยกว่า: & lt;
คำพูดคู่: & quot;
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการประกาศเอนทิตีในตัว -
<?xml version = "1.0"?>
<note>
<description>I'm a technical writer & programmer</description>
<note>
ดังที่คุณเห็นที่นี่ปุ่ม & amp; อักขระจะถูกแทนที่ด้วย & เมื่อใดก็ตามที่โปรเซสเซอร์พบสิ่งนี้
เอนทิตีอักขระ
Character Entities ใช้เพื่อตั้งชื่อเอนทิตีบางส่วนซึ่งเป็นการแสดงข้อมูลเชิงสัญลักษณ์เช่นอักขระที่พิมพ์ยากหรือเป็นไปไม่ได้สามารถถูกแทนที่ด้วย Character Entities
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการประกาศเอนทิตีอักขระ -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE author[
<!ELEMENT author (#PCDATA)>
<!ENTITY writer "Tanmay patil">
<!ENTITY copyright "©">
]>
<author>&writer;©right;</author>
คุณจะสังเกตเห็นที่นี่เราได้ใช้ ©เป็นมูลค่าสำหรับตัวละครลิขสิทธิ์ บันทึกไฟล์นี้เป็นsample.xmlและเปิดในเบราว์เซอร์ของคุณและคุณจะเห็นว่าลิขสิทธิ์ถูกแทนที่ด้วยอักขระ©
เอนทิตีทั่วไป
ต้องมีการประกาศเอนทิตีทั่วไปภายใน DTD ก่อนจึงจะสามารถใช้งานได้ภายในเอกสาร XML แทนที่จะแสดงเพียงอักขระเดียวเอนทิตีทั่วไปสามารถแทนอักขระย่อหน้าและแม้แต่เอกสารทั้งหมด
ไวยากรณ์
ในการประกาศเอนทิตีทั่วไปให้ใช้การประกาศแบบฟอร์มทั่วไปนี้ใน DTD ของคุณ -
<!ENTITY ename "text">
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการประกาศเอนทิตีทั่วไป -
<?xml version = "1.0"?>
<!DOCTYPE note [
<!ENTITY source-text "tutorialspoint">
]>
<note>
&source-text;
</note>
เมื่อใดก็ตามที่ตัวแยกวิเคราะห์ XML พบการอ้างอิงถึงเอนทิตีข้อความต้นทางโปรแกรมจะส่งข้อความแทนที่ไปยังแอปพลิเคชันที่จุดอ้างอิง
เอนทิตีพารามิเตอร์
วัตถุประสงค์ของเอนทิตีพารามิเตอร์คือเพื่อให้คุณสามารถสร้างส่วนที่ใช้ซ้ำได้ของข้อความแทนที่
ไวยากรณ์
ต่อไปนี้เป็นไวยากรณ์สำหรับการประกาศเอนทิตีพารามิเตอร์ -
<!ENTITY % ename "entity_value">
entity_valueคืออักขระใด ๆ ที่ไม่ใช่ "&", "%" หรือ "" "
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการประกาศเอนทิตีพารามิเตอร์ สมมติว่าคุณมีการประกาศองค์ประกอบดังต่อไปนี้ -
<!ELEMENT residence (name, street, pincode, city, phone)>
<!ELEMENT apartment (name, street, pincode, city, phone)>
<!ELEMENT office (name, street, pincode, city, phone)>
<!ELEMENT shop (name, street, pincode, city, phone)>
ตอนนี้สมมติว่าคุณต้องการเพิ่มประเทศที่สิบเอ็ดเพิ่มเติมจากนั้นคุณต้องเพิ่มในการประกาศทั้งสี่ ดังนั้นเราสามารถไปสำหรับการอ้างอิงเอนทิตีพารามิเตอร์ ตอนนี้ใช้เอนทิตีพารามิเตอร์อ้างอิงตัวอย่างข้างต้นจะเป็น -
<!ENTITY % area "name, street, pincode, city">
<!ENTITY % contact "phone">
เอนทิตีพารามิเตอร์ถูกอ้างถึงในลักษณะเดียวกับการอ้างอิงเอนทิตีทั่วไปโดยมีเครื่องหมายเปอร์เซ็นต์แทนเครื่องหมายแอมเพอร์แซนด์ -
<!ELEMENT residence (%area;, %contact;)>
<!ELEMENT apartment (%area;, %contact;)>
<!ELEMENT office (%area;, %contact;)>
<!ELEMENT shop (%area;, %contact;)>
เมื่อตัวแยกวิเคราะห์อ่านคำประกาศเหล่านี้จะแทนที่ข้อความแทนที่ของเอนทิตีสำหรับการอ้างอิงเอนทิตี