Алик Кириллович

Два типа языков разметки: языки в стиле XML и языки в стиле YAML

07 июля 2008 г.

Существует два типа языков разметки: языки в стиле XML и языки в стиле YAML.

Языки в стиле XML

В XML-языках все элементы, вне зависимости от их смысла оформляются с помощью общих синтаксических конструкций.

Примеры XML-языков:

xHTML:

В xHTML синтаксис:

            
               Содержимое
              
            !!!]]>
          

имеют все элементы, вне зависимости от их семантики: заголовки, ссылки, списки, таблицы и т.д.

Языки в стиле YAML

В YAML-языках каждый тип элемента имеет свой синтаксис, обусловленный семантикой этого элемента.

Например, в Wiki-разметке для задания горизонтальной линии используют ----, т.к. эта конструкция внешне напоминает линию; для задания списка перед каждым пунктом ставят *, т.к. она внешне напоминает маркер списка.

Примеры YAML-языков:

Wiki-разметка:

В Wiki-разметке каждый тип элемента имеет свой синтаксис:

Для выделения текста жирным шрифтом, текст обрамляется тремя одинарными кавычками: '''жирный текст'''.

Названия разделов статьи обрамляются двумя (или тремя для подразделов) знаками равенства: === Заголовок ===.

Для горизонтальной линии используется четыре дефиса: ----.

Списки делаются так: на каждой отдельной строке ставится символ # и затем следует пункт списка. Для ненумерованных списков используется *, например:

            * Пункт 1;
            * Пункт 2;
            * Пункт 3.
          

Ссылки обрамляются конструкцией вида: [[Название целевой статьи|видимый текст ссылки]

Для картинок используется следующая конструкция: [[Image:имя_файла.png]]

Для таблиц такая:

            {|  
             |Ячейка 1-1  
             |Ячейка 2-1  
             |-  
             |Ячейка 1-2  
             |Ячейка 2-2  
             |}
           

И т.д.

YAML:
 
Textile:
 
Математическая нотация:

В математической нотации для каждого действия используется своя запись. Даже арифметические действия записываются по-разному:

Сложение, вычитание и умножение имеет следующий синтаксис: операнд1 оператор операнд2, например: 2+2, 5-3, 4*6.

Для записи деления, делимое размещают над делителем, и отделяется горизонтальной чертой, например: ¾. А для записи возведения в степень, вообще, обходятся без оператора, размещая показатель степени над основанием, например: 210

Каждый из этих типов языков имеет свои преимущества и недостатки:

Преимущества XML-языков:

Недостатки XML-языков:

Преимущества YAML-языков:

Недостатки YAML-языков:

Примеры использования

В нашей системе тестирования знаний «СИнТеЗ» для экспорта/импорта тестов используются языки обоих типов.

XML

Любой тест может быть экспортирован/импортирован в XML-формат.

Этот формат имеет все преимущества XML-языков: удобен для разбора стандартным XML-парсером, может содержать SVG или MathML-разметку, с помощью XSLT может быть преобразован в любой другой формат, например в международный стандарт дистанционного обучения SCORM.

Однако, ему присущи и недостатки XML-языков: большой размер и неудобность для человека.

Пример простейшего файла тестов:

Файл теста в формате XML:
            
              
                
                  
                    
                      
                        
                        
                        
                      
                    
                    
                      
                        
                        
                        
                        
                      
                    
                  
                
                
                  
                    
                      
                        
                      
                    
                    
                      
                        
                        
                        
                      
                    
                    
                      
                        
                        
                        
                      
                    
                  
                
              
            
            !!!]]>
          

YAML

Также тест может быть импортирован в YAML-формат. Этот формат настолько прост, что преподаватель может составлять тест даже в отсутствии редактора тестов, просто в «Блокноте».

Файл теста в формате YAML:
            ***Тема 1
            
            ? Текст вопроса типа "выбор одного правильного варианта"
            +Правильный вариант
            -Неправильный вариант
            -Неправильный вариант

            ? Текст вопроса типа "выбор нескольких правильных вариантов"
            +Правильный вариант
            +Правильный вариант
            -Неправильный вариант
            -Неправильный вариант

            
            ***Тема 2

            ? Текст вопроса типа "прямой ввод"
            =Правильный ответ

            ? Текст вопроса типа "соответствие"
            Левая часть 1 <-> Правая часть 1
            Левая часть 2 <-> Правая часть 2
            Левая часть 3 <-> Правая часть 3

            ? Текст вопроса типа "упорядочивание"
            1. Первый пункт упорядочивания
            2. Второй пункт упорядочивания
            3. Третий пункт упорядочивания
          

Вывод:

XML-языки понятны человеку, но больше предназначены для компьютера. YAML-языки понятны компьютеру, но больше предназначены для человека.

Если Вы хотите, чтобы файлы вашего приложения были удобны как для человека, так и для компьютера, используйте оба этих формата.

Примечания

Библиотека подсветки синтаксиса в этой статье основана на «highlight.js» от Ивана Сагалаева.

