Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Валидация по XML Schema


Автор: viii 22.1.2010, 13:02
Здравствуйте!
Никак не могу понять в чем ошибка:
Код

<?xml version="1.0" encoding="UTF-8"?>
<Форма25 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.ekka.com.ua/xmlns/f25/"
    xmlns:f25="http://www.ekka.com.ua/xmlns/f25/"
    xsi:schemaLocation="http://www.ekka.com.ua/xmlns/f25/ form25.xsd"
>
    <Резервуари>
        <Резервуар>
            <НомерРезервуара>2</НомерРезервуара>
            <ОфісКодПММ>7002</ОфісКодПММ>
            <НазваПММ>ДП</НазваПММ>
        </Резервуар>
        <Резервуар>
            <НомерРезервуара>1</НомерРезервуара>
            <ОфісКодПММ>7001</ОфісКодПММ>
            <НазваПММ>A-95</НазваПММ>
        </Резервуар>
    </Резервуари>
</Форма25>


form25.xsd
Код

<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://www.ekka.com.ua/xmlns/f25/"
    targetNamespace="http://www.ekka.com.ua/xmlns/f25/"
>
    <xsd:include schemaLocation="form25_type.xsd" />
    <xsd:element name="Форма25" type="Форма25" />
</xsd:schema>


form25_type.xsd
Код

<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:cmn="http://www.ekka.com.ua/xmlns/cmn/"
    xmlns:f25="http://www.ekka.com.ua/xmlns/f25/"
    xmlns="http://www.ekka.com.ua/xmlns/f25/"
    targetNamespace="http://www.ekka.com.ua/xmlns/f25/">
    <xsd:import 
        schemaLocation="commonTypes.xsd"
        namespace="http://www.ekka.com.ua/xmlns/cmn/" />
    <xsd:complexType name="Форма25">
        <xsd:sequence>
            <xsd:element name="Резервуари" type="f25:ОписРезервуарів" />
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="ОписРезервуарів">
        <xsd:sequence>
            <xsd:element name="Резервуар" type="cmn:ОписРезервуара"
                maxOccurs="7" />
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>


commonTypes.xsd
Код

<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://www.ekka.com.ua/xmlns/cmn/"
    targetNamespace="http://www.ekka.com.ua/xmlns/cmn/"
>
    <xsd:simpleType name="НомерРезервуара">
        <xsd:restriction base="xsd:decimal">
            <xsd:fractionDigits value="0" />
            <xsd:minInclusive value="1" />
            <xsd:maxInclusive value="7" />
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="НазваТовару">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="20" />
            <xsd:minLength value="1" />
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="Офіс-Код">
        <xsd:restriction base="xsd:decimal">
            <xsd:fractionDigits value="0" />
            <xsd:minExclusive value="0" />
            <xsd:maxInclusive value="99999" />
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name="ОписРезервуара">
        <xsd:sequence>
            <xsd:element name="НомерРезервуара" type="НомерРезервуара" />
            <xsd:element name="ОфісКодПММ" type="Офіс-Код" />
            <xsd:element name="НазваПММ" type="НазваТовару" />
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>


При валидации ругается на 8ю строчку
и говорит, что:
Код

cvc-complex-type.2.4.a: Invalid content was found starting with element 'Резервуари'. One of '{Резервуари}' is expected.

Автор: diadiavova 22.1.2010, 13:22
А не могло быть такого, что имя элемента ты написал когда языком ввода был русский?

Автор: viii 22.1.2010, 13:29
перепроверил 3 раза:
1. скопировал из схемы в инстанс
2. переписал заново в обоих
3. переписал инстанс, пользуясь intelli-sense среды разработки (Eclipse)

+еще раньше пробовал добавить в sequence типа Форма25 еще один элемент перед "Резервуари" и назвал его латиницей.

MSXML 6.0 выдает то-же самое:
Код

Согласно модели содержимого родительского элемента "{http://www.ekka.com.ua/xmlns/f25/}Форма25",
элемент "{http://www.ekka.com.ua/xmlns/f25/}Резервуари" является непредвиденным. 
Требуется: Резервуари.

Автор: viii 22.1.2010, 13:47
Нашлось решение  smile 

я попросил IDE сгенерировать мне инстанс по схеме и этот инстанс прошел валидацию
а после обработки напильником и сравнения с оригиналом, вот что я получил:
Код

<?xml version="1.0" encoding="UTF-8"?>
<f25:Форма25 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:f25="http://www.ekka.com.ua/xmlns/f25/"
    xsi:schemaLocation="http://www.ekka.com.ua/xmlns/f25/ form25.xsd"
>
    <Резервуари>
        <Резервуар>
            <НомерРезервуара>2</НомерРезервуара>
            <ОфісКодПММ>7002</ОфісКодПММ>
            <НазваПММ>ДП</НазваПММ>
        </Резервуар>
        <Резервуар>
            <НомерРезервуара>1</НомерРезервуара>
            <ОфісКодПММ>7001</ОфісКодПММ>
            <НазваПММ>A-95</НазваПММ>
        </Резервуар>
    </Резервуари>
</f25:Форма25>


в этом случае не указан namespace по умолчанию, откуда он берется?
типа, если у "Форма25" префикс "f25" то и у остальних предполагается такой-же?

и вообще, почему именно так, а не как я изначально написал?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)