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 xmlns
atrybutó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!
źródło
Odpowiedzi:
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.
źródło
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.
źródło
</nitpick>
W każdym razie dobra odpowiedź!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
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 w ∈ U * 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
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ę.
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
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.
źródło
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.
źródło
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.
źródło
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