Difference between revisions of "Service-schema"

From Gcube Wiki
Jump to: navigation, search
(New page: <pre> <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:annotation> <xs:documentation xml:lang="en"> XML Schema for gCube Services Ve...)
 
Line 4: Line 4:
 
<xs:annotation>
 
<xs:annotation>
 
<xs:documentation xml:lang="en">
 
<xs:documentation xml:lang="en">
XML Schema for gCube Services Version 1.2 Last modified:29/04/2008 Contact: http://www.gcube-system.org
+
XML Schema for gCube Services Version 1.2 Last modified:19/02/2008 Contact: http://www.gcube-system.org
 
</xs:documentation>
 
</xs:documentation>
 
</xs:annotation>
 
</xs:annotation>
+
<!-- SERVICE -->
 
<xs:redefine schemaLocation="CommonTypeDefinitions.xsd">
 
<xs:redefine schemaLocation="CommonTypeDefinitions.xsd">
 
<xs:complexType name="ProfileType">
 
<xs:complexType name="ProfileType">
Line 13: Line 13:
 
<xs:restriction base="ProfileType">
 
<xs:restriction base="ProfileType">
 
<xs:sequence>
 
<xs:sequence>
<xs:element name="Infrastructure" type="xs:string"/>
+
<xs:element name="Description" type="xs:string" minOccurs="0"/>
<xs:element ref="GHNDescription"/>
+
<xs:element ref="Class"/>
<xs:element ref="Site"/>
+
<xs:element ref="Name"/>
<xs:element name="DeployedPackages" minOccurs="0">
+
<xs:element ref="Version"/>
 +
<xs:element ref="Configuration" minOccurs="0"/>
 +
<xs:element name="Dependencies" minOccurs="0">
 
<xs:complexType>
 
<xs:complexType>
 
<xs:sequence>
 
<xs:sequence>
<xs:element ref="Package" minOccurs="1" maxOccurs="unbounded"/>
+
<xs:element name="Dependency" maxOccurs="unbounded">
 +
<xs:complexType>
 +
<xs:sequence>
 +
<xs:element ref="Class"/>
 +
<xs:element ref="Name"/>
 +
<xs:element ref="Version"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 
</xs:sequence>
 
</xs:sequence>
 
</xs:complexType>
 
</xs:complexType>
 
</xs:element>
 
</xs:element>
 +
<xs:element name="Packages">
 +
<xs:complexType>
 +
<xs:choice>
 +
<xs:sequence>
 +
<xs:element ref="Main"/>
 +
<xs:element ref="Software" minOccurs="0" maxOccurs="unbounded"/>
 +
</xs:sequence>
 +
<xs:element ref="Software" maxOccurs="unbounded"/>
 +
</xs:choice>
 +
</xs:complexType>
 +
</xs:element>
 +
<xs:element name="SpecificData" type="FreeTextType" minOccurs="0"/>
 
</xs:sequence>
 
</xs:sequence>
 
</xs:restriction>
 
</xs:restriction>
Line 28: Line 50:
 
</xs:complexType>
 
</xs:complexType>
 
</xs:redefine>
 
</xs:redefine>
 
+
<xs:element name="Class" type="xs:string"/>
<xs:element name="GHNDescription">
+
<xs:element name="Name" type="xs:string"/>
 +
<xs:element name="Version" type="xs:string"/>
 +
<xs:element name="Configuration">
 
<xs:complexType>
 
<xs:complexType>
 
<xs:sequence>
 
<xs:sequence>
<xs:element name="Name" type="xs:string"/>
+
<xs:element name="Static" minOccurs="0">
<xs:element ref="Type"/>
+
<xs:complexType>
<xs:element name="SecurityEnabled" type="BooleanValueType"/>
+
<xs:sequence>
<xs:element name="CredentialsExpireOn" type="xs:dateTime" minOccurs="0"/>
+
<xs:element name="Configs" minOccurs="0">
<xs:element ref="Architecture"/>
+
<xs:annotation>
<xs:element ref="OperatingSystem"/>
+
<xs:documentation xml:lang="en">
<xs:element ref="Processor" minOccurs="0" maxOccurs="unbounded"/>
+
These configurations have to refer to predefined configuration files distributed with the MAIN package.
<xs:element ref="NetworkAdapter" minOccurs="0" maxOccurs="unbounded"/>
+
At VRE creation time, the VRE designer will choose one.
<xs:element ref="Benchmark" minOccurs="0"/>
+
</xs:documentation>
<xs:element ref="RunTimeEnv"/>
+
</xs:annotation>
<xs:element ref="StorageDevice" minOccurs="0" maxOccurs="unbounded"/>
+
<xs:complexType>
<xs:element ref="StoragePartition" minOccurs="0" maxOccurs="unbounded"/>
+
<xs:sequence>
<xs:element ref="LocalFileSystem" minOccurs="0" maxOccurs="unbounded"/>
+
<xs:element name="Config" type="ConfigurationType" maxOccurs="unbounded"/>
<xs:element ref="RemoteFileSystem" minOccurs="0" maxOccurs="unbounded"/>
+
</xs:sequence>
<xs:element ref="StorageDevice2StoragePartition" minOccurs="0" maxOccurs="unbounded"/>
+
</xs:complexType>
<xs:element ref="StoragePartition2FileSystem" minOccurs="0" maxOccurs="unbounded"/>
+
</xs:element>
<xs:element name="Uptime" type="xs:string"/>
+
<xs:element name="Template" minOccurs="0">
<xs:element ref="Load" minOccurs="0"/>
+
<xs:complexType>
<xs:element ref="HistoricalLoad" minOccurs="0"/>
+
<xs:sequence>
<xs:element ref="MainMemory"/>
+
<xs:element name="Params">
<xs:element name="LocalAvailableSpace" type="xs:integer" minOccurs="0"/>
+
<xs:complexType>
<xs:element name="LastUpdate" type="xs:dateTime"/>
+
<xs:sequence>
 +
<xs:element name="Param" type="TemplateParam" maxOccurs="unbounded"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 +
<xs:element name="Dynamic" minOccurs="0">
 +
<xs:complexType/>
 +
</xs:element>
 
</xs:sequence>
 
</xs:sequence>
 
</xs:complexType>
 
</xs:complexType>
 
</xs:element>
 
</xs:element>
+
<xs:complexType name="ConfigurationType">
<xs:element name="Type">
+
<xs:sequence>
<xs:annotation>
+
<xs:element name="File" type="xs:string"/>
<xs:documentation xml:lang="en">
+
<xs:element name="Description" type="xs:string"/>
Dynamic: the GHN supports dynamic deployment of new packages
+
<xs:element name="Label" type="xs:string"/>
Static: the GHN does not support dynamic deployment of new packages
+
</xs:sequence>
SelfClening: the GHN supports dynamic deployment of new packages, but only for a short limited period
+
<xs:attribute name="default" type="xs:boolean" use="required"/>
</xs:documentation>
+
</xs:complexType>
</xs:annotation>
+
<xs:complexType name="TemplateParam">
<xs:simpleType>
+
<xs:sequence>
<xs:restriction base="xs:string">
+
<xs:element name="Name" type="xs:string"/>
<xs:enumeration value="Dynamic"/>
+
<xs:element name="Description" type="xs:string"/>
<xs:enumeration value="Static"/>
+
<xs:element name="AllowedValues">
<xs:enumeration value="SelfCleaning"/>
+
<xs:complexType>
</xs:restriction>
+
<xs:sequence>
</xs:simpleType>
+
<xs:element name="Value" maxOccurs="unbounded">
</xs:element>
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element name="Description" type="xs:string"/>
<xs:element name="Architecture">
+
<xs:element name="Literal" type="xs:string"/>
<xs:complexType>
+
<xs:element name="Label" type="xs:string"/>
<xs:attribute name="PlatformType" type="xs:string" use="required"/>
+
</xs:sequence>
<xs:attribute name="SMPSize" type="xs:integer" use="required"/>
+
<xs:attribute name="default" type="xs:boolean" use="required"/>
<xs:attribute name="SMTSize" type="xs:integer" use="required"/>
+
</xs:complexType>
</xs:complexType>
+
</xs:element>
</xs:element>
+
</xs:sequence>
<xs:element name="Benchmark">
+
</xs:complexType>
<xs:complexType>
+
</xs:element>
<xs:attribute name="SI00" type="xs:integer" use="required"/>
+
</xs:sequence>
<xs:attribute name="SF00" type="xs:integer" use="required"/>
+
</xs:complexType>
</xs:complexType>
+
<!-- PACKAGE -->
</xs:element>
+
<xs:complexType name="Package">
<xs:element name="Load">
+
<xs:sequence>
<xs:complexType>
+
<xs:element name="Description" type="xs:string" minOccurs="0"/>
<xs:attribute name="Last1Min" type="xs:double" use="optional"/>
+
<xs:element name="Name" type="xs:string"/>
<xs:attribute name="Last5Min" type="xs:double" use="optional"/>
+
<xs:element name="Version" type="xs:string"/>
<xs:attribute name="Last15Min" type="xs:double" use="optional"/>
+
<xs:element name="MultiVersion" type="BooleanValueType" minOccurs="0"/>
</xs:complexType>
+
<xs:element name="Mandatory" minOccurs="0">
</xs:element>
+
<xs:complexType>
<xs:element name="HistoricalLoad">
+
<xs:attribute name="level" type="Scopes" use="required"/>
<xs:complexType>
+
</xs:complexType>
<xs:attribute name="Last1H" type="xs:double" use="optional"/>
+
</xs:element>
<xs:attribute name="Last1Day" type="xs:double" use="optional"/>
+
<xs:element name="Shareable" minOccurs="0">
<xs:attribute name="Last1Week" type="xs:double" use="optional"/>
+
<xs:complexType>
</xs:complexType>
+
<xs:attribute name="level" type="Scopes" default="VO"/>
</xs:element>
+
</xs:complexType>
<xs:element name="MainMemory">
+
</xs:element>
<xs:complexType>
+
<xs:element name="GHNRequirements" minOccurs="0">
<xs:attribute name="RAMSize" type="xs:integer"/>
+
<xs:complexType>
<xs:attribute name="VirtualSize" type="xs:integer"/>
+
<xs:sequence>
<xs:attribute name="RAMAvailable" type="xs:integer"/>
+
<xs:element ref="Requirement" maxOccurs="unbounded"/>
<xs:attribute name="VirtualAvailable" type="xs:integer"/>
+
</xs:sequence>
</xs:complexType>
+
</xs:complexType>
</xs:element>
+
</xs:element>
 
