DTD - องค์ประกอบ
องค์ประกอบ XML สามารถกำหนดเป็นแบบเอกสารสำเร็จรูปของเอกสาร XML องค์ประกอบสามารถทำงานเป็นภาชนะเพื่อเก็บข้อความองค์ประกอบแอตทริบิวต์วัตถุสื่อหรือผสมทั้งหมด
องค์ประกอบ DTD ถูกประกาศด้วยการประกาศ ELEMENT เมื่อไฟล์ XML ได้รับการตรวจสอบความถูกต้องโดย DTD ตัวแยกวิเคราะห์จะตรวจสอบองค์ประกอบรากในขั้นต้นจากนั้นองค์ประกอบลูกจะได้รับการตรวจสอบความถูกต้อง
ไวยากรณ์
การประกาศองค์ประกอบ DTD ทั้งหมดมีรูปแบบทั่วไปนี้ -
<!ELEMENT elementname (content)>
การประกาศELEMENTใช้เพื่อระบุตัววิเคราะห์ที่คุณกำลังจะกำหนดองค์ประกอบ
elementnameคือชื่อองค์ประกอบ (เรียกอีกอย่างว่าตัวระบุทั่วไป ) ที่คุณกำลังกำหนด
เนื้อหากำหนดว่าเนื้อหาใด (ถ้ามี) สามารถอยู่ในองค์ประกอบได้
ประเภทเนื้อหาองค์ประกอบ
เนื้อหาของการประกาศองค์ประกอบใน DTD สามารถแบ่งประเภทได้ดังนี้ -
เนื้อหาว่างเปล่า
เนื้อหาองค์ประกอบ
เนื้อหาผสม
เนื้อหาใด ๆ
เนื้อหาว่างเปล่า
นี่เป็นกรณีพิเศษของการประกาศองค์ประกอบ การประกาศองค์ประกอบนี้ไม่มีเนื้อหาใด ๆ สิ่งเหล่านี้ประกาศด้วยคำหลักEMPTY.
Syntax
ต่อไปนี้เป็นไวยากรณ์สำหรับการประกาศองค์ประกอบว่าง -
<!ELEMENT elementname EMPTY >
ในไวยากรณ์ข้างต้น -
ELEMENTเป็นการประกาศองค์ประกอบของหมวดหมู่EMPTY
elementname เป็นชื่อขององค์ประกอบว่าง
Example
ต่อไปนี้เป็นตัวอย่างง่ายๆที่แสดงให้เห็นถึงการประกาศองค์ประกอบว่าง -
<?xml version = "1.0"?>
<!DOCTYPE hr[
<!ELEMENT address EMPTY>
]>
<address />
ในตัวอย่างที่อยู่นี้ถูกประกาศเป็นองค์ประกอบว่าง มาร์กอัปสำหรับองค์ประกอบที่อยู่จะปรากฏเป็น <ที่อยู่ />
เนื้อหาองค์ประกอบ
ในการประกาศองค์ประกอบที่มีเนื้อหาองค์ประกอบเนื้อหาจะเป็นองค์ประกอบที่อนุญาตได้ภายในวงเล็บ นอกจากนี้เรายังสามารถรวมองค์ประกอบได้มากกว่าหนึ่งองค์ประกอบ
Syntax
ต่อไปนี้เป็นไวยากรณ์ของการประกาศองค์ประกอบที่มีเนื้อหาองค์ประกอบ -
<!ELEMENT elementname (child1, child2...)>
ELEMENT คือแท็กการประกาศองค์ประกอบ
elementname คือชื่อขององค์ประกอบ
child1, child2 ..เป็นองค์ประกอบและแต่ละองค์ประกอบต้องมีนิยามของตัวเองภายใน DTD
Example
ตัวอย่างด้านล่างแสดงให้เห็นตัวอย่างง่ายๆสำหรับการประกาศองค์ประกอบที่มีเนื้อหาองค์ประกอบ -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
ในตัวอย่างข้างต้นอยู่เป็นองค์ประกอบหลักและชื่อ , บริษัทและphone_noมีองค์ประกอบของเด็ก
รายชื่อตัวดำเนินการและกฎไวยากรณ์
ตารางด้านล่างแสดงรายการตัวดำเนินการและกฎไวยากรณ์ที่สามารถนำไปใช้ในการกำหนดองค์ประกอบลูก -
ตัวดำเนินการ | ไวยากรณ์ | คำอธิบาย | ตัวอย่าง |
---|---|---|---|
+ | <! ELEMENT ชื่อองค์ประกอบ (child1 +)> | บ่งชี้ว่าองค์ประกอบลูกสามารถเกิดขึ้นได้อย่างน้อยหนึ่งครั้งภายในองค์ประกอบหลัก | <! ที่อยู่ขององค์ประกอบ (ชื่อ +)> องค์ประกอบลูกชื่อสามารถเกิดขึ้นหนึ่งครั้งหรือมากกว่าภายในชื่อองค์ประกอบอยู่ |
* | <! ELEMENT ชื่อองค์ประกอบ (child1 *)> | บ่งชี้ว่าองค์ประกอบลูกสามารถเกิดขึ้นเป็นศูนย์หรือมากกว่าครั้งภายในองค์ประกอบหลัก | <! ที่อยู่ขององค์ประกอบ (ชื่อ *)> องค์ประกอบลูกชื่อสามารถเกิดขึ้นได้เป็นศูนย์หรือมากกว่าครั้งภายในชื่อองค์ประกอบอยู่ |
เหรอ? | <! ELEMENT ชื่อองค์ประกอบ (child1?)> | บ่งชี้ว่าองค์ประกอบลูกสามารถเกิดขึ้นเป็นศูนย์หรือครั้งเดียวภายในองค์ประกอบหลัก | <! ที่อยู่ขององค์ประกอบ (ชื่อ?)> องค์ประกอบลูกชื่อสามารถเกิดขึ้นได้เป็นศูนย์หรือเพียงครั้งเดียวภายในชื่อองค์ประกอบอยู่ |
, | <! ELEMENT ชื่อองค์ประกอบ (child1, child2)> | จะให้ลำดับขององค์ประกอบลูกที่คั่นด้วยลูกน้ำซึ่งต้องรวมอยู่ในชื่อองค์ประกอบ | <! ที่อยู่ขององค์ประกอบ (ชื่อ บริษัท )> ลำดับขององค์ประกอบของเด็กชื่อ , บริษัทซึ่งจะต้องเกิดขึ้นในลำดับเดียวกันภายในชื่อองค์ประกอบอยู่ |
| | <! ELEMENT ชื่อองค์ประกอบ (child1 | child2)> | ช่วยให้สามารถเลือกองค์ประกอบลูกได้ | <! ที่อยู่ขององค์ประกอบ (ชื่อ | บริษัท )> จะช่วยให้คุณเลือกอย่างใดอย่างหนึ่งขององค์ประกอบของเด็กเช่นชื่อหรือบริษัทซึ่งจะต้องเกิดขึ้นในภายในชื่อองค์ประกอบอยู่ |
กฎ
เราจำเป็นต้องปฏิบัติตามกฎบางประการหากมีเนื้อหาองค์ประกอบมากกว่าหนึ่งรายการ -
Sequences - บ่อยครั้งองค์ประกอบภายในเอกสาร DTD ต้องปรากฏในลำดับที่แตกต่างกัน หากเป็นกรณีนี้คุณกำหนดเนื้อหาโดยใช้ลำดับ
การประกาศระบุว่าองค์ประกอบ <address> ต้องมีลูกสามคน - <ชื่อ>, <บริษัท > และ <โทรศัพท์> และจะต้องปรากฏตามลำดับนี้ ตัวอย่างเช่น -
<!ELEMENT address (name,company,phone)>
Choices- สมมติว่าคุณต้องอนุญาตองค์ประกอบหนึ่งหรืออีกองค์ประกอบหนึ่ง แต่ไม่ใช่ทั้งสองอย่าง ในกรณีเช่นนี้คุณต้องใช้อักขระไปป์ (|) ท่อทำหน้าที่เป็นเอกสิทธิ์เฉพาะหรือ ตัวอย่างเช่น -
<!ELEMENT address (mobile | landline)>
เนื้อหาองค์ประกอบผสม
นี่คือการรวมกันของ (#PCDATA) และองค์ประกอบลูก PCDATA ย่อมาจากข้อมูลอักขระที่แยกวิเคราะห์นั่นคือข้อความที่ไม่ใช่มาร์กอัป ภายในโมเดลเนื้อหาแบบผสมข้อความสามารถปรากฏขึ้นเองหรือสลับระหว่างองค์ประกอบได้ กฎสำหรับโมเดลเนื้อหาแบบผสมจะคล้ายกับเนื้อหาองค์ประกอบตามที่กล่าวไว้ในส่วนก่อนหน้า
Syntax
ต่อไปนี้เป็นไวยากรณ์ทั่วไปสำหรับเนื้อหาองค์ประกอบแบบผสม -
<!ELEMENT elementname (#PCDATA|child1|child2)*>
ELEMENT คือแท็กการประกาศองค์ประกอบ
elementname คือชื่อขององค์ประกอบ
PCDATAคือข้อความที่ไม่ใช่มาร์กอัป #PCDATA ต้องมาก่อนในการประกาศเนื้อหาแบบผสม
child1, child2 ..เป็นองค์ประกอบและแต่ละองค์ประกอบต้องมีนิยามของตัวเองภายใน DTD
ตัวดำเนินการ (*) ต้องปฏิบัติตามการประกาศเนื้อหาผสมหากรวมองค์ประกอบลูก
การประกาศ (#PCDATA) และองค์ประกอบย่อยต้องคั่นด้วยตัวดำเนินการ (|)
Example
ต่อไปนี้เป็นตัวอย่างง่ายๆที่แสดงให้เห็นถึงการประกาศองค์ประกอบเนื้อหาแบบผสมใน DTD
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (#PCDATA|name)*>
<!ELEMENT name (#PCDATA)>
]>
<address>
Here's a bit of text mixed up with the child element.
<name>
Tanmay Patil
</name>
</address>
เนื้อหาองค์ประกอบใด ๆ
คุณสามารถประกาศองค์ประกอบโดยใช้คำหลักใดก็ได้ในเนื้อหา ส่วนใหญ่มักเรียกว่าองค์ประกอบประเภทผสม สิ่งใดมีประโยชน์เมื่อคุณยังไม่ได้ตัดสินใจเลือกเนื้อหาที่อนุญาตขององค์ประกอบ
Syntax
ต่อไปนี้เป็นไวยากรณ์สำหรับการประกาศองค์ประกอบที่มีเนื้อหาใด ๆ -
<!ELEMENT elementname ANY>
ที่นี่คำสำคัญใด ๆ ระบุว่าข้อความ (PCDATA) และ / หรือองค์ประกอบใด ๆ ที่ประกาศภายใน DTD สามารถใช้ได้ภายในเนื้อหาขององค์ประกอบ <elementname> สามารถใช้ตามลำดับกี่ครั้งก็ได้ อย่างไรก็ตามคำหลักใด ๆ ไม่อนุญาตให้คุณรวมองค์ประกอบที่ไม่ได้ประกาศไว้ใน DTD
Example
ต่อไปนี้เป็นตัวอย่างง่ายๆที่แสดงให้เห็นถึงการประกาศองค์ประกอบที่มีเนื้อหาใด ๆ -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address ANY>
]>
<address>
Here's a bit of sample text
</address>