Проблема с верификацией данных посредством XSD (XERCES-C)
От: dmnd Казахстан  
Дата: 27.06.06 10:22
Оценка:
Народ никто не сталкивался с такой проблемой?

Есть описание документа состоящие из двух файлов xsd.
В первом описаны simpletype и перечислены все базовые типы для полей документа
Во втором делается include первого и в нем описан сам документ и комплексные типы, состоящие их простых, описание для которых в первом.

Для отработки использую стандартный пример xerces-c SAX2Count и просто в нем подключил верификацию

    string fileName = argV[argInd] + string(".xsd"); //в строке параметром дается имя, с таким именем открывается xml и xsd
    // затем открывается файл и потом проводится проверка открылся ли файл корректно
    strstream str_xsd;
    str_xsd << fin_xsd.rdbuf();
    MemBufInputSource* memBufIS_xsd = new MemBufInputSource( (const XMLByte*)str_xsd.str(), strlen(str_xsd.str()), gMemBufId_xsd, false);
    parser->loadGrammar(*memBufIS_xsd, Grammar::SchemaGrammarType , true);
    parser->setFeature(XMLUni::fgXercesUseCachedGrammarInParse, true);

А теперь собственно проблема. Вариантов несколько:
1) Если делать так как я описал, то при работе вываливается ошибка верификации с указанием на строку в xsd файле которая идет после того как само описание закрывается т.е. указывает за </xsd:schema>.
Пример:
-bash-3.00$ ./sax2 -f -p -l try1

Fatal Error at file xsd_msg, line 57, char 14
Message: Expected comment or processing instruction

Fatal Error at file , line 0, char 0
Message: Fatal error encountered during schema scan
: 0 ms (270 elems, 0 attrs, 0 spaces, 5091 chars)
2) Если убрать систему вложений, т.е. скопировать содержимое файла с описанием простых типов в файл с описанием комплексных, то все работает пока не берем в обработку файл большого размера (~180Mb)(опять вываливается ошибка как выше описанная)

Вот незнаю чегой и сделать то. Описание ошибки мне ничего недает, так как не вижу смысла в нахожении комментария либо какой либо другой инструкции в конце xsd, когда сама схема уже закрылась или я чего то непонимаю.
Вложения необходимы, так как типов документов множество и держать в xsd для конкретного документа копию описания простых типов бессмысленно.
Может я какой флаг установить забыл ? Пол дня убил, решения не нашел. У кого есть опыт использования xerces-c под *nix, подскажите пожалуйста.
Re: Проблема с верификацией данных посредством XSD (XERCES-C
От: dmnd Казахстан  
Дата: 27.06.06 12:57
Оценка:
Проблема решилась
Решение довольно банально, судя по всему неправильно считался размер. Так как str() от strstream дает размер до первого null терминатора. так вот этого самого терминатора и небыло.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.