+
<xs:element name="InstallScripts" type="FileListType" minOccurs="0"/>
<xs:element name="NetworkAdapter">
+
<xs:element name="UninstallScripts" type="FileListType" minOccurs="0"/>
<xs:complexType>
+
<xs:element name="RebootScripts" type="FileListType" minOccurs="0"/>
<xs:attribute name="InboundIP" type="xs:string" use="required"/>
+
<xs:element name="Dependencies" minOccurs="0">
<xs:attribute name="OutboundIP" type="xs:string" use="required"/>
+
<xs:complexType>
<xs:attribute name="Name" type="xs:string" use="required"/>
+
<xs:sequence>
<xs:attribute name="IPAddress" type="xs:string" use="required"/>
+
<xs:element ref="Dependency" maxOccurs="unbounded"/>
<xs:attribute name="MTU" type="xs:integer" use="required"/>
+
</xs:sequence>
</xs:complexType>
+
</xs:complexType>
</xs:element>
+
</xs:element>
+
<xs:element name="SpecificData" type="FreeTextType" minOccurs="0"/>
<xs:element name="OperatingSystem">
+
</xs:sequence>
<xs:complexType>
+
<xs:attribute name="deployable" type="xs:boolean" use="optional" default="true"/>
<xs:attribute name="Name" type="xs:string" use="required"/>
+
</xs:complexType>
<xs:attribute name="Release" type="xs:string" use="required"/>
+
<xs:element name="Dependency">
<xs:attribute name="Version" type="xs:string" use="required"/>
+
</xs:complexType>
+
</xs:element>
+
+
<xs:element name="Processor">
+
<xs:complexType>
+
<xs:attribute name="Vendor" type="xs:string" use="required"/>
+
<xs:attribute name="Model" type="xs:string" use="required"/>
+
<xs:attribute name="ModelName" type="xs:string" use="required"/>
+
<xs:attribute name="Family" type="xs:string" use="required"/>
+
<xs:attribute name="ClockSpeedMhz" type="xs:decimal" use="required"/>
+
<xs:attribute name="Bogomips" type="xs:decimal" use="required"/>
+
<xs:attribute name="CacheL1" type="xs:integer" use="required"/>
+
<xs:attribute name="CacheL1I" type="xs:integer" use="required"/>
+
<xs:attribute name="CacheL1D" type="xs:integer" use="required"/>
+
<xs:attribute name="CacheL2" type="xs:integer" use="required"/>
+
</xs:complexType>
+
</xs:element>
+
+
<xs:element name="RunTimeEnv">
+
 
