#AnonType_Apps中的XSD验证错误

时间:2012-10-10 15:23:44

标签: xsd

当我尝试验证我的XSD时,它会给出错误

  

S4s-elt-invalid-content.1:'#AnonType_Apps'的内容无效。   元素'序列'无效,错位或太频繁发生。

不知道应该做什么

    <?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name ="Apps">
   <xs:complexType>
       <xs:attribute name ="List_Type" use="required">
          <xs:simpleType>
          <xs:restriction base="xs:string">
               <xs:enumeration value="new releases"/>
               <xs:enumeration value="top rated"/>
               <xs:enumeration value="category list"/>
           </xs:restriction>
           </xs:simpleType>
          </xs:attribute>
        <xs:attribute name ="Server_IP" type="xs:string" fixed="10.144.50.55"/>
        <xs:sequence>
        <xs:element name ="App" minOccurs="1" maxOccurs="20">
           <xs:complexType>
                 <xs:attribute name ="device_type" use="optinal" >
                 <xs:simpleType>
                 <xs:restriction base="xs:string">
                       <xs:enumeration value="tablet"/>
                       <xs:enumeration value="phone"/>
                    </xs:restriction>
            </xs:simpleType>
            </xs:attribute>
                 <xs:attribute name ="app_id" type="xs:string"/>  
                 <xs:attribute name ="installed" type="xs:boolean" default="false"/>
                 <xs:sequence>
                 <xs:element name ="app_name" type="xs:string"></xs:element>
                 <xs:element name ="catogry" minOccurs="1" maxOccurs="3"></xs:element>
                 <xs:element name ="version" type="xs:string"></xs:element>
                 <xs:element name ="description" type="xs:string"></xs:element>
                 <xs:element name ="reviews" use="required">
                    <xs:complexType>
                       <xs:sequence>
                       <xs:element name ="review" minOccurs="0" maxOccurs="unbounded">
                          <xs:complexType>
                          <xs:all>
                             <xs:element name ="reviewer_name" type="xs:string"></xs:element>
                             <xs:element name ="review_date">
                                <xs:complexType>
                                   <xs:restriction base="xs:string">
                                      <xs:pattern value="\d{4}\-\d{2}\-\d{2}"/>
                                   </xs:restriction>
                                 </xs:complexType>
                             </xs:element>
                             </xs:all>
                           </xs:complexType>
                       </xs:element>
                       </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name ="review_time">
                   <xs:complexType>
                      <xs:restriction base="xs:string">
                          <xs:pattern value="\d{2}:\d{2}:\d{}"/>
                      </xs:restriction>
                   </xs:complexType>
               </xs:element>
               <xs:element name ="content" type="xs:string"></xs:element>
               <xs:element name ="rating">
                  <xs:complexType>                                
                      <xs:restriction base="xs:float">
                         <xs:minInclusive value="0" />
                         <xs:maxInclusive value="5" />
                     </xs:restriction>
                 </xs:complexType>
             </xs:element>
            </xs:sequence>
         </xs:complexType>
       </xs:element>
       </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>

2 个答案:

答案 0 :(得分:0)

你的xs:sequence元素需要对complexType元素进行必要的跟踪。

您的review_date和review_time元素应该是带有限制的simpleType。

如果您修复了这些问题,那么您的xsd似乎已经过验证。

答案 1 :(得分:0)

complexType元素中,内容模型首先出现,属性声明最后出现。移动最外面的sequence元素,使其成为复杂类型的第一个子元素。

您可能希望尝试使用语法识别编辑器来编辑架构文档,以提醒您注意此类问题。

此片段中的其他语法问题:

  • 其他complexType元素在将属性声明放在​​首位时具有相同的语法错误。

  • 如果您希望rating的类型是xs:float的限制,那么您希望它具有简单类型,而不是复杂类型。

  • 同样适用于review_timereview_date

  • review_time类型上的模式不是合法的正则表达式:大括号可能包含有关子表达式(字符串匹配)的最小和/或最大出现次数的信息,有多种形式,但是它们必须包含某些内容,因此\d{}不是一个合法的表达方式。放下空的大括号,或者如果你愿意的话,可以把它变成\d{1},或者说出你想要的东西。

  • xs:element元素没有名为use的属性;我想你可能想说<xs:element name="reviews" minOccurs="1" maxOccurs="1"> ...

  • use属性不接受值optinal

找一位编辑!