Создать библиотеку из нескольких XSD - PullRequest
1 голос
/ 15 июля 2011

У меня есть потенциальная возможность иметь много маленьких XSD, содержащих отдельные типы большого проекта. (Компоненты) * * тысяча один

У меня также есть большое количество XSD, требующих большого количества этих отдельных XSD. (экраны)

Я знаю, что могу импортировать каждый из «Компонентов» в каждый «Экран» XSD. Но над каждым нужно проделать большую работу.

Я надеялся, что смогу импортировать каждый из этих «Компонентов» в один XSD (ComponentLibrary), а затем просто импортировать этот «ComponentLibrary» в каждый «Экран» XSD.

Я написал код, который, как я думал, мог быть необходим, но, похоже, он не работает. Я получаю сообщения о том, что он не объявлен.

TF.xsd:

<xs:schema targetNamespace="http://namespace.com/TF"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified">

    <xs:complexType name="TFType">
        <xs:attribute name="size" type="xs:decimal" />
        <xs:attribute name="colour" type="xs:decimal" />
    </xs:complexType>
</xs:schema>

ComponentsLibrary.xsd:

<xs:schema targetNamespace="http://namespace.com/ComponentsLibrary"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:tf="http://namespace.com/TF"
    elementFormDefault="qualified">

    <xs:import schemaLocation="TF.xsd" namespace="http://namespace.com/TF"/>
    <xs:element name="TF" type="tf:TFType" />
</xs:schema>

Screen1.xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:cl="http://namespace.com/ComponentsLibrary" 
    elementFormDefault="qualified">

    <xs:import schemaLocation="ComponentsLibrary.xsd" namespace="http://namespace.com/ComponentsLibrary" />

    <xs:element name="tfTitle" type="cl:TF" />
</xs:schema>

Ошибка, которую я получаю

Screen1.xsd (8:3) Error Type 'http://namespace.com/Components:TF' is not declared.

1 Ответ

2 голосов
/ 16 июля 2011

Ваша схема библиотеки компонентов объявляет элемент TF, а не тип TF, следовательно, ошибка в Screen1.xsd.

Если вы действительно хотите сделать тип TF доступным в ComponentLibrary, тогда вы можете использовать подход схемы хамелеона .

  • TF.xsd не должен иметь пространства имен
  • ComponentLibrary должен затем включать (не импортировать) TF.xsd
  • Все типы в TF.xsd теперь доступны в пространстве имен ComponentLibrary
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...