Xsd, элемент не может быть разрешен в пространстве имен

В xsd я включаю и импортирую некоторый элемент. Импортированный не разрешен, я получаю эту ошибку:

Ошибка: src-resolve: не удается преобразовать имя «crq1:CoverageRequest» в компонент «определение типа» (n).

ПредложениеRequest.xsd

    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.example.org/Test4"
        xmlns:crq1="http://www.example.org/CoverageRequestOffer"
        xmlns:tns="http://www.example.org/Test4">

        <xsd:import namespace="http://www.example.org/CoverageRequestOffer"
            schemaLocation="CoverageRequestOffer.xsd" />

        <xsd:include schemaLocation="OfferScope.xsd"/>
        <xsd:include schemaLocation="OfferConstraints.xsd"/>
        <xsd:include schemaLocation="PricingConstraints.xsd"/>

        <xsd:element name="OfferRequest">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="Configuration" type="tns:OfferScope" />
                    <xsd:element name="Coverage" type="crq1:CoverageRequest" />  <!-- ***** error ***** -->
                    <xsd:element name="ResponseConstraints" type="tns:OfferConstraints"/>
                    <xsd:element name="RequestConstraints" type="tns:PricingConstraints"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:schema>

CoverageRequestOffer.xsd

    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema xmlns:tns="http://www.example.org/Test4"
        targetNamespace="http://www.example.org/CoverageRequestOffer"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">

        <xsd:import namespace="http://www.example.org/Test4"
            schemaLocation="TypeOfVehicule.xsd" />

        <xsd:import namespace="http://www.example.org/Test4"
            schemaLocation="Insured.xsd" />

        <xsd:import namespace="http://www.example.org/Test4"
            schemaLocation="TypeOfCoverageCategory.xsd" />

        <xsd:element name="CoverageRequest">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="PurchaseDate" type="xsd:dateTime" />
                    <xsd:element name="StartDate" type="xsd:dateTime" />
                    <xsd:element name="EndDate" type="xsd:dateTime" />
                    <xsd:element name="VehicleCategory" type="tns:TypeOfVehicule" />
                    <xsd:element name="TravelDestination" type="xsd:string"
                        minOccurs="0" maxOccurs="255" />
                    <xsd:element name="DiscountCodes" type="xsd:string"
                        maxOccurs="unbounded" minOccurs="0" />
                    <xsd:element name="DeductibleCode" type="xsd:string"
                        minOccurs="0" maxOccurs="25" />
                    <xsd:element name="ProvinceOfResidence" type="xsd:string"
                        minOccurs="1" maxOccurs="255" />
                    <xsd:element name="Insured" type="tns:Insured"
                        minOccurs="1" />
                    <xsd:element name="CoverageCategory" type="tns:TypeOfCoverageCategory" />
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:schema>

В пространстве имен: http://www.example.org/Test4 существует тип CoverageRequest.

Любая информация для устранения этой ошибки?


person user1761239    schedule 20.08.2014    source источник
comment
Вы имеете в виду тип с именем crq1:CoverageRequest, но есть только элемент с таким именем.   -  person Erik Sjölund    schedule 20.08.2014
comment
crq1 разрешить мне доступ к CoverageRequest, которые находятся в пространстве имен example.org/CoverageRequestOffer ? нет, но кажется, я не могу получить к нему доступ   -  person user1761239    schedule 20.08.2014
comment
Я думаю, что преобразователь ищет что-то вроде ‹xsd:complexType name=CoverageRequest›   -  person Erik Sjölund    schedule 20.08.2014
comment
ты понял, спасибо, я думал, что это было то же самое...   -  person user1761239    schedule 20.08.2014


Ответы (2)


Вы имеете в виду тип с именем «crq1:CoverageRequest», но есть только элемент с таким именем.

Другими словами, преобразователь ищет что-то вроде

<xsd:complexType name="CoverageRequest">

но у тебя есть

<xsd:element name="CoverageRequest">
person Erik Sjölund    schedule 20.08.2014

Эрик Шёлунд уже указал на непосредственную причину вашей проблемы.

Есть два возможных исправления:

  • Добавьте объявление сложного типа с именем CoverageRequest в документ схемы для пространства имен http://www.example.org/CoverageRequestOffer (если вы управляете этим документом схемы).

    Или (при условии, что тип, который вы хотите, является типом элемента CoverageRequest), переместите сложный тип из объявления элемента CoverageRequest, чтобы соответствующая часть схемы читалась:

    <xsd:element name="CoverageRequest" 
                 type="tns:CoverageRequest"
                 xmlns:tns="http://www.example.org/CoverageRequestOffer">
    
    <xsd:complexType name="CoverageRequest">
      <xsd:sequence>
        <xsd:element name="PurchaseDate" type="xsd:dateTime" />
        <xsd:element name="StartDate" type="xsd:dateTime" />
        ...
      </
    </
    
  • Измените схему пространства имен http://www.example.org/Test4, чтобы она ссылалась не на тип, а к элементу.

    В частности, в объявлении элемента OfferRequest измените

    <xsd:element name="Coverage" type="crq1:CoverageRequest" />
    

    to

    <xsd:element ref="crq1:CoverageRequest" />
    

    Это не совсем то же самое, потому что ваш XML теперь должен иметь элемент с именем crq1:CoverageRequest (или его эквивалент) в качестве второго дочернего элемента OfferRequest вместо элемента с именем test4:Coverage (или эквивалент). Но если вы не управляете документом схемы для пространства имен http://www.example.org/CoverageRequestOffer , это может быть лучшее, что можно сделать.

person C. M. Sperberg-McQueen    schedule 20.08.2014