Druck-Version
Deutsch Nederlands English
Inhaltsverzeichnis
Teile: Teil: XML Teil: PHP Quellenverzeichnis
Pfad: > Teil: XML > XML-Schema
Benachbarte Abschnitte: Grundlagen Definition komplexer Typen, Elementen- und Attributdeklaration Simple Typen Anonyme Typ-Definitionen Element-Inhalte Kommentare (annotations) Aufbau von Inhaltsmodellen Attribut-Gruppen NIL-Werte
1.3.8. Attribut-Gruppen

Angenommen, es wird erforderlich, weitere Informationen zu den Gegenständen im purchase order zur Verfügung zu stellen. Beispielsweise das Gewicht und der bevorzugten Zustellmethode. Dies kann erreicht werden über die Deklaration der Attribute weichtKg und shipBy in der (anonymen) Typ-Definition des item-Elements.

Beispiel 41: Zusätzliche Attribute in einer inline-Typ-Definition
<xsd:element name="Item" minOccurs="0" maxOccurs="unbounded"> 
	<xsd:complexType> 
		<xsd:sequence> 
			<xsd:element name="productName" type="xsd:string"/> 
			<xsd:element name="quantity"> 
				<xsd:simpleType> 
					<xsd:restriction base="xsd:positiveInteger"> 
						<xsd:maxExclusive value="100"/> 
					</xsd:restriction> 
				</xsd:simpleType> 
			</xsd:element> 
			<xsd:element name="USPrice" type="xsd:decimal"/> 
			<xsd:element ref="comment" minOccurs="0"/> 
			<xsd:element name="shipDate" type="xsd:date" 
													minOccurs="0"/> 
		</xsd:sequence> 
		<xsd:attribute name="partNum" type="SKU" use="required"/> 
		<!-- add weightKg and shipBy attributes --> 
		<xsd:attribute name="weightKg" type="xsd:decimal"/> 
		<xsd:attribute name="shipBy"> 
			<xsd:simpleType> 
				<xsd:restriction base="xsd:string"> 
					<xsd:enumeration value="air"/> 
					<xsd:enumeration value="land"/> 
					<xsd:enumeration value="any"/> 
				</xsd:restriction> 
			</xsd:simpleType> 
		</xsd:attribute> 
	</xsd:complexType> 
</xsd:element>  

Alternativ lassen sich die Attribute als benannte Gruppe an anderer Stelle definiert, und in der item-Deklaration referenziert werden.

Beispiel 42: Attribute mittels einer attribute-Gruppe
<xsd:element name="item" minOccurs="0" maxOccurs="unbounded"> 
	<xsd:complexType> 
		<xsd:sequence> 
			<xsd:element name="productName" type="xsd:string"/> 
			<xsd:element name="quantity"> 
				<xsd:simpleType> 
					<xsd:restriction base="xsd:positiveInteger"> 
					<xsd:maxExclusive value="100"/> 
					</xsd:restriction> 
				</xsd:simpleType> 
			</xsd:element> 
			<xsd:element name="USPrice" type="xsd:decimal"/> 
			<xsd:element ref="comment" minOccurs="0"/> 
			<xsd:element name="shipDate" type="xsd:date" 
													minOccurs="0"/> 
		</xsd:sequence> 
		<!-- attributeGroup replaces individual declarations --> 
		<xsd:attributeGroup ref="ItemDelivery"/> 
	</xsd:complexType> 
</xsd:element> 
<xsd:attributeGroup name="ItemDelivery"> 
	<xsd:attribute name="partNum" type="SKU" use="required"/> 
	<xsd:attribute name="weightKg" type="xsd:decimal"/> 
	<xsd:attribute name="shipBy"> 
		<xsd:simpleType> 
			<xsd:restriction base="xsd:string"> 
				<xsd:enumeration value="air"/> 
				<xsd:enumeration value="land"/> 
				<xsd:enumeration value="any"/> 
			</xsd:restriction> 
		</xsd:simpleType> 
	</xsd:attribute> 
</xsd:attributeGroup>  

Das Auslagern ganzer Attributgruppen stellt eine elegante Methode dar, die Lesbarkeit von Schemata zu verbessern und gleichzeitig die Wartung zu erleichtern, da solche Gruppen einmalig definiert beliebig oft verwendet werden können. Eine Attributgruppe kann im Übrigen andere Attributgruppen enthalten. Sowohl die Attributdeklaration als auch die Attributgruppenreferenz müssen am Ende der Definition eines komplexen Typen eingefügt werden.