When used with elements, the minOccurs and maxOccurs attributes specify the number of occurrences of the element. For example, if an element has a minOccurs value of 0, the element is optional. You can also declare an element to occur one or more times by setting a maxOccurs attribute to 1 or * respectively. The default value for minOccurs is 1, and maxOccurs has no default value.
When used with attributes, minOccurs and maxOccurs indicate whether the attribute is required. The maxOccurs attribute defaults to 1 unless it is specified or minOccurs is greater than 1. If minOccurs is set to 0 for an attribute and the default maxOccurs is equal to 1, you can have between 0 and 1 occurrences of this attribute. Thus, an attribute with minOccurs set to 0 is optional. If minOccurs is set to 1, the attribute is required. The default for minOccurs is 0, but it's better to specify a value for it in your schema. The minOccurs and maxOccurs attributes can be set only to 0 or 1. For example, the following declaration makes the target attribute required:
<attribute name = "target" minOccurs = "1" maxOccurs = "1" type = "string"/>
Notice that the attributes we have discussed in this section can also be used to define other elements such as the attribute element.
The attribute Element
Attributes were declared in the simplified DTD in "A DTD for Schemas" as follows:
<!ELEMENT attribute ((annotation)?, (simpleType)?)> <!ATTLIST attribute type CDATA #IMPLIED default CDATA #IMPLIED fixed CDATA #IMPLIED name CDATA #REQUIRED minOccurs (0|1) '0' maxOccurs (0|1) '1' >
In schemas, attributes are the association of a name with a particular simple data type. The attribute element is not included in the schema element, and therefore can only be used as a child element of the complexType or attributeGroup element. This means that all attribute elements will have local scope.
You can use the attribute element within a complexType element that has either local or document scope. As we'll see in the next section, you can group attribute elements together in an attributeGroup element. The name attribute must follow the same naming conventions as attribute names for DTDs.
You can use either a default attribute or a fixed attribute with attribute elements, but not both for the same attribute element. Unlike in DTDs, the fixed and default values are not linked to an attribute as optional or required-you can choose to make any attribute have a fixed value or a default value. A fixed value cannot be changed. The value of the default attribute will be the default value if one is not supplied for the attribute. The following declarations show the usage of default and fixed attributes:
<attribute name = "myAttribute" minOccurs = "1" fixed = "preserve" type = string"/> <attribute name = "align" minOccurs = "0" default = "Center" type = "string"/>