Чому саме XML називають саме «мовою»?


105

Мені було цікаво, чому XML має L у своєму імені.

Сам по собі XML нічого не "робить". Це просто формат зберігання даних, а не мова! Мови "роблять" речі.

Те, як ви отримуєте XML, щоб "робити" речі, щоб перетворити їх на мову належним чином, - додавати xmlnsатрибути до його кореневого елемента. Тільки тоді він розповідає навколишньому середовищу, про що йдеться.
Один із прикладів - XHTML. Він активний, у ньому є посилання, гіпертекст, стилі тощо, і все це викликано xmlns. Без цього файл XHTML - це лише купа даних у вузлах розмітки.

То чому ж XML називається мовою? Це нічого не описує, не інтерпретує, це просто так.

Редагувати: Можливо, моє питання мало бути ширшим. Оскільки відповідь наразі "тому, що XML був названий на честь SGML, який був названий на честь GML тощо", питання повинно було бути, чому мови розмітки (як XML) називають мовами?

О, і WRT голосує близько: ні, я не про про X. Я запитую про L!


128
На чому ви базуєте свою вимогу, що мова повинна щось "робити"? Я не бачу цього в жодному із визначень на Dictionary.com .
kdgregory

10
Так само, як суахілі розуміється лише в тому випадку, якщо обидва це розуміють. Або стаття медичного журналу розуміється, якщо читач розуміє цю частину мови. Це нічим не відрізняється. І люди складають визначення.
Самі Кухмонен

42
Мова розмітки - поширений термін en.wikipedia.org/wiki/Markup_language
папараццо

37
@MrLister: "Це людські мови, а не комп'ютерні мови" Мова - це мова. У крайньому випадку, навіть англійська вимагає контекстної інформації (який діалект використовується), щоб зрозуміти однозначно. Це не заважає бути мовою. У вашому запитанні просто помилкова думка.
Гонки легкості на орбіті

68
Мови don'rt робити те, що вони виражають і спілкуватися речі
Хаген фон Eitzen

Відповіді:


238

Справжня відповідь полягає в тому, що XML має ім'я L, оскільки хлопець на ім’я Реймонд L orie був одним з дизайнерів першої "мови розмітки" в IBM в 70-х роках. Розробникам довелося знайти назву для мови, тому вони вибрали GML, оскільки це були ініціали трьох розробників (Goldfarb, Mosher та Lorie). Потім вони створили заголовок Узагальнена мова розмітки .

Пізніше це стало стандартизовано як SGML ( стандартизована загальна мова розмітки ), і коли XML був створений, розробники хотіли зберегти ML-постфікс, щоб вказати на родинні стосунки до SGML, і вони додали X попереду, бо вважали, що це виглядає круто. (Хоча насправді це не має сенсу - XML ​​- мета-мова, яка дозволяє визначати розширювані мови, але XML насправді не розширюється.)

Що стосується вашого другого питання, чи можна XML законно назвати мовою:

Будь-який структурований текстовий (або навіть двійковий) формат, який обробляється обчислювально, можна назвати мовою. Мова не робить "нічого" як такого, але деяке програмне забезпечення може обробляти введення мовою і "робити" щось на її основі.

Ви зазначаєте, що XML - це "формат зберігання", що правда, але текстовий формат зберігання можна назвати мовою, ці терміни не є взаємовиключними.

Мови програмування - це підмножина мов. Наприклад, HTML і CSS - це мови, але не мови програмування , тоді як JavaScript - це справжня мова програмування. Однак, формальної дефініції мови програмування також немає, і існує велика сіра зона мов, яку можна назвати або формати даних, або мовами програмування залежно від вашої точки зору.

Враховуючи це, XML - це явно мова. просто не мова програмування - хоча вона може бути використана для визначення мов програмування, як XSLT.

Ваша думка щодо просторів імен не має значення. Простори імен є необов'язковою особливістю XML і не змінюють семантику словника XML. Потрібно просто розмежувати імена елементів, якщо формат може містити кілька словника.


Редагувати: reinierpost зазначив, що ви, можливо, мали на увазі щось інше, ніж те, що я зрозумів. Можливо, ви мали на увазі, що конкретні лексики, такі як XHTML, RSS, XSLT тощо - це мови, оскільки вони асоціюють елементи та атрибути з певною семантикою, але сам стандарт XML не визначає ніякої семантики для конкретних елементів та атрибутів, тому він не відчуває себе " справжня мова ".

