Por que o XML é chamado exatamente de "linguagem"?

105

Fiquei me perguntando por que XML tem um L em seu nome.

Por si só, o XML não "faz" nada. É apenas um formato de armazenamento de dados, não um idioma! Idiomas "fazem" coisas.

A maneira como você faz com que o XML "faça" coisas, para transformá-lo em uma linguagem adequada, é adicionar xmlnsatributos ao seu elemento raiz. Só então ele diz ao seu ambiente o que é.
Um exemplo é o XHTML. Está ativo, possui links, hipertexto, estilos etc, todos acionados pelo xmlns. Sem isso, um arquivo XHTML é apenas um monte de dados nos nós de marcação.

Então, por que o XML é chamado de linguagem? Não descreve nada, não interpreta, apenas é.

Edit: Talvez minha pergunta deveria ter sido mais ampla. Como a resposta atualmente é "porque o XML recebeu o nome de SGML, o nome de GML, etc.", a pergunta deveria ter sido: por que as linguagens de marcação (como XML) são chamadas de linguagens?

Ah, e WRT os votos próximos: não, não estou perguntando sobre o X. Estou perguntando sobre o L!

Mr Lister
fonte
128
Em que você baseia sua exigência de que um idioma precise "fazer" alguma coisa? Não vejo isso em nenhuma das definições em dictionary.com .
Kdgregory
10
Assim como o suaíli só é entendido se ambos o entenderem. Ou um artigo de revista médica é entendido se o leitor entender essa parte do idioma. Não é diferente. E as pessoas compõem as definições.
Sami Kuhmonen 03/04
42
Linguagem de marcação é um termo comum en.wikipedia.org/wiki/Markup_language
paparazzo
37
@ MrLister: "Essas são linguagens humanas, não linguagens de computador" Uma linguagem é uma linguagem. No extremo, até o inglês requer informações contextuais (qual dialeto está sendo usado) para entender sem ambiguidade. Não impede que seja uma linguagem. Sua pergunta simplesmente tem uma premissa falsa.
Lightness Races in Orbit
68
Línguas don'rt fazer coisas, expressar e comunicar coisas
Hagen von Eitzen

Respostas:

238

A resposta real é que XML tem um L no nome porque um cara chamado Raymond L. orie estava entre os designers da primeira "linguagem de marcação" da IBM na década de 1970. Os desenvolvedores tiveram que encontrar um nome para o idioma e escolheram o GML porque eram as iniciais dos três desenvolvedores (Goldfarb, Mosher e Lorie). Eles então criaram o backronym Generalized Markup Language .

Posteriormente, isso foi padronizado como SGML ( Standard Standard General Markup Language ) e, quando o XML foi criado, os desenvolvedores queriam reter o ML-postfix para indicar o relacionamento da família com o SGML, e adicionaram o X na frente porque acharam legal. (Mesmo que isso não faça sentido - o XML é uma meta linguagem que permite definir linguagens extensíveis, mas o XML não é realmente extensível.)

Quanto à sua segunda pergunta, se o XML pode legitimamente ser chamado de linguagem:

Qualquer formato textual estruturado (ou até binário) que pode ser processado computacionalmente pode ser chamado de linguagem. Um idioma não "faz" nada como tal, mas algum software pode processar entrada no idioma e "fazer" algo com base nele.

Você observa que XML é um "formato de armazenamento" que é verdadeiro, mas um formato de armazenamento de texto pode ser chamado de idioma; esses termos não são mutuamente exclusivos.

Linguagens de programação são um subconjunto de linguagens. Por exemplo, HTML e CSS são linguagens, mas não linguagens de programação , enquanto o JavaScript é uma linguagem de programação real. Dito isto, também não há uma definição formal de linguagem de programação e existe uma grande zona cinza de linguagens que poderia ser chamada de formatos de dados ou linguagens de programação, dependendo do seu ponto de vista.

Diante disso, o XML é claramente uma linguagem. apenas não é uma linguagem de programação - embora possa ser usada para definir linguagens de programação como XSLT.

Seu ponto de vista sobre namespaces é irrelevante. Os espaços para nome são um recurso opcional do XML e não alteram a semântica de um vocabulário XML. É apenas necessário desambiguar nomes de elementos se o formato puder conter vários vocabulários.


