2015-10-14 24 views
2

我是一個簡單的XML數據,並希望使用我的XSD文件使用 進行驗證。我想創建任何種類的「面向對象」方式的XSD文件。因爲至少在我看來,最好是理解/閱讀。XSD - <xs:sequence> without <xs:complexType>?

我的XML:

<?xml version="1.0" encoding="UTF-8"?> 
<DSExport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="TestXSD.xsd"> 

    <Job Identifier="someString1"> 
     <Project name="someString2"> 
      <tag1 /> 
      <tag2 /> 
     </Project> 
    </Job> 

</DSExport> 

MY XSD:

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

    <!-- "MAIN" --> 
    <xs:element name="DSExport"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Job" type="JobType"> 

        <!-- NOTE: SOMETHING WENT WRONG HERE --> 
        <xs:sequence> 
         <xs:element name="Project" type="ProjectType"> 
          <xs:sequence> 
           <xs:element name="tag3"></xs:element> 
           <xs:element name="tag4"></xs:element> 
          </xs:sequence> 
         </xs:element> 
        </xs:sequence> 
        <!-- NOTE: SOMETHING WENT WRONG HERE --> 

       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

    <!-- "FUNCTIONS" (WANT TO SEPERATE THE SPECIALIZED VALIDATION OF ALL ELEMENTS)--> 
    <xs:complexType name="JobType"> 
     <xs:attribute name="Identifier" type="xs:string" use="required" /> 
    </xs:complexType> 

    <xs:complexType name="ProjectType"> 
     <xs:attribute name="name" type="xs:string" use="required" /> 
    </xs:complexType> 

我用eclipse。我像任何的ErrorMessage:

s4s-elt-must-match.1: The content of 'Job' must match (annotation?, (simpleType | complexType)?, (unique | 
key | keyref)*)). A problem was found starting at: sequence. 

我知道如何解決它,如果我將在「主要」部分寫的每一個部分...... 但我怎麼能解決這個問題就像「面向對象」?我想單獨對每個元素的complexType定義 !

感謝您的幫助!

回答

4

您已經定義了兩次Job和Project元素。你應該序列移動到這樣的類型定義:

<xs:element name="DSExport"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Job" type="JobType"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:complexType name="JobType"> 
    <xs:sequence> 
     <xs:element name="Project" type="ProjectType"/> 
    </xs:sequence> 
    <xs:attribute name="Identifier" type="xs:string" use="required" /> 
</xs:complexType> 

<xs:complexType name="ProjectType"> 
    <xs:sequence> 
     <xs:element name="tag3"></xs:element> 
     <xs:element name="tag4"></xs:element> 
    </xs:sequence> 
    <xs:attribute name="name" type="xs:string" use="required" /> 
</xs:complexType> 

另見:XSD element with both attributes and child elements

+0

感謝夥計!這運作良好,在我看來這是非常可讀的!它工作正常! –

+0

@ H.Senkaya請接受答案。 – lexicore

相關問題