Ошибка проверки XSD при импорте элемента из другого XSD - PullRequest
0 голосов
/ 06 мая 2020

Я пытался изучить XSD и пробовал образец проекта в eclipse. Итак, я создал два xsd с именами HospitalSchema.xsd и PatientSchema.xsd. Я пытаюсь передать элемент сложного типа из HospitalSchema.xsd в PatientSchema.xsd, импортировав HospitalSchema.xsd. Вот xsd:

HospitalSchema.xsd

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

<element name="Hospital">
    <complexType>
        <all>
            <element name="name" type="string"/>
            <element name="Address" type="string"/>
        </all>
    </complexType>  
</element>

PatientSchema.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/PatientSchema"
xmlns:tns="http://www.example.org/PatientSchema" elementFormDefault="qualified"
xmlns:hoschema="http://www.example.org/HospitalSchema">

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

<element name="patient" type="tns:patientType" />

<complexType name="patientType">
    <sequence>
        <element name="id" type="tns:ID" />
        <element name="name" type="tns:string15Chars" />
        <element name="dob" type="date" />
        <element name="gender" type="tns:Gender" />
        <element name="payBy" type="tns:Payment"/>
        <element name="hospitalName" type="hoschema:Hospital" />
    </sequence>
</complexType>

<simpleType name="ID">
    <restriction base="int">
        <pattern value="[0-9]*"></pattern>  
    </restriction>
</simpleType>

<simpleType name="string15Chars">
    <restriction base="string">
        <maxLength value="15"></maxLength>
    </restriction>  
</simpleType>

<simpleType name="Gender">
    <restriction base="string">
        <enumeration value="M"></enumeration>
        <enumeration value="F"></enumeration>
    </restriction>
</simpleType>

<complexType name="Payment">
    <choice>
        <element name="cash" type="int"/>
        <element name="insurance" type="tns:Insurance"/>
    </choice>   
</complexType>

<complexType name="Insurance">
    <all>
        <element name="provider" type="string"/>
        <element name="limit" type="int"/>
    </all>
</complexType>

type = "hoschema : Hospital "- это сложный тип, который я пытаюсь импортировать из другой схемы. Но Eclipse выдавал ошибку, говоря:

src-resolve: Cannot resolve the name 'hoschema:Hospital' to a(n) 'type definition' component. PatientSchema.xsd /Patient line 17 XML Schema Problem

Оба XSD находятся в одном проекте Eclipse. Может кто-нибудь помочь?

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

hoschema:Hospital - это объявление элемента, а не тип.

Я подозреваю, что вы хотите заменить

<element name="hospitalName" type="hoschema:Hospital" />

на

<element ref="hoschema:Hospital" />
0 голосов
/ 06 мая 2020

Вот 2 вещи, которые я заметил (я не эксперт по XSD ...).

Вы можете заменить

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

на

<include schemaLocation="HospitalSchema.xsd"/>

Также я думаю, что ваше targetNamespace должно быть одинаковым в обоих файлах XSD.

После внесения этих изменений я теперь получаю сообщение об ошибке, в котором говорится, что tns: Insurance не определена, поэтому я предполагаю, что это было твое следующее задание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...