简体   繁体   中英

XML Schema Use Attribute Cannot Appear in Element

So when I put in the use ="required" attribute into my schema for an XML assignment, I get the following message:

s4s-att-not-allowed: Attribute 'use' cannot appear in element 'element'.

What does it mean? It doesn't seem to be affecting my code at all, and the use attribute is required for this assignment.

Schema Code:

<?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>

And here is my XML code:

<?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>

The code seems to work still, there are not errors.

The use attribute is valid only for xs:attribute elements.

If you want to specify that an element is mandatory or optional use the minOccurs attribute.

Element required:

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

Element optional:

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

Note that by default minOccurs is 1 , whereas by default use is optional .

UPDATE

The use of restriction requires the definition of a (simple) type. This:

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

defines Price to be a decimal with 2 digits for the fraction part.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM