Странные люди используют XML
Oct. 23rd, 2007 10:37 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Читаю сейчас конфигурационный файл утилиты rutilt (конфигуришки для WiFi карточек rt73 под Linux).
И вижу там примерно следующее
Не совсем понимаю, зачем ради такого XML городить. Я бы написал так
В данный вариант добавлена информация о том, доступен ли в данной сети SSID для сканирования, которой в оригинале не было. А мне для zero-click solution её надо - должна же программама догадатсья, стоит ли пробовать сконнектиться с этой сетью если скан не показывает её ssid. Ну и приоритеты сетей - в каком порядке пробовать коннектиться
Вообще, я неоднократно сталкивался с ситуацией, когда люди, пытающиеся разработать какую-то DTD совершенно не умеют пользоваться выразительным богатством XML. Наиболее частая проблема - та же, что у автора rutilt - пихают всю информацию в содержимое элементов, не задумываясь о том, что бывают ещё и атрибуты. Попадалось и обратное - что человек в упор не понимал концепции PCDATA и боялся писать текст между тэгами. Всё пихал в атрибуты.
Я, конечно, не буду утверждать что я такой весь из себя большой спец по XML. Я схем-то за свою жизнь сдизайнил не более десятка (правда, были среди них весьма развесистые).
Ну а за использование перечислимых числовых значений в текстовом конфиге, особенно когда в интерфейсе пользователя всё равно исполььзуются для этих сущностей строковые названия, программиста надо пороть.
И вижу там примерно следующее
<Profile Name="Wagners_home"> <SSID>Wagners_home</SSID> <Mode>2</Mode> <Channel>1</Channel> <Encryption> <Type>1</Type> <Key>много шестнацатиричных цифр</Key> <Key></Key> <Key></Key> <Key></Key> <AuthenticationType>0</AuthenticationType> <DefaultKey>0</DefaultKey> </Encryption> <IPSettings> <How>1</How> </IPSettings> </Profile> d<Profile Name="Cryptocom"> <SSID>спрятано</SSID> <Mode>2</Mode> <Channel>11</Channel> <Encryption> <Type>3</Type> <Key>много шестнадцатиричных цифр</Key> <Key></Key> <Key></Key> <Key></Key> <AuthenticationType>2</AuthenticationType> <DefaultKey>0</DefaultKey> </Encryption> <IPSettings> <How>1</How> </IPSettings> </Profile>
Не совсем понимаю, зачем ради такого XML городить. Я бы написал так
<Profile priority="0" Name="Wagners_home"> <SSID visibility="visible">Wagners_home</SSID> <card-settings mode="managed" channel="1" /> <Encryption type="wep" authentication-type="open"> <key number="0" default="yes" encoding="hex">много шестнадцатиричнх цифр</key> </Encryption> <IPSettings type="dhcp" /> </Profile> <Profile priority="1" Name="Cryptocom"> <SSID visibility="hidden">спрятано</SSID> <card-settings mode="manged" channel="11"/> <Encryption type="TKIP" authentication-type="WPAPSK"> <key number="0" default="yes" encoding="ascii">много букв</key> </Encryption> <IPSettings type="dhcp" /> </Profile>
В данный вариант добавлена информация о том, доступен ли в данной сети SSID для сканирования, которой в оригинале не было. А мне для zero-click solution её надо - должна же программама догадатсья, стоит ли пробовать сконнектиться с этой сетью если скан не показывает её ssid. Ну и приоритеты сетей - в каком порядке пробовать коннектиться
Вообще, я неоднократно сталкивался с ситуацией, когда люди, пытающиеся разработать какую-то DTD совершенно не умеют пользоваться выразительным богатством XML. Наиболее частая проблема - та же, что у автора rutilt - пихают всю информацию в содержимое элементов, не задумываясь о том, что бывают ещё и атрибуты. Попадалось и обратное - что человек в упор не понимал концепции PCDATA и боялся писать текст между тэгами. Всё пихал в атрибуты.
Я, конечно, не буду утверждать что я такой весь из себя большой спец по XML. Я схем-то за свою жизнь сдизайнил не более десятка (правда, были среди них весьма развесистые).
Ну а за использование перечислимых числовых значений в текстовом конфиге, особенно когда в интерфейсе пользователя всё равно исполььзуются для этих сущностей строковые названия, программиста надо пороть.
no subject
Date: 2007-10-24 06:07 am (UTC)тексту ? буквам ?
собственный формат! - вы имеете всякий раз, когда "используете" XML - в любом случае вы создаёте свой формат. ну внешне он будет типа как и предыдущий, ичо ? кому это интересно если парсер вы всё равно будете делать новый.
Ну есть одна вещь, очень-очень-очень общее правило написания парсеров, и даже скелет который работоспособен. - это хорошо. Но это настолько общее и потому малое правило, что ради него не надо было городить такого страшного монстра, да ещё с таким уродским стилем записи как тэги.
no subject
Date: 2007-10-24 06:17 am (UTC)Новый парсер я делать не буду. Я возьму TXMLDocument (Delphi) и он сам распарсится. А потом я уже пройду по узлам и преобразую их так, как надо, это на порядок проще и надёжнее, чем писать свой парсер.
>не надо было городить такого страшного монстра, да ещё с таким уродским стилем записи как тэги.
Наверное. Но альтернатива-то какова?
no subject
Date: 2007-10-24 06:55 am (UTC)Вот это и есть кастомный парсер.
no subject
Date: 2007-10-24 07:18 am (UTC)Главное - что я XML могу потом смотреть XMLNotePadom. И другой человек, который знает стандарт XML, поймёт и сможет отредактировать файл без подготовки. Короче, стандарты рулят.
no subject
Date: 2007-10-24 07:24 am (UTC)Вот примерно так рассуждал и автор рассматриваемой программы. Только вот беда, объект в ОО языке это модель реального явления в предметной области. И сериализованное XML представление - тоже модель. Получается модель модели. Что приводит к потере наглядности, а то и к искажениям смысла из-за привноса на первом уровне неких артефактов.
Меня курсе на третьем-четвертом на защитах курсовых сильно пинали за то, что я путал артефакты моделирования с понятиями предметной области. Научили.
no subject
Date: 2007-10-24 07:36 am (UTC)1. Сохранить данные/настройки между запусками программы.
2. ИНОГДА залезть туда и поправить стандартными средствами (напр., XMLNotePad).
no subject
Date: 2007-10-24 08:28 am (UTC)А "семантику никуда не уберешь" и "стандартная процедура сохранения объекта в XML" - почти противоречащие друг другу вещи. Стандартный способ сохранения объекта в XML, способный сохранить туда любой объект, приведет к XML, который невозможно будет отредактировать XMLNotePad'ом. Ну, то есть в теории-то возможно, но на практике в нем невозможно будет разобраться вручную.
no subject
Date: 2007-10-24 08:30 am (UTC)no subject
Date: 2007-10-24 09:21 am (UTC)А я, вообще-то, о порке программистов за XML. О том, что перед поркой надо бы назвать альтернативу.
no subject
Date: 2007-10-24 11:48 am (UTC)А про порку - альтернативу я назвал. Разрешите приступить к порке?
no subject
Date: 2007-10-24 12:17 pm (UTC)А почему он не аналог, если позволяет нормально работать?
>альтернативу я назвал. Разрешите приступить к порке?
Попробуйте. Но эту альтернативу я назвал ещё раньше Вас - и признал в данном случае неподходящей.
no subject
Date: 2007-10-24 01:24 pm (UTC)Потому что пристойного текстового редактора Микрософт еще не освоил.
Я назвал две.
no subject
Date: 2007-10-24 01:24 pm (UTC)no subject
Date: 2007-10-24 01:40 pm (UTC)И ini альтернатива только для случая из самого поста и ему подобных. А пороть собираются за любой XML - извольте альтернативу для любого случая.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2007-10-24 07:14 am (UTC)Или определить десяток процедур на tcl, которые делают то что надо с тем что надо, и конфиг парсить интерпретатором Tcl.
В моей практике практически никогда не получалось так, чтобы XML DOM удавалось использовать НЕПОСРЕДСТВЕННО в качестве внутренней рабочей структуры данных программы. Ни исходную, считанную из файла, ни преобразованную стандартным (каким-нибудь\ xslt-шным) способом. А раз так - всё равно будет кастомный парсер. Ну будет на входе у него не текст, а DOM. Какая нафиг разница.
no subject
Date: 2007-10-24 07:27 am (UTC)Прикол в том, что у меня частично так и есть. Читаю вывод чужой проги и храню его в XMLNod'ах. Достаточно удобно.
>Ну, например, можно лисповскую нотацию взять.
Да, но чем она принципиально отличается от XML? По-моему, только распространённостью.
>Да ещё read macros туда навешать, чтобы юзера скобочками не пугать.
Не понял... Я не знаю, что значит read macros, но, видимо, вместо того, чтобы изучить за 10 минут хоть сколько-то распространённый синтаксис Лиспа он должен будет те же 10 минут изучать синтаксис моего макроса? Нет, такой
хоккейлисп нам не нужен :-)no subject
Date: 2007-10-24 07:43 am (UTC)Нафиг разница в количестве строк кода и возможности открыть более-менее стандартными средствами. Стандарты рулят.
no subject
Date: 2007-10-24 08:06 am (UTC)no subject
Date: 2007-10-24 08:49 am (UTC)no subject
Date: 2007-10-25 12:00 am (UTC)WBR, Zubok
no subject
Date: 2007-10-25 06:50 am (UTC)Я -- как раз о том, что кому не нравятся лисповские скобочки -- можэт взять любой другой стиль s-expressions.
no subject
Date: 2007-10-25 12:14 am (UTC)Да не, Виктор. Тогда придется для чтения этого фала уже саму реализацию Common Lisp применять, чтобы read macro пережевать.. Никто на такое не пойдет. Я пишу на Common Lisp и, разумеется, конфигурационные файлы делаю на нем же. Другого и быть не может. Но как только выходим за границы Common Lisp (Си, например), то лисповская нотация s-выражений становится просто голым синтаксическим деревом, для которого придется парсер писать или что-то вроде guile или librep присобачивать (некоторые так и делают). Возможно, это дерево кому-то будет попроще руками править, а кому-то и сложнее (особенно без применения того же emacs, например). Нельзя сказать, что это будет принципиально лучше XML. Можно будет сказать, что равномощно, чуть более понятнее для чтения и правки. См. тот же SXML (ссылка выше).
WBR, Zubok
no subject
Date: 2007-10-24 07:14 am (UTC)no subject
Date: 2007-10-24 08:49 am (UTC)Хух. Виктор, можно с утра пораньшэ без ужасов?
no subject
Date: 2007-10-24 09:32 am (UTC)