Empty Alfabe olarak adlandırılan boş olmayan, sonlu bir simge kümesi olsun . Öyleyse Σ *, sıfırdan veya daha fazla sembolün Σ ile birleştirilmesiyle oluşturulabilen oluşturulabilir sonsuz sonlu kelimeler grubudur. Herhangi bir iyi tanımlanmış alt küme L ⊆ * bir dildir .
Bunu XML'e uygulayalım. Onun alfabe olan Unicode karakter seti U boş olmayan ve sonlu olduğunu. Sıfır ya da daha fazla Unicode karakterin bir araya getirilmesi, iyi düzenlenmiş bir XML belgesi değildir, örneğin, dize
<tag> soup &; not <//good>
açıkça değil. İyi biçimlendirilmiş XML belgeleri oluşturan alt küme XML ⊂ U * kesindir (veya “özyinelemeli”). Herhangi bir kelimeyi w ∈ U * ile giriş yapan bir makine (algoritma veya bilgisayar programı) vardır ve sınırlı bir süre sonra w ∈ XML ve 0 ise 1 olur . Böyle bir algoritma, herhangi bir XML işleme yazılımının alt yordamıdır. Tüm diller kesin değildir. Örneğin, sınırlı bir süre içinde sonlanan geçerli C programları kümesi değildir (bu, durma sorunu olarak bilinir)). Kişi yeni bir dil tasarladığında, verilecek önemli bir karar, mümkün olduğu kadar güçlü olması gerekip gerekmediği veya ifade edilebilirliğin karar verilebilirlik lehine daha iyi bir şekilde kısıtlanıp kısıtlanmayacağıdır.
Bazı diller , dili ürettiği söylenen bir gramer aracılığıyla tanımlanabilir . Bir dilbilgisi oluşur
- sonlu bir değişmezler kümesi (ayrıca terminal sembolleri de denir ),
- Dilbilgisi değişkenlerinin ayrık sonlu değişkenler kümesi (ayrıca terminal olmayan semboller de denir ),
- değişkenler kümesinden alınan, ayırt edici bir başlangıç sembolü ve
- belirli değişikliklerin yapılmasına izin veren sınırlı bir kurallar kümesi ( yapımlar ).
Sadece değişmezlerden oluşan ve başlangıç sembolüyle başlayarak elde edilebilecek herhangi bir kelime ve daha sonra verilen kuralları uygulamak dilbilgisi tarafından üretilen dile aittir.
Örneğin, aşağıdaki dilbilgisi (gayrı resmi olarak belirtilir), tam sayıların tam olarak ondalık gösterimde türetilmesine izin verir.
- Gramer değişmezleri basamak vardır
1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
, ve 0
.
- Değişkenler S ve D sembolleridir .
- S başlangıç sembolüdür.
- S değişkeninin herhangi bir oluşumu değiştirilebilir
- değişmez
0
veya
- D
0
değişkeni haricindeki değişmezlerin herhangi biri tarafından .
- D değişkeninin herhangi bir oluşumu değiştirilebilir
- değişmezlerin herhangi biri tarafından ve ardından D değişkeninin başka bir örneği veya
- Boş dize tarafından.
İşte nasıl türetiriz 42
:
S - (uygulamak kural 4, 2 nd → varyant) 4
D - (uygulamak kural 5, 1 st varyantı) → 42
D - (uygulamak kural 5, 2 nd varyantı) → 42
.
Dilbilginizde ne kadar ayrıntılı kurallara izin verdiğinize bağlı olarak, belirli bir kelimenin gerçekten dilbilgisi tarafından üretilebileceğini kanıtlamak için farklı karmaşık makineler gerekir. Yukarıda verilen örnek , en basit ve en az güçlü olan normal bir gramerdir. Gramerlerin sonraki güçlü sınıfı denir bağlamdan-bağımsız . Bu gramerleri de doğrulamak çok kolaydır. XML (bilmediğim bazı belirsiz özelliklere bakmadığım sürece) bağlamsız bir gramer ile tanımlanabilir. Dilbilgilerinin sınıflandırılması, dilbilgilerinin Chomsky Hiyerarşisini (ve dolayısıyla dilleri) oluşturur. Dilbilgisi ile tanımlanabilen her dil, en azından yarı-kararlıdır.(veya “özyinelemeli sayılabilir”). Yani, aslında dile ait bir kelime verildiğinde, dilbilgisi tarafından sınırlı bir süre içinde üretilebileceğinin bir kanıtını türeten ve asla yanlış bir ispat çıkarmayacak bir makine var. Böyle bir makineye doğrulayıcı denir . Makinenin, aslında dile ait olmayan bir kelime verildiğinde asla durmayabileceğini unutmayın. Açıkça, sonlu bir süre içinde geçersiz programları reddetmek için programlama dillerimizin daha az güçlü gramerler tarafından tanımlanmasını istiyoruz.
Şema , iyi biçimlendirilmiş belgelerin setinin rafine edilmesine izin veren bir XML ekidir . Belirli bir şema izleyen iyi biçimlendirilmiş bir belgeye o şemaya göre geçerli denir . Örneğin, dize
<?xml version="1.0" encoding="utf-8" ?>
<root>all evil</root>
iyi biçimlendirilmiş bir XML belgesidir ancak geçerli bir XHTML belgesi değildir. XHTML , SVG , XSLT için şema var ve başka ne yok. Şema doğrulaması ayrıca, her girdi için sınırlı sayıda adımdan sonra durması garanti edilen bir algoritma ile de yapılabilir. Böyle bir programa validator veya validating ayrıştırıcı denir . Şemalar, gramerleri resmen tanımlamanın bir yolu olan şema tanımlama dilleri ile tanımlanır. XSD , XML için resmi şema tanımlama dilidir ve kendisi de XML tabanlıdır. RELAX NG , XSD'ye göre daha zarif, çok daha basit ve biraz daha az güçlü bir alternatiftir.
Kendi şemalarınızı tanımlayabildiğiniz için, XML'e “XML” deki “X” in kökeni olan genişletilebilir bir dil denir .
XML belgelerine bilgisayar programları açıklaması olarak yorumlama yapan bir kurallar grubu tanımlayabilirsiniz. Daha önce bahsedilen XSLT, XML ile oluşturulan böyle bir programlama diline bir örnektir. Daha genel olarak, istediğiniz herhangi bir programlama dilinin soyut sözdizimi ağacını oldukça doğal bir şekilde XML'e serpiştirebilirsiniz.