2012-04-09 110 views
1

我知道我已經發布了幾次這個問題。但我現在得到一個新的錯誤,我需要幫助。這是我收到的錯誤。 「s4s-elt-invalid-content.1:'#AnonType_orders'的內容無效,元素'元素'無效,放錯位置或者頻繁發生。」xsd驗證問題

這裏是我的xsd文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:simpleType name="reach"> 
     <xs:restriction base = "xs:integer"> 
      <xs:enumeration value = "50" /> 
      <xs:enumeration value = "75" /> 
      <xs:enumeration value = "100" /> 
     </xs:restriction> 
</xs:simpleType> 
<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="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="numOfBat"> 
    <xs:restriction base="xs:integer"> 
     <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:string"> 
     <xs:pattern value="1|2" /> 
    </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:element name ="order" maxOccurs="unbounded"> 
<xs:complexType> 
<xs:sequence> 
    <xs:element name="custName" type ="xs:string" /> 
       <xs:attribute name ="custID" /> 
<xs:element name="case" type="xs:caseColor" > 
</xs:element> 
<xs:element name="batteries" type="xs:numOfBat" default = 
"1"> 
</xs:element> 
<xs:element name="recharger" type="xs:volt" /> 
<xs:element name="arm"> 
    <xs:element name ="reaches" minOccurs="2" maxOccurs="3" 
type="xs:reach" /> 
</xs:element> 
<xs:element name ="camera" type="xs:numOfCam" /> 
<xs:element name = "speech" type="xs:language" /> 
</xs:sequence> 
</xs:complexType> 
</xs:element> 
</xs:complexType> 
</xs:element> 
</xs:schema> 

這裏是我的xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<orders> 
<order> 
<custName custID="11223"> John Doe </custName> 
<case> Strawberry </case> 
<batteries> 2 </batteries> 
<recharger> 110-120 V </recharger> 
<arm> 
    <reach> 50 </reach> 
    <reach> 100 </reach> 
</arm> 
<camera> 2 </camera> 
<speech> Spanish </speech> 
</order> 
<order> 
<custName custID="45392"> Jane Camp </custName> 
<case> Lime </case> 
<batteries> 4 </batteries> 
<recharger> 220-240 V </recharger> 
<arm> 3 
    <reach> 75 </reach> 
    <reach> 75 </reach> 
    <reach> 100 </reach> 
</arm> 
<camera> 1 </camera> 
<speech> Chinese </speech> 
</order> 
<order> 
<custName custID="69482"> George Carlton </custName> 
<case> Blueberry </case> 
<batteries> 1 </batteries> 
<recharger> 110-120 V </recharger> 
<arm> 
    <reach> 75 </reach> 
    <reach> 100 </reach> 
</arm> 
<camera> 2 </camera> 
<speech> French </speech> 
</order> 
</orders> 

回答

0

你使用什麼工具進行驗證,我不知道,但它產生似乎消息相當無益。有關信息,這裏是由撒克遜生產的消息:

Saxon-EE 9.5.0.1J from Saxonica 
Java version 1.6.0_27 
Using license serial number M008277 
Loading schema document file:/Users/mike/Desktop/temp/test.xsd 
Error at xs:element on line 48 column 49 of test.xsd: 
    Element xs:element cannot appear here: expected one of {choice, sequence, assert, 
    openContent, annotation, attributeGroup, anyAttribute, simpleContent, all, attribute, 
    group, complexContent} 
Error at xs:attribute on line 52 column 48 of test.xsd: 
    Element <xs:attribute> is not allowed as a child of <xs:sequence> 
Error at xs:element on line 61 column 19 of test.xsd: 
    Element xs:element cannot appear here: expected one of {annotation, simpleType, key, 
    complexType, keyref, unique, alternative} 
Error at xs:element on line 61 column 19 of test.xsd: 
    Element <xs:element> is not allowed as a child of <xs:element> 
Schema processing failed: 4 errors were found while processing the schema 

我希望你找到這些更清楚。從本質上講,問題是xs:元素不能作爲xs:complexType的子元素出現:你可能需要像xs:sequence之類的東西。

+0

這裏是我使用來驗證我的代碼的網站。 http://corefiling.com/opensource/schemaValidate.html – beginnerprogrammer 2012-04-09 18:24:26

+0

我真的不知道我做錯了什麼,以及如何解決錯誤。有什麼建議麼? – beginnerprogrammer 2012-04-09 19:59:47

+0

@JohnTinio看到我的答案。你有幾個我看到的問題。 – psubsee2003 2012-04-11 14:52:33

3

您的xsd形成不良,特別是您的orders元素。您也在爲自定義類型引用錯誤的名稱空間。我會解決我所看到的問題。

第一:你orders節點被定義爲xs:complexType和你有一個order元素的complexType的孩子,但元素是不允許子節點。你需要把xs:sequencexs:all之間:

<xs:element name="orders"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name ="order" maxOccurs="unbounded"> 
     <!-- existing nodes --> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

下一頁:你arm元素有1個小孩元素,但xs:element不是在這方面允許的。您需要再次將其定義爲complexType,然後sequenceall

<xs:element name="arm"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name ="reaches" minOccurs="2" maxOccurs="3" type="reach" /> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

第三:您的custId屬性沒有在正確的位置定義。 xs:attributes必須定義爲它們被定義爲屬性的元素下的子節點,但是xs:simpleType不能具有屬性節點,因此您需要將其定義爲complexType。這裏有一個可能的解決方案,以你的問題就在這裏:

<xs:element name="custName"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="custID" type="xs:int" use="required" /> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

最後一點:當你引用你所有的自定義類型(reachnumOfBatvolt等),你不過這些引用它們作爲xs:命名空間的一部分,類型未在xs:名稱空間中定義。由於您沒有爲XSD定義targetNamespace,因此您的自定義類型將成爲默認名稱空間的一部分。您只需從類型中刪除xs:

例如,您應聲明它們想:type="reach"type="numOfBat"type="caseColor"