<xs:complexType>
 
<xs:complexType>
 
<xs:sequence>
 
<xs:sequence>
<xs:element name="Variable" maxOccurs="unbounded">
+
<xs:element ref="Service"/>
<xs:complexType>
+
<xs:element name="Package" type="xs:string"/>
<xs:sequence>
+
<xs:element name="Version" type="xs:string" default="1.0" minOccurs="0" maxOccurs="1"/>
<xs:element name="Key" type="xs:string" minOccurs="1" maxOccurs="1"/>
+
<xs:element name="Scope">
<xs:element name="Value" type="xs:string" minOccurs="1" maxOccurs="1"/>
+
<xs:complexType>
</xs:sequence>
+
<xs:attribute name="level" type="Scopes" use="optional" default="GHN"/>
</xs:complexType>
+
</xs:complexType>
 
</xs:element>
 
</xs:element>
 +
<xs:element name="Optional" type="xs:boolean"/>
 
</xs:sequence>
 
</xs:sequence>
 
</xs:complexType>
 
</xs:complexType>
 
</xs:element>
 
</xs:element>
+
<xs:element name="Service">
<xs:element name="Site">
+
 
<xs:complexType>
 
<xs:complexType>
 
<xs:sequence>
 
<xs:sequence>
<xs:element name="Location" type="xs:string"/>
+
<xs:element ref="Class"/>
<xs:element name="Country">
+
<xs:element ref="Name"/>
<xs:simpleType>
+
<xs:element ref="Version" minOccurs="0" maxOccurs="1"/>
<xs:restriction base="xs:string">
+
<xs:length value="2"/>
+
</xs:restriction>
+
</xs:simpleType>
+
</xs:element>
+
<xs:element name="Latitude" type="xs:string"/>
+
<xs:element name="Longitude" type="xs:string"/>
+
<xs:element name="Domain" type="xs:string"/>
+
 
</xs:sequence>
 
</xs:sequence>
 
</xs:complexType>
 
</xs:complexType>
 
</xs:element>
 
</xs:element>
+
<xs:simpleType name="Scopes">
<xs:element name="StorageDevice">
+
<xs:restriction base="xs:string">
 +
<xs:enumeration value="GHN"/>
 +
<xs:enumeration value="VRE"/>
 +
<xs:enumeration value="VO"/>
 +
</xs:restriction>
 +
</xs:simpleType>
 +
<xs:element name="Requirement">
 +
<xs:annotation>
 +
<xs:documentation xml:lang="en">
 +
- the "category" is represented by a tag name of a GHN profile
 +
- the "requirement" is one of the attributes defined for the selected category in the GHN profile
 +
- the "value" is the value of the selected attribute defined for the category in the GHN profile
 +
</xs:documentation>
 +
</xs:annotation>
 
<xs:complexType>
 
<xs:complexType>
<xs:attribute name="Name" type="xs:string" use="required"/>
+
<xs:attribute name="category" type="xs:string" use="required"/>
<xs:attribute name="Type" type="xs:string" use="required"/>
+
<xs:attribute name="requirement" type="xs:string" use="required"/>
<xs:attribute name="TransferRate" type="xs:integer" use="required"/>
+
<xs:attribute name="value" type="xs:string" use="required"/>
<xs:attribute name="Size" type="xs:integer" use="required"/>
+
<xs:attribute name="operator" type="OpType" use="required"/>
 
</xs:complexType>
 
</xs:complexType>
 
</xs:element>
 
</xs:element>
+
<xs:simpleType name="OpType">
<xs:element name="StorageDevice2StoragePartition">
+
<xs:restriction base="xs:string">
 +
<xs:enumeration value="eq"/>
 +
<xs:enumeration value="exist"/>
 +
<xs:enumeration value="ge"/>
 +
<xs:enumeration value="gt"/>
 +
<xs:enumeration value="le"/>
 +
<xs:enumeration value="lt"/>
 +
<xs:enumeration value="ne"/>
 +
</xs:restriction>
 +
</xs:simpleType>
 +
<xs:element name="Main">
 
<xs:complexType>
 
<xs:complexType>
<xs:attribute name="StorageDeviceName" type="xs:string" use="required"/>
+
<xs:complexContent>
<xs:attribute name="StoragePartitionName" type="xs:string" use="required"/>
+
<xs:extension base="Package">
 +
<xs:sequence>
 +
<xs:element name="GARArchive" type="xs:string"/>
 +
<xs:element name="ServiceEquivalenceFunctions" type="ServiceFunctionType" minOccurs="0"/>
 +
<xs:element name="PortType" maxOccurs="unbounded">
 +
<xs:complexType>
 +
<xs:sequence>
 +
<xs:element name="Name" type="xs:string"/>
 +
<xs:element name="Security" type="SecurityType" minOccurs="0"/>
 +
<xs:element name="WSDL" type="FreeTextType"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 +
</xs:sequence>
 +
</xs:extension>
 +
</xs:complexContent>
 
</xs:complexType>
 
</xs:complexType>
 
</xs:element>
 
</xs:element>
+
<xs:complexType name="ServiceFunctionType">
<xs:element name="StoragePartition">
+
<xs:sequence>
 +
<xs:element name="Function" minOccurs="0" maxOccurs="unbounded">
 +
<xs:complexType>
 +
<xs:sequence>
 +
<xs:element name="Name" type="xs:string"/>
 +
<xs:element name="FormalParameters">
 +
<xs:complexType>
 +
<xs:sequence minOccurs="0" maxOccurs="unbounded">
 +
<xs:element name="Name" type="xs:string"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 +
<xs:element name="Body" type="FreeTextType"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 +
</xs:sequence>
 +
</xs:complexType>
 +
<xs:element name="Software">
 
<xs:complexType>
 
<xs:complexType>
<xs:attribute name="Name" type="xs:string" use="required"/>
+
<xs:complexContent>
<xs:attribute name="Size" type="xs:string" use="required"/>
+
<xs:extension base="Package">
<xs:attribute name="ReadRate" type="xs:integer" use="required"/>
+
<xs:sequence>
<xs:attribute name="WriteRate" type="xs:integer" use="required"/>
+
<xs:element name="Type" default="library" minOccurs="0">
 +
<xs:simpleType>
 +
<xs:restriction base="xs:string">
 +
<xs:enumeration value="library"/>
 +
<xs:enumeration value="application"/>
 +
</xs:restriction>
 +
</xs:simpleType>
 +
</xs:element>
 +
<xs:choice>
 +
<xs:element name="Files" type="FileListType"/>
 +
<xs:element name="URI" type="xs:anyURI"/>
 +
</xs:choice>
 +
</xs:sequence>
 +
</xs:extension>
 +
</xs:complexContent>
 
</xs:complexType>
 
</xs:complexType>
 
</xs:element>
 
</xs:element>
+
<xs:complexType name="SecurityType">
<xs:element name="StoragePartition2FileSystem">
+
<xs:sequence>
 +
<xs:element name="Descriptor" type="FreeXMLType" minOccurs="0"/>
 +
<xs:element name="Operations" minOccurs="0">
 +
<xs:complexType>
 +
<xs:sequence>
 +
<xs:element ref="Operation" maxOccurs="unbounded"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 +
<xs:element ref="Roles" minOccurs="0"/>
 +
</xs:sequence>
 +
<xs:attribute name="name" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:element name="Roles">
 
<xs:complexType>
 
<xs:complexType>
<xs:attribute name="StoragePartitionName" type="xs:string" use="required"/>
+
<xs:sequence>
<xs:attribute name="FileSystemName" type="xs:string" use="required"/>
+
<xs:element name="Role" maxOccurs="unbounded">
 +
<xs:complexType>
 +
<xs:attribute name="value" type="xs:string" use="required"/>
 +
</xs:complexType>
 +
</xs:element>
 +
</xs:sequence>
 
</xs:complexType>
 
</xs:complexType>
 
</xs:element>
 
</xs:element>
+
<xs:element name="Operation">
<xs:element name="RemoteFileSystem" type="FileSystemType" />
+
<xs:element name="LocalFileSystem" type="FileSystemType" />
+
<xs:complexType name="FileSystemType">
+
<xs:attribute name="Name" type="xs:string" use="required"/>
+
<xs:attribute name="Root" type="xs:string" use="required"/>
+
<xs:attribute name="Size" type="xs:integer" use="required"/>
+
<xs:attribute name="ReadOnly" type="xs:boolean" use="required"/>
+
<xs:attribute name="Type" type="xs:string" use="required"/>
+
</xs:complexType>
+
+
+
<xs:element name="Package">
+
 
