За что я ненавижу XML

Наконец-то я смог сформулировать, за что я ненавижу XML. В применении к книгам, очевидно - прочие использования этого незаконнорождённого отпрыска пьяной макаки и запаршивевшего верблюда меня волнуют мало, хотя встречаться с конфигами, где ради одного значения надо написать четыре вложенных тега по полсотни символов тоже удовольствия мало. Да и типичный вебсайт по сути своей от книги мало отличается, а чисто флэшевые поделки лично мне не интересны.
Так вот.
Книга - это текст.
Текст в книге главное.
Есть ещё всякие рющечки, шрифты и прочие выделения, ссылки, сноски, заголовки и прочее. Я прекрасно это всё знаю, ценю и использую. Но всё-таки текст важнее разметки. Если испортится разметка - книга остаётся всё той же книгой, её можно будет читать, пусть чуть менее удобнее. Мысль автора не исказится. Если же испорчен текст ценой сохранения правильности разметки - книга испорчена.
Ещё раз. Книга это текст c разметкой, причём текст первичен. Кажется, простая и очевидная мысль. Но не для всех. Во всяком случае не для придумщиков XML, чтоб им побыстрее переродиться престарелыми червями.
В XML считается, что главное - разметка. Если среди мегабайта текста попадётся отдельно стоящий &, или там <, любой парсер сочтёт это куском тэга. Хотя на тэг это ни разу не похоже. И текст будет испорчен.
Это абсолютно бредовый подход. За разметку можно принимать только то, что точно разметка. Встретили <p> - ну ладно, сочтём за тэг. Хотя сама по себе идея метить метаинформацию распространённым символами, да ещё и несколькими, запрещая их использовать Тексту, достойна пожизненной кастрации.

Комментарии

p2004r написал:
перевод иллюстрации в векторный формат
Опять же, делись подробностями! Очень надо! А то я занимаюсь сканом всего пару месяцев, но уже задолбался чуть ли не для каждой картинки вручную подбирать минимально изгаживающие её параметры ресайза. :(

Сдается мне - это скорее недостатки редакторов FB2, чем формата xml или fb2.

XML - далеко не лучший формат, но кажется что трудно выдумать, что-то принципиально лучшее, потому что или форматирование будет описываться отдельным блоком или внедрено в сам текст. Отдельным блоком - это тоже мало куда годится, чуть какая ошибка и всё поехало. Если в самом тексте, значит в любом случае могут иметь место ситуация по типу & в середине. Хотя бы в книге, описывающей работу с таким форматом :)

Понимать, что тег тут может быть или не может должен не парсер, а редактор. А вот, то что на практике проще всего в обычном редакторе копипастить в структуру fb2 - вот это уже и есть недостатки работы с fb2, но при чем тут сам xml.

Как-бы, безосновательный треп. XML - штука ценная и очень удобная, с помощью которой можно легко описывать любые объекты, причем делая это в удобочитаемом виде. Можно, конечно, битовые флаги выставлять напрямую и вообще забыть про всякие w_char, UTF и прочие удобства. Каждому своё.

Проблема данная сугубо в парсере приложения находится. По спецификации на XML служебные символы должны быть экранированы, если используются, как данные. Использование блока CDATA для каждого чиха не есть хорошо, но вот обрамлять служебные символы банально специальным тегом и написать правило интерпретации для парсера, суть правильно. Получится что-то вроде & и целый один маленький handler для обработки этого тега, который надо будет потом всего-лишь зарегистрировать у парсера. Интерфейсная часть у всех реализаций должна быть унифицирована, так что проблем с этим я не вижу.

Ame написал:
Интерфейсная часть у всех реализаций должна быть унифицирована, так что проблем с этим я не вижу.

Хорошо теоретикам - они проблем не видят.

larin написал:
Ame написал:
Интерфейсная часть у всех реализаций должна быть унифицирована, так что проблем с этим я не вижу.

Хорошо теоретикам - они проблем не видят.

Нет никакой проблемы. Вы просто подняли шум на ровном месте, как мне кажется из-за обычной лени. Напишите handler для парсера или переопределите методы парсера, который Вы используете, или, если ООП для Вас суть лес темный, сделайте пре и пост обработки текста для экранирования/разъэкранирования служебных символов. Вариантов явно больше одного ^_^

Может за Вас написать, если Вы такой немощный?

Ame написал:

Может за Вас написать, если Вы такой немощный?

А напишите. Во всех читалках, парсерах, редакторах и конвертерах. Коли Вы такой мощный.

Ame написал:
Может за Вас написать, если Вы такой немощный?

Напишите, буду рад.
Или поправьте имеющийся - http://github.com/larin/librusec/blob/master/parser.inc.

larin написал:
Если испортится разметка - книга остаётся всё той же книгой, её можно будет читать, пусть чуть менее удобнее. Мысль автора не исказится. Если же испорчен текст ценой сохранения правильности разметки - книга испорчена.

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

А попробуйте поменяйте наугад выбранный байт в PDF или DOC файле. Результат почти наверняка будет тот же - не загрузится. Причем в отличие от XML, вручную такой файл уже не починишь.

То есть единственный формат, который БОЛЕЕ помехоустойчив, чем XML - это plain text. Все остальные гораздо, гораздо хуже. А при этом XML абсолютно неограниченно расширяем по семантике, легко читается и пишется на любом языке. Ценой за все это - необходимость escap'ить всего ДВА символа, угловую скобку и амперсанд. С ТеХом или Постскриптом никакого сравнения - вот там действительно черт ногу сломит, любой символ может значить что угодно в зависимости от контекста. А XML создавался как идеальный компромисс простоты и богатства возможностей - и этого идела он достиг. (За исключением DTD - вот за них действительно стоит надавать создателям по ушам; но причины тут больше исторические, слишком резкий разрыв с SGML тогда бы не прокатил.)

Я помню, каким был мир текста до появления XML и Unicode. Я бы не хотел туда возвращаться, спасибо.

kelle написал:
Я помню, каким был мир текста до появления XML и Unicode. Я бы не хотел туда возвращаться, спасибо.

Не надо никуда возвращаться.
Надо двигаться дальше.

larin написал:
Не надо никуда возвращаться.
Надо двигаться дальше.

А вот куда? Поделись идеями.
На счет XML-я вообще и fb2 в частности я с тобой не согласен. Грибов с Мацневым сделали, для своего времени, достаточно революционную штуку (правда, как водится, революция произошла в одной, отдельно взятой стране). Достоинства схемы fb2 с головой перевешивают все ее недостатки. Количество книг в fb2 и электронных библиотек, базирующихся на fb2, подтверждают это фактически.
Мне не понятно, как и куда двигаться дальше без XML. Понятное дело, схему нужно (и давно нужно) модифицировать и развивать, возможно, файл декомпозировать (как в epub и драфте fb3, хотя там есть свои минусы), но вот что делать без структурной и логической разметки? В лучшем случае, у тебя получится самопальный недо-XML, в худшем - гмм...
Кроме того, любой, самый распрекрасный, в теории, формат, без читалок (софтовых и железных), редакторов, библиотек, каталогизаторов - nothing.

SeNS написал:
larin написал:
Не надо никуда возвращаться.
Надо двигаться дальше.
Мне не понятно, как и куда двигаться дальше без XML. Понятное дело, схему нужно (и давно нужно) модифицировать и развивать, возможно, файл декомпозировать (как в epub и драфте fb3, хотя там есть свои минусы), но вот что делать без структурной и логической разметки? [...] Кроме того, любой, самый распрекрасный, в теории, формат, без читалок (софтовых и железных), редакторов, библиотек, каталогизаторов - nothing.
Посмотри в сторону NFB (про который СерыйМыш упоминал): исходник более "естественный" для глаза, смотрелка весом 50 кил, конвертер из FB2... и это всё было ещё в первой пре-альфе!

Рыжий Тигра написал:
Посмотри в сторону NFB (про который СерыйМыш упоминал): исходник более "естественный" для глаза, смотрелка весом 50 кил, конвертер из FB2... и это всё было ещё в первой пре-альфе!

Поддерживаю, отличный вроде бы формат.

Но почему то никто здесь (включая автора nfb) не хочет про него вспоминать. Заговор какой-то.

На всякий случай дам ссылочку:

http://lib.rus.ec/node/121665#comment-32133

1_абрам написал:
Рыжий Тигра написал:
Посмотри в сторону NFB (про который СерыйМыш упоминал): исходник более "естественный" для глаза, смотрелка весом 50 кил, конвертер из FB2... и это всё было ещё в первой пре-альфе!

Поддерживаю, отличный вроде бы формат.
Но почему то никто здесь (включая автора nfb) не хочет про него вспоминать. Заговор какой-то.


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

уговариваю себя возобновить работу над nfb, но пока безрезультатно :(

если откровенно, то до того момента, как можно будет говорить о новом формате, для него должны быть написаны не только редакторы и читалки, но и библиотеки, аналогичные libxml2, чтобы кодеры на php не изобретали велосипеды, а могли использовать готовое работающее решение.

всего делов-то взяться, и сделать...

kelle написал:
С ТеХом или Постскриптом никакого сравнения - вот там действительно черт ногу сломит, любой символ может значить что угодно в зависимости от контекста.

Вызывающе неверная информация.
ТеХ прост и логичен, с точки зрения поиска ошибок однозначно приятнее XML.

kelle написал:
Я помню, каким был мир текста до появления XML и Unicode. Я бы не хотел туда возвращаться, спасибо.

Явление временное.
Только до тех пор, пока лично не придётся ручками поковыряться в [хотя бы средне-сложном] конфиге, написанном для простоты парсинга на XML.

Видите ли, в чем дело...

Я с ТеХом работал много лет. Профессионально работал, чужие файлы для публикации готовил. Прошло через меня этих файлов - сотни. Проблем решено с ними - тысячи.

Знаю, что говорю.

Но чем рвать рубашку на груди, приведу один только фактик. Лучшие умы ТеХовского мира много-много лет назад начали работу над LaTeX 3. Результата нет до сих пор и, очевидно, уже не будет. Почему? Да потому что трудно. Слишком замороченная вещь этот ТеХ, чтобы писать на нем нормальный софт. Создание безумного гения, невероятно крутое для своего времени (конец 70-х), но сейчас вся эта его крутота, хитрозаверченность и оптимизированность уже как кость в горле. Все меньше желающих биться головой об стену и решать задачи уровня всесоюзной олимпиады по программированию только для того, чтобы добавить какой-нибудь несчастный счетчик. И интерес постепенно угас. Лучшие умы разбрелись кто куда. Ушел и я, как только появилась возможность более-менее нормально верстать книги в XML.

LaTeX 2e - это последняя остановка, дальше поезд идет в депо. Использоваться в почти неизменном виде он будет еще очень долго, конечно; будут и живые побеги появляться. Но в целом - это труп. Увы.

Что же касается конфигов в XML - так это же просто мечта, если руки из правильного места растут. Не нужно писать свой парсер со своими багами, а нужные значения ищутся одной строчкой на правильном языке XPath. Причем ищутся как угодно - хоть по разделам, хоть по уникальным ID, хоть еще как. Есть, конечно, мазозисты - XPath не знают, бродят по дереву ножками, спотыкаясь и матерясь на каждом шагу, да еще и "парсер" свой собтственный норовят изобрести. Ну так что с такими поделаешь? Просто нужно подождать, пока естественный отбор нас от них избавит.

kelle написал:
Что же касается конфигов в XML - так это же просто мечта, если руки из правильного места растут. Не нужно писать свой парсер со своими багами, а нужные значения ищутся одной строчкой на правильном языке XPath. Причем ищутся как угодно - хоть по разделам, хоть по уникальным ID, хоть еще как. Есть, конечно, мазозисты - XPath не знают, бродят по дереву ножками, спотыкаясь и матерясь на каждом шагу, да еще и "парсер" свой собтственный норовят изобрести. Ну так что с такими поделаешь? Просто нужно подождать, пока естественный отбор нас от них избавит.

Мечта программиста, пишущего софт. Думать не надо, всё сделает парсер.
И страшный сон пользователя, оный софт конфигурируещего. Продираться через этот весь бред. Текстовым редактором, xml редакторы не завезли.
Если пользователей у программы меньше, чем разработчиков модуля чтения конфигов - прекрасно. Для таких программ XML cамое то. Ваш случай?
А если больше - то как-то без XML лучше. Вот, к примеру, nginx обходится своим форматом, намного более удобным. И мускул обходится. И много кто ешё.

nginx, говорите?

Нус, нагуглил первое попавшееся:

http://brainspl.at/nginx.conf.txt

Вот уж бред так бред! Представляю, сколько надо мануала читать, чтобы это все в подкорку въелось, сколько попыток и матерщины. Конфиг файл - с точками с запятой! со скобками фигурными! с ифами и брейками!!!

Нет уж, спасибо, XML как-то попроще будет, знаете. Даже если я ничего не знаю о программе, по ее XML-конфигу хотя бы ясно, что там есть и что чему подчинено. И исправить его я смогу, _с гарантией_ не поломав, потому что правила синтаксиса XML можно пересчитать по пальцам одной руки. Конфиг нгинкса, наоборот, я при первой попытке исправить почти с гарантией поломаю.

kelle написал:
Нет уж, спасибо, XML как-то попроще будет, знаете. Даже если я ничего не знаю о программе, по ее XML-конфигу хотя бы ясно, что там есть и что чему подчинено. И исправить его я смогу, _с гарантией_ не поломав, потому что правила синтаксиса XML можно пересчитать по пальцам одной руки. Конфиг нгинкса, наоборот, я при первой попытке исправить почти с гарантией поломаю.

У нас разное представление о простоте.
По мне
server {
  server_name lib.rus.ec;
  location / {
    root /www;
  }
}

выглядит заметно аккуратнее и удобнее, чем

<SERVER>
  <SERVER-NAME>lib.rus.ec</SERVER-NAME>
  <LOCATION mask="/">
    <ROOT>/www</ROOT>
  </LOCATION>
</SERVER>

Сама идея именовать закрывающие скобки, удваивая практически объём текста, который надо читать, достойна всяческого осуждения. Как и паталогическая любовь к лишним кавычкам.
Чем меньше букв надо прочитать - тем быстрее читается и понимается конфиг, тем проще в нём ориентироваться. Даже странно что такие простейшие вещи приходится разжёвывать.
Если для разметки текста XML неудобен в силу некоторых ошибок реализации не слишком удобен, то для конфигов он непригоден категорически. К счастью, большинство серьёзных программистов это понимают и XML-конфиги встречаются нечасто.

larin написал:
Сама идея именовать закрывающие скобки, удваивая практически объём текста, который надо читать, достойна всяческого осуждения.
Т.е. основной неприятный момент - отсутствие универсального закрывающего тэга "</>"? Хм... согласен, без него неудобно.

Рыжий Тигра написал:
larin написал:
Сама идея именовать закрывающие скобки, удваивая практически объём текста, который надо читать, достойна всяческого осуждения.
Т.е. основной неприятный момент - отсутствие универсального закрывающего тэга "</>"? Хм... согласен, без него неудобно.

Неприятный, но не основной. Не единственный. Да и то - во всех практически языках закрывающая скобка - одни символ. А тут можно было уложиться в три, да и то недодумались. Недоумки.
Много их, неприятных моментов.
Слишком много.
Наберут птушников, сляпают на коленке, а нам мучаться.

чушь какая, во первых определитесь: Вы действительно в "голом" TeX верстаете? Или все таки используете LaTeX? Что в нем неудобного то?

Язык TeX и его компилятор _официально_ заморожены. LaTeX развивается, что конкретно в нем не устраивает не прозвучало... я так полагаю не осилили написание стилевых файлов? Ну так не Вы один не осилили.

(La)TeX с стилем "fb2" лучший fb2 :) Ну зачем реализовать все то что уже реализовано? Конвертацией даже некую совместимость можно обеспечить со старыми читалками. Например в графику засовывать все новые изыски которые старые версии формата не поддерживают.

Ха.

Я еще раз повторяю: я верстал ЧУЖИЕ файлы. И там был полный зоопарк: и все виды латехов, и плейн, и АМС, и черт в ступе. Все это заставлять не просто верстаться, а приводить к общему стилю - врагу не пожелаешь. Стилевик у нас свой был, разумеется, но это не спасает, потому что в ТеХе в принципе нет никакой валидации или инкапсуляции, и никто не может помешать автору написать \documentclass и сразу после начать извращаться с голыми регистрами и низкоуровневыми шрифтами. Что большинство из них и делало.

То, что некоторые части теховского мира "заморожены", типа помогает. Слегка. Представляю, какая была веселуха, когда они еще не были заморожены.

Надо было отдавать пользователям свой стилевой файл с примером скелетона статьи в сборник.

Даже если приходит что то не вразумительное, его можно просто переверстать выкинув все изыски автора. Получить чистый текст элементарно просто.

Мы обсуждаем случай когда книга _целиком_ переводится в электронный вид. Все ужасы описанной не совместимости не очень то актуальны.

Кроме того художественная литература имеет примитивнейшую верстку. А сложные случаи химии и музыки сейчас вообще невозможны к просмотру на читалках имеющих умеренную цену и в имеющихся форматах типа fb2.

kelle написал:
То есть единственный формат, который БОЛЕЕ помехоустойчив, чем XML - это plain text. Все остальные гораздо, гораздо хуже.
Вы ломитесь в открытую дверь.

http://www.jrapublish.com/help/Appendices/Embedding_Metadata.htm

Appendix F - Embedding Metadata in DjVu Files

Introduction

JRAPublish™ introduces a standard architecture for embedding metadata in DjVu files.

Metadata is information about documents, stored in individual data fields. These fields define, classify and categorize the documents. Historically these data fields have resided in databases, apart from the documents themselves. JRAPublish™ allows you to embed the data fields directly into DjVu documents, making them portable. In other words, they "take their metadata with them".

Each document format has its own structure for storing embedded metadata. For example, HTML has Metatags and PDF has the DocInfo field dictionary. The DjVu file format lacks a formal metadata structure, but the open architecture of the DjVu format permits us to create our own standard for metadata storage "inside" DjVu files.

The purpose and benefit of storing metadata in the DjVu file structure is that it will not be lost (left behind) during INDIRECT <-> BUNDLED conversions, as well as when downloading a DjVu file with the DjVu web browser plug-in. Because metadata is an integrated part of the DjVu file, the DjVu file is portable, as it "carries" its metadata with it at all times. As a result, for example, a DjVu file can be downloaded from the web and re-indexed on the desktop or on CD and the metadata will still be present. We call this form of metadata storage "Embedded Metadata".

In our standard architecture, metadata fields are stored with tag delimiters. For example, this document in the DjVu format has title, author and date fields that are expressed and stored as:

teg title teg Metadata Storage for DjVu files teg слешь title teg

teg author teg John Smith teg слешь author teg

teg date teg 20011204 teg слешь date teg

Metadata is stored in our standard architecture at three levels: document-level, shared-page-level and page-level.


Ты не умничай, ты пальцем покажи - где мне в при создании djvu жанр вписать?

ну как то так:

djvutoxml файл.djvu > out.xml

в OBJECT первой странице
METADATA value="xxxxxxx" name="xxx"

djvuxmlparser ./out.xml

теперь если запросить djvutoxml файл.djvu в выводе доступны поля заданные нами в первой странице.

есть тонкость (авторы похоже на эти конкретно утилиты забили откровенно :))) )

работает djvused ./djvu_with_xmp_final.djvu -e ' print-meta'
для того что бы увидеть ключи из коммандной строки
Author "Phil Harvey"
Title "DjVu Metadata Sample"
Subject "ExifTool DjVu test image"
Creator "ExifTool"
CreationDate "2008-09-23T12:31:34-04:00"
ModDate "2008-11-11T09:17:10-05:00"
Keywords "ExifTool, Test, DjVu, XMP"
Producer "djvused"
note "Must escape double quotes (\") and backslashes (\\)"
Trapped "Unknown"
annote "Did you get this?"
url "http://owl.phy.queensu.ca/~phil/exiftool/"

а что бы поставить меняют на -e ' set-meta ./metafile' -s

в metafile

лежит список тегов разделенных от их значений табуляцией
значения могут быть в utf8

то есть допустима строчка в ./metafile:
janre tabляция "Детектив"

Где используется ?

Теги наверное в движках поисковых используются, там обычно все на плугинах.

Страницы

X