1

当我尝试验证我的 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>
4

2 回答 2

0

您的 xs:sequence 元素需要紧跟在 complexType 元素上。

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

如果你解决了这些问题,你的 xsd 似乎是有效的。

于 2012-10-10T15:47:10.973 回答
0

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

您可能想尝试找到一个语法感知编辑器来编辑模式文档,以提醒您此类问题。

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

  • 其他complexType元素具有相同的语法错误,即把它们的属性声明放在​​首位。

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

  • review_time和同上review_date

  • 类型的模式review_time不是合法的正则表达式:大括号可能包含关于(匹配字符串)子表达式的最小和/或最大出现的信息,以各种形式,但它们必须包含something,因此\d{}不是合法的表达。放下空的大括号,或者\d{1}如果你喜欢就做,或者让它说出你想要的。

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

  • use属性不接受该值optinal

找编辑!

于 2012-10-10T15:55:15.237 回答