Имя: Пароль:
1C
1С v8
Как лучше реализовать проверку структуры XML
,
0 Антиквар
 
05.04.14
19:46
Всем привет!

Есть 1C 8.1. и 1С 8.2. (не принципиально что использовать, но вдруг в 8.2. есть что-то полезное для XML, чего нет в 8.1.)

Есть некие файлы формата XML. Требуется эти файлы периодически загружать в базу, предварительно проверив структуру XML. Структура XML описана в ворде в виде таблички. Все тэги и элементы расписаны, обязательность и тип данных установлены.
Формат XML периодически претерпевает изменения.

Вопрос: как лучше реализовать проверку структуры XML. Должна соблюдаться последовательность элементов (тэгов), а также тип данных. Ну тип данных я думаю будет проверяться уже при непосредственной загрузке этих данных в базу, а вот предварительная проверка структуры?
Я думал делать либо макет со структурой файла, либо справочник в 1С с этой структурой. Причем макет думаю предпочтительней, т.к. формат XML может меняться.
Но вот мне кажется, что есть какие-то более прогрессивные средства. Знаю, что есть специальные схемы описания формата, что на основании их как-то формат проверяется. Например для сдачи 2-НДФЛ есть описание формата XML, а также файл-шаблон (может не так называется правильно), на основании которого наверное спец. программы в налоговой как раз и проверяют структуру, да и тот же CheckXML.
Подскажите, кто занимается такими вещами, как лучше реализовать. Читал сейчас про всякие XDTO-фабрики, объекты DOM,... что-то ничего не понял, да и возможно это не то что мне надо, во всяком случае надеюсь на это :)
Вообще с разбором XML проблем нет, но вот первый раз встала задача проверки структуры.
Или легче не заморачиваться, а сделать макет в 1С со структурой файла, и сверять с ним?
1 Антиквар
 
05.04.14
20:14
Т.е. главный мой вопрос в том, возможно ли создать файл-описание структуры моего XML, чтобы потом я мог на основании его проверять файлы XML, либо чтоб 1С могла сама проверить файл XML по этому файлу-описанию? Я видел так называемые "XML Schema", но не понял как это использовать. Пока мне кажется проще и очевиднее сделать в 1С макет со структурой, но может это прошлый век уже ? :)
2 Wobland
 
05.04.14
20:24
я читал xml-ку по приложенной схеме. рыться в бардачке?
3 Ksandr
 
05.04.14
20:36
Берешь XSD создаешь фабрику, скармливаешь ей файл получаешь объект
4 Антиквар
 
05.04.14
20:49
(2) Схемы не существует, есть просто описание в ворде, как приложение к приказу. Если схему самому создавать - это сложно? Но формат большой, таблица на 12 листов в ворде.
Если не сложно, поделитесь как это делается, может приду к такому решению.
(3) XSD - это как раз файл-описание структуры? Но у меня его нет, его вообще нет. Про остальное вообще не понял, какой объект на выходе я получаю?
5 Wobland
 
05.04.14
20:52
ты непременно придёшь к мысли о том, что нормальная схема (xsd) сильно лучше каракулей на листочке (word). изучай
6 Wobland
 
05.04.14
20:53
кстати, свою схему я нашёл прямо в xml. оказалась немного сложнее, чем ожидал
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0";
7 Asmody
 
05.04.14
21:01
(4) описание есть - ну так создай схему, это несложно
8 Антиквар
 
05.04.14
21:26
(5) >> ты непременно придёшь к мысли о том, что нормальная схема (xsd) сильно лучше каракулей на листочке (word)
Но дело в том, что при изменении формата я буду получать тоже описание в табличке ворда :) Т.е. схему создавать всегда самому. Поэтому данная процедура имеет смысл только в том случае, если так намного удобнее реализовать проверку структуры.
(6) Имеешь ввиду, что в заголовке XML указана ссылка на схему? У нас заголовок обычный "<?xml version="1.0" encoding="windows-1251"?>" Или я не понял о чем речь :)
(7) Как создавать схему - нужно ещё учиться. И даже научившись, мне кажется, что перенести структуру в макет 1С всё-равно проще, чем создавать схему XSD. Но я так понимаю, что зато проверку структуры со схемой можно как-то автоматизировать? Т.е. потом процесс проверки и загрузки XML-файлов будет проще? Я просто не представляю пока, что делать с созданной схемой, как её использовать для проверки структуры файлов. Соответственно боюсь ввязаться в это дело, потеряв кучу времени, и не получив ожидаемого. Поэтому вопрос в том, оправдан ли этот "геморой" (во всяком случае для меня пока геморой).
--------------------------------------------------
Ещё поясню: форматы XML разрабатываются не мной, а гос.органами на региональном и федеральном уровне. Никаких схем у меня никогда не будет, т.к. они их не делают. Только если я сам, прочитав описание формата, буду эти схемы создавать. Но поясните, как их потом использовать? :)
9 Антиквар
 
06.04.14
12:11
up
10 SleepyHead
 
гуру
06.04.14
18:36
"Ещё поясню: форматы XML разрабатываются не мной, а гос.органами на региональном и федеральном уровне. "

Что за файлы? На примере отчетов в ПФР и НДФЛ - схемы есть, и они публикуются.
11 SleepyHead
 
гуру
06.04.14
18:38
Наверняка есть схемы, просто у вас их почему-то нет.
12 Антиквар
 
07.04.14
00:10
(10) Это файлы обмена между медицинскими организациями и ФОМСом, а также между мед. организациями и страховыми. Ну в общем отчетность по больницам и прочим мед. учреждениям.
13 Vladuha
 
07.04.14
10:02
(0) XSD тебе в помощь, для начала сгенерируй на основе xml, таких сервисов навалом, например http://www.freeformatter.com/xsd-generator.html
14 Антиквар
 
07.04.14
14:13
(13) Спасибо. Т.е. я могу сгенерировать XSD по XML, но поскольку ни один XML не включает полностью весь формат (слишком много различных частных случаев), то потом вручную надо доработать XSD.

Ну хорошо, допустим я создам XSD. А что дальше с ним делать, почему с ним проще проверить структуру XML? Есть какие-то стандартные команды в 1С? Не поделитесь кусочком кода, как осуществляется проверка XML на основании XSD. В чем удобство?
15 Maxus43
 
07.04.14
14:16
(14)
ОбъектXDTO (XDTODataObject)
Проверить (Validate)
Синтаксис:

Проверить()
Описание:

Проверяет данный объект на соответствие модели XDTO.
16 Антиквар
 
07.04.14
14:29
(15) Спасибо, но видимо кроме синтаксис-помощника мне надо что-то ещё почитать, чтобы понять хоть что-то :)
17 Леша1с
 
07.04.14
14:30
(14) вам предлагают сначала разработать ключ к вашему файлу XML.
Если разработаете схему - всегда можно найти, соответствует ли данный XML файл тому, что ожидается (схеме XML).
Тут вообще все сугубо-ручное.
Ручная обработка, "ручное" чтение...
18 Maxus43
 
07.04.14
14:32
что то типа
19 Maxus43
 
07.04.14
14:33
(18) +
ФабрикаXDTO (XDTOFactory)
На основе набора схем XML
Синтаксис:

Новый ФабрикаXDTO(<НаборСхемXML>, <Пакеты>)

Там потом можно создавать объекты фабрики на основе схем и писать их в XMl. Перед записью можно дополнительно юзать Проверить() на фабрике, оно проверит на валидность файла xml схеме xml
20 Maxus43
 
07.04.14
14:36
для простоты xdto пакет можно в конфигурации добавить (импортировать схему xml, чтоб файлики не искать потом со схемой)
21 Зойч
 
07.04.14
14:49
Все равно файл ворд нужно будет перевести в машиночитаемый вид.
Естественно выбрать для этого уже известный все xsd формат
22 Vladuha
 
07.04.14
15:13
(14) xsd - это по сути схема, описывающая струтуру xml-документа, т.е. с помощью xsd как раз выполняется проверка xml-документа на "правильность". Грубо говоря, загрузил схему, подсунул xml-документ, вызвал проверку, получил либо либо ОК (документ валиден), либо ошибку (xml не соответствует шаблону). В 1С есть такое понятие, как xdto. Это 1Совский механизм для работы со схемами. Вот посмотри, например на инфостарте http://infostart.ru/public/167459/
23 Зойч
 
07.04.14
15:15
Кстати как вариант можно написать обработку конвертор ворд > xsd
24 Леша1с
 
07.04.14
15:21
(22) XDTO - это механизм доступа (работы) с XML.
Это чуть переделанный и переобозванный (а как же!) SOAP.
25 Vladuha
 
07.04.14
15:26
(24) Согласен, не совсем верно написал.
26 Антиквар
 
07.04.14
16:18
Спасибо за участие в вопросе!
Что-то проясняется.

(21) >> Все равно файл ворд нужно будет перевести в машиночитаемый вид.
>> Естественно выбрать для этого уже известный всем xsd формат

Вот для меня это и неестественно как раз :)
Я понимаю, что формат нужно перевести в машиночитаемый. Я и хотел использовать для этого объект конфигурации "Макет". И при загрузке XML проверять на соответствие моему макету. Т.е. самому писать программный код проверки.
Я правильно понимаю, что лучше сделать не Макет, а файл XSD, и тогда проверку мне писать не надо, 1С будет выполянть её сама по моему шаблону XSD. Так?

(22) >>загрузил схему, подсунул xml-документ, вызвал проверку, получил либо либо ОК (документ валиден), либо ошибку (xml не соответствует шаблону).

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

Если я сделаю свой макет-шаблон и сам буду проверять, то я смогу любые ошибки обнаружить. А вот с помощью встроенных средств через XSD вдруг так получится, что валидность сработает при ошибке например "Неверный код". Можно ли такую проверку заложить в структуру XSD...
27 Vladuha
 
07.04.14
16:28
(26) для примера тебе текст ошибки:
Cvc-complex-type.2.4.a: Invalid Content Was Found Starting With Element 'author1'. One Of '{author, Title}' Is Expected.. Line '3', Column '18'.
28 Антиквар
 
07.04.14
16:30
(22) Спасибо за ссылку, обязательно прочту.
29 Vladuha
 
07.04.14
16:31
+(27) я думаю, что суть ты поймешь - есть описание ошибки и строка и позиция в строке