2014-03-26 87 views
0

我試圖寫這幾行XML模式:XML Schema的驗證問題

<place id = "1234"> 
    <placeName lang = "de" type = "std"> SOMENAME <gender> n </gender> </placeName> 
</place> 

架構如下:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
<xs:element name="place"> 
    <xs:complexType > 
    <xs:complexContent> 
     <xs:restriction base="xs:anyType"> 

      <xs:sequence> 
      <xs:element name= "placeName"> 
       <xs:complexType> 
       <xs:simpleContent> 
        <xs:extension base="xs:string"> 

         <xs:sequence> 
         <xs:element name= "gender" type= "xs:string"/> 

         </xs:sequence>  
         <xs:attribute name= "lang" type= "xs:string" /> 
         <xs:attribute name= "type" type= "xs:string" />    
        </xs:extension> 

       </xs:simpleContent> 
       </xs:complexType> 
      </xs:element> 
      </xs:sequence> 
     <xs:attribute name="id" type="xs:string" /> 
     </xs:restriction> 
     </xs:complexContent> 
    </xs:complexType> 
    </xs:element> 
    </xs:schema> 

我不斷收到此錯誤:E [Xerces的] s4s-elt-invalid-content.1:'#AnonType_placeNameplace'的內容無效。元素「序列」無效,放錯位置或發生頻率過高。 「序列」是第二個,「性別」標籤。


後我做了一些改變:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
<xs:element name="place"> 
    <xs:complexType > 
    <xs:complexContent mixed = "true"> 
     <xs:extension base="xs:anyType"> 

      <xs:sequence> 
      <xs:element name= "placeName"> 
       <xs:complexType> 
       <xs:complexContent mixed= "true"> 
        <xs:extension base="xs:anyType"> 

         <xs:sequence> 
         <xs:element name= "gender" type= "xs:string"/> 

         </xs:sequence>  
         <xs:attribute name= "lang" type= "xs:string" /> 
         <xs:attribute name= "type" type= "xs:string" />    
        </xs:extension> 

       </xs:complexContent> 
       </xs:complexType> 
      </xs:element> 
      </xs:sequence> 
    <xs:attribute name="id" type="xs:string" /> 
     </xs:extension> 
    </xs:complexContent> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

我繼續接收此錯誤:COS-nonambig:地名與WC [##任何](或從它們的取代基的元素)違反「唯一粒子歸因「。在根據該模式驗證,不確定性會爲這兩個粒子

+0

問題已關閉,謝謝大家!我發現這個神奇的工具:http://www.freeformatter.com/xsd-generator.html我的問題是,我不能指定「字符串」(SOMENAME)如果節點(placeName)已經包含屬性字符串和子模式,串。但根據上面的xml-xsd轉換器,我甚至不需要指定節點包含文本字符串。大! – user3241376

回答

1

您不能sequencesimpleContent而創建的,我懷疑你真正想要的是使用complexContent卻使類型mixed="true"

+0

謝謝!我按照你的說法改變了它,並將「混合」添加到地方的節點。我編輯了這個問題。現在我有另一個錯誤,但整體看起來更好 - 現在當我可視化模式時,所有節點和屬性都存在。 – user3241376

1

擴展xs:anyType不起作用。這是說「你可以有任何序列的元素,其次是地名」。這在本質上是無法預測的,因爲當你找到一個地名時,你不知道它是否是「任何元素序列」的一部分,或者是最終的地名。

順便說一下,請不要以這種方式編輯您的問題,將其變成完全不同的問題。這使得無法理解現有的答案。

+0

如果我把「xs:string」而不是anyType,我仍然得到錯誤,這次是另一個:[Xerces] src-ct.1:類型'#AnonType_place'的複雜類型定義表示錯誤。何時使用,基本類型必須是complexType。 'string'是一個simpleType。 – user3241376

+0

問題是重新編輯的,現在它包含代碼的初始版本 – user3241376

+0

這完全不清楚爲什麼你想通過限制或擴展來定義你的類型。爲什麼不把它定義爲「從頭」? –