XML neden tam olarak “dil” olarak adlandırılıyor?


105

XML'in neden L adında olduğunu merak ediyorum.

Kendi başına, XML hiçbir şey "yapmaz". Bu sadece bir veri depolama formatı, dil değil! Diller işleri "yapar".

XML'i "yapma" işlemlerini yapma, onu doğru bir dile çevirme xmlns, kök elemanına özellikler eklemektir . Ancak o zaman çevresine ne hakkında olduğunu söyler.
Bir örnek, XHTML'dir. Etkin, tümü tarafından tetiklenen bağlantılar, köprü metni, stiller vb xmlns. Bu olmadan, bir XHTML dosyası biçimlendirme düğümlerindeki sadece bir demet veridir.

Öyleyse neden XML bir dil olarak adlandırılıyor? Hiçbir şeyi tarif etmiyor, yorumlamıyor, sadece.

Düzenleme: Belki sorum daha geniş olmalıydı. Cevap şu anda olduğu için "çünkü XML, GML'den sonra adlandırılan SGML'den sonra seçildi" sorusu sorulmalı, neden biçimlendirme dilleri (XML gibi) dil olarak adlandırılıyor?

Oh, ve WRT yakın oylar: hayır, X'i sormuyorum. L'yi soruyorum!


128
Bir dilin bir şeyleri "yapması" gerekliliğine dayanıyor musunuz? Bunu dictionary.com'daki tanımların hiçbirinde görmüyorum .
kdgregory

10
Tıpkı Swahili'nin sadece ikisinin de anlaması durumunda anlaşıldığı gibi. Veya bir tıbbi dergi makalesinde, okuyucu dilin bu kısmını anlarsa anlaşılır. Farklı değil. Ve insanlar tanımları oluşturur.
Sami Kuhmonen

42
Biçimlendirme dili ortak bir terimdir en.wikipedia.org/wiki/Markup_language
paparazzo

37
@ MrLister: "Bunlar insan dilidir, bilgisayar dili değil" Bir dil bir dildir. En uç noktasında İngilizce bile, açıkça anlamak için bağlamsal bilgi (hangi lehç kullanılıyor) kullanıyor. Dil olmaktan vazgeçmiyor. Sorunuz sadece yanlış bir öncül var.
Orbit'teki Hafiflik Yarışları,

68
Don'rt Diller yapmak şeyler bunlar ifade ve iletişim şeyleri
Hagen von Eitzen

Yanıtlar:


238

Asıl cevap XML isminde L'dir çünkü Raymond L orie adlı bir adam 1970'lerde IBM'de ilk "biçimlendirme dilinin" tasarımcıları arasındaydı. Geliştiriciler dil için bir isim bulmak zorunda kaldılar, bu yüzden üç geliştiricinin (Goldfarb, Mosher ve Lorie) adının baş harfleri olduğu için GML'yi seçtiler . Ardından Genelleştirilmiş İşaretleme Dilinin backronym'ini yarattılar .

Bu daha sonra SGML ( Standart Genel İşaretleme Dili ) olarak standardize edildi ve XML oluşturulduğunda, geliştiriciler, SGML ile aile ilişkisini belirtmek için ML postfixini saklamak istediler ve X'i ön plana koydular; (Gerçekten mantıklı gelmese bile - XML, genişletilebilir dilleri tanımlamanıza izin veren bir meta dildir, ancak XML gerçekten genişletilebilir değildir.)

İkinci sorunuza gelince, eğer XML yasal olarak bir dil olarak adlandırılabilirse:

Hesaplamalı olarak işlenebilecek herhangi bir yapılandırılmış metinsel (veya hatta ikili) format, dil olarak adlandırılabilir. Bir dil, böyle bir şeyi "yapmaz", ancak bazı yazılımlar dilin girişini işleyebilir ve ona göre bir şey "yapabilir".

XML'in doğru bir "depolama biçimi" olduğunu unutmayın; ancak metinsel bir depolama biçimi dil olarak adlandırılabilir, bu terim birbirini dışlamaz.

Programlama dilleri, dillerin bir alt kümesidir. Örneğin, HTML ve CSS dillerdir ancak programlama dilleri değildir , JavaScript ise gerçek bir programlama dilidir. Bununla birlikte, programlama dilinin resmi bir tanımı yoktur ve bakış açınıza bağlı olarak veri formatları veya programlama dilleri olarak adlandırılabilecek geniş bir gri dil bölgesi vardır.

Buna bakıldığında, XML açıkça bir dildir. sadece bir programlama dili değil - XSLT gibi programlama dillerini tanımlamak için kullanılabilir.

Ad alanlarıyla ilgili düşünceniz önemli değil. Ad alanları, XML'in isteğe bağlı bir özelliğidir ve bir XML sözlüğünün anlamını değiştirmez. Format birden fazla kelime içeriyorsa, sadece eleman isimlerini açıklığa kavuşturmak gerekir.


Düzenleme: reinierpost, anladığımdan daha farklı bir soru ifade ettiğinizi belirtti. Belki de, XHTML, RSS, XSLT vb. Gibi belirli kelimelerin dil olduğunu kastediyorsunuz, çünkü elementleri ve nitelikleri belli bir anlambilim ile birleştiriyorlar, ancak XML standardının kendisi, belirli elementler ve nitelikler için herhangi bir anlambilim tanımlamıyor, bu yüzden " gerçek dil ".

Bu cevabım XML olurdu yapar sadece farklı bir düzeyde tanımlar, sözdizimi ve anlambilim hem tanımlar. Örneğin, elemanların ve niteliklerin sözdizimini ve bunların nasıl işleneceğine ilişkin kuralları tanımlar. XML, hala bir tür dil olan bir "meta dil" dir (tıpkı meta veriler hala veridir!). Örnek olarak, EBNF ayrıca açıkça bir dildir, ancak amacı diğer dillerin sözdizimini tanımlamaktır, bu yüzden aynı zamanda bir meta-dildir.



19
@Snowman: Bir "biçimsel dil" mutlaka bilgisayarlarda genellikle bir dil olarak adlandırılan ile uyuşmuyor. Örneğin, bir "biçimsel dil" metinsel olmak zorunda değildir - makine kodu çoğu ikili biçim ve protokoller kadar resmi bir dildir. Bu yüzden "biçimsel dil" teriminin bilgisayardaki "dil" ile aynı anlama geldiğini söyleyemem.
JacquesB

15
Bir dilin metinsel olması ya da metinsel olması gerekliliğinin farkında değilim. Terminallerden bir cümle inşa etme fikrinin, bu terminallerdeki bitlerin keyfi bir şekilde yorumlanması veya hangi bilgisayar türlerinin (silikon veya karbon bazlı) bunları okuyabileceği ile ilgili bir ilgisi yoktur.

4
@ NicoleBolas: İyi nokta, makine kodu kesinlikle bir dildir. İkili dilleri "biçimler" olarak adlandırmanın daha yaygın olduğunu düşünüyorum, örneğin GIF biçimini GIF dili değil diyorsunuz.
JacquesB

3
@BenCottrell: Döngüleri olabileceğinden, o zaman grafik olmaz mıydı?
JacquesB

181

Çünkü bu bir dil. Bir biçimlendirme dili, programlama dili değil.

İngilizce ve İspanyolca gibi doğal insan dillerinin de hiçbir şey "yapmadıklarına" dikkat edin. Aslında, teknik olarak C ++ ve Java ve benzerleri, bir derleyiciye beslenip çıktı alınana kadar hiçbir şey "yapmaz". Bir şeyler yapmak ve bir dil olmak birbirine büyük ölçüde diktir.


43
"Derleyici" için "yorumlayıcı" yla değiştir. Bir derleyiciye beslenmek onların hiçbir şeyi "yapma" ya da bir şey yapmalarını sağlamaz, bu da onları tekrar "hiçbir şey" yapmayan farklı bir dile çevirir. Tüm yürütme yorumlamadır. Bazen tercüman silikonda son derece basit ve uygulamalı olabilir; bu durumda biz buna "yürütme birimi" diyoruz, ancak yine de bir tercüman. </nitpick>Neyse, iyi cevap!
Jörg W Mittag

8
@ JörgWMittag İyi nokta. Rastgele derlenmiş dilleri rastgele seçtiğim için "ve çıktı çalıştırılıyor" eklendi.
Ixrec

1
Bir genişletilebilir işaretleme dili, eğer olacak.
doppelgreener

1
İnsan dillerinin "yaptıklarını" iddia ediyorum. Konuşma Yasası Teorisine bakın ...
Ray

2
Tatlı, tatlı diklik. Dili farklı bir cebirde uygulayın ve yepyeni bir dizi eylem ortaya çıkıyor. Neyse, teori altında.
Kenogu Labz

103

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 wU * 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.

  1. Gramer değişmezleri basamak vardır 1, 2, 3, 4, 5, 6, 7, 8, 9, ve 0.
  2. Değişkenler S ve D sembolleridir .
  3. S başlangıç ​​sembolüdür.
  4. S değişkeninin herhangi bir oluşumu değiştirilebilir
    • değişmez 0veya
    • D0 değişkeni haricindeki değişmezlerin herhangi biri tarafından .
  5. 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.


7
@ Giorgio: Matematikte, "iyi tanımlanmış", büyük ölçüde sadece yoğunlaştırıcıdır: matematiksel olarak var olan her şey zaten iyi tanımlanmıştır.
Kevin,

9
@Giorgio “İyi tanımlanmış” ifadesiyle, bir öğenin sete ait olup olmadığını belirten resmi bir tahmin olduğu anlamına gelir. Bu öngörü genel olarak hesaplanamaz ancak çelişki olmadan açıkça belirtilmesi gerekir. Aksi takdirde, kötü şeyler olabilir . “Şeritlerinin çiftleri ( a , K ) M çıktı olarak Turing makinesinin küçük açıklaması ağırlık ve bundan sonra durur”, iyi tanımlanmış, ancak (bakınız olmayan hesaplanabilir olan Kolmogorov karmaşıklığı ) yüklem. …
5gon12eder

2
@ 5gon12eder: Bu set ZFC altında mevcut değil (çünkü ayırmanın aksiyom şeması onu tanımlayacak kadar güçlü değil); Başka bir set teori kullanıyorsanız, onu belirtmelisiniz.
Kevin,

5
@ 5gon12eder: “Sette bulunmayan tüm dizeleri içeren set” mevcut değil. "İyi tanımlanmış" terimi, ironik olarak iyi tanımlanmamıştır.
Kevin,

3
İyi oluşturulmuş özellik veya doğrulama bir ile gerçekleştirilir dilbilgisi . Bundan söz etmiş olsaydın, bu cevap mükemmeldi.
Thibault D.

31

Bilgisayar bilimlerinde, biçimsel dil yalnızca bir dizi dizektir, genellikle sınırsızdır ve sıklıkla kurallar kullanılarak tanımlanır (bu kuralların iki ortak sürümü normal ifadeler ve resmi gramerlerdir ).

Bunun, tüm dilin ihtiyaç duyduğu sözdizimi anlamına geldiğini , dilin her geçerli dizgenin ne anlama geldiğini tanımlamasına gerek olmadığını unutmayın (buna semantik denir ).

Şimdi, bu programlama dillerinin, bazı hesaplamaları tanımlayan anlambilimine sahip biçimsel dilleri olduğu anlamına gelir. Ve örneğin XHTML, semantiği bir köprü metni belgesinin nasıl göründüğünü ve nasıl davrandığını açıklayan (kabaca ve gayrı resmi olarak) resmi bir dildir.

XML, semantik özelliği olmasa da hala bir dildir (ancak XML'den türetilen birçok dilde, XHTML ve XAML gibi).

Teknik olarak, ikili biçimler de dillerdir, ancak bu şekilde adlandırılmazlar. "Dil" terimi, insan tarafından okunabilen formatlar için ayrılmıştır.


10
@ MrLister Çünkü okunabilir değiller. İnsan tarafından okunamaz olmadıklarında, bunun yerine formatlar veya veri formatları olarak adlandırırız .
Mason Wheeler,

3
@JamesSnell Elbette diğer ML dil ailesi ile karıştırılmamalıdır. Kalabalık kısaltmalar için Yay!
Mason Wheeler

3
Eğer biri JFIF vb. İçin bir ayrıştırıcı (veya özellikle bir validator) oluşturmak için resmi araçlar kullanıyorsa, mühendislerden daha çok "bir dil" olarak adlandırılabilir. Bir "gramer" olarak daha büyük olasılıkla.
JDługosz

3
@MrLister: Eh, onlar olan diller, ancak yeniden veri yapılarını tanımlamak çünkü bunlar özel isim vardır: biçimleri . Ama evet, bunlar da dil.
Orbit'teki Hafiflik Yarışları

4
@ MrLister: Bir biçimi adlandırmak daha çok pazarlama meselesidir. "* ML", GML ve SGML gibi önceki formatlarla bir aile ilişkisine işaret ettiği ve öndeki X ile havalı göründüğünü düşündüğü için XML insanları XML için XML çağırdı. Ve GML'ye genel bir işaretleme dili olduğu için GML adı verildi, ancak aynı zamanda üç dil tasarımcısının ilk harfleri olduğu için. Temel olarak XML'deki L , çünkü Raymond L orie adında biri ilk biçimlendirme dilinin tasarımcıları arasındaydı.
JacquesB

12

Bir dil bilgi aktarma yöntemidir.

Bir programlama dili, algoritmaları iletme yöntemidir.

XML gibi bir işaretleme dili veri iletmek için kullanılan bir dildir.


... ve bu veriler bir algoritmanın tanımı olabilir.
Luaan

@Luaan ... ve bir programlama dili veri iletmek için de kötüye kullanılabilir. Örneğin JSON'da olduğu gibi.
Philipp,

2
Tekrarlayabilirsin. Yalnızca veri depolamak için kullanılan C # kodunu içeren NAnt komut dosyalarını (XML tabanlı bir dil) gördüm. XML içeren dize değişmezleri kullanma. Evet, yetişkin erkeklerin ağlamasına neden olan bir şey: P
Luaan

2

XML bir meta dildir. Belirli dilleri tanımlamak için kullanın. Diller asla hiçbir şey yapmazlar, sadece bir şeyleri ifade etmemize izin verirler. Ayrıca, XML'in bir "depolama dili" olduğu doğru değildir. Aslında tam tersi. Lütfen istediğiniz gibi XML belgeleri saklayabilirsiniz. XML bir aktarım dili olarak daha iyi düşünülür. PS. XML'in "bir şey" yaptığını düşünmüyorsanız, birçok sistemin (örneğin iskelenin) XML'i (kötü) bir programlama dili olarak nasıl kullandığını açıklamanız gerekir. XML'in kibarca kötüye kullanımı, ancak vahşi ortamda var ve bu da pek çok örnekten biri.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.