Edit: reinierpost apontou que você poderia ter significado algo diferente com a pergunta do que eu entendi. Talvez você quisesse dizer que vocabulários específicos como XHTML, RSS, XSLT etc. são linguagens, porque associam elementos e atributos a semânticas específicas, mas o próprio padrão XML não define nenhuma semântica para elementos e atributos específicos, portanto, não parece " linguagem real ".

Minha resposta para isso seria que XML não definir tanto sintaxe e semântica, ele só define-lo em um nível diferente. Por exemplo, define a sintaxe dos elementos e atributos e regras sobre como processá-los. XML é uma "metalinguagem" que ainda é um tipo de linguagem (assim como os metadados ainda são dados!). Como exemplo, o EBNF também é claramente uma linguagem, mas seu objetivo é definir a sintaxe de outras linguagens; portanto, também é uma metalinguagem.

JacquesB
fonte
19
@ Snowman: Uma "linguagem formal" não corresponde necessariamente ao que geralmente é chamado de linguagem na computação. Por exemplo, uma "linguagem formal" não precisa ser textual - o código da máquina é tão formal quanto a maioria dos formatos e protocolos binários. Portanto, eu não diria que o termo "linguagem formal" cobre o mesmo significado que "linguagem" na computação.
precisa saber é o seguinte
15
Não tenho conhecimento de nenhum requisito de que um idioma precise ser textual ou não textual. A idéia de construir uma sentença a partir de terminais não tem nada a ver com uma interpretação arbitrária dos bits nesses terminais, ou que tipos de computadores (silício ou baseados em carbono) são capazes de lê-los.
4
@ NicolBolas: Bom ponto, o código da máquina é definitivamente uma linguagem. Eu apenas acho que é mais comum chamar linguagens binárias de "formatos", por exemplo, você diz que o formato GIF não a linguagem GIF.
precisa saber é o seguinte
3
@ BenCottrell: Não seria um gráfico, pois pode haver loops?
precisa saber é o seguinte
181

Porque é uma linguagem. Uma linguagem de marcação , não uma linguagem de programação.

Observe que idiomas humanos naturais, como inglês e espanhol, também não "fazem" nada. De fato, tecnicamente C ++ e Java e similares não "fazem" nada até serem alimentados em um compilador e a saída ser executada. Fazer coisas e ser uma linguagem são amplamente ortogonais entre si.

Ixrec
fonte
43
Substitua "intérprete" por "compilador". Ser alimentado com um compilador também não os faz "fazer" nada, apenas os traduz para um idioma diferente, que, novamente, não "faz" nada. Toda execução é interpretação. Às vezes, o intérprete pode ser extremamente simples e implementado em silício; nesse caso, chamamos de "unidade de execução", mas ainda é um intérprete. </nitpick>Enfim, boa resposta!
Jörg W Mittag 03/04
8
@ JörgWMittag Bom ponto. Como escolhi aleatoriamente os idiomas normalmente compilados, adicionei "e a saída é executada".
Ixrec
1
Uma linguagem de marcação extensível , se desejar.
Doppelgreener 04/04
1
Eu argumentaria que as línguas humanas fazem "coisas". Veja Speech-Lei Theory ...
Ray
2
Doce, doce ortogonalidade. Execute a linguagem em uma álgebra diferente, e um novo conjunto de ações se desenrola. Sob teoria, de qualquer maneira.
Kenogu LABZ
103

Seja um conjunto finito não vazio de símbolos, chamado alfabeto . Então Σ * é o conjunto infinito contável de palavras finitas que podem ser formadas concatenando zero ou mais símbolos de Σ. Qualquer subconjunto bem definido L ⊆ Σ * é um idioma .

Vamos aplicar isso ao XML. Seu alfabeto é o conjunto de caracteres Unicode U , que não é vazio e é finito. Nem toda concatenação de zero ou mais caracteres Unicode é um documento XML bem formado, por exemplo, a sequência

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

não é claramente. O subconjunto XML ⊂ U * que forma documentos XML bem formados é decidível (ou "recursivo"). Existe uma máquina (algoritmo ou programa de computador) que recebe como entrada qualquer palavra wU * e após um período finito de tempo, gera 1 se w ∈ XML e 0 caso contrário. Esse algoritmo é uma sub-rotina de qualquer software de processamento XML. Nem todos os idiomas são decidíveis. Por exemplo, o conjunto de programas C válidos que terminam em um período finito de tempo não é (isso é conhecido como o problema de interrupção) Quando se projeta um novo idioma, uma decisão importante a ser tomada é se deve ser o mais poderoso possível ou se a expressividade seria melhor restringida em favor da decidibilidade.

Alguns idiomas podem ser definidos por meio de uma gramática que se diz produzir o idioma. Uma gramática consiste em

  • um conjunto finito de literais (também chamados de símbolos terminais ),
  • um conjunto finito separado de variáveis da gramática (também chamado de símbolos não terminais ),
  • um símbolo inicial distinto , retirado do conjunto de variáveis ​​e
  • um conjunto finito de regras (chamadas produções ) que permitem certos tipos de substituições.

Qualquer palavra que consiste exclusivamente em literais e pode ser derivada começando com o símbolo inicial e aplicando as regras especificadas pertence ao idioma produzido pela gramática.

Por exemplo, a seguinte gramática (em notação bastante informal) permite derivar exatamente os números inteiros em notação decimal.

  1. Os literais da gramática são os dígitos 1, 2, 3, 4, 5, 6, 7, 8, 9, e 0.
  2. As variáveis são os símbolos S e D .
  3. S é o símbolo inicial.
  4. Qualquer ocorrência da variável S pode ser substituída
    • com o literal 0ou
    • por qualquer dos outros literais que 0seguido pela variável D .
  5. Qualquer ocorrência da variável D pode ser substituída
    • por qualquer um dos literais seguido por outra instância da variável D ou
    • pela string vazia.

Aqui está como derivamos 42:

S - (aplicar regra 4, 2 nd variante) → 4 D - (aplicar regra 5, 1 r variante) → 42 D - (aplicar regra 5, 2 nd variante) → 42.

Dependendo de como as regras elaboradas são permitidas em sua gramática, são necessárias máquinas sofisticadas para provar que uma determinada palavra pode realmente ser produzida pela gramática. O exemplo dado acima é uma gramática regular , que é a mais simples e menos poderosa. A próxima classe poderosa de gramáticas é chamada sem contexto . Essas gramáticas também são muito simples de verificar. XML (a menos que eu esteja ignorando algum recurso obscuro do qual não conheço) pode ser descrito por uma gramática livre de contexto. A classificação das gramáticas forma a hierarquia de Chomsky das gramáticas (e, portanto, das línguas). Todo idioma que pode ser descrito por uma gramática é pelo menos semi-decidível(ou "recursivamente enumerável"). Ou seja, existe uma máquina que, dada uma palavra que realmente pertence ao idioma, obtém uma prova de que ela pode ser produzida pela gramática dentro de um tempo finito e nunca produz uma prova errada. Essa máquina é chamada de verificador . Observe que a máquina nunca pode parar quando recebe uma palavra que realmente não pertence ao idioma. Claramente, queremos que nossas linguagens de programação sejam descritas por gramáticas menos poderosas, para o benefício de poder rejeitar programas inválidos dentro de um tempo finito.

Esquemas são uma adição ao XML que permite refinar o conjunto de documentos bem formados. Um documento bem formado que segue um determinado esquema é chamado válido de acordo com esse esquema. Por exemplo, a sequência

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

é um documento XML bem formado, mas não é um documento XHTML válido. Existem esquemas para XHTML , SVG , XSLT e outros. A validação de esquema também pode ser feita por um algoritmo que é garantido para parar após uma quantidade finita de etapas para cada entrada. Esse programa é chamado de validador ou analisador de validação. Esquemas são definidos pelas chamadas linguagens de definição de scema , que são uma maneira de definir formalmente gramáticas. XSD é a linguagem oficial de definição de esquema para XML e é, ela própria, baseada em XML. O RELAX NG é uma alternativa mais elegante, muito mais simples e um pouco menos poderosa ao XSD.

Como você pode definir seus próprios esquemas, o XML é chamado de linguagem extensível , que é a origem do "X" em "XML".

Você pode definir um conjunto de regras que fornece aos documentos XML uma interpretação como descrições de programas de computador. O XSLT, mencionado anteriormente, é um exemplo dessa linguagem de programação criada com XML. Em geral, você pode serializar a árvore de sintaxe abstrata de quase qualquer linguagem de programação naturalmente para XML, se é isso que você deseja.

