<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v5 rel. 3 U (http://www.xmlspy.com) by Registred (Registred) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:hasthi="http://hasthi.sourceforge.net/ns" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:element name="projectModel" type="ProjectModelType"/>
	<xs:simpleType name="ScopeType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="public"/>
			<xs:enumeration value="private"/>
			<xs:enumeration value="protected"/>
			<xs:enumeration value=""/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="StereotypeType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="boundry"/>
			<xs:enumeration value="entity"/>
			<xs:enumeration value="control"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="AssociationDirectionType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="uni"/>
			<xs:enumeration value="bi"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ClassCatagoryType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="interface"/>
			<xs:enumeration value="abstract"/>
			<xs:enumeration value="concrete"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="ExceptionListType">
		<xs:sequence>
			<xs:element name="exception" type="ExceptionType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ExceptionType">
		<xs:complexContent>
			<xs:extension base="UMLElementType">
				<xs:all>
					<xs:element name="name" type="xs:string"/>
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="MethodListType">
		<xs:sequence>
			<xs:element name="method" type="MethodType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="AttributeListType">
		<xs:sequence>
			<xs:element name="attribute" type="AttributeType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- FieldType for attributes -->
	<xs:complexType name="AttributeType">
		<xs:complexContent>
			<xs:extension base="UMLElementType">
				<xs:attribute name="type" type="xs:string"/>
				<xs:attribute name="scope" type="ScopeType"/>
				<xs:attribute name="isStatic" type="xs:boolean"/>
				<xs:attribute name="isFinal" type="xs:boolean"/>
				<xs:attribute name="defaultValue" type="xs:string"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!-- paramter -->
	<xs:complexType name="ParameterType">
		<xs:complexContent>
			<xs:extension base="UMLElementType">
				<xs:attribute name="parameterName" type="xs:string"/>
				<xs:attribute name="parameterType" type="xs:string"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ParameterListType">
		<xs:sequence>
			<xs:element name="parameter" type="ParameterType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="MethodType">
		<xs:complexContent>
			<xs:extension base="UMLElementType">
				<xs:all>
					<xs:element name="exceptionList" type="ExceptionListType" minOccurs="0"/>
					<xs:element name="parameterList" type="ParameterListType" minOccurs="0"/>
				</xs:all>
				<xs:attribute name="returnType" type="xs:string"/>
				<xs:attribute name="scopeModifier" type="ScopeType"/>
				<xs:attribute name="isFinal" type="xs:boolean"/>
				<xs:attribute name="isStatic" type="xs:boolean"/>
				<xs:attribute name="isSync" type="xs:boolean"/>
				<xs:attribute name="isAbstract" type="xs:boolean"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!-- parent of all elements -->
	<xs:complexType name="UMLElementType">
		<xs:all>
			<xs:element name="description" type="xs:string"/>
		</xs:all>
		<xs:attribute name="name" type="xs:string"/>
		<xs:attribute name="id" type="xs:ID" use="required"/>
	</xs:complexType>
	<!-- root of class,interface.abstract classes -->
	<xs:complexType name="UMLClassComponentType">
		<xs:complexContent>
			<xs:extension base="UMLElementType"/>
		</xs:complexContent>
	</xs:complexType>
	<!-- parent of Abstract,Class,Interface -->
	<xs:complexType name="ClassType">
		<xs:complexContent>
			<xs:extension base="UMLClassComponentType">
				<xs:all>
					<xs:element name="methodList" type="MethodListType"/>
					<xs:element name="attributeList" type="AttributeListType"/>
				</xs:all>
				<xs:attribute name="parent" type="xs:IDREF"/>
				<xs:attribute name="scope" type="ScopeType"/>
				<xs:attribute name="catagory" type="ClassCatagoryType"/>
				<xs:attribute name="stereotype" type="StereotypeType"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!-- multiplicilty node -->
	<xs:complexType name="StartEndElementType">
		<xs:complexContent>
			<xs:extension base="UMLElementType">
				<xs:attribute name="refid" type="xs:IDREF"/>
				<xs:attribute name="multiplicity" type="xs:integer"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!-- parent of generalizarion.association,compositin -->
	<xs:complexType name="RelationshipType">
		<xs:complexContent>
			<xs:extension base="UMLElementType">
				<xs:all>
					<xs:element name="startElement" type="StartEndElementType"/>
					<xs:element name="endElement" type="StartEndElementType"/>
				</xs:all>
				<xs:attribute name="relationType" type="RelationshipCategoryType"/> 
				<xs:attribute name="associationClassId" type="xs:IDREF"/>
				<xs:attribute name="direction" type="AssociationDirectionType"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<!--  Association -->
	
	

	<xs:simpleType name="RelationshipCategoryType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="association"/>
			<xs:enumeration value="dependancy"/>
			<xs:enumeration value="aggregation"/>
			<xs:enumeration value="composition"/>
			<xs:enumeration value="generalization"/>
		</xs:restriction>
	</xs:simpleType>

	
	<!--  Dependancy -->
	
	<!-- UMLNote for adding notes -->
	<xs:complexType name="UMLNoteType">
		<xs:complexContent>
			<xs:extension base="UMLElementType"/>
		</xs:complexContent>
	</xs:complexType>
	<!-- PackageType -->
	<xs:complexType name="PackageType">
		<xs:all>
			<xs:element name="classList">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="class" type="ClassType" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
				<xs:element name="relationshipList">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="relationship" type="" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="packageList">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="package" type="PackageType" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="noteList">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="note" type="UMLNoteType" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<!-- Package List -->
		</xs:all>
	</xs:complexType>
	<!-- class model - holding some packageType -->
	<xs:complexType name="ClassModelType">
		<xs:all>
			<xs:element name="packageList">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="package" type="PackageType" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:all>
	</xs:complexType>
	<!-- project model - holding some ClassModel... In future SequenceModel...Usecase Model... -->
	<xs:complexType name="ProjectModelType">
		<xs:all>
			<xs:element name="ClassModel" type="ClassModelType"/>
		</xs:all>
		<xs:attribute name="projectName" type="xs:string"/>
		<xs:attribute name="projectAuthor" type="xs:string"/>
	</xs:complexType>
</xs:schema>
