|
Как лучше реализовать проверку структуры 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) я думаю, что суть ты поймешь - есть описание ошибки и строка и позиция в строке
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |