2011-03-23 76 views
0

我有幾個小的xsd文件因剝離而重複出現。我認爲如果類型改變,我可以減少維護。因此,這裏是一個例子: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" /> 

(ETC)

我的程序使用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, column = 68,XML element =,無法找到基本類型:TrimmedStringType

文件「/ home/dfcuser/unlukupR」 equest.xsd」,線= 50,列= 108,XML元素=,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> 
+0

我不認爲您向我們顯示了錯誤所在的行號。 – 2011-03-23 22:29:59

+0

我已經爲此示例添加了XSD文件。感謝您能給我的任何指示。我已經絞盡腦汁在這一個,所以謝謝! – 2011-03-31 15:57:49

+0

你的問題是什麼? – skaffman 2011-03-31 16:14:17

回答

0

爲您介紹這似乎是合法的XSD驅動程序文件;當我將它和您的StartCodeType.xsd文件保存在本地時,它們的行爲與預期相同。我的猜測是,由於我無法猜測Xerces沒有找到包含的文件。

如果您在所包含的模式文檔中注入語法或其他錯誤,Xerces是否會抱怨它們? (如果沒有,也許它沒有讀取它們;這可以解釋爲什麼找不到類型定義。)

如果您在包含的模式文檔中顯式提供目標名稱空間,而不是依賴chameleon include,那麼改變行爲?