5gon12eder
fonte
7
@Giorgio: Em matemática, "bem definido" é em grande parte apenas um intensificador: tudo o que existe matematicamente já está bem definido.
Kevin
9
@Giorgio Com "bem definido", quero dizer que existe um predicado formal que informa se um item pertence ao conjunto ou não. Esse predicado em geral não será computável, mas deve ser claramente especificado sem contradição. Caso contrário, coisas ruins podem acontecer . “Os pares de strings ( w , M ) em que M é a menor descrição de uma máquina de Turing que gera w e depois pára” é um predicado bem definido, mas não computável (veja a complexidade de Kolmogorov ). …
5gon12eder
2
@ 5gon12eder: Esse conjunto não existe no ZFC (porque o esquema axioma de separação não é poderoso o suficiente para descrevê-lo); se você estiver usando alguma outra teoria dos conjuntos, especifique-a.
Kevin
5
@ 5gon12eder: “O conjunto contendo todas as strings que não estão contidas no conjunto” não existe. O termo "bem definido" não é ironicamente bem definido.
Kevin
3
A propriedade ou validação bem formada é executada por uma gramática . Esta resposta teria sido perfeita se você tivesse mencionado isso.
Thibault D.
31

Na ciência da computação, a linguagem formal é apenas um conjunto de strings, geralmente infinitas e frequentemente descritas usando regras (duas versões comuns dessas regras são expressões regulares e gramáticas formais ).

Observe que isso significa que tudo o que uma linguagem precisa é de sintaxe , a linguagem não precisa descrever o que significa cada sequência válida (isso é chamado de semântica ).

Agora, isso significa que linguagens de programação são linguagens formais que também possuem semântica, o que descreve algumas computações. E, por exemplo, XHTML é uma linguagem formal, cuja semântica descreve (de maneira grosseira e informal) a aparência e o comportamento de um documento de hipertexto.

XML ainda é uma linguagem, embora não tenha semântica propriamente dita (mas muitas linguagens derivadas de XML possuem, como XHTML e XAML).

Tecnicamente, os formatos binários também são linguagens, mas não são assim chamados. O termo "idioma" é reservado para formatos legíveis por humanos.

svick
fonte
10
@ MrLister Porque eles não são legíveis por humanos. Quando eles não são legíveis por humanos, costumamos chamá-los de formatos ou formatos de dados .
Mason Wheeler
3
@ JamesSnell Não deve ser confundido com a outra família de idiomas da ML, é claro. Yay para acrônimos superlotados!
Mason Wheeler
3
Se alguém estiver usando ferramentas formais para construir um analisador (ou especialmente um validador) para o JFIF etc., os engenheiros podem realmente se referir a ele como uma "linguagem". Mais provavelmente como uma "gramática".
JDługosz 03/04
3
@ MrLister: Bem, eles são linguagens, mas porque definem estruturas de dados reutilizáveis, eles têm um nome especial: formatos . Mas sim, também são idiomas.
Lightness Races in Orbit
4
@ MrLister: Nomear um formato é mais uma questão de marketing. O pessoal do XML chamou XML para XML porque "* ML" indica um relacionamento familiar com o formato predecessor, como GML e SGML, e porque eles acharam que era legal com um X na frente. E GML foi chamado de GML porque era uma linguagem de marcação generalizada, mas também porque eram as iniciais dos três designers de linguagem. Então basicamente o L em XML é porque um cara chamado Raymond L. orie estava entre os designers da primeira linguagem de marcação.
precisa saber é o seguinte
12

Uma linguagem é um método de transmissão de informações.

Uma linguagem de programação é um método de transmitir algoritmos.

Uma linguagem de marcação como XML é uma linguagem para transmitir dados.

Philipp
fonte
... e esses dados podem muito bem ser uma descrição de um algoritmo.
Luaan
@Luaan ... e uma linguagem de programação também pode ser abusada para transmitir dados. Como no JSON, por exemplo.
Philipp
2
Você pode até recuar. Eu vi scripts NAnt (uma linguagem baseada em XML) que continham código C #, que era usado apenas para armazenamento de dados. Usando literais de sequência que continham XML. Sim, é o tipo de coisa que faz com que homens adultos chorar: P
Luaan
2

XML é uma meta-linguagem. Você o usa para definir idiomas específicos. As línguas nunca fazem nada, elas apenas nos permitem expressar as coisas. Além disso, não é verdade que XML seja uma "linguagem de armazenamento". Exatamente o oposto, de fato. Você pode armazenar documentos XML como quiser. XML é melhor pensado como uma linguagem de transferência. PS. Se você não acha que XML "faz" nada, precisará explicar como muitos sistemas (por exemplo, jetty) usam XML como uma (ruim) linguagem de programação. É um abuso lamentável de XML, mas existe na natureza, e esse é apenas um dos muitos exemplos.


fonte