Ссылки между несколькими xsd-схемами в одном документе
У меня есть четыре схемы xsd, где один использует типы из трех других. Я хочу объединить их в одном документе, но xs: импорт с указанными именами не работает: xsd.exe пишет "Тип... не объявлен". Как сделать ссылки между несколькими xsd-схемами в одном документе?
Upd:
У меня есть этот http://www.imsglobal.org/xsd/lti/ltiv1p0/imslticc_v1p0.xsd http://www.imsglobal.org/xsd/lti/ltiv1p0/imsbasiclti_v1p0.xsd http://www.imsglobal.org/xsd/lti/ltiv1p0/imslticm_v1p0.xsd http://www.imsglobal.org/xsd/lti/ltiv1p0/imslticp_v1p0.xsd
Я скачал их и выполнить в командной строке
>xsd imslticc_v1p0.xsd imsbasiclti_v1p0.xsd imslticm_v1p0.xsd imslticp_v1p0.xsd /classes
Это прекрасно работает, но мне нужен один xsd.
1 ответ
Это один из способов объединить ваши четыре схемы в одну. Вам все равно придется иметь дело с отдельными пространствами имен при проверке вашего экземпляра:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:import schemaLocation="http://www.imsglobal.org/xsd/lti/ltiv1p0/imslticc_v1p0.xsd"
namespace="http://www.imsglobal.org/xsd/imslticc_v1p0"/>
<xs:import schemaLocation="http://www.imsglobal.org/xsd/lti/ltiv1p0/imsbasiclti_v1p0.xsd"
namespace="http://www.imsglobal.org/xsd/imsbasiclti_v1p0"/>
<xs:import schemaLocation="http://www.imsglobal.org/xsd/lti/ltiv1p0/imslticm_v1p0.xsd"
namespace="http://www.imsglobal.org/xsd/imslticm_v1p0"/>
<xs:import schemaLocation="http://www.imsglobal.org/xsd/lti/ltiv1p0/imslticp_v1p0.xsd"
namespace="http://www.imsglobal.org/xsd/imslticp_v1p0"/>
</xs:schema>
Это успешно подтверждает этот экземпляр:
<lticc:cartridge_basiclti_link xmlns:lticc="http://www.imsglobal.org/xsd/imslticc_v1p0"
xmlns:basiclti="http://www.imsglobal.org/xsd/imsbasiclti_v1p0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="multi-schema.xsd">
<basiclti:title></basiclti:title>
<basiclti:description></basiclti:description>
<basiclti:custom></basiclti:custom>
<basiclti:extensions platform="x"></basiclti:extensions>
<basiclti:launch_url>http://some-url.com</basiclti:launch_url>
<basiclti:secure_launch_url>https://some-url.com</basiclti:secure_launch_url>
<basiclti:icon></basiclti:icon>
<basiclti:secure_icon></basiclti:secure_icon>
<basiclti:vendor>
<code xmlns="http://www.imsglobal.org/xsd/imslticp_v1p0">x</code>
<name xmlns="http://www.imsglobal.org/xsd/imslticp_v1p0"></name>
</basiclti:vendor>
</lticc:cartridge_basiclti_link>