Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Как убедится что XSD схема существует ?


Автор: un8gbx 12.10.2005, 20:41
Я использую XSD схему для валидации XML файлов, для этого я использую MSXML 4.0 SP2 парсер и делаю это так:
В XML файле ставлю атрибуты, что бы сказать парсеру где схема расположена:

<ISA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="I:\TEST\XMLEDI\shemas\SCH850.xsd">
<ISA01>00</ISA01>
<ISA02></ISA02>
<ISA03>00</ISA03>
<ISA04></ISA04>
<ISA05>ZZ</ISA05>
</ISA>

После этого ставлю атрибут validateOnParse = TRUE, и делаю load, все работает прекрасно, ошибки обнаружтваются.
Проблема в том, что если схема на котороую указывает
xsi:noNamespaceSchemaLocation="I:\TEST\XMLEDI\shemas\SCH850.xsd"
несуществует, ну нет такого файла, то ни какой ошибки не происходит,
load возврашает что все ОК и ни какого исключения не кидается. Хотя
для меня это ошибка, схемы то нет !

Как заставить парсер проверять наличие схемы ???

Я конечьно могу програмно взять аттрибут xsi:noNamespaceSchemaLocation
и проверить существование фала, но некрасиво както.

smile

Автор: 3,14 13.10.2005, 11:51
Не совсем уверен, но вроде это решеается по средствам установки атрибута schemaLocation

Автор: un8gbx 13.10.2005, 17:26
Я как понимаю, что xsi:SchemaLocation делает то же саомае что и xsi:noNamespaceSchemaLocation только с использованием namesapace что впринципе не нужно в моем случае, вот ссылка где это объясняется.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/822217a9-5282-41e4-ac9e-21fb0f5959bd.asp


вот вторая ссылка, тут говорится почему игнорируется
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/46ad6a69-9919-499b-9732-21b0de0fca8c.asp

Чесно говоря не понимаю логики которой следует микрософт, если схема УКАЗАНА и НЕ НАЙДЕНА, то это не ошибка, ихнее предложение загружать их в каш, то же странно, я же не знаю какая схема используется, пока не открою XML фаел, не грузить же их все, уменя уже набралось 8 штук, а дальше больше. Сранно однако.

Автор: Ignat 14.10.2005, 10:40
un8gbx, а почему бы не использовать не MS парсер? E.g. SAX.

Автор: un8gbx 14.10.2005, 16:32
А что это решит ? И нет ли там тех же проблем.

Я как понимаю SAX это событийный парсер, что мне он очень удобно, удобней загрузить его весь и анализировать, да и на MSXML уже написана и работает куча кода.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)