Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2014, 08:23   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию Пару вопросов по XML

Плаваю в этом направлении, поэтому возникло несколько вопросов:
1. Что годного можно почитать, желательно с примерами использования для Делфи. Интересуют в основном некоторые готовые рецепты, шаблоны использования и пр. в том же духе.
2. У меня имеется некоторое описание типовой структуры набора данных. Как составить схему для проверки файлов на соответствие нужному мне формату.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 26.03.2014, 08:28   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Utkin, ничё не понял. Нужен парсер XML?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.03.2014, 08:53   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Нет, парсер я и сам набросаю. Вот xml-ки имеют некоторую структуру - ну допустим, вот есть избитый учебный пример с каталогом книг.
Там обязательно прописывается автор, его инициалы, потом название книги, год издания, ISBN и пр. параметры.
Так вот как отследить корректность XML-файла? Вот например, дают xml-ку, а в ней для одной книги полностью пропущен автор. Для отслеживания используются схемы. Есть специальные сервисы/программы/функции - валидаторы. С помощью схемы (своего рода шаблон структуры) можно не разбирая через парсер файл, проверить соответствует ли внутренняя структура файла заданным требованиям. Также можно допустим отслеживать версии формата, каталог ведь можно составлять по-разному или требования изменились, введены новые поля, убраны старые и т.д.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 26.03.2014, 09:08   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Я поступил так. Взял "идеальный шаблон" необходимой мне структуры и сделал проверку полей. Если поле имеется, включаю в дерево его знаение. Если поле отсутствует, оно всё равно включается в дерево, но с пустым значением.
Таким образом, по наличию информации в полях, проверяется корректность заполнения файла значениями.
У XML, есть ещё одна интересная особенность. Даже не зная "идеальный шаблон", его можно получить из самого файла, путём глобального анализа его полей.
Вот, кусок файла.

Код:
<?xml version="1.0" encoding="windows-1251"?>
<recipes host="www.biz-for.ru">
	<group name="Первые блюда">
		<subgroup name="Бульоны">
		</subgroup>
		<subgroup name="Молочные">
		</subgroup>
		<subgroup name="Разные">
			<recipe name="Молочные реки" kitchen="Экзотическая" portions="0" calories="0" time="">
				<description url="/supy/raznye/molochnye-reki/index.htm">Суп</description>
				<ingredient amount="0,5" unit="ч.стак">Масло растительное</ingredient>
				<ingredient amount="2" unit="ч.стак">Молоко</ingredient>
				<ingredient amount="4" unit="шт">Морковь</ingredient>
				<ingredient amount="6" unit="ст.л">Мука пшеничная</ingredient>
				<ingredient amount="1" unit="кг">Помидоры</ingredient>
				<ingredient amount="2" unit="чай.л">Сахар песок</ingredient>
				<ingredient amount="" unit="">Соль</ingredient>
			</recipe>
		</subgroup>
		<subgroup name="Пюре">
		</subgroup>
	</group>
</recipes>
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 26.03.2014 в 09:23.
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.03.2014, 09:47   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно проверить на соответствие схеме используя MSXML. Мне не понравилось, использую свой велосипед - держу иерархическую таблицу описания, в которой кроме всего прочего еще ожидаемые типы данных и предопределенные значения. Вот по ней проверяю и привожу к нужным типам данные. Ребята, от которых получаю редиски - имеют нехорошую привычку периодически без предупреждения вносить изменения в схему. Тогда и начинаются пляски с бубном
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.03.2014, 09:52   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

XML Schema (XSD) и Document Type Definition (DTD) дклайте, по ним валидировать
eval вне форума Ответить с цитированием
Старый 26.03.2014, 10:35   #7
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Вот например, дают xml-ку, а в ней для одной книги полностью пропущен автор.
Я бы сделал по факту парсинга, если при разборе xml-ки нет обязательного поля, кинулся бы эксцепшеном.
the_deer_one вне форума Ответить с цитированием
Старый 26.03.2014, 10:55   #8
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

the_deer_one

Я бы сделал по факту парсинга, если при разборе xml-ки нет обязательного поля, кинулся бы эксцепшеном.

а если поле есть, но не того типа? или в неправильной последовательности? или должно быть одно, а на самом деле два? или не выполнено требование минимальной длины? или поле ссылается на ID, которого нет в документе?

xml схема как раз придумана для тех, кто кому нафик не уперлись все эти горы ручных проверок. хотя, конечно можно продолжать быть трактористом :lol:
Rififi вне форума Ответить с цитированием
Старый 26.03.2014, 11:54   #9
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
а если поле есть, но не того типа?
Такого не может быть т.к. все поля строковые, а приведение к необходимому типу, делается в самой программе.
Цитата:
или в неправильной последовательности?
Для XML-ок пооследовательность без разницы. Если поле есть, то оно есть.
Цитата:
или должно быть одно, а на самом деле два? или не выполнено требование минимальной длины? или поле ссылается на ID, которого нет в документе?
Эти проверки, делаются при создании XML-ки. Если, конечно, её не криворукие создавали.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.03.2014, 11:59   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Эти проверки, делаются при создании XML-ки. Если, конечно, её не криворукие создавали.
Вы не видели те XML, которые мне приходится обрабатывать. Казалось бы от солидных организаций
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пару вопросов... qewertyns Помощь студентам 6 10.12.2012 00:43
Пару вопросов Syltan Свободное общение 2 19.10.2009 01:45
Пару элемментарных вопросов Hanickii Общие вопросы C/C++ 15 13.09.2009 19:13