XML (eXtensible Markup Language) เป็นรูปแบบข้อความสำหรับจัดเก็บและส่งข้อมูลที่มีโครงสร้างโดยใช้แท็กที่กำหนดเอง ใช้กันอย่างแพร่หลายในไฟล์การตั้งค่า เว็บเซอร์วิส และการพัฒนา Android ตามข้อมูลของ คณะ consortium W3C ข้อกำหนด XML ยังคงเป็นมาตรฐานที่มั่นคงตั้งแต่ปี 2008 XML ให้โครงสร้างข้อมูลที่เข้มงวดพร้อมความสามารถในการตรวจสอบผ่านโครงสร้าง
ประเด็นสำคัญ
XML เป็นภาษามาร์กอัปที่กำหนดชุดกฎสำหรับการเข้ารหัสเอกสารในรูปแบบที่ทั้งมนุษย์และเครื่องจักรสามารถอ่านได้ แตกต่างจาก HTML ตรงที่ XML ไม่มีชุดแท็กที่ตายตัว — นักพัฒนาสร้างแท็กของตนเองที่สอดคล้องกับโครงสร้างข้อมูล
XML ได้รับการพัฒนาโดยคณะ consortium W3C ในปี 1996 โดยเป็นชุดย่อยที่เรียบง่ายของ SGML (Standard Generalized Markup Language) เป้าหมายหลักของ XML คือการแยกเนื้อหาออกจากการนำเสนอข้อมูล แตกต่างจาก HTML ที่อธิบายรูปลักษณ์ภายนอก XML อธิบายโครงสร้างและความหมายของข้อมูล
คุณสมบัติหลักของ XML คือความสามารถในการขยาย หากมีประเภทข้อมูลใหม่เกิดขึ้นในโปรเจกต์ นักพัฒนาก็เพียงเพิ่มแท็กใหม่โดยไม่ต้องเปลี่ยนโครงสร้างที่มีอยู่ ทำให้ XML สะดวกสำหรับการจัดเก็บข้อมูลระยะยาวและการแลกเปลี่ยนระหว่างระบบต่างๆ
ไวยากรณ์ XML เข้มงวดกว่า HTML แท็กเปิดแต่ละตัวต้องมีแท็กปิดที่สอดคล้องกัน แอตทริบิวต์อยู่ในเครื่องหมายอัญประกาศ และชื่อแท็กคำนึงถึงตัวพิมพ์ใหญ่และเล็ก เอกสารต้องมีองค์ประกอบรากหนึ่งตัวที่ประกอบด้วยองค์ประกอบอื่นๆ ทั้งหมด
เอกสาร XML สามารถเริ่มต้นด้วยการประกาศที่ระบุเวอร์ชัน XML และการเข้ารหัส ตามด้วยองค์ประกอบราก ซึ่งภายในอาจมีองค์ประกอบที่ซ้อนกัน แอตทริบิวต์ เนื้อหาข้อความ และความคิดเห็น องค์ประกอบว่างเขียนเป็น <element />
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book id="bk001">
<title>XML Developer Guide</title>
<author>John Smith</author>
<price currency="USD">29.99</price>
<published>2026-03-15</published>
</book>
<book id="bk002">
<title>Advanced XML Schemas</title>
<author>Jane Doe</author>
<price currency="USD">49.99</price>
</book>
</catalog>
XML ที่มีรูปแบบดี (Well-formed XML) ต้องปฏิบัติตามกฎพื้นฐาน: แท็กปิดเป็นสิ่งจำเป็นสำหรับทุกแท็กเปิด การซ้อนกันเข้มงวด (ห้ามแท็กทับซ้อนกัน) ค่าแอตทริบิวต์อยู่ในเครื่องหมายอัญประกาศเสมอ การละเมิดกฎใดๆ ทำให้เอกสารไม่ถูกต้องและไม่สามารถแยกวิเคราะห์ได้
เนมสเปซ XML แก้ปัญหาความขัดแย้งของชื่อเมื่อใช้องค์ประกอบจากพจนานุกรมที่แตกต่างกันในเอกสารเดียว เนมสเปซถูกกำหนดโดยแอตทริบิวต์ xmlns ที่มี URI ซึ่งระบุพจนานุกรมได้อย่างเฉพาะเจาะจง
XML Schema (XSD) เป็นภาษาสำหรับอธิบายโครงสร้างของเอกสาร XML XSD กำหนดว่าองค์ประกอบและแอตทริบิวต์ใดที่ได้รับอนุญาต ชนิดข้อมูลของพวกเขา ข้อบังคับ และข้อจำกัด โครงสร้างช่วยให้สามารถตรวจสอบความถูกต้องของเอกสารโดยอัตโนมัติก่อนการประมวลผล ซึ่งมีความสำคัญอย่างยิ่งสำหรับโซลูชันการรวมระบบ
| เทคโนโลยี | วัตถุประสงค์ | ตัวอย่าง |
|---|---|---|
| DTD | การตรวจสอบโครงสร้างพื้นฐาน | เก่า ความสามารถน้อยกว่า |
| XSD | การกำหนดชนิดและการตรวจสอบที่เข้มงวด | มาตรฐานอุตสาหกรรม |
| RELAX NG | ทางเลือกที่กะทัดรัดของ XSD | ง่ายกว่าและอ่านง่ายกว่า XSD |
| XSLT | การแปลง XML เป็นรูปแบบอื่น | XML เป็น HTML, PDF, CSV |
| XPath | การนำทางและการเลือกโหนด | คำสั่งค้นหาไปยังต้นไม้ XML |
XML มีบทบาทสำคัญในการพัฒนา Android ระบบปฏิบัติการ Android ใช้ XML เพื่ออธิบายส่วนติดต่อผู้ใช้ (ไฟล์เลย์เอาต์) การตั้งค่าแอปพลิเคชัน (AndroidManifest.xml) ทรัพยากร (strings, colors, themes) และกราฟิกเวกเตอร์ (VectorDrawable) บน iOS XML ถูกใช้น้อยกว่า โดยส่วนใหญ่สำหรับ Storyboard และไฟล์การตั้งค่า plist
ใน Android แต่ละหน้าจอแอปพลิเคชันถูกอธิบายโดยไฟล์ XML ที่มีลำดับชั้นของส่วนประกอบ View: ConstraintLayout, LinearLayout, TextView, Button วิธีการนี้แยกลอจิกของแอปพลิเคชันออกจากการนำเสนอ ทำให้การบำรุงรักษาและการปรับตัวสำหรับหน้าจอต่างๆ ง่ายขึ้น ไฟล์ XML ทรัพยากรช่วยให้สามารถแปลภาษาแอปพลิเคชันได้โดยไม่ต้องเปลี่ยนโค้ด
ไฟล์เลย์เอาต์ทั่วไปประกอบด้วย ConstraintLayout รากที่มีองค์ประกอบซ้อนกัน แต่ละตัวมีแอตทริบิวต์ตำแหน่ง ขนาด และสไตล์ Android แปลง XML เป็นรูปแบบไบนารี AXML เพื่อเพิ่มประสิทธิภาพเมื่อเริ่มต้นทำงาน
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/welcome"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/click"
app:layout_constraintTop_toBottomOf="@id/title"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
การแยกวิเคราะห์ XML บนแพลตฟอร์มมือถือทำได้สองวิธีหลัก: DOM (Document Object Model) โหลดเอกสารทั้งหมดในหน่วยความจำเป็นต้นไม้ SAX (Simple API for XML) อ่านเอกสารแบบสตรีม เรียกตัวจัดการเหตุการณ์ DOM สะดวกสำหรับเอกสารขนาดเล็ก SAX สำหรับไฟล์ขนาดใหญ่ที่มีข้อจำกัดด้านหน่วยความจำ
Android มีตัวแยกวิเคราะห์ในตัว: XmlPullParser สำหรับการแยกวิเคราะห์แบบสตรีม และ DocumentBuilder สำหรับวิธี DOM iOS ใช้ Foundation XMLParser กับโปรโตคอลตัวแทน สำหรับการแปลงวัตถุเป็น XML มักใช้ไลบรารีอย่าง SimpleXML ใน PHP หรือ Jackson XML ใน Java
Android แนะนำให้ใช้ XmlPullParser สำหรับการแยกวิเคราะห์ XML ที่มีประสิทธิภาพ ตัวแยกวิเคราะห์ทำงานในโหมดที่ขับเคลื่อนด้วยเหตุการณ์: เรียก next() เพื่อย้ายไปยังองค์ประกอบถัดไปและส่งคืนชนิดของเหตุการณ์ (START_TAG, TEXT, END_TAG) ซึ่งช่วยให้สามารถประมวลผลเอกสารทุกขนาดด้วยการใช้หน่วยความจำน้อยที่สุด
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserException
import java.io.IOException
fun parseCatalog(parser: XmlPullParser): List<Book> {
val books = mutableListOf<Book>()
var eventType = parser.getEventType()
var currentBook: Book? = null
while (eventType != XmlPullParser.END_DOCUMENT) {
when (eventType) {
XmlPullParser.START_TAG -> {
when (parser.getName()) {
"book" -> currentBook = Book()
"title" -> parser.next()
"author" -> parser.next()
}
}
XmlPullParser.TEXT -> {
currentBook?.apply {
title = parser.getText() ?: ""
}
}
XmlPullParser.END_TAG -> {
if (parser.getName() == "book") {
currentBook?.let { books.add(it) }
}
}
}
eventType = parser.next()
}
return books
}
ตัวอย่างการใช้งาน XML แสดงให้เห็นบทบาทในโปรเจกต์จริง นอกเหนือจากการพัฒนา Android แล้ว XML ยังใช้สำหรับการตั้งค่าการ build การอธิบายข้อมูล และการทำงานเอกสาร ความเข้าใจไวยากรณ์ XML เป็นสิ่งจำเป็นสำหรับการทำงานกับ Maven บริการ SOAP และเครื่องมือองค์กรอื่นๆ อีกมากมาย
ไฟล์ pom.xml อธิบายโปรเจกต์ Maven: ความพึ่งพา ปลั๊กอิน เวอร์ชัน และโปรไฟล์การ build แต่ละความพึ่งพาถูกระบุด้วยแท็ก groupId, artifactId และ version Maven จะดาวน์โหลดไลบรารีที่ระบุจาก repositories โดยอัตโนมัติ
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
</project>
การเลือกระหว่าง XML และ JSON ขึ้นอยู่กับข้อกำหนดเฉพาะของโปรเจกต์ JSON เหมาะสำหรับ REST API แอปพลิเคชันมือถือ และการตั้งค่าที่ความกะทัดรัดและความเร็วเป็นสิ่งสำคัญ XML ขาดไม่ได้ในระบบองค์กร การทำงานเอกสาร และการพัฒนา Android ซึ่งต้องการการตรวจสอบที่เข้มงวด เนมสเปซ และการแปลงข้อมูล
XML ชนะในสถานการณ์การจัดเก็บเอกสารระยะยาว ด้วยโครงสร้าง XSD ทำให้เอกสาร XML สามารถตรวจสอบได้โดยอัตโนมัติ ซึ่งมีความสำคัญอย่างยิ่งสำหรับระบบการแพทย์ การเงิน และกฎหมาย การแปลง XSLT ช่วยให้สามารถสร้าง HTML, PDF และรูปแบบอื่นๆ จากแหล่ง XML เดียว ซึ่งทำให้การทำงานเอกสารง่ายขึ้น
ในทางกลับกัน JSON ได้กลายเป็นมาตรฐานสำหรับเว็บ API และแอปพลิเคชันมือถือ ความง่ายในการรวมกับ JavaScript ขนาดที่เล็กกว่า และความเร็วในการแยกวิเคราะห์ที่สูงทำให้ JSON เป็นตัวเลือกที่ต้องการสำหรับ REST API ข้อความ WebSocket และไฟล์การตั้งค่า สำหรับโปรเจกต์ใหม่ส่วนใหญ่ แนะนำให้เริ่มต้นด้วย JSON และเปลี่ยนไปใช้ XML เฉพาะเมื่อมีข้อกำหนดเฉพาะเกิดขึ้น
คำถามที่พบบ่อย
XML อธิบายโครงสร้างและเนื้อหาของข้อมูล HTML อธิบายรูปลักษณ์และการนำเสนอ XML อนุญาตให้สร้างแท็กใดๆ ก็ได้ HTML มีชุดที่ตายตัว XML เข้มงวดกว่าในไวยากรณ์: แท็กทั้งหมดต้องถูกปิด HTML อนุญาตให้มีแท็กที่ไม่ปิด XML สำหรับข้อมูล HTML สำหรับการแสดงผล
XSD (XML Schema Definition) เป็นภาษาสำหรับอธิบายโครงสร้างของเอกสาร XML XSD กำหนดว่าองค์ประกอบและแอตทริบิวต์ใดที่ได้รับอนุญาต ชนิดข้อมูลของพวกเขา ข้อบังคับ และข้อจำกัด โครงสร้างช่วยให้สามารถตรวจสอบความถูกต้องของเอกสาร XML โดยอัตโนมัติก่อนการประมวลผล ป้องกันข้อผิดพลาด และรับประกันความถูกต้องของข้อมูล
บน Android ใช้ XmlPullParser สำหรับการแยกวิเคราะห์ XML — ตัวแยกวิเคราะห์แบบสตรีมในตัว มันทำงานแบบขับเคลื่อนด้วยเหตุการณ์: ประมวลผล START_TAG, TEXT และ END_TAG ในลูป จัดการหน่วยความจำอย่างมีประสิทธิภาพ สำหรับเอกสารขนาดเล็ก ตัวแยกวิเคราะห์ DOM ผ่าน DocumentBuilderFactory ก็เหมาะสม ซึ่งโหลดเอกสารทั้งหมดในหน่วยความจำเป็นต้นไม้ของโหนด
DTD (Document Type Definition) เป็นกลไกการตรวจสอบแบบเก่าที่มีความสามารถจำกัด: ไม่รองรับชนิดข้อมูล (ทุกอย่างเป็นสตริง) และเนมสเปซ XSD เป็นตัวแทนที่ทันสมัยพร้อมการรองรับชนิดข้อมูล (ตัวเลข วันที่ การแจงนับ) เนมสเปซ และความสามารถในการขยาย XSD เองเป็นเอกสาร XML ในขณะที่ DTD ใช้ไวยากรณ์ของตัวเอง
เนมสเปซ ป้องกันความขัดแย้งของชื่อเมื่อเอกสาร XML รวมองค์ประกอบจากแหล่งต่างๆ ตัวอย่างเช่น ในเลย์เอาต์ Android แท็ก View สามารถมาจากทั้ง android.view และไลบรารี แอตทริบิวต์ xmlns ที่มี URI จะระบุแหล่งที่มาของแต่ละองค์ประกอบและแอตทริบิวต์ได้อย่างเฉพาะเจาะจง
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม