Dlaczego XML jest dokładnie nazywany „językiem”?

105

Zastanawiam się, dlaczego XML ma literę L w nazwie.

Sam w sobie XML nic nie „robi”. To tylko format przechowywania danych, a nie język! Języki „robią” rzeczy.

Sposób, w jaki XML „robi” rzeczy, aby zmienić je we właściwy język, polega na dodawaniu xmlnsatrybutów do elementu głównego. Dopiero wtedy informuje środowisko, o co chodzi.
Jednym z przykładów jest XHTML. Jest aktywny, ma linki, hipertekst, style itp., Wszystkie uruchamiane przez xmlns. Bez tego plik XHTML to tylko garść danych w węzłach znaczników.

Dlaczego więc XML nazywany jest językiem? Nic nie opisuje, nie interpretuje, po prostu jest.

Edycja: Może moje pytanie powinno być szersze. Ponieważ odpowiedź brzmi „ponieważ XML został nazwany na cześć SGML, który został nazwany na cześć GML itp.”, Powinno być pytanie, dlaczego języki znaczników (jak XML) nazywane są językami?

Aha, i WRT bliskie głosy: nie, nie pytam o X. Pytam o L!

Pan Lister
źródło
128
Na czym opierasz swoje wymaganie, że język musi coś „zrobić”? Nie widzę tego w żadnej z definicji na Dictionary.com .
kdgregory
10
Tak jak suahili jest zrozumiany tylko wtedy, gdy oboje to zrozumieją. Lub artykuł w czasopiśmie medycznym jest zrozumiały, jeśli czytelnik rozumie tę część języka. Nie inaczej I ludzie tworzą definicje.
Sami Kuhmonen,
42
Język znaczników jest powszechnym terminem en.wikipedia.org/wiki/Markup_language
paparazzo
37
@MrLister: „To są języki ludzkie, a nie języki komputerowe” . Język to język. W najbardziej skrajnym przypadku nawet angielski wymaga informacji kontekstowych (który dialekt jest używany), aby jednoznacznie zrozumieć. Nie powstrzymuje tego przed byciem językiem. Twoje pytanie ma po prostu fałszywą przesłankę.
Wyścigi lekkości na orbicie
68
Języki don'rt robić rzeczy, oni wyrazić i komunikować rzeczy
Hagen von EITZEN

Odpowiedzi:

238

Prawdziwa odpowiedź jest taka, że ​​XML ma literę L w nazwie, ponieważ facet o imieniu Raymond L orie był jednym z projektantów pierwszego „języka znaczników” w IBM w latach siedemdziesiątych. Programiści musieli znaleźć nazwę języka, więc wybrali GML, ponieważ były to inicjały trzech programistów (Goldfarb, Mosher i Lorie). Następnie stworzyli skrótowy uogólniony język znaczników .

To później zostało znormalizowane jako SGML ( Standardized General Markup Language ), a gdy XML został utworzony, programiści chcieli zachować postfiks ML, aby wskazać związek rodzinny z SGML, i dodali X z przodu, ponieważ uważali, że to wygląda świetnie. (Mimo że w rzeczywistości nie ma to sensu - XML ​​to metajęzyk, który pozwala definiować języki rozszerzalne, ale sam XML nie jest tak naprawdę rozszerzalny.)

Jeśli chodzi o twoje drugie pytanie, czy XML można zgodnie z prawem nazwać językiem:

Każdy ustrukturyzowany format tekstowy (a nawet binarny), który można przetwarzać obliczeniowo, można nazwać językiem. Język nie „robi” niczego jako takiego, ale niektóre oprogramowanie może przetwarzać dane wejściowe w tym języku i „robić” coś na jego podstawie.

Zauważ, że XML jest „formatem przechowywania”, który jest prawdą, ale tekstowy format przechowywania można nazwać językiem, te terminy nie wykluczają się wzajemnie.

Języki programowania są podzbiorem języków. Np. HTML i CSS to języki, ale nie języki programowania , podczas gdy JavaScript jest prawdziwym językiem programowania. To powiedziawszy, nie ma również formalnej definicji języka programowania i istnieje duża szara strefa języków, którą można nazwać formatami danych lub językami programowania, w zależności od twojego punktu widzenia.

Biorąc to pod uwagę, XML jest oczywiście językiem. po prostu nie jest językiem programowania - choć można go używać do definiowania języków programowania, takich jak XSLT.

Twoja uwaga na temat przestrzeni nazw jest nieistotna. Przestrzenie nazw są opcjonalną funkcją XML i nie zmieniają semantyki słownictwa XML. Wystarczy tylko ujednoznacznić nazwy elementów, jeśli format może zawierać wiele słowników.


Edytuj: reinierpost wskazał, że mogłeś mieć na myśli coś innego niż to, co rozumiałem. Może miałeś na myśli, że określone słowniki, takie jak XHTML, RSS, XSLT itp., Są językami, ponieważ kojarzą elementy i atrybuty z określoną semantyką, ale sam standard XML nie definiuje żadnej semantyki dla określonych elementów i atrybutów, więc nie wydaje się, że jest to „ prawdziwy język ”.

Moja odpowiedź na to byłoby to, że XML nie określają zarówno składnię i semantykę, to właśnie definiuje go na innym poziomie. Na przykład definiuje składnię elementów i atrybutów oraz zasady dotyczące ich przetwarzania. XML to „metaljęzyk”, który wciąż jest rodzajem języka (podobnie jak metadane to nadal dane!). Na przykład EBNF jest oczywiście językiem, ale jego celem jest zdefiniowanie składni innych języków, więc jest to również język metaliczny.

JacquesB
źródło
19
@Snowman: „Język formalny” niekoniecznie odpowiada temu, co w komputerach jest zwykle nazywane językiem. Na przykład „język formalny” nie musi być tekstem - kod maszynowy jest językiem formalnym, podobnie jak większość formatów binarnych i protokołów. Nie powiedziałbym więc, że termin „język formalny” obejmuje to samo znaczenie, co „język” w informatyce.
JacquesB
15
Nie znam żadnego wymogu, aby język był tekstowy lub nie tekstowy. Pomysł skonstruowania zdania z terminali nie ma nic wspólnego z arbitralną interpretacją bitów w tych terminalach ani z tym, jakie typy komputerów (krzemowe lub węglowe) są w stanie je odczytać.
4
@NicolBolas: Dobrze, kod maszynowy jest zdecydowanie językiem. Myślę, że bardziej powszechne jest nazywanie „formatów” języków binarnych, np. Mówisz, że format GIF nie jest językiem GIF.
JacquesB
3
@BenCottrell: Czy nie byłby to wykres, ponieważ może mieć pętle?
JacquesB
181

Ponieważ to jest język. Markup language, a nie język programowania.

Zauważ, że naturalne ludzkie języki, takie jak angielski i hiszpański, również niczego nie „robią”. W rzeczywistości C ++, Java i tym podobne nie robią nic, dopóki nie zostaną wprowadzone do kompilatora i nie zostanie wykonane dane wyjściowe. Robienie rzeczy i bycie językiem są w dużej mierze ortogonalne.

Ixrec
źródło
43
Zamień „tłumacz” na „kompilator”. Karmienie się kompilatorem też nie zmusza ich do „robienia” niczego, po prostu tłumaczy je na inny język, który znowu nic nie „robi”. Cała realizacja jest interpretacją. Czasami interpreter może być niezwykle prosty i zaimplementowany w krzemie, w którym to przypadku nazywamy go „jednostką wykonawczą”, ale nadal jest tłumaczem. </nitpick>W każdym razie dobra odpowiedź!
Jörg W Mittag
8
@ JörgWMittag Dobra uwaga. Ponieważ losowo wybrałem języki, które są normalnie kompilowane, dodałem „a dane wyjściowe zostaną wykonane”.
Ixrec,
1
Rozszerzalny język znaczników, jeśli będzie.
doppelgreener
1
Twierdziłbym, że ludzkie języki „robią” rzeczy. Zobacz teorię mowy ...
Ray
2
Słodka, słodka ortogonalność. Wykonaj język w innej algebrze, a pojawi się zupełnie nowy zestaw działań. W każdym razie zgodnie z teorią.
Kenogu Labz
103

Niech Σ będzie niepustym, skończonym zestawem symboli, zwanym alfabetem . Wówczas Σ * jest policzalnym nieskończonym zbiorem skończonych słów, które można utworzyć przez połączenie zero lub więcej symboli z Σ. Każdy dobrze zdefiniowany podzbiór L ⊆ Σ * jest językiem .

Zastosujmy to do XML. Jego alfabet jest Unicode zestaw znaków U , który jest niepusty i skończony. Nie każda kombinacja zerowego lub więcej znaków Unicode jest dobrze sformułowanym dokumentem XML, na przykład ciągiem znaków

<tag> soup &; not <//good>

wyraźnie nie jest. Podzbiór XML ⊂ U *, który tworzy dobrze sformułowane dokumenty XML, jest rozstrzygalny (lub „rekurencyjny”). Istnieje maszyna (algorytm lub program komputerowy), która przyjmuje jako dane wejściowe dowolne słowo wU * i po skończonym czasie wyprowadza 1, jeśli w ∈ XML i 0 w przeciwnym razie. Taki algorytm jest podprogramem każdego oprogramowania przetwarzającego XML. Nie wszystkie języki są rozstrzygalne. Na przykład zestaw prawidłowych programów C, które kończą się w skończonym czasie, nie jest (jest to znane jako problem zatrzymania). Kiedy projektuje się nowy język, ważną decyzją jest podjęcie decyzji, czy powinien on być tak potężny, jak to możliwe, czy też ekspresja powinna być ograniczona na korzyść rozstrzygalności.

Niektóre języki mogą być definiowane za pomocą gramatyki , że mówi się produkować język. Gramatyka składa się z

  • skończony zestaw literałów (zwanych także symbolami terminalnymi ),
  • odłączony skończony zestaw zmiennych gramatyki (zwany również nie końcowych symbole)
  • wyróżniający się symbol początkowy , wzięty z zestawu zmiennych i
  • skończony zestaw zasad (tzw. produkcje ), które pozwalają na pewne rodzaje zamienników.

Każde słowo, które składa się wyłącznie z literałów i można je uzyskać, zaczynając od symbolu początkowego, a następnie stosując podane reguły, należy do języka tworzonego przez gramatykę.

Na przykład następująca gramatyka (w raczej nieformalnym zapisie) pozwala uzyskać dokładnie liczby całkowite w zapisie dziesiętnym.

  1. W literały z gramatyki są cyfry 1, 2, 3, 4, 5, 6, 7, 8, 9, i 0.
  2. Te zmienne symbole S i D .
  3. S jest symbolem początkowym.
  4. Każde wystąpienie zmiennej S może zostać zastąpione
    • z literałem 0lub
    • dowolnymi literałach innych niż 0następuje zmiennej D .
  5. Każde wystąpienie zmiennej D może zostać zastąpione
    • przez dowolny literał, po którym następuje kolejne wystąpienie zmiennej D lub
    • przez pusty ciąg.

Oto, w jaki sposób otrzymujemy 42:

S - (zastosowanie zasada 4 2 ND wariant) → 4 D - (zastosowanie zasada 5, 1 st wariant) → 42 D - (zastosowanie zasada 5, 2 nd wariant) → 42.

W zależności od skomplikowanych reguł, na jakie zezwalasz w gramatyce, wymagane są różne zaawansowane maszyny do udowodnienia, że ​​gramatyka może wytworzyć dane słowo. Powyższy przykład to zwykła gramatyka, która jest najprostsza i najmniej potężna. Następna potężna klasa gramatyk nosi nazwę kontekstu . Te gramatyki są również bardzo łatwe do zweryfikowania. XML (chyba że przeoczę jakąś niejasną funkcję, o której nie wiem) można opisać gramatyką bezkontekstową. Klasyfikacja gramatyki stanowi Chomską Hierarchię gramatyki (a zatem języków). Każdy język, który można opisać gramatyką, jest co najmniej częściowo rozstrzygalny(lub „rekurencyjnie wyliczalne”). Oznacza to, że istnieje maszyna, która biorąc pod uwagę słowo, które faktycznie należy do języka, uzyskuje dowód, że gramatyka może ją wytworzyć w skończonym czasie i nigdy nie przedstawi złego dowodu. Taka maszyna nazywa się weryfikatorem . Zauważ, że maszyna nigdy nie może się zatrzymać, gdy otrzyma słowo, które w rzeczywistości nie należy do języka. Oczywiście chcemy, aby nasze języki programowania były opisywane przez słabsze gramatyki, aby móc odrzucić nieprawidłowe programy w określonym czasie.

Schematy są dodatkiem do XML, który pozwala udoskonalić zestaw poprawnie sformułowanych dokumentów. Dobrze sformułowany dokument zgodny z określonym schematem nazywa się ważny zgodnie z tym schematem. Na przykład ciąg

<?xml version="1.0" encoding="utf-8" ?>
<root>all evil</root>

jest poprawnie sformułowanym dokumentem XML, ale nie jest prawidłowym dokumentem XHTML. Istnieją schematy dla XHTML , SVG , XSLT i nie tylko. Sprawdzanie poprawności schematu można również wykonać za pomocą algorytmu, który gwarantuje zatrzymanie po skończonej liczbie kroków dla każdego wejścia. Taki program nazywa się walidatorem lub parserem sprawdzającym poprawność. Schematy są definiowane przez tak zwane języki definicji schematu , które są formalnym sposobem definiowania gramatyki. XSD jest oficjalnym językiem definicji schematów dla XML i jest oparty na XML. RELAX NG jest bardziej elegancką, znacznie prostszą i nieco mniej wydajną alternatywą dla XSD.

Ponieważ możesz definiować własne schematy, XML jest nazywany rozszerzalnym językiem, który jest początkiem „X” w „XML”.

Możesz zdefiniować zestaw reguł, które będą interpretować dokumenty XML jako opisy programów komputerowych. Wspomniany wcześniej XSLT jest przykładem takiego języka programowania zbudowanego przy pomocy XML. Mówiąc bardziej ogólnie, można serializować abstrakcyjne drzewo składniowe prawie każdego języka programowania całkiem naturalnie do XML, jeśli tego właśnie chcesz.

5gon12eder
źródło
7
@Giorgio: W matematyce „dobrze zdefiniowany” jest w dużej mierze tylko wzmacniaczem: wszystko, co istnieje matematycznie, jest już dobrze zdefiniowane.
Kevin
9
@Giorgio Z „dobrze zdefiniowanym” mam na myśli, że istnieje formalny predykat, który mówi, czy element należy do zestawu, czy nie. Ten predykat zasadniczo nie będzie obliczalny, ale musi być jasno określony bez sprzeczności. W przeciwnym razie mogą się zdarzyć złe rzeczy . „Pary ciągów ( w , M ), w których M jest najmniejszym opisem maszyny Turinga, która wysyła w, a następnie zatrzymuje się” jest predykatem dobrze zdefiniowanym, ale nieobliczalnym (patrz złożoność Kołmogorowa ). …
5gon12eder
2
@ 5gon12eder: Ten zestaw nie istnieje w ZFC (ponieważ schemat separacji aksjomat nie jest wystarczająco silny, aby go opisać); jeśli używasz innej teorii mnogości, powinieneś ją podać.
Kevin
5
@ 5gon12eder: „Zestaw zawierający wszystkie ciągi, które nie są zawarte w zestawie” nie istnieje. Termin „dobrze zdefiniowany” nie jest ironicznie nieokreślony.
Kevin
3
Dobrze uformowane nieruchomość lub sprawdzanie poprawności jest wykonywane przez gramatykę . Ta odpowiedź była idealna, jeśli o tym wspomniałeś.
Thibault D.
31

W informatyce język formalny jest tylko zbiorem ciągów, zwykle nieskończonych i często opisywanych za pomocą reguł (dwie popularne wersje tych reguł to wyrażenia regularne i gramatyka formalna ).

Zauważ, że oznacza to, że wszystko, czego potrzebuje język, to składnia , język nie musi opisywać, co oznacza każdy prawidłowy ciąg znaków (co nazywa się semantyką ).

Oznacza to, że języki programowania to języki formalne, które również mają semantykę, co opisuje pewne obliczenia. I na przykład XHTML jest językiem formalnym, którego semantyka opisuje (z grubsza i nieformalnie), jak wygląda i zachowuje się dokument hipertekstowy.

XML jest nadal językiem, mimo że nie ma samej semantyki (ale wiele języków pochodzących z XML ma, jak XHTML i XAML).

Technicznie formaty binarne są również językami, ale nie są tak nazywane. Termin „język” jest zarezerwowany dla formatów czytelnych dla człowieka.

svick
źródło
10
@MrLister Ponieważ nie są one czytelne dla człowieka. Jeśli nie są czytelne dla człowieka, zwykle nazywamy je formatami lub formatami danych .
Mason Wheeler,
3
@JamesSnell Oczywiście nie należy mylić go z inną rodziną języków ML. Tak, za zatłoczone akronimy!
Mason Wheeler,
3
Jeśli ktoś używa formalnych narzędzi do zbudowania parsera (a zwłaszcza walidatora) dla JFIF itp., Inżynierowie mogą nazywać go „językiem”. Bardziej prawdopodobne, że jako „gramatyka”.
JDługosz
3
@MrLister: Cóż, są to języki, ale ponieważ definiują struktury danych wielokrotnego użytku, mają specjalną nazwę: formaty . Ale tak, to także języki.
Wyścigi lekkości na orbicie
4
@MrLister: Nazywanie formatu jest bardziej kwestią marketingu. Ludzie XML nazywali XML dla XML, ponieważ „* ML” wskazuje na związek rodziny z poprzednim formatem, takim jak GML i SGML, oraz dlatego, że uważali, że to wygląda świetnie z X z przodu. A GML nazwano GML, ponieważ był to uogólniony język znaczników, ale także dlatego, że był to inicjał trzech projektantów języków. Zasadniczo L w XML jest dlatego, że facet o imieniu Raymond L orie był jednym z projektantów pierwszego języka znaczników.
JacquesB
12

Język to metoda przekazywania informacji.

Język programowania to metoda przekazywania algorytmów.

Język znaczników, taki jak XML, jest językiem do przesyłania danych.

Philipp
źródło
... a te dane mogą równie dobrze być opisem algorytmu.
Luaan,
@Luaan ... i język programowania może być również wykorzystywany do przesyłania danych. Na przykład jak w JSON.
Filip
2
Możesz nawet powtórzyć. Widziałem skrypty NAnt (język oparty na XML), które zawierały kod C #, który był używany tylko do przechowywania danych. Używanie literałów łańcuchowych zawierających XML. Tak, to jest coś, co sprawia, że ​​dorośli mężczyźni płaczą: P
Luaan,
2

XML jest meta-językiem. Używasz go do definiowania określonych języków. Języki nigdy nic nie robią, pozwalają nam tylko wyrażać różne rzeczy. Nie jest też prawdą, że XML jest „językiem pamięci”. Wręcz przeciwnie. Dokumenty XML można przechowywać w dowolny sposób. XML jest lepiej rozumiany jako język transferu. PS. Jeśli nie uważasz, że XML „robi” cokolwiek, musisz wyjaśnić, w jaki sposób wiele systemów (np. Jetty) używa XML jako (złego) języka programowania. Jest to godne ubolewania nadużycie XML, ale istnieje na wolności i to tylko jeden z wielu przykładów.


źródło