пятница, 21 июня 2013 г.

Не про Delphi. Но - "наболело". Мифы об XML и его "гибкости" и "универсальности"

За мою ДОЛГУЮ практику обработки документов я видел МНОГО людей которые приходили примерно с одним и тем же вопросом - "а вы можете вылить нам документы без потери качества и информации в XML?"

И ответ был - "да конечно можем. Вам всё равно в какой именно XML? Конкретная схема и DTD вас не волнуют?".

Люди обычно УДИВЛЯЛИСЬ и говорили - "да конечно - НЕ ВОЛНУЕТ, ведь XML - МОЖЕТ ВСЁ". (Иногда - спрашивали - "а что такое DTD").

Людям выдавали комплект XML "на пробу".

Некоторые - просто уходили.

Некоторые приходили и говорили - "ну это не то, что мы имели в виду".

Дальше начинались расспросы. Оказывалось, что люди НА САМОМ деле имели в виду КОНКРЕТНУЮ "реализацию" XML - конкретную схему или DTD (ну я - по-дилетантски объясняюсь). То ли это XMLDoc, то ли DocXML, то ли OpenDoc, то ли DocOpen.

И тут - ВСЁ ВСТАВАЛО на свои места! XML - это конечно КРУТО и ГИБКО. И "очень на волне". Но! МНОГИЕ под термином XML ПОДРАЗУМЕВАЮТ - "конкретную схему".

И если кто-то и слышал про XSLT. То - НЕМНОГИЕ. И опять же - если кто и слышал, то "в рамках КОНКРЕТНОЙ схемы".

Это я опять же - "по-дилетантски".

Это я всё к чему? XML - это конечно "круто и гибко", ну примерно как CORBA с её "динамическим получением описания интерфейсов".

Только - "совсем гибко и совсем круто" - ДАЛЕКО не МНОГИЕ могут оценить.

Ну ПРАВДА! Что делать с ОБЪЕКТОМ, интерфейс которого "известен только динамически"? Ну КРУТО - ДА! Никто - не спорит. НО ЧТО ДЕЛАТЬ? Разве только - "скрипты писать". Это - ДА. Это - можно.

И к чему я это?

Просто "серебряной пули нет".

МНОГИЕ слышали про XML. МНОГИЕ его используют. В СВОИХ нуждах.

Это - ДА - "круто и гибко".

Но ДАЛЕКО НЕ ТАК "круто и гибко" - чтобы "придти к другу" и сказать ему - "Эй Buddy - а вылей ка мне из своего проприетарного формата в XML".

Buddy - он конечно - клёвый парень - он выльет! Не вопрос!

Но ДАЛЕКО НЕ ФАКТ, что он выльет РОВНО ТО, что вы хотели.

Нет "серебряной пули". XML - "на вершине айсберга" - это не более чем - "набор стандартизированных скобочек".

Надеюсь, что я не утомил вас своим занудством...

P.S. я - дилетант в XML, но я, к сожалению, ПРОФЕССИОНАЛОВ ВЫСОКОГО РАНГА - и не встречал. Наверное - не повезло...

P.P.S. просто ещё я встречал такие вопросы - "зачем хранить данные в проприетарном формате, когда можно хранить в XML". Так и хочется спросить в обратную сторону - "А ЗАЧЕМ?". Чтобы данные выросли в 1.5-2 или даже ТРИ раза? СТО Гигабайт давайте умножим на 1.5. Что получим? То же относится и к вопросу - "а почему бы ТОТАЛЬНО не перейти на UNICODE?" Тоже хочется спросить - "а ЗАЧЕМ?" Чтобы данные выросли в ДВА РАЗА? ПРОСТО так... Ну или в 1.5 в случае с UTF-8. ЗАЧЕМ? Ради мнимой "крутости и гибкости"? А почему не пойти другим путём? Не хранить UNICODE только там где он РЕАЛЬНО НУЖЕН? Ведь - ЭТО ПРОСТО.

