2012-04-07 192 views
1

我正在嘗試使用xml架構驗證器,但我收到一條錯誤消息,提示「文件過早結束」,我似乎無法找到此錯誤的位置。 這裏是我的xsd文件xml架構驗證問題

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:element name="orders"> 
<xs:element name ="order" maxOccurs="unbounded"> 
    <xs:complexType> 
    <xs:sequence> 
    <xs:element name="case" type="xs:caseColor" > 
     <xs:simpleType name="caseColor"> 
     <xs:restriction base="string"> 
      <xs:enumeration value="Lemonde" /> 
      <xs:enumeration value="Strawberry" /> 
      <xs:enumeration value="Lime" /> 
      <xs:enumeration value="Blueberry" /> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="batteries" type="xs:numOfBat" default = 
"1"> 
     <xs:simpleType name="numOfBat"> 
     <xs:restriction base="integer"> 
      <xs:enumeration value="1" /> 
      <xs:enumeration value="2" /> 
      <xs:enumeration value="3" /> 
      <xs:enumeration value="4" /> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="recharger" type="xs:volt"> 
    <xs:simpleType name="volt"> 
     <xs:restriction base="string"> 
      <xs:enumeration value="110-120" /> 
      <xs:enumeration value="220-240" /> 
     </xs:restriction> 
    </xs:simpleType> 
    </xs:element> 
    <xs:element name="arm"> 
     <xs:element name ="reaches" minOccurs="2" maxOccurs="3" 
type="xs:reach"> 
     <xs:simpleType name="reach"> 
      <xs:restriction base = "integer"> 
       <xs:enumeration value = "50" /> 
       <xs:enumeration value = "75" /> 
       <xs:enumeration value = "100" /> 
      </xs:restriction> 
    </xs:simpleType> 
    </xs:element> 
    </xs:element> 
    <xs:element name ="camera" type="numOfCam"> 
     <xs:simpleType name="numOfCam"> 
     <xs:restriction base="string"> 
      <xs:enumeration value="1" /> 
      <xs:enumeration value="2" /> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name = "speech" type="xs:language"> 
     <xs:simpleType name = "language"> 
     <xs:restriction base = "string"> 
      <xs:enumeration value = "Spanish" /> 
      <xs:enumeration value = "Chinese" /> 
      <xs:enumeration value = "English" /> 
      <xs:enumeration value = "German" /> 
      <xs:enumeration value = "French" /> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:element> 
</xs:schema> 

和錯誤的位置說這是上線-1,-1。

這裏是我的DTD文件,以防萬一,以及

<?xml version="1.0"?> 
<!DOCTYPE orders [ 
<!ELEMENT orders (order+)> 
<!ELEMENT order (case, batteries, recharger, arm, camera, 
speech)> 
<!ELEMENT case (#PCDATA)> 
<!ELEMENT batteries (#PCDATA)> 
<!ELEMENT recharger (#PCDATA)> 
<!ELEMENT arm (reach)> 
<!ELEMENT reach (#PCDATA)> 
<!ELEMENT camera (#PCDATA)> 
<!ELEMENT speech (#PCDATA)> 
]> 

和誤差不說哪個文件中的錯誤的來源。這是我正在使用的驗證器。 http://corefiling.com/opensource/schemaValidate.html

我猜因爲我不能使用我的dtd,這裏是我的xml文件。

<?xml version="1.0" encoding="UTF-8"?> 
<orders> 
    <order> 
    <case> Strawberry </case> 
    <batteries> 2 </batteries> 
    <recharger> 110-120 V </recharger> 
    <arm> 2 
     <length> 50 </length> 
     <length> 100 </length> 
    </arm> 
    <camera> 2 </camera> 
    <speech> Spanish </speech> 
    </order> 
    <order> 
    <case> Lime </case> 
    <batteries> 4 </batteries> 
    <recharger> 220-240 V </recharger> 
    <arm> 3 
     <length> 75 </length> 
     <length> 75 </length> 
     <length> 100 </length> 
    </arm> 
    <camera> 1 </camera> 
    <speech> Chinese </speech> 
    </order> 
    <order> 
    <case> Blueberry </case> 
    <batteries> 1 </batteries> 
    <recharger> 110-120 V </recharger> 
    <arm> 2 
     <length> 75 </length> 
     <length> 100 </length> 
    </arm> 
    <camera> 2 </camera> 
    <speech> French </speech> 
    </order> 
</orders> 
+0

能問題可能是你的xml文件? – phatfingers 2012-04-07 05:00:45

+0

當我驗證我的xml模式文件時,驗證程序只接受dtd文件和xml模式文件 – beginnerprogrammer 2012-04-07 05:02:50

+0

您引用的驗證程序要求提供「XML模式」和「XML實例」。你用什麼「XML實例」? – phatfingers 2012-04-07 05:12:56

回答

1

XSD架構是無效的,你不能有嵌套元素這樣

<xs:element name="orders"> 
<xs:element name ="order" maxOccurs="unbounded"> 

事實上的模式中有錯誤的負載。 XML Schema很難處理,手工編寫它們並不實際,我建議使用像Liquid XML Studio這樣的graphical XML schema editor

注: 我覺得你應該的模式是這樣的: -

An XML Schema Fixed with Liquid XML Studio

<?xml version="1.0" encoding="utf-8" ?> 
<!--Created with Liquid XML Studio 2012 Developer Edition 10.0.1.3941 (http://www.liquid-technologies.com)--> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:simpleType name="language"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="Spanish" /> 
      <xs:enumeration value="Chinese" /> 
      <xs:enumeration value="English" /> 
      <xs:enumeration value="German" /> 
      <xs:enumeration value="French" /> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="numOfBat"> 
     <xs:restriction base="xs:int"> 
      <xs:enumeration value="1" /> 
      <xs:enumeration value="2" /> 
      <xs:enumeration value="3" /> 
      <xs:enumeration value="4" /> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="numOfCam"> 
     <xs:restriction base="xs:int"> 
      <xs:enumeration value="1" /> 
      <xs:enumeration value="2" /> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="caseColor"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="Lemonde" /> 
      <xs:enumeration value="Strawberry" /> 
      <xs:enumeration value="Lime" /> 
      <xs:enumeration value="Blueberry" /> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="reach"> 
     <xs:restriction base="xs:int"> 
      <xs:enumeration value="50" /> 
      <xs:enumeration value="75" /> 
      <xs:enumeration value="100" /> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="volt"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="110-120" /> 
      <xs:enumeration value="220-240" /> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:element name="Orders"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="order" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="case" type="caseColor" /> 
          <xs:element name="batteries" type="numOfBat" default="1" /> 
          <xs:element name="recharger" type="volt" /> 
          <xs:element name="arm" /> 
          <xs:element name="reaches" type="reach" minOccurs="2" maxOccurs="3" /> 
          <xs:element name="camera" type="numOfCam" /> 
          <xs:element name="speech" type="xs:language" /> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema>