Расширение имени файла | .sxml , .scm |
---|---|
Код типа | ТЕКСТ |
Тип формата | язык разметки |
SXML — это альтернативный синтаксис для записи XML- данных (точнее, XML Infosets [1] ) в виде S-выражений , чтобы облегчить работу с XML-данными в Lisp и Scheme . Связанный набор инструментов [ which? ] реализует XPath , SAX и XSLT для SXML в Scheme [2] [3] и доступен в реализации GNU Guile этого языка.
Текстовое соответствие между SXML и XML для примера фрагмента XML показано ниже:
XML | SXML |
---|---|
<tag attr1= "value1" attr2= "value2" > <nested> Текстовый узел </nested> <empty/> </tag> | ( тег ( @ ( attr1 "value1" ) ( attr2 "value2" )) ( вложенный "Текстовый узел" ) ( пустой )) |
По сравнению с другими альтернативными представлениями XML и связанными с ним языками, SXML имеет преимущество в том, что его можно напрямую анализировать существующими реализациями Scheme. Связанные с ним инструменты и документация были во многих отношениях высоко оценены Дэвидом Мерцем в его колонке IBM developerWorks, хотя он также критиковал предварительный характер его документации и системы. [4]
Возьмем следующую простую страницу XHTML :
< html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" lang = "en" > < head > < title > Пример страницы </ title > </ head > < body > < h1 id = "greeting" > Привет, всем! </ h1 > < p > Это всего лишь " >> пример << " для демонстрации XHTML и SXML. </ p > </ body > </ html >
После перевода в SXML эта же страница теперь выглядит так:
( *TOP* ( @ ( *NAMESPACES* ( x "http://www.w3.org/1999/xhtml" ))) ( x :html ( @ ( xml:lang " en" ) ( lang "en" )) ( x:head ( x:title "Пример страницы" )) ( x:body ( x:h1 ( @ ( id "greeting" )) "Привет, там" ) ( x:p "Это просто \">>пример<<\" для демонстрации XHTML и SXML." ))))
Пара тегов каждого элемента заменяется набором скобок. Имя тега не повторяется в конце, это просто первый символ в списке. Далее следует содержимое элемента, которое является либо самими элементами, либо строками. Для атрибутов XML не требуется специального синтаксиса. В SXML они просто представлены как еще один узел, имеющий специальное имя @
. Это не может вызвать конфликт имен с фактическим "@"
тегом, поскольку @
не допускается в качестве имени тега в XML. Это распространенный шаблон в SXML: всякий раз, когда тег используется для указания особого статуса или чего-то, что невозможно в XML, используется имя, которое не является допустимым идентификатором XML.
В строках SXML есть два символа, которые необходимо экранировать, "
разделитель строки (с помощью \"
) и \
сам символ экранирования (с помощью \\
). Приведенный выше код XML требует экранирования трех: &
, <
и >
(с помощью &
, <
и >
соответственно).