Моя відповідь на цей питання буде те , що XML робить визначити як синтаксис і семантику, він просто визначає його на іншому рівні. Наприклад, він визначає синтаксис елементів та атрибутів та правила щодо їх обробки. XML - це "метамовля", яка все ще є своєрідною мовою (як і метадані, як і раніше, дані!). Як приклад EBNF також явно є мовою, але її мета полягає у визначенні синтаксису інших мов, тому він також є метамовою.



19
@Snowman: "Формальна мова" не обов'язково відповідає тому, що зазвичай називається мовою в обчисленнях. Наприклад, "формальна мова" не повинна бути текстовою - машинний код є такою ж формальною мовою, як і більшість бінарних форматів та протоколів. Тому я б не сказав, що термін "формальна мова" охоплює те саме значення, що і "мова" в обчислювальній техніці.
ЖакБ

15
Я не знаю жодної вимоги про те, що мова повинна бути текстовою чи не бути текстовою. Ідея побудови речення з терміналів не має нічого спільного з довільною інтерпретацією бітів у цих терміналах, або які типи комп'ютерів (на основі кремнію чи вуглецю) здатні їх читати.

4
@NicolBolas: Добре, машинний код, безумовно, є мовою. Я просто думаю, що частіше називати бінарні мови "форматами", наприклад, ви говорите, що формат GIF не є мовою GIF.
ЖакБ

3
@BenCottrell: Чи не був би це графік, оскільки це можуть бути петлі?
ЖакБ

181

Бо це мова. Мова розмітки , а не мова програмування.

Зауважте, що природні людські мови, такі як англійська та іспанська, теж нічого не роблять. Насправді технічно C ++ та Java тощо не роблять нічого, поки їх не вводять у компілятор і не буде виконано висновок. Робити речі та бути мовою в значній мірі ортогональні один для одного.


43
Замініть "перекладач" на "компілятор". Передача компілятора не змушує їх нічого робити, це просто переводить їх на іншу мову, яка, знову ж таки, нічого не робить. Вся виконання - інтерпретація. Іноді інтерпретатор може бути надзвичайно простим і реалізованим у кремнії, і в цьому випадку ми називаємо це "одиницею виконання", але це все ще перекладач. </nitpick>У всякому разі, хороша відповідь!
Йорг W Міттаг

8
@ JörgWMittag Добре. Оскільки я випадковим чином вибирав мови, які зазвичай компілюються, додається ", а результат отримується".
Іксрек,

1
Розширюваний мову розмітки, якщо ви будете.
doppelgreener

1
Я б заперечував, що людські мови роблять "справи". Див Speech-Act Theory ...
Ray

2
Солодке, солодке ортогональність. Виконайте мову в іншій алгебрі, і розгортається цілий новий набір дій. Згідно теорії, все одно.
Кеногу Лабз

103

Нехай Σ - не порожній, кінцевий набір символів, який називається алфавітом . Тоді Σ * - лічильний нескінченний набір кінцевих слів, який може бути утворений шляхом об'єднання нуля або більше символів з Σ. Будь-яка чітко визначена підмножина L ⊆ Σ * - це мова .

Давайте застосуємо це до XML. Його алфавітом є набір символів Unicode U , який не порожній і кінцевий. Не кожна конкатенація нуля або більше символів Unicode - це добре сформований XML-документ, наприклад, рядок

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

явно ні. Підмножина XML ⊂ U *, що формує добре сформовані документи XML, може бути вирішальною (або “рекурсивною”). Існує машина (алгоритм чи комп’ютерна програма), яка приймає як введення будь-яке слово wU * і через закінчену кількість часу виводить або 1, якщо w ∈ XML і 0 в іншому випадку. Такий алгоритм є підпрограмою будь-якого програмного забезпечення для обробки XML. Не всі мови можна вирішити. Наприклад, набір дійсних програм C, які закінчуються за певний час, не є (це відомо як проблема зупинки). Коли хтось розробляє нову мову, важливим рішенням є те, чи вона повинна бути максимально потужною, чи виразність краще обмежуватиметься на користь прийнятності.

Деякі мови можна визначити за допомогою граматики, яка, як кажуть, створює мову. Граматика складається з

  • кінцевий набір літералів (їх також називають термінальними символами ),
  • неперервний кінцевий набір змінних граматики (також її називають нетермінальними символами),
  • розрізнений початковий символ , узятий із набору змінних та
  • обмежений набір правил (так звані постановки ), які дозволяють певні види заміни.

Будь-яке слово, яке складається виключно з літералів і може бути отримане, починаючи зі стартового символу, а потім застосовуючи задані правила, належить до мови, виробленої граматикою.

Наприклад, наступна граматика (у досить неофіційній нотації) дозволяє вам отримувати саме цілі числа у десятковій нотації.

  1. Літерали граматики є цифри 1, 2, 3, 4, 5, 6, 7, 8, 9, і 0.
  2. Змінні є символами S і D .
  3. S - вихідний символ.
  4. Будь-яке виникнення змінної S може бути замінено
    • з буквальним 0або
    • будь-який з інших литералов , ніж з 0подальшою змінної D .
  5. Будь-яке виникнення змінної D може бути замінено
    • будь-яким з літералів, за яким слідує інший примірник змінної D або
    • порожнім рядком.

Ось як ми отримуємо 42:

S - (застосувати правило 4, 2 - й варіант) → 4 D - (застосовуються правила 5, 1 - й варіант) → 42 D - (застосувати правило 5, 2 - й варіант) → 42.

Залежно від того, наскільки складні правила ви допускаєте у своїй граматиці, потрібні різні складні машини, щоб довести, що певне слово насправді може бути вироблене граматикою. Наведений вище приклад - це звичайна граматика, яка є найпростішою і найменш потужною. Наступний потужний клас граматики називається без контексту . Ці граматики також дуже просто перевірити. XML (якщо я не забуваю про якусь незрозумілу особливість, про яку я не знаю) може бути описана безконтекстною граматикою. Класифікація граматик формує ієрархію Хомських граматик (і, отже, мови). Кожна мова, яку можна описати граматикою, принаймні напіврозв’язна(або "рекурсивно перелічувані"). Тобто існує машина, яка, даючи слово, яке фактично належить до мови, отримує доказ того, що воно може бути вироблено граматикою протягом обмеженого часу, і ніколи не виведе неправильне підтвердження. Така машина називається верифікатором . Зауважте, що машина може ніколи не зупинятися, коли дається слово, яке насправді не належить до мови. Зрозуміло, що ми хочемо, щоб наші мови програмування описувалися менш потужними граматиками, щоб мати можливість відхиляти недійсні програми протягом обмеженого часу.

Схеми - це доповнення до XML, що дозволяють уточнити набір добре сформованих документів. Добре сформований документ, який слідує певній схемі, називається дійсним відповідно до цієї схеми. Наприклад, рядок

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

це добре сформований XML-документ, але не є дійсним XHTML-документом. Існують схеми для XHTML , SVG , XSLT та ще чого. Перевірка схеми також може бути виконана алгоритмом, який гарантовано зупиниться після обмеженої кількості кроків для кожного введення. Така програма називається валідатором або валідатором аналізатора. Схеми визначаються так званими мовами визначення сцеми , які є способом формально визначити граматики. XSD є офіційною мовою визначення схем для XML і сама по собі заснована на XML. RELAX NG - це більш елегантна, набагато простіша і трохи менш потужна альтернатива XSD.

Оскільки ви можете визначити власну схему, XML називається розширюваною мовою, яка є походженням "X" у "XML".

Ви можете визначити набір правил, що дає XML-документам інтерпретацію як опис комп'ютерних програм. Згаданий раніше XSLT є прикладом такої мови програмування, побудованої за допомогою XML. Більш загально, ви можете серіалізувати абстрактне синтаксичне дерево майже будь-якої мови програмування цілком природно в XML, якщо це те, що ви хочете.


7
@ Джорджіо: У математиці "чітко визначений" значною мірою є лише підсилювачем: усе, що існує математично, вже чітко визначене.
Кевін

