[XML] Einschränkung eines elements bei xsd

diego86

Newbie
Registriert
Juni 2009
Beiträge
2
ich möchte das element methodtype je nachdem in welchem element es benutzt wird einschränken
bsp.: wenn ich ein cetype habe dann darin ein method definiere, dann darf das attribut m_type in method nur die werte OS und trigger annehmen,
bei smtype nur noOS.

gibts es ne möglichkeit so eine beschränkung ins schema file einzufügen.

Code:
<xsd:complexType name="methodType">
	<xsd:sequence>
		<xsd:element name="interfaceElement" type="interfaceElementType" minOccurs="0" maxOccurs="unbounded"/>
	</xsd:sequence>		
	<xsd:attribute name="name" type="xsd:NMTOKEN" use="required"/>
	<xsd:attribute name="m_type" use="required">	
		<xsd:simpleType>
			<xsd:restriction base="xsd:NMTOKEN">
				<xsd:enumeration value="OS"/>
				<xsd:enumeration value="NoOS"/>
				<xsd:enumeration value="trigger"/>
			</xsd:restriction>
		</xsd:simpleType>
	</xsd:attribute>
</xsd:complexType>
 
<xsd:complexType name="smType">
	<xsd:sequence>
		<xsd:element name="method" type="methodType" minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element name="sm" type="smType" minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element name="interfaceElement" type="interfaceElementType" minOccurs="0" maxOccurs="unbounded"/>
	</xsd:sequence>
	<xsd:attribute name="name" type="xsd:NMTOKEN" use="required"/>
</xsd:complexType>
 
<xsd:complexType name="ceType">
	<xsd:sequence>
		<xsd:element name="method" type="methodType" minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element name="ce" type="ceType" minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element name="interfaceElement" type="interfaceElementType" minOccurs="0" maxOccurs="unbounded"/>
	</xsd:sequence>
	<xsd:attribute name="name" type="xsd:NMTOKEN" use="required"/>
</xsd:complexType>

meine idee, ich habe es über vererbung versucht, aber es kommen fehler medlungen beim validieren, gibt es vlt eine bessere oder andere lösung

Code:
<xsd:complexType name="methodType_module">
	<xsd:complexContent>
		<xsd:restriction base="methodType">
			<xsd:sequence>
				<xsd:element name="interfaceElement" type="interfaceElementType" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>		
			<xsd:attribute name="name" type="xsd:NMTOKEN" use="required"/>
			<xsd:attribute name="m_type" use="required">	
				<xsd:simpleType>
					<xsd:restriction base="xsd:NMTOKEN">
						<xsd:enumeration value="OStype"/> 
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
		</xsd:restriction>
	</xsd:complexContent>
</xsd:complexType>
 
Zurück
Oben