2016-07-22 72 views
0

我目前正在使用JAXB(及其工具XJC)將XML Schema(.xsd)「翻譯」爲自動生成的Java類。JAXB/XJC - XML Schema Parsin Fail

我執行以下命令:

java -jar "../lib/com.sun.jaxb_1.0.0/jaxb-xjc.jar" schema.xsd 

但是,很明顯,我沒有得到我的編譯架構和得到以下錯誤:

parsing a schema... 
[ERROR] s4s-elt-invalid-content.1 : Le contenu de 'heureType' n'est pas valide. L'élément 'element' n'est pas valide, est mal placé ou compte trop d'occurrences. 
line 9 of file:***/Workspace_XML/fichier_cri/schema.xsd 

[ERROR] s4s-elt-invalid-content.1 : Le contenu de 'demandeCri' n'est pas valide. L'élément 'element' n'est pas valide, est mal placé ou compte trop d'occurrences. 
line 24 of file:***/Workspace_XML/fichier_cri/schema.xsd 

[ERROR] s4s-elt-invalid-content.1 : Le contenu de 'infoCri' n'est pas valide. L'élément 'element' n'est pas valide, est mal placé ou compte trop d'occurrences. 
line 28 of file:***/Workspace_XML/fichier_cri/schema.xsd 

[ERROR] s4s-elt-invalid-content.1 : Le contenu de 'criType' n'est pas valide. L'élément 'element' n'est pas valide, est mal placé ou compte trop d'occurrences. 
line 33 of file:***/Workspace_XML/fichier_cri/schema.xsd 

[ERROR] s4s-elt-invalid-content.1 : Le contenu de 'initLiaison' n'est pas valide. L'élément 'element' n'est pas valide, est mal placé ou compte trop d'occurrences. 
line 46 of file:***/Workspace_XML/fichier_cri/schema.xsd 

[ERROR] s4s-elt-invalid-content.1 : Le contenu de 'listeCri' n'est pas valide. L'élément 'element' n'est pas valide, est mal placé ou compte trop d'occurrences. 
line 50 of file:***/Workspace_XML/fichier_cri/schema.xsd 

[ERROR] s4s-elt-invalid-content.1 : Le contenu de 'fichierCri' n'est pas valide. L'élément 'element' n'est pas valide, est mal placé ou compte trop d'occurrences. 
line 67 of file:***/Workspace_XML/fichier_cri/schema.xsd 

Failed to parse a schema. 

遺憾的法國人,但錯誤可以翻譯爲這樣的事情:

[ERROR] s4s-elt-invalid-content.1 : The content of 'heureType' is not valid. The element 'element' is not valid, is misplaced or appears to many times. 

我試圖改變我的順序代碼以多種方式,但沒有什麼好處。

這裏是我的代碼:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<!-- the Root Element --> 
<xs:element name="fichier_cri" type="fichierCri"/> 


<!-- ########## LEVEL 0 ########## --> 

    <xs:complexType name="fichierCri"> 
    <xs:element name="init_liaison" type="initLiaison" minOccurs="0" maxOccurs="unbounded"/> 
    <xs:sequence> 
     <xs:element name="liste_cri" type="listeCri" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
</xs:complexType> 


<!-- ########## LEVEL 1 ########## --> 

<xs:complexType name="initLiaison"> 
    <xs:element name="source" type="xs:int" minOccurs="0" maxOccurs="unbounded"/> 
</xs:complexType> 

<xs:complexType name="listeCri"> 
    <xs:element name="demande_cri" type="demandeCri" minOccurs="0" maxOccurs="unbounded"/> 
    <xs:element name="info_cri" type="infoCri" minOccurs="0" maxOccurs="unbounded"/> 
    <xs:sequence> 
     <xs:element name="cri" type="criType" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
</xs:complexType> 


<!-- ########## LEVEL 2 ########## --> 

<xs:complexType name="demandeCri"> 
     <xs:element name="fichier_erreur" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
</xs:complexType> 

<xs:complexType name="infoCri"> 
     <xs:element name="nb_erreur" type="xs:int" minOccurs="0" maxOccurs="unbounded"/> 
     <xs:element name="num_proch_erreur" type="xs:int" minOccurs="0" maxOccurs="unbounded"/> 
</xs:complexType> 

<xs:complexType name="criType"> 
     <xs:element name="num_erreur" type="xs:int" minOccurs="0" maxOccurs="unbounded"/> 
     <xs:element name="num_cri" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
     <xs:element name="heure" type="heureType" minOccurs="0" maxOccurs="unbounded"/> 
     <xs:element name="data" type="dataType" minOccurs="0" maxOccurs="unbounded"/> 
</xs:complexType> 


<!-- ########## LEVEL 3 ########## --> 

<xs:complexType name="heureType"> 
     <xs:element name="secondes" type="xs:int" minOccurs="0" maxOccurs="unbounded"/> 
     <xs:element name="nano_secondes" type="xs:int" minOccurs="0" maxOccurs="unbounded"/> 
</xs:complexType> 

<xs:complexType name="dataType"> 
    <xs:sequence> 
     <xs:element name="octet" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
</xs:complexType> 


<!-- *** end *** -->  
</xs:schema> * 

是否有人對此有所瞭解? :/

+0

這是否有嫌疑 - 沒有開口<! - ########## LEVEL 1 ########## - > DaveH

+0

也許這是爲了嘗試聲明組件之前的組件:begin level 3 to level 0 –

+0

@DaveH oops對不起,有點粘貼錯誤^^'這是糾正;) –

回答

1

錯誤消息表明您的xsd文件在語法上不正確。這是真的。如果您編輯您的xsd以解決問題,錯誤消息應該消失。

當你定義一個複雜類型:

<complexType name="foo"> 
    <sequence> 
     <element ... /> 
     <element ... /> 
    </sequence> 
</complexType> 

確保您的複雜類型中的所有元素都是一個序列元素中。 <sequence>表示一個有效的文檔將包含指定順序中包含的元素。

當然,還有其他選項可用於定義複雜類型。例如,您可以使用<choice>而不是<sequence>,這意味着有效的文檔將包含其中一個包含的元素。

值得看看模式文件的模式(xsd)。查看模式文件頂部的鏈接(http://www.w3.org/2001/XMLSchema)。

+0

好吧,謝謝,它的工作。我不知道complexType必須包含一個序列......但那麼「序列」是什麼意思?我認爲這是要描述可能多次出現的元素,比如列表元素或其他東西。 –

+0

@KingKunu我編輯了答案,爲複雜類型的各種選項和指向所有答案的源碼(架構模式)的指針添加了更多細節。 – Rob

+0

非常感謝!我現在明白了!這絕對不是我認爲的! ^^」 –