:: Visual Foxpro, Foxpro for DOS
XML Adapter и две схемы XSD
valshebniksta
Автор

Сообщений: 5
Дата регистрации: 06.07.2017
Коллеги, есть две схемы XSD
В одной схеме описаны типы данных (data_types.xsd), в другой (FSFM550P.XSD) соответственно - сама структура XML
И указано в схеме FSFM550P.XS - что <xs:include schemaLocation="data_types.xsd"/>

Не подскажите, есть ли возможность загружать XMLAdapterom эти две схемы и обрабатывать входной XML файлик?
Ratings: 0 negative/0 positive
Re: XML Adapter и две схемы XSD
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
И почему решили, что надо грузить обе схемы?


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: XML Adapter и две схемы XSD
valshebniksta
Автор

Сообщений: 5
Дата регистрации: 06.07.2017
потому что в схеме FSFM550P.XSD нет типов данных.
Все в другой схеме: data_types.xsd

И когда грузишь FSFM550P.XSD - то пи попытке обработать файл XML получаешь ошибку: xml schema is too complex

К примеру в FSFM550P.XSD: <xs:element name="НомерЗаписи" type="ИдентификаторЗаписи">
а вот ИдентификаторЗаписи - опиание лежит уже в data_types.xsd
<xs:simpleType name="ИдентификаторЗаписи">
<xs:annotation>
<xs:documentation>Указывается уникальный идентификатор записи сведений, представляемых организацией (филиалом организации)</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="([0-9]{4}_[0-9]{3}_(01|02|11)_[0-9a-zA-Z]{16})"/>
</xs:restriction>
</xs:simpleType>
Ratings: 0 negative/0 positive
Re: XML Adapter и две схемы XSD
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
valshebniksta
потому что в схеме FSFM550P.XSD нет типов данных.
А адаптеру нужны только они. Схема документа ему по барабану, он не занимается валидацией документов.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: XML Adapter и две схемы XSD
valshebniksta
Автор

Сообщений: 5
Дата регистрации: 06.07.2017
Гм.
Несколько неправильно описал: часть типов данных лежит в основной схеме, а часть в схеме с типами
И получается: если подсовываешь data_types.xsd - то ошибки нет.
Но нет и результат - ничего в курсор не заталкивает:

xa = CREATEOBJECT("XMLAdapter")
xa.UseCodePage = .t.
xa.XMLSchemaLocation = "C:\VFP\TFile\XSD\data_types.xsd"
xa.LoadXML("C:\VFP\TFile\InBox\CB_ES550P_20170626_001.xml",.t.)
? xa.Tables.Count && равен нулю
Ratings: 0 negative/0 positive
Re: XML Adapter и две схемы XSD
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
valshebniksta
когда грузишь FSFM550P.XSD - то пи попытке обработать файл XML получаешь ошибку: xml schema is too complex
Так как FSFM550P.XSD содержит <xs:include schemaLocation="data_types.xsd"/>, то грузятся таки оба файла. Но результат изменить навряд ли удастся ибо адаптер действительно не рассчитан на сильно разветвленные схемы.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: XML Adapter и две схемы XSD
valshebniksta
Автор

Сообщений: 5
Дата регистрации: 06.07.2017
Было такое подозрение - надо теперь думать на чем можно распарсить
Ratings: 0 negative/0 positive
Re: XML Adapter и две схемы XSD
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Надо хорошенько посмотреть обе схемы и попробовать их скрестить и упростить, по возможности убрав лишние типы и заменив их простыми типами.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: XML Adapter и две схемы XSD
valshebniksta
Автор

Сообщений: 5
Дата регистрации: 06.07.2017
Да, есть такая мысль. Почему не стал их вместе соединять: чтобы в случае изменения подложи новый файл и все... минимум движений

Читаю на сайте Microsoft - Включение или импорт XML-схем (https://msdn.microsoft.com/ru-ru/library/ms256237(v=vs.100).aspx)
Пример кода на VB (c использованием XmlSchemaSet)

schemaSet.Add("http://www.tempuri.org", "customer.xsd")
schemaSet.Add("http://www.example.com/IPO", "address.xsd")
schemaSet.Compile()

Попробую собрать на VFP
Ratings: 0 negative/0 positive
Re: XML Adapter и две схемы XSD
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
valshebniksta
И когда грузишь FSFM550P.XSD - то пи попытке обработать файл XML получаешь ошибку: xml schema is too complex
Ты получишь ту же ошибку даже "слепив" оба файла в один.
XMLAdapter не понимает "произвольные" схемы. Он достаточно прост и прямолинеен. Я бы даже сказал что он понимает ТОЛЬКО определённые схемы (их несколько видов - и все они весьма просты).
Если чтоит задача принимать данные из достаточно сложных XML структур то я бы предложил (если без фокса ну совсем уж "никуда") использовать xslt трансформацию для "перевода" сложностей исходных данных в простой и понятный фоксу вид. При том в принципе то можно и схемы таким образом обрабатывать (xsd это тоже xml), но в таком подходе это вряд ли понадобится - под "новый вид" (после трансформации) схема будет скорее всего статичная - и меняться она будет лишь вместе с изменением трансформации.
Альтернатива - вообще забить на схемы и на XMLAdapter и ручками, долго и печально через парсер MSXML2.DomDocument вынимать (в циклах, вероятно с XPath запросами нужных наборов узлов, чтобы не совсем уж "по тупому") данные их этих документов...


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 36 (Гостей: 36)

© 2000-2024 Fox Club 
Яндекс.Метрика