XML模式使用属性不能出现在元素中

时间:2013-04-24 13:24:36

标签: xml xsd

因此,当我将use ="required"属性放入我的架构中进行XML分配时,我收到以下消息:

  

s4s-att-not-allowed:属性“use”不能出现在元素中   '元素'。

这是什么意思?它根本不会影响我的代码,并且此赋值需要use属性。

架构代码:

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Inventory">
<xs:complexType>
  <xs:sequence>
    <xs:element name="Items" use="required">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="PartID" type="xs:ID" use="required"/>
          <xs:element name="Part_Desc" type="xs:string" use="required"/>
          <xs:element name="Price" type="xs:decimal" use="required"/>
                        <xs:restriction base="xs:decimal">
                 <xs:fractionDigits value="2"/>
                </xs:restriction>
        </xs:sequence>
        <xs:attribute name="vendor_id" type="xs:int" use="required"/>
       </xs:complexType>
       </xs:element>
      </xs:sequence>
    </xs:complexType>
   </xs:element>
</xs:schema>

这是我的XML代码:

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

<Items vendor_id="2">        
<PartID>a101</PartID>       
<Part_Desc>Keyboard</Part_Desc>        
<Price>79.99</Price>    
</Items>    

 <Items vendor_id="5">        
 <PartID>a404</PartID>        
 <Part_Desc>Wireless Mouse</Part_Desc>        
 <Price>59.99</Price>    
 </Items>    

 <Items vendor_id="3">        
 <PartID>a120</PartID>       
 <Part_Desc>2 GB USB Drive</Part_Desc>        
 <Price>18.99</Price>   
 </Items>    

 <Items vendor_id="8">        
 <PartID>c506</PartID>   
 <Part_Desc>24" Monitor</Part_Desc>        
 <Price>459.99</Price>  
 </Items>

 </Inventory>

代码似乎仍然有效,没有错误。

1 个答案:

答案 0 :(得分:4)

use属性仅对xs:attribute元素有效。

如果要指定元素是必需元素还是可选元素,请使用minOccurs属性。

所需元素:

<xs:element name="PartID" type="xs:ID" minOccurs="1"/>

元素可选:

<xs:element name="PartID" type="xs:ID" minOccurs="0"/>

请注意,默认情况下minOccurs1,而默认情况下useoptional

<强>更新

使用restriction需要定义(简单)类型。这样:

 <xs:element name="Price" minOccurs="1">
   <xs:simpleType>
     <xs:restriction base="xs:decimal">
       <xs:fractionDigits value="2"/>
     </xs:restriction>
   </xs:simpleType>
 </xs:element>

Price定义为小数部分的2位数小数。