11 комментариев:

  1. Евгений
    01.12.2008, 02:42

    <мое сугубо личное мнение>XML(сильно упрощённая версия SGML) намного эффективнее справляется со своей основной задачей <обратите внимание>внесением метаинформации в текст</обратите внимание>.

    Насчет понятности человеку первой и второй версии разметок - я с вами мог бы поспорить. Текст в YAML-разметке компактен, но! это достигается за счет потери информативности(понятности) метаинформации, связанной с ним.

    Что легче для преподавателя: потратить время на а) изучение синтаксиса вашего мини-языка или b) потратить время на обучение азам работы в "дружественном", "интуитивно-понятном" GUI-редакторе тестов?

    Написать качественный YAML-парсер, ничуть не легче чем XML-парсер(попробуйте приделать к своему самомисному парсеру обработку ошибок, валидацию документа, экранирование служебных символов, поддержку различных кодировок и т.д.).

    Конечно, если такие задачи решать не надо - то можно обойтись и YAML-разметкой. Но смысл? Зачем себя так ограничивать?</мое сугубо личное мнение>

  2. Алик Кириллович
    02.12.2008, 23:42

    @Евгений

     

    Насчет понятности человеку первой и второй версии разметок - я с вами мог бы поспорить.

    Что легче для преподавателя: потратить время на а) изучение синтаксиса вашего мини-языка или b) потратить время на обучение азам работы в "дружественном", "интуитивно-понятном" GUI-редакторе тестов?

    Конечно, работать с GUI проще, чем непосредственно с языком разметки.

    Но, когда GUI недоступен, и приходится выбирать между двумя стилями разметки: XML или YAML , то, мне кажется, все таки, удобнее — YAML.

    Ведь в YAML-языках каждый тип элемента имеет свой синтаксис, который зависит от смысла или внешнего вида элемента. Что делает его более интуитивным для запоминания.

    Согласитесь, что для создания списка, YAML (Wiki) синтаксис:

    * Пункт 1;
    * Пункт 2;
    * Пункт 3.
    

    ...проще, чем XML (HTML) синтаксис:

    <ul>
      <li>Пункт 1;</li>
      <li>Пункт 2;</li>
      <li>Пункт 3;</li>
    </ul>
    
    

    Другое дело, что YAML-синтаксис, действительно, плохо поддерживает метаданные. Ведь для каждого вида метаданных, для каждого параметра в YAML пришлось бы изобретать свою конструкцию, свой значек. И их интуитивность, тогда уже, была бы не выше интуитивности китайских иероглифив (внешний иероглифа, тоже, когда-то, имел сходство с описываем понятием).

     

    Написать качественный YAML-парсер, ничуть не легче чем XML-парсер

    Да, конечно, об этом я и пишу в статье.

    XML-парсеры есть уже готовые почти для всех языков программирования; для YAML-парсера вручную придется кодировать каждую конструкцию.

  3. Snowcore
    17.12.2008, 19:04

    Я всегда использовал XML, до знакомства с symfony framework - после этого я ощутил преимущества YAML :)

  4. aktuba
    15.01.2009, 01:11

    А я так и не смог найти преимуществ в YAML, кроме внешнего вида. Преимущества XML - легкая расширяемость, неограниченные метаданные, популярность. Кстати, воспринимается XML очень легко, если хоть изредка с ним работать ;)

    А где преимущества YAML?

  5. Алик Кириллович
    09.02.2009, 06:15

    @aktuba

    А где преимущества YAML?

    О преимуществах и недостатках XML и YAML я и написал в статье.

    Главное преимущество YAML-языков — удобство восприятия и редактирования человеком.

    Согласитесь, что Wiki-разметка:

    * Пункт 1;
    * Пункт 2;
    * Пункт 3.
    

    воспринимается легче, чем HTML:

    <ul>
      <li>Пункт 1;</li>
      <li>Пункт 2;</li>
      <li>Пункт 3;</li>
    </ul>
    
    

    А математическая запись:

    a*x^2 + b*x + c
    

    воспринимается и редактируется проще, чем MathML:

    <apply>
      <plus/>
      <apply>
        <times/>
        <ci>a</ci>
        <apply>
          <power>
            <ci>x</ci>
            <cn>2</cn>
          </power>
        </apply>
      </apply>
      <apply>
        <times/>
        <ci>b</ci>
        <ci>x</ci>
      </apply>
      <ci>c</ci>
    </apply>
    
    

    Однако, разумеется, YAML-языки имеют и недостатки, которые я также перечислил в статье.

  6. Тормоз
    09.06.2009, 16:53

    Из YAML постоянно пользуюсь "Текстилем", т. к. он встроен в CMS TextPattern, в том числе и в форме комментариев (хотя подсказок не даю, чтобы спамеры не досаждали). Очень удобная штука! Кстати, Алик, вот у вас чтобы выделить слово жирным надо набрать дополнительно аж 7 символов, а в Textile для этого используется всего две звёздочки ;)

  7. Тормоз
    09.06.2009, 16:54

    О, клёвый у меня тут мутант получился.

  8. Денис Радченко
    10.06.2009, 14:44

    Для внутреннего использования разрабатываю систему тестирования. Не против, если я использую ваш формат YAML для вопросов?

  9. Алик Кириллович
    10.06.2009, 15:02

    @Денис Радченко

    Для внутреннего использования разрабатываю систему тестирования. Не против, если я использую ваш формат YAML для вопросов?

    Нет не против — используйте на здоровье :-)

  10. Игорь
    26.10.2009, 12:12

    Пользуюсь хмл так как он более распостранен универсален и удобен.

  11. Ritusha
    28.02.2010, 15:03

    ВОТ ТЕПЕРЬ Я ПОНЯЛ РАЗНИЦУ СПАСИБО

Добавить комментарий

Имя:
E-mail (не публикется):
Веб-сайт (ссылки не «глушатся» nofollow):
Текст:
Вы можете использовать BBCode:
[b]жирность[/b]
[i]курсив[/i]
[u]подчеркивание[/u]
[s]перечеркивание[/s]
[url]http://www.example.com[/url]
[url=http://www.example.com]Текст ссылки[/url]
[quote]Цитата[/quote]
[code]
код на
  языке
программирования
[/code]
[list]
* Список
* Список
* Список
[/list]

Статьи

About

Подписка

Ждите...

Valid XHTML 1.0 Strict © Алик Кириллович, 2008—2009