Простите за моё занудство... Лет через 5 - оно реально только ЗАНУДСТВОМ и покажется. Ведь - мощности и хранилищ и интернета - только растут...

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

  1. 1. Профессионалы в работе с XML есть, но они ужасны :) Нет, правда, разобраться что делается в XSLT размером в мегабайт становится уже проблематично. Я видел как с помощью него генерируются HTML-страницы. Для мобильной версии одни преобразования, для обычной - другие, для печатной - третьи. На мой взгляд успешное применение - API. Вам вернули какой-то ответ, можете прогонять через XSLT, парсить SAX/DOM... Но мне больше нравится JSON - он короче и нагляднее.
    2. Наверно, Вы имели ввиду не "проприетарном", а "бинарном" формате? Хранение данных с каждым годом дешевеет. Если плюсы обработки перевешивают цену хранения, то почему бы и не XML? Реляционные БД не совсем подойдут, JSON/YAML - тоже не то, единственно что-нибудь типа Cache или couchDB, но и то местами придётся извращаться.
    3. По поводу UNICODE - здесь Вы не правы. Дайте догадаюсь, Вы работаете только с Windows? И не напрягает метаться между CP-866, WIN-1251 и UNICODE? Должен остаться только один! :) В мире *nix UNICODE - стандарт! В Python3 всё юникодное, в Ruby изначально так и было, даже Microsoft переходит на него. А почему? Потому что запарил этот ад с кодировками! Пришла строка с внешнего сервиса и чего с ней делать? Как пользователю показать? Попробуйте пописать на PyQt под винду или обработать odt(кстати, XML :) ) php-скриптом - почувствуете все тонкости :)

    Прошу прощения за столь подробный комментарий, но меня уж больно задело :)

    ОтветитьУдалить
    Ответы
    1. 2. Сказал что хотел сказать. "Проприетаром". Ну и "бинарном". Да. "Хранение данных с каждым годом дешевеет." :-) Пока есть "десктопные" пользователи - это - не аргумент.
      3. Не только Windows. "Попробуйте пописать на PyQt под винду или обработать odt" ;-) Кто я по вашему такой, чтобы бросаться и пробовать? :-) "Пришла строка с внешнего сервиса и чего с ней делать?" - а вот тут вы путаете "тёплое с мягким" :-) "внешний сервис" и "хранение" - "две большие разницы".

      Удалить
    2. 2. Что-то не понял про десктопных пользователей, можете пояснить?
      3. "Кто я по вашему такой, чтобы бросаться и пробовать?" - вот видите, Вы никогда не сталкивались с этой проблемой, а судя по цитате, и не сталкнётесь. WINDOWS-1251 Вам хватает с головой. "Внешний сервис" и "хранение" может быть одним и тем же. Как пример - MySQL: хранит? а то! внешний сервис? ага! А уж сколько её движки кодировок поддерживают :)

      Удалить
    3. "вот видите, Вы никогда не сталкивались с этой проблемой, а судя по цитате, и не сталкнётесь. WINDOWS-1251 Вам хватает с головой."

      Поспешный вывод. Ага. Я вообще-то в основном обработкой текстов занимаюсь :-)

      Удалить
    4. " Как пример - MySQL: хранит? а то! внешний сервис? ага! А уж сколько её движки кодировок поддерживают :)"

      И что вы этим хотели сказать?

      Удалить
    5. "Что-то не понял про десктопных пользователей, можете пояснить?"

      Увеличение объёма данных - их отнюдь не порадует.

      Удалить
  2. А какой именно обработкой текстов Вы занимаетесь? Вернее, со сколькими кодировками работаете?
    Про MySQL я хотел сказать, что "внешний сервис" и "хранение" - очень часто одна и та же штука.
    Да какая им разница?! Цены на винты стабильно уменьшаются, и хранить 10Gb или 30 разницы нет.

    ОтветитьУдалить
    Ответы
    1. "Да какая им разница?! Цены на винты стабильно уменьшаются, и хранить 10Gb или 30 разницы нет."

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

      Удалить
    2. "Вернее, со сколькими кодировками работаете?"

      А какая разница? Главное, что не с одной.

      Удалить
    3. "Посмотрел бы я на это. Как вы бы это до пользователей доносили бы." - да про это как-то все тихо молчат :) Вы смотрели сколько весит Win7, а chrome, а новенький фильм в BD? Место стало дешёвым, и оно хорошо масштабируется горизонтально.
      Кстати, о UTF-8 - http://habrahabr.ru/post/82426/. И это статья 2010 года, советую прочитать также и коментарии.

      Удалить