9
@Giorgio Під «чітко визначеним» я маю на увазі, що існує офіційний предикат, який повідомляє, належить чи елемент до набору чи ні. Цей предикат, як правило, не піддається обчисленню, але він повинен бути чітко визначений без суперечності. В іншому випадку можуть трапитися погані речі . «Пара рядків ( w , M ), де M - найменший опис машини Тюрінга, яка видає w, а потім зупиняється», є чітко визначеним, але не обчислюваним (див. Складність Колмогорова ). …
5gon12eder

2
@ 5gon12eder: Цей набір не існує в ZFC (оскільки аксіомна схема поділу недостатньо потужна, щоб описати його); якщо ви використовуєте якусь іншу теорію множин, вам слід вказати її.
Кевін

5
@ 5gon12eder: "Набір, що містить усі рядки, які не містяться в наборі" не існує. Термін "чітко визначений" іронічно не є чітко визначеним.
Кевін

3
Добре сформовані власності або перевірки здійснюється з допомогою граматики . Ця відповідь була ідеальною, якщо ви це згадали.
Тібо Д.

31

В інформатиці формальна мова - це лише сукупність рядків, як правило, нескінченна і часто описується за допомогою правил (дві поширені версії цих правил - це регулярні вирази та формальні граматики ).

Зауважте, що це означає, що всі потреби в мові є синтаксисом , мові не потрібно описувати, що означає кожен дійсний рядок (це називається семантика ).

Тепер це означає, що мови програмування - це формальні мови, які також мають семантику, яка описує деякі обчислення. Наприклад, XHTML - це формальна мова, семантика якої (приблизно та неофіційно) описує, як виглядає та поводить документ із гіпертекстом.

XML як і раніше є мовою, хоча сама семантика не має (але багато мов, похідних від XML, як XHTML та XAML).

Технічно бінарні формати - це також мови, але вони не називаються таким чином. Термін "мова" зарезервований для читабельних для людей форматів.


10
@MrLister Тому що вони не читаються людиною. Коли вони не читаються людиною, ми зазвичай називаємо їх форматами чи форматами даних .
Мейсон Уілер

3
@JamesSnell Звичайно, не плутати з іншою мовою сім'ї ML. Так, для переповнених акронімів!
Мейсон Уілер

3
Якщо хтось використовує формальні інструменти для побудови аналізатора (або, особливо, валідатора) для JFIF тощо, інженери дійсно можуть називати його "мовою". Швидше, хоч як «граматика».
JDługosz

3
@MrLister: Ну, це мови, але оскільки вони визначають структури даних для багаторазового використання, вони мають спеціальну назву: формати . Але, так, це теж мови.
Гонки легкості на орбіті

4
@MrLister: Названня формату - це більше питання маркетингу. Люди XML називали XML для XML тому, що "* ML" вказує на родинні стосунки до попереднього формату, як GML та SGML, і тому, що вони вважають, що це виглядає здорово з X на передній панелі. А GML називали GML тому, що це була узагальнена мова розмітки, а також тому, що вона була ініціалами трьох мовних конструкторів. Таким чином, L в XML - це тому, що хлопець на ім’я Raymond L orie був серед дизайнерів першої мови розмітки.
ЖакБ

12

Мова - це метод передачі інформації.

Мова програмування - це метод передачі алгоритмів.

Мова розмітки, як XML, - це мова передачі даних.


... і ці дані цілком можуть бути описом алгоритму.
Луань

@Luaan ... і мовою програмування також можна зловживати для передачі даних. Як, наприклад, JSON.
Філіп

2
Можна навіть рецидивувати. Я бачив сценарії NAnt (мова на основі XML), що містили код C #, який використовувався лише для зберігання даних. Використання рядкових літералів, що містили XML. Так, саме така річ змушує дорослих чоловіків плакати: P
Луаан

2

XML - мета-мова. Ви використовуєте його для визначення конкретних мов. Мови ніколи нічого не роблять, вони просто дозволяють нам висловлювати речі. Також не вірно, що XML - це "мова зберігання". Насправді навпаки. Ви можете зберігати XML-документи, але будь ласка. XML краще розглядати як мову передачі. PS. Якщо ви не думаєте, що XML нічого не робить, вам доведеться пояснити, як саме так багато систем (наприклад, jetty) використовують XML як (погану) мову програмування. Це плачевне зловживання XML, але воно існує в дикій природі, і це лише один із багатьох прикладів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.