metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-03-31 12:27 pm

О чтении и понимании

Нужно обмениваться данными с другой программой. Сделал для ее разработчиков документ с описанием формата на базе CSV, в котором есть такие строки:

"дата - формат dd.mm.yyyy, с выводом незначащих нулей."

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

Присылают файл с такими строками:
"10780;11077112;31.03.2009;1.04.2009;1014"

Вопрос, что я объяснил не так?

[identity profile] metaclass.livejournal.com 2009-04-01 10:48 am (UTC)(link)
Так об этом речь и идет. Единственное, что похоже по номерам их таки не вытягивают, а то ведь комментарий всунул в середину - и капец номерам.

[identity profile] sergiej.livejournal.com 2009-04-01 10:53 am (UTC)(link)
:)

[identity profile] sergiej.livejournal.com 2009-04-01 10:56 am (UTC)(link)
Так кто его всунет если он не будет разрешён схемой в этой последовательности?

[identity profile] metaclass.livejournal.com 2009-04-01 11:02 am (UTC)(link)
Только не говори мне, что наличие комментариев тоже определяется схемой. Комментарий он же на то и комментарий, чтобы парсеру было пофиг.

[identity profile] sergiej.livejournal.com 2009-04-01 11:03 am (UTC)(link)
А пардон, правильный коментарий просто не существует, но тогда и проблемы то нет, он не вмешивается в последовательность.

[identity profile] metaclass.livejournal.com 2009-04-01 11:16 am (UTC)(link)
Вмешивается. В DOM модели он точно присутствует за каким-то хреном.

[identity profile] sergiej.livejournal.com 2009-04-01 11:22 am (UTC)(link)
Блин, ну да, в DOM есть всё, до последней запятой.

[identity profile] volodymir-k.livejournal.com 2009-04-02 09:10 pm (UTC)(link)
Для Вас XML это вид реляционной БД. Это в общем случае неверно -- используется Builder pattern, то есть это сложные и нерегулярные структуры данных. Понятно, что замапить любую структуру данных в реляционную можно, просто потом довольно трудно использовать SQL. Попробуйте на SQL реализовать какие-нибудь самобалансирующиеся AVL trees. Пупок развяжется.

Для решения этой проблемы и придуман DTD / XSD. Последний -- достаточно сатанинский "а-ля функциональный" язык. Например, не всякий XSD можно перевести в DTD. У XSD есть диалекты и т.д. Валидация это серьёзная тема, если Вы не понимаете её -- то скорее это Вы неправы, чем сотни опытных людей из всяких комитетов.

Для обработки регулярных структур тупой поиск по имени не подходит. Скажем, у элемента config-array будут идти последовательности из трёх строчек a1/b0/z0, не объединённые в свой элемент, их надо класть в массив. Тогда обработчик SAX должен третий элемент z0 считать разделителем объектов.

Примерно такой подход в Яве реализован в commons-digester. Мощнейшая штука. Даёте XML описание, получаете программу парсания XML в любой ВАШ объект.

Page 3 of 3