Re[4]: Schema, xsd.exe и import
Здравствуйте, _FRED_, Вы писали:
Разобрался я с этой проблемой. Все оказалось просто, и, самое главное где-то на подсознании мелькала у меня правильная мысль...
Кому интересно:
Подробное объяснение
здесь
Вкратце:
Xsd.exe не полностью процессит импорт-директивы. Утилита игнорирует атрибут schemaLocation. Чтобы все заработало, кроме основной схемы в той же командной строке надо скормить и схемы, перечисленные в импортах.
Спасибо.
Доброго дня.
Возник следующий вопрос:
Есть схема, в нее делается импорт других схем. Фрагмет:
<xs:schema targetNamespace="http://www.gribuser.ru/xml/fictionbook/2.0"
xmlns="http://www.gribuser.ru/xml/fictionbook/2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:genre="http://www.gribuser.ru/xml/fictionbook/2.0/genres"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="FictionBookLinks.xsd"/>
<xs:import namespace="http://www.gribuser.ru/xml/fictionbook/2.0/genres" schemaLocation="FictionBookGenres.xsd"/>
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="FictionBookLang.xsd"/>
...
Так вот, при попытке сгенерировать по этой схеме класс с помощью xsd.exe, утилита выдает нижеследующее:
Schema validation warning: Атрибут 'http://www.w3.org/1999/xlink:type ' не объявлен. Line 581, position 4.
Schema validation warning: Атрибут 'http://www.w3.org/1999/xlink:href ' не объявлен. Line 583, position 4.
Schema validation warning: Атрибут 'http://www.w3.org/1999/xlink:type ' не объявлен. Line 967, position 4.
Schema validation warning: Атрибут 'http://www.w3.org/1999/xlink:href ' не объявлен. Line 969, position 4.
Schema validation warning: Тип 'http://www.gribuser.ru/xml/fictionbook/2.0/genres:genreType ' не объявлен. Line 79, position 15.
Warning: Schema could not be validated. Class generation may fail or may produce incorrect results.
Error: Error generating classes for schema 'FictionBook2'.
— Отсутствует тип данных 'http://www.gribuser.ru/xml/fictionbook/2.0/genres:genreType '.
Я правильно понял, что xsd.exe некорректно обрабатывает import?
Как такое побороть?
Спасибо.
Re: Schema, xsd.exe и import
От:
_FRED_
Дата: 06.12.06 15:49
Оценка:
Здравствуйте, Andrew Grega, Вы писали:
AG>Возник следующий вопрос:
AG>Есть схема, в нее делается импорт других схем. Фрагмет:
[xml]
AG><xs:schema targetNamespace="http://www.gribuser.ru/xml/fictionbook/2.0"
AG> xmlns="http://www.gribuser.ru/xml/fictionbook/2.0"
AG> xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink"
AG> xmlns:genre="http://www.gribuser.ru/xml/fictionbook/2.0/genres"
AG> elementFormDefault="qualified" attributeFormDefault="unqualified" >
AG> <xs:import namespace ="http://www.w3.org/1999/xlink" schemaLocation="FictionBookLinks.xsd" />
AG> <xs:import namespace ="http://www.gribuser.ru/xml/fictionbook/2.0/genres" schemaLocation="FictionBookGenres.xsd" />
AG> <xs:import namespace ="http://www.w3.org/XML/1998/namespace" schemaLocation="FictionBookLang.xsd" />
AG>...
[/xml]
AG>Так вот, при попытке сгенерировать по этой схеме класс с помощью xsd.exe, утилита выдает нижеследующее:
AG>Schema validation warning: Атрибут 'http://www.w3.org/1999/xlink:type ' не объявлен. Line 581, position 4.
…
AG>Я правильно понял, что xsd.exe некорректно обрабатывает import?
Нет, не правильно. Импорт работает.
AG>Как такое побороть?
Покажи, где и как ты используешь типы, которые "не объявлены".
... << RSDN@Home 1.2.0 alpha rev. 665>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Schema, xsd.exe и import
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, Andrew Grega, Вы писали:
_FR>Покажи, где и как ты используешь типы, которые "не объявлены".
Ну вот несколько фрагментов:
<xs:element name ="genre" maxOccurs="unbounded" >
<xs:complexType>
<xs:simpleContent>
<xs:extension base="genre:genreType" >
<xs:attribute name ="match" type="xs:integer" use ="optional" default="100" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:complexType name ="imageType" >
<xs:attribute ref="xlink:type" />
<xs:attribute ref="xlink:href" />
<xs:attribute name ="alt" type="xs:string" use ="optional" />
</xs:complexType>
Да, схема не моя...
Re[3]: Schema, xsd.exe и import
От:
_FRED_
Дата: 06.12.06 17:55
Оценка:
Здравствуйте, Andrew Grega, Вы писали:
_FR>>Покажи, где и как ты используешь типы, которые "не объявлены".
AG>Ну вот несколько фрагментов:
AG><xs:element name ="genre" maxOccurs="unbounded" >
AG> <xs:complexType>
AG> <xs:simpleContent>
AG> <xs:extension base="genre: genreType" >
…
Описание genre есть в описании xsd:schema, тут должно быть всё верно…
AG><xs:complexType name ="imageType" >
AG> <xs:attribute ref="xlink :type" />
AG> <xs:attribute ref="xlink :href" />
AG> <xs:attribute name ="alt" type="xs:string" use ="optional" />
AG></xs:complexType>
А вот описания префикса xlink нет, потому и ругается.
И имена файлов какие-то странные:
<xs:import namespace ="http://www.w3.org/1999/xlink" schemaLocation="FictionBookLinks.xsd " />
<xs:import namespace ="http://www.w3.org/XML/1998/namespace" schemaLocation="FictionBookLang.xsd " />
в этих файлах есть описания типав, на которые ругаются?
... << RSDN@Home 1.2.0 alpha rev. 665>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[4]: Schema, xsd.exe и import
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, Andrew Grega, Вы писали:
_FR>Описание genre есть в описании xsd:schema, тут должно быть всё верно…
Ага, только и на это он тоже ругается...
_FR>А вот описания префикса xlink нет, потому и ругается.
И это описание есть, просто я в первом посте случайно в отдельную строчку его не вынес:
AG> xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink"
_FR>И имена файлов какие-то странные:
...
_FR>в этих файлах есть описания типав, на которые ругаются?
Есть там описания типов. И лежат эти файлы тут же рядом.
Более того, XML Spy абсолютно нормальо проводит валидацию схемы и показывает все типы и т.п.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить