आज्ञा देना Let एक गैर-रिक्त, प्रतीकों का एक सेट, जिसे वर्णमाला कहा जाता है । तब fin * परिमित शब्दों का वह गणनीय अनंत समुच्चय है जो or से शून्य या उससे अधिक प्रतीकों को मिलाकर बनाया जा सकता है। कोई भी अच्छी तरह से परिभाषित उपसमूह L ⊆-* एक भाषा है ।
इसे XML पर लागू करते हैं। इसकी वर्णमाला यूनिकोड वर्ण सेट U है , जो गैर-रिक्त और परिमित है। शून्य या अधिक यूनिकोड वर्णों का प्रत्येक संयोजन एक सुव्यवस्थित XML दस्तावेज़ नहीं है, उदाहरण के लिए, स्ट्रिंग
<tag> soup &; not <//good>
स्पष्ट रूप से नहीं है। सबसेट XML * U * जो कि अच्छी तरह से गठित XML दस्तावेज है, वह निर्णायक (या "पुनरावर्ती") है। वहाँ एक मशीन (कलन विधि या कंप्यूटर प्रोग्राम) कि इनपुट के रूप में किसी भी शब्द लेता मौजूद डब्ल्यू ∈ यू * और अगर समय, आउटपुट की एक निश्चित राशि या तो 1 के बाद डब्ल्यू ∈ एक्सएमएल और 0 अन्यथा। ऐसा एल्गोरिथ्म किसी भी XML प्रोसेसिंग सॉफ्टवेयर का एक उप-रूटीन है। सभी भाषाएं निर्णायक नहीं हैं। उदाहरण के लिए, मान्य सी कार्यक्रमों का सेट जो समय की एक सीमित मात्रा में समाप्त होता है, यह नहीं है (इसे हॉल्टिंग समस्या के रूप में जाना जाता है)। जब कोई नई भाषा डिजाइन करता है, तो यह निर्णय लेना एक महत्वपूर्ण निर्णय होता है कि क्या यह जितना संभव हो उतना शक्तिशाली होना चाहिए या यह कि स्पष्टता निर्णायकता के पक्ष में बेहतर प्रतिबंधित होगी या नहीं।
कुछ भाषाओं को एक व्याकरण के माध्यम से परिभाषित किया जा सकता है जिसे भाषा का उत्पादन करने के लिए कहा जाता है । एक व्याकरण के होते हैं
- शाब्दिक का एक निश्चित सेट (जिसे टर्मिनल प्रतीक भी कहा जाता है ),
- व्याकरण के चरों के असंतुष्ट परिमित सेट (जिसे गैर-टर्मिनल प्रतीक भी कहा जाता है ),
- वैरिएबल के सेट से लिया गया एक विशिष्ट प्रारंभिक प्रतीक , और
- नियमों का एक निश्चित सेट (तथाकथित निर्माण ) जो कुछ प्रकार के प्रतिस्थापन की अनुमति देता है।
कोई भी शब्द जिसमें विशेष रूप से शाब्दिक शब्द होते हैं और आरंभिक चिह्न के साथ शुरू किया जा सकता है और फिर दिए गए नियमों को लागू करना व्याकरण द्वारा निर्मित भाषा का है।
उदाहरण के लिए, निम्नलिखित व्याकरण (बल्कि अनौपचारिक संकेतन) आपको दशमलव संकेतन में पूर्णांक प्राप्त करने देता है।
- व्याकरण के शाब्दिक अंक हैं
1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
, और 0
।
- चर प्रतीक S और D हैं ।
- S प्रारंभिक प्रतीक है।
- चर S की किसी भी घटना को प्रतिस्थापित किया जा सकता है
- शाब्दिक
0
या के साथ
0
चर डी के बाद के अलावा अन्य किसी भी शाब्दिक द्वारा ।
- चर D की किसी भी घटना को प्रतिस्थापित किया जा सकता है
- चर डी या की एक और उदाहरण के बाद किसी भी शाब्दिक द्वारा
- खाली तार द्वारा।
यहाँ बताया गया है कि हम कैसे प्राप्त करते हैं 42
:
एस - (नियम 4, 2 एन डी संस्करण लागू करें ) → 4
डी - (नियम 5, 1 सेंट संस्करण लागू करें ) 42
डी - (नियम 5, 2 एन डी संस्करण लागू करें ) → 42
।
इस बात पर निर्भर करते हुए कि आप अपने व्याकरण में कितने विस्तृत नियमों की अनुमति देते हैं, यह साबित करने के लिए अलग-अलग परिष्कृत मशीनों की आवश्यकता होती है कि किसी दिए गए शब्द को वास्तव में व्याकरण द्वारा उत्पादित किया जा सकता है। ऊपर दिया गया उदाहरण एक नियमित व्याकरण है, जो सबसे सरल और सबसे कम शक्तिशाली है। व्याकरण के अगले शक्तिशाली वर्ग को संदर्भ-मुक्त कहा जाता है । ये व्याकरण सत्यापित करने के लिए भी बहुत सरल हैं। XML (जब तक कि मैं कुछ अस्पष्ट सुविधा से अवगत नहीं हूँ) को संदर्भ-मुक्त व्याकरण द्वारा वर्णित किया जा सकता है। व्याकरण का वर्गीकरण व्याकरण के चॉम्स्की पदानुक्रम (और इसलिए भाषाएँ) बनाता है । प्रत्येक भाषा जिसे एक व्याकरण द्वारा वर्णित किया जा सकता है, वह कम से कम अर्ध-पतनशील है(या "पुनरावर्ती enumerable")। यही है, एक ऐसी मशीन मौजूद है, जो एक ऐसा शब्द है जो वास्तव में भाषा से संबंधित है, इस बात का प्रमाण देता है कि यह व्याकरण द्वारा परिमित समय के भीतर उत्पादित किया जा सकता है, और कभी भी गलत प्रमाण का उत्पादन नहीं करेगा। ऐसी मशीन को वेरिफायर कहा जाता है । ध्यान दें कि एक शब्द दिए जाने पर मशीन कभी रुक नहीं सकती है जो वास्तव में भाषा से संबंधित नहीं है। स्पष्ट रूप से, हम चाहते हैं कि कम समय में अमान्य कार्यक्रमों को अस्वीकार करने में सक्षम होने के लिए हमारी प्रोग्रामिंग भाषाओं को कम शक्तिशाली व्याकरणों द्वारा वर्णित किया जाए।
स्कीमाटा एक्सएमएल का एक अतिरिक्त है जो अच्छी तरह से गठित दस्तावेजों के सेट को परिष्कृत करने की अनुमति देता है। एक सुव्यवस्थित दस्तावेज जो एक निश्चित स्कीमा का अनुसरण करता है, उस स्कीमा के अनुसार वैध कहलाता है । उदाहरण के लिए, स्ट्रिंग
<?xml version="1.0" encoding="utf-8" ?>
<root>all evil</root>
एक सुव्यवस्थित XML दस्तावेज़ है, लेकिन एक मान्य XHTML दस्तावेज़ नहीं है। XHTML , SVG , XSLT के लिए स्कीमाटा मौजूद है और क्या नहीं। स्कीमा सत्यापन भी एक एल्गोरिथ्म द्वारा किया जा सकता है जो हर इनपुट के लिए सीमित मात्रा में चरणों के बाद रुकने की गारंटी है। इस तरह के कार्यक्रम को एक सत्यापनकर्ता या एक वैध पार्सर कहा जाता है । स्कीमाटा को तथाकथित scema परिभाषा भाषाओं द्वारा परिभाषित किया गया है , जो औपचारिक रूप से व्याकरण को परिभाषित करने का एक तरीका है। XSD , XML के लिए आधिकारिक स्कीमा-परिभाषा भाषा है और स्वयं, XML- आधारित है। RELAX NG , XSD का अधिक सुरुचिपूर्ण, बहुत सरल और थोड़ा कम शक्तिशाली विकल्प है।
क्योंकि आप अपने स्वयं के स्कीमाटा को परिभाषित कर सकते हैं, एक्सएमएल को एक एक्सटेंसिबल भाषा कहा जाता है , जो "एक्सएम" में "एक्स" की उत्पत्ति है।
आप नियमों के एक सेट को परिभाषित कर सकते हैं जो एक्सएमएल दस्तावेजों को कंप्यूटर प्रोग्राम के विवरण के रूप में व्याख्या देता है। XSLT, जो पहले उल्लेख किया गया है, एक्सएमएल के साथ निर्मित ऐसी प्रोग्रामिंग भाषा का एक उदाहरण है। आम तौर पर, आप XML में लगभग किसी भी प्रोग्रामिंग भाषा के अमूर्त वाक्यविन्यास पेड़ को स्वाभाविक रूप से क्रमबद्ध कर सकते हैं, यदि आप यही चाहते हैं।