<xs:complexType>
 
<xs:complexType>
 
<xs:sequence>
 
<xs:sequence>
<xs:element name="ServiceID" type="xs:string"/>
+
<xs:element ref="Roles" minOccurs="0"/>
<xs:element name="Name" type="xs:string"/>
+
<xs:element name=" Version" type="xs:string" minOccurs="0"/>
+
 
</xs:sequence>
 
</xs:sequence>
 +
<xs:attribute name="id" type="xs:string" use="required"/>
 +
<xs:attribute name="name" type="xs:string" use="required"/>
 +
<xs:attribute name="description" type="xs:string" use="required"/>
 
</xs:complexType>
 
</xs:complexType>
 
</xs:element>
 
</xs:element>
 
 
</xs:schema>
 
</xs:schema>
 +
 
</pre>
 
</pre>

Revision as of 03:11, 8 July 2008

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:annotation>
		<xs:documentation xml:lang="en">
			XML Schema for gCube Services Version 1.2 Last modified:19/02/2008 Contact: http://www.gcube-system.org
		</xs:documentation>
	</xs:annotation>
	<!-- SERVICE -->
	<xs:redefine schemaLocation="CommonTypeDefinitions.xsd">
		<xs:complexType name="ProfileType">
			<xs:complexContent>
				<xs:restriction base="ProfileType">
					<xs:sequence>
						<xs:element name="Description" type="xs:string" minOccurs="0"/>
						<xs:element ref="Class"/>
						<xs:element ref="Name"/>
						<xs:element ref="Version"/>
						<xs:element ref="Configuration" minOccurs="0"/>
						<xs:element name="Dependencies" minOccurs="0">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Dependency" maxOccurs="unbounded">
										<xs:complexType>
											<xs:sequence>
												<xs:element ref="Class"/>
												<xs:element ref="Name"/>
												<xs:element ref="Version"/>
											</xs:sequence>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="Packages">
							<xs:complexType>
								<xs:choice>
									<xs:sequence>
										<xs:element ref="Main"/>
										<xs:element ref="Software" minOccurs="0" maxOccurs="unbounded"/>
									</xs:sequence>
									<xs:element ref="Software" maxOccurs="unbounded"/>
								</xs:choice>
							</xs:complexType>
						</xs:element>
						<xs:element name="SpecificData" type="FreeTextType" minOccurs="0"/>
					</xs:sequence>
				</xs:restriction>
			</xs:complexContent>
		</xs:complexType>
	</xs:redefine>
	<xs:element name="Class" type="xs:string"/>
	<xs:element name="Name" type="xs:string"/>
	<xs:element name="Version" type="xs:string"/>
	<xs:element name="Configuration">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Static" minOccurs="0">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="Configs" minOccurs="0">
								<xs:annotation>
									<xs:documentation xml:lang="en">
										These configurations have to refer to predefined configuration files distributed with the MAIN package. 
										At VRE	creation time, the VRE designer will choose one.
								</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:sequence>
										<xs:element name="Config" type="ConfigurationType" maxOccurs="unbounded"/>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="Template" minOccurs="0">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="Params">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="Param" type="TemplateParam" maxOccurs="unbounded"/>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="Dynamic" minOccurs="0">
					<xs:complexType/>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="ConfigurationType">
		<xs:sequence>
			<xs:element name="File" type="xs:string"/>
			<xs:element name="Description" type="xs:string"/>
			<xs:element name="Label" type="xs:string"/>
		</xs:sequence>
		<xs:attribute name="default" type="xs:boolean" use="required"/>
	</xs:complexType>
	<xs:complexType name="TemplateParam">
		<xs:sequence>
			<xs:element name="Name" type="xs:string"/>
			<xs:element name="Description" type="xs:string"/>
			<xs:element name="AllowedValues">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Value" maxOccurs="unbounded">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Description" type="xs:string"/>
									<xs:element name="Literal" type="xs:string"/>
									<xs:element name="Label" type="xs:string"/>
								</xs:sequence>
								<xs:attribute name="default" type="xs:boolean" use="required"/>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<!-- PACKAGE -->
	<xs:complexType name="Package">
		<xs:sequence>
			<xs:element name="Description" type="xs:string" minOccurs="0"/>
			<xs:element name="Name" type="xs:string"/>
			<xs:element name="Version" type="xs:string"/>
			<xs:element name="MultiVersion" type="BooleanValueType" minOccurs="0"/>
			<xs:element name="Mandatory" minOccurs="0">
				<xs:complexType>
					<xs:attribute name="level" type="Scopes" use="required"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="Shareable" minOccurs="0">
				<xs:complexType>
					<xs:attribute name="level" type="Scopes" default="VO"/>
				</xs:complexType>
			</xs:element>
			<xs:element name="GHNRequirements" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element ref="Requirement" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="InstallScripts" type="FileListType" minOccurs="0"/>
			<xs:element name="UninstallScripts" type="FileListType" minOccurs="0"/>
			<xs:element name="RebootScripts" type="FileListType" minOccurs="0"/>
			<xs:element name="Dependencies" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element ref="Dependency" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="SpecificData" type="FreeTextType" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="deployable" type="xs:boolean" use="optional" default="true"/>
	</xs:complexType>
	<xs:element name="Dependency">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Service"/>
				<xs:element name="Package" type="xs:string"/>
				<xs:element name="Version" type="xs:string" default="1.0" minOccurs="0" maxOccurs="1"/>
				<xs:element name="Scope">
					<xs:complexType>
						<xs:attribute name="level" type="Scopes" use="optional" default="GHN"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="Optional" type="xs:boolean"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Service">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Class"/>
				<xs:element ref="Name"/>
				<xs:element ref="Version" minOccurs="0" maxOccurs="1"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:simpleType name="Scopes">
		<xs:restriction base="xs:string">
			<xs:enumeration value="GHN"/>
			<xs:enumeration value="VRE"/>
			<xs:enumeration value="VO"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:element name="Requirement">
		<xs:annotation>
			<xs:documentation xml:lang="en">
				- the "category" is represented by a tag name of a GHN profile 
				- the "requirement" is one of the attributes defined for the selected category in the GHN profile 
				- the "value" is the value of the selected attribute defined for the category in the GHN profile
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:attribute name="category" type="xs:string" use="required"/>
			<xs:attribute name="requirement" type="xs:string" use="required"/>
			<xs:attribute name="value" type="xs:string" use="required"/>
			<xs:attribute name="operator" type="OpType" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:simpleType name="OpType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="eq"/>
			<xs:enumeration value="exist"/>
			<xs:enumeration value="ge"/>
			<xs:enumeration value="gt"/>
			<xs:enumeration value="le"/>
			<xs:enumeration value="lt"/>
			<xs:enumeration value="ne"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:element name="Main">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="Package">
					<xs:sequence>
						<xs:element name="GARArchive" type="xs:string"/>
						<xs:element name="ServiceEquivalenceFunctions" type="ServiceFunctionType" minOccurs="0"/>
						<xs:element name="PortType" maxOccurs="unbounded">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="Name" type="xs:string"/>
									<xs:element name="Security" type="SecurityType" minOccurs="0"/>
									<xs:element name="WSDL" type="FreeTextType"/>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="ServiceFunctionType">
		<xs:sequence>
			<xs:element name="Function" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Name" type="xs:string"/>
						<xs:element name="FormalParameters">
							<xs:complexType>
								<xs:sequence minOccurs="0" maxOccurs="unbounded">
									<xs:element name="Name" type="xs:string"/>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="Body" type="FreeTextType"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="Software">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="Package">
					<xs:sequence>
						<xs:element name="Type" default="library" minOccurs="0">
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:enumeration value="library"/>
									<xs:enumeration value="application"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:element>
						<xs:choice>
							<xs:element name="Files" type="FileListType"/>
							<xs:element name="URI" type="xs:anyURI"/>
						</xs:choice>
					</xs:sequence>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="SecurityType">
		<xs:sequence>
			<xs:element name="Descriptor" type="FreeXMLType" minOccurs="0"/>
			<xs:element name="Operations" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element ref="Operation" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element ref="Roles" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string"/>
	</xs:complexType>
	<xs:element name="Roles">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Role" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attribute name="value" type="xs:string" use="required"/>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Operation">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Roles" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="id" type="xs:string" use="required"/>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="description" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
</xs:schema>