ให้Σเป็นไม่ว่างเปล่าขอบเขตของสัญลักษณ์ที่เรียกว่าอักษร จากนั้นΣ * คือชุดคำที่ไม่สิ้นสุดที่นับไม่ได้ซึ่งสามารถสร้างขึ้นได้โดยการต่อสัญลักษณ์ศูนย์หรือมากกว่าจากΣ ใด ๆ ที่ดีที่กำหนดเซตL ⊆Σ * เป็นภาษา
ลองใช้สิ่งนี้กับ XML ตัวอักษรที่เป็นUnicodeอักขระชุดUซึ่งเป็นไม่ว่างเปล่าและแน่นอน การต่อข้อมูลที่มีอักขระ Unicode ไม่เกินศูนย์ทุกตัวเป็นเอกสาร XML ที่มีรูปแบบที่ดีตัวอย่างเช่นสตริง
<tag> soup &; not <//good>
ไม่ชัดเจน XML XML U * ชุดย่อยที่สร้างเอกสารXML ที่มีรูปแบบที่ถูกต้องสามารถตัดสินใจได้ (หรือ“ เรียกซ้ำ”) มีเครื่อง (อัลกอริทึมหรือโปรแกรมคอมพิวเตอร์) ที่ใช้เป็นคำใด ๆ ที่w ∈ U * และหลังจากเวลาที่ จำกัด ผลลัพธ์จะเป็น 1 ถ้าw ∈ XML และ 0 เป็นอย่างอื่น อัลกอริทึมดังกล่าวเป็นรูทีนย่อยของซอฟต์แวร์ประมวลผล XML ใด ๆ ไม่ใช่ทุกภาษาที่สามารถตัดสินใจได้ ตัวอย่างเช่นชุดของโปรแกรม C ที่ถูกต้องซึ่งสิ้นสุดในเวลาที่ จำกัด ไม่เป็น (เรียกได้ว่าเป็นปัญหาการหยุดทำงาน) เมื่อมีการออกแบบภาษาใหม่การตัดสินใจที่สำคัญในการตัดสินใจคือควรจะมีพลังมากที่สุดเท่าที่จะเป็นไปได้หรือไม่
บางภาษาสามารถกำหนดได้โดยใช้ไวยากรณ์ที่ใช้ในการสร้างภาษา ไวยากรณ์ประกอบด้วย
- ชุด จำกัด ของสัญพจน์ (เรียกอีกอย่างว่าสัญลักษณ์เทอร์มินัล )
- ชุด จำกัด ของตัวแปรของไวยากรณ์ (เรียกอีกอย่างว่าสัญลักษณ์ที่ไม่ใช่เทอร์มินัล )
- สัญลักษณ์เริ่มต้นที่แตกต่างนำมาจากชุดของตัวแปรและ
- ชุดของกฎที่ จำกัด (เรียกว่าการผลิต ) ที่อนุญาตให้มีการทดแทนบางประเภท
คำใด ๆ ที่ประกอบด้วยตัวอักษรเท่านั้นและสามารถรับได้โดยเริ่มต้นด้วยสัญลักษณ์เริ่มต้นจากนั้นใช้กฎที่กำหนดให้เป็นของภาษาที่ผลิตโดยไวยากรณ์
ตัวอย่างเช่นไวยากรณ์ต่อไปนี้ (เป็นสัญกรณ์ค่อนข้างเป็นทางการ) ช่วยให้คุณได้รับจำนวนเต็มในรูปแบบทศนิยม
- ตัวอักษรของไวยากรณ์ที่มีตัวเลข
1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, และ9
0
- ตัวแปรที่มีสัญลักษณ์SและD
- Sเป็นสัญลักษณ์เริ่มต้น
- การเกิดขึ้นของตัวแปรSอาจถูกแทนที่
- กับตัวอักษร
0
หรือ
- โดยใด ๆ ของตัวอักษรอื่น ๆ กว่า
0
ตามด้วยตัวแปรD
- การเกิดขึ้นของตัวแปรDใด ๆอาจถูกแทนที่
- ตามตัวอักษรตัวใดตัวหนึ่งตามด้วยอินสแตนซ์อื่นของตัวแปรDหรือ
- โดยสตริงว่าง
นี่คือวิธีที่เราได้รับ42
:
S - (ใช้กฎ 4, 2 ครั้งที่แตกต่าง) → 4
D - (ใช้กฎ 5 1 เซนต์ตัวแปร) → 42
D - (ใช้กฎ 5, 2 ครั้งที่42
แตกต่าง) →
ขึ้นอยู่กับว่าคุณอนุญาตให้ใช้กฎอย่างละเอียดในไวยากรณ์ของคุณได้อย่างไรเครื่องที่มีความซับซ้อนต่างกันจะต้องพิสูจน์ว่าคำที่กำหนดสามารถสร้างขึ้นได้จริงโดยไวยากรณ์ ตัวอย่างที่ให้ไว้ข้างต้นเป็นไวยากรณ์ปกติซึ่งง่ายที่สุดและมีประสิทธิภาพน้อยที่สุด ชั้นที่มีประสิทธิภาพต่อไปของไวยากรณ์จะเรียกว่าบริบทฟรี ไวยากรณ์เหล่านี้ง่ายมากในการตรวจสอบ XML (ยกเว้นว่าฉันกำลังมองเห็นคุณลักษณะที่คลุมเครือบางอย่างที่ฉันไม่ทราบ) สามารถอธิบายได้ด้วยไวยากรณ์ที่ไม่มีบริบท การจำแนกประเภทของไวยากรณ์เป็นรูปแบบของลำดับชั้นของChomskyของไวยากรณ์ (และภาษา) ทุกภาษาที่สามารถอธิบายได้ด้วยไวยากรณ์อย่างน้อยกึ่ง decidable(หรือ“ นับจำนวนซ้ำ”) นั่นคือมีเครื่องที่ให้คำที่เป็นจริงของภาษาที่ได้มาพิสูจน์ว่ามันสามารถผลิตโดยไวยากรณ์ภายในเวลาที่ จำกัด และจะไม่ส่งออกหลักฐานที่ผิด เครื่องดังกล่าวจะเรียกว่าเป็นผู้ตรวจสอบ โปรดทราบว่าเครื่องอาจไม่หยุดเมื่อได้รับคำที่ไม่ได้อยู่ในภาษาจริง เห็นได้ชัดว่าเราต้องการให้ภาษาการเขียนโปรแกรมของเราถูกอธิบายโดยไวยากรณ์ที่มีประสิทธิภาพน้อยกว่าเพื่อประโยชน์ในการปฏิเสธโปรแกรมที่ไม่ถูกต้องภายในเวลาที่ จำกัด
Schemataเป็นส่วนเพิ่มเติมของ XML ที่อนุญาตให้ปรับแต่งชุดของเอกสารที่มีรูปแบบถูกต้อง เอกสารที่มีรูปแบบที่ดีซึ่งตามหลังสคีมาบางอย่างจะเรียกว่าถูกต้องตามสคีมานั้น ตัวอย่างเช่นสตริง
<?xml version="1.0" encoding="utf-8" ?>
<root>all evil</root>
เป็นเอกสาร XML ที่มีรูปแบบถูกต้อง แต่ไม่ใช่เอกสาร XHTML ที่ถูกต้อง มีสกีมาสำหรับXHTML , SVG , XSLTและสิ่งอื่น ๆ การตรวจสอบความถูกต้องของสคีมาสามารถทำได้โดยอัลกอริทึมที่รับประกันว่าจะหยุดหลังจากจำนวนขั้นตอนที่ จำกัด สำหรับทุกอินพุต โปรแกรมดังกล่าวเรียกว่าตัวตรวจสอบความถูกต้องหรือตัวแยกวิเคราะห์ที่ตรวจสอบความถูกต้อง Schemata มีการกำหนดโดยภาษาที่เรียกว่าscemaซึ่งเป็นวิธีการกำหนดไวยากรณ์อย่างเป็นทางการ XSDเป็นภาษานิยามสกีมาอย่างเป็นทางการสำหรับ XML และเป็นตัวเองตาม XML RELAX NGเป็นทางเลือกที่หรูหรากว่าง่ายกว่าและมีประสิทธิภาพน้อยกว่า XSD เล็กน้อย
เนื่องจากคุณสามารถกำหนด schemata ของคุณเอง XML จึงเรียกว่าภาษาที่ขยายได้ซึ่งเป็นที่มาของ“ X” ใน“ XML”
คุณสามารถกำหนดชุดของกฎที่ให้การตีความเอกสาร XML เป็นคำอธิบายของโปรแกรมคอมพิวเตอร์ XSLT ที่กล่าวถึงก่อนหน้านี้เป็นตัวอย่างของภาษาการเขียนโปรแกรมที่สร้างด้วย XML โดยทั่วไปคุณสามารถจัดลำดับทรีไวยากรณ์แบบนามธรรมของภาษาการเขียนโปรแกรมเกือบทั้งหมดให้เป็น XML อย่างเป็นธรรมชาติหากนี่คือสิ่งที่คุณต้องการ