Путаница с XSD: импортировать и / или включать - PullRequest
0 голосов
/ 23 марта 2011

У меня есть несколько небольших файлов xsd, которые я удалил из-за повторения.Я думал, что смогу сократить расходы на техническое обслуживание, если тип поменялся.Итак, вот один пример:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:simpleType name="StartCodeType">
        <xs:restriction base="xs:integer">
            <xs:pattern value="99[0-9]{3,6}"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

Теперь у меня есть xsd, который пытается включить этот файл следующим образом:

<?xml version="1.0"?>
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.quikq.com/xsd/unlukupRequest" 
    xmlns="http://www.quikq.com/xsd/unlukupRequest"
    elementFormDefault="qualified" >

    <xs:include schemaLocation="TrimmedStringType.xsd" />
    <xs:include schemaLocation="StartCodeType.xsd" /> 
    <xs:include schemaLocation="AscendDescendFlag.xsd" /> 

(и т. Д.)

MyПрограмма использует Xerces SAX2 для разбора XML.Вот ошибка, которую я получаю:

Ошибка в файле "/home/dfcuser/unlukupRequest.xsd", строка = 32, столбец = 69, элемент XML =, тип не найден в http://www.quikq.com/xsd/unlukupRequest:StartCodeType

Ошибка в файле "/home/dfcuser/unlukupRequest.xsd", строка = 34, столбец = 87, элемент XML =, тип не найден в http://www.quikq.com/xsd/unlukupRequest:TrimmedStringType

Ошибка в файле "/ home /dfcuser / unlukupRequest.xsd ", строка = 38, столбец = 68, элемент XML =, базовый тип не найден: TrimmedStringType

Ошибка в файле" /home/dfcuser/unlukupRequest.xsd ", строка = 50, column = 108, XML element =, SimpleType (http://www.quikq.com/xsd/unlukupRequest:AscendDescendFlag) для атрибута: ad_flag не найден

В любом случае, я решил, что это сработает, так как моим типам не определено пространство имен.

Вот XSD

<?xml version="1.0"?>
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.quikq.com/xsd/unlukupRequest" 
    xmlns="http://www.quikq.com/xsd/unlukupRequest"
    elementFormDefault="qualified" >

    <!--
        Homebrewed data types for more strict checking on different fields 
    -->
    <xs:include schemaLocation="StartCodeType.xsd" /> 
    <xs:include schemaLocation="TrimmedStringType.xsd" />
    <xs:include schemaLocation="AscendDescendFlag.xsd" /> 

    <!-- 
        Describes the root element 
    -->
    <xs:element name="unlukupRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="transaction" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!--
        Describes the response element, which is the child to the authNotifyResponse root
    -->
    <xs:element name="transaction">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="startCode" type="StartCodeType" />
                <xs:element name="ununit" type="xs:string" minOccurs="0" />
                <xs:element name="exception" type="TrimmedStringType" minOccurs="0" />
                <xs:element name="opt" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base="TrimmedStringType">
                                <xs:attribute name="name" type="xs:NMTOKEN" use="required" />
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
                <xs:element name="orderBy" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="field" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:attribute name="name"    type="xs:NMTOKEN"        use="required" />
                                    <xs:attribute name="ad_flag" type="AscendDescendFlag" use="required" />
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="rangeLower" type="xs:integer" minOccurs="0" />
                <xs:element name="rangeUpper" type="xs:integer" minOccurs="0" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

1 Ответ

0 голосов
/ 22 августа 2012

Файл драйвера XSD, как вы его представляете, кажется законным;когда я сохраняю его и ваш файл StartCodeType.xsd локально, они ведут себя как положено.Я предполагаю, что по причинам, которые я не могу догадаться, Xerces не находит включенные файлы.

Если вы вводите синтаксис или другие ошибки во включенные документы схемы, жалуется ли Xerces на них?(Если нет, возможно, он не читает их; это объясняет, почему он не может найти определения типов.)

Если вы явно указали целевое пространство имен во включенных документах схемы, вместо того, чтобы полагаться на включение хамелеона,это меняет поведение?

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