XML Schema Use Attribute Cannot Appear in Element
xml, xsd
Solution
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.
Problem
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.