Index: trunk/zoo-project/zoo-kernel/sql/schema.sql
===================================================================
--- trunk/zoo-project/zoo-kernel/sql/schema.sql	(revision 781)
+++ trunk/zoo-project/zoo-kernel/sql/schema.sql	(revision 917)
@@ -31,6 +31,6 @@
 -- Create a dedicated schema to store all tables
 -- Uncomment the following 2 lines to activate the schema use
--- CREATE SCHEMA zoo;
--- SET search_path TO zoo;
+-- CREATE SCHEMA processdb;
+-- SET search_path TO processdb;
 --------------------------------------------------------------------------------
 -- Services table
Index: trunk/zoo-project/zoo-kernel/sql/zoo_collectiondb.sql
===================================================================
--- trunk/zoo-project/zoo-kernel/sql/zoo_collectiondb.sql	(revision 917)
+++ trunk/zoo-project/zoo-kernel/sql/zoo_collectiondb.sql	(revision 917)
@@ -0,0 +1,321 @@
+create schema CollectionDB;
+
+set search_path = CollectionDB, pg_catalog;
+
+CREATE OR REPLACE FUNCTION update_Description() RETURNS trigger AS 
+$$
+DECLARE
+	i integer;
+BEGIN
+	INSERT INTO CollectionDB.Descriptions (id) VALUES (NEW.id);
+	RETURN NEW;
+END;
+$$ LANGUAGE plpgsql;
+
+CREATE FUNCTION is_in_ows_DataDescription(i integer) RETURNS boolean
+    LANGUAGE plpgsql
+    AS $$
+DECLARE
+        res int;
+        mymax int;
+BEGIN
+	SELECT id from CollectionDB.ows_DataDescription where id=i INTO res ;
+	if res is NULL then
+	   return false;
+	else
+	   return true;
+	end if;
+END;
+$$;
+
+create table CollectionDB.Descriptions (
+       id serial primary key
+);
+
+create table CollectionDB.ows_Metadata (
+       id serial primary key,
+       title text,
+       role text,
+       href text
+);
+
+create table CollectionDB.DescriptionsMetadataAssignment(
+       descriptions_id int references CollectionDB.Descriptions(id),
+       metadata_id int references CollectionDB.ows_Metadata(id)
+);
+
+create table CollectionDB.ows_Keywords (
+    id serial primary key,
+    keyword varchar
+);
+
+create table CollectionDB.DescriptionsKeywordsAssignment(
+       descriptions_id int references CollectionDB.Descriptions(id),
+       keywords_id int references CollectionDB.ows_Keywords(id)
+);
+
+create table CollectionDB.ows_AdditionalParameters (
+    id serial primary key,
+    title varchar,
+    role varchar,
+    href varchar
+);
+
+create table CollectionDB.DescriptionsAdditionalParametersAssignment (
+       descriptions_id int references CollectionDB.Descriptions(id),
+       additional_parameters_id int references CollectionDB.ows_AdditionalParameters(id)
+);
+
+--
+-- See reference for primitive datatypes
+-- https://www.w3.org/TR/xmlschema-2/#built-in-primitive-datatypes
+-- 
+create table CollectionDB.PrimitiveDataTypes (
+       id serial primary key,
+       name varchar(255)
+);
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('string');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('boolean');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('integer');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('float');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('double');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('duration');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('dateTime');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('time');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('date');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('gYearMonth');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('gYear');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('gMonthDay');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('gDay');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('gMonth');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('hexBinary');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('base64Binary');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('anyURI');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('QName');
+INSERT INTO CollectionDB.PrimitiveDataTypes (name) VALUES ('NOTATION');
+
+--
+-- List all primitive formats
+--
+create table CollectionDB.PrimitiveFormats (
+       id serial primary key,
+       mime_type varchar(255),
+       encoding varchar(15),
+       schema varchar(255)
+);
+
+-- https://tools.ietf.org/html/rfc4180
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type,encoding) VALUES ('text/csv','utf-8');
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type,encoding) VALUES ('text/css','utf-8');
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type,encoding) VALUES ('text/html','utf-8');
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type,encoding) VALUES ('text/javascript','utf-8');
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type,encoding) VALUES ('text/plain','utf-8');
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type,encoding,schema)
+       VALUES ('text/xml','utf-8','http://schema.opengis.net/gml/3.2.1/gml.xsd');
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type,encoding,schema)
+       VALUES ('text/xml','utf-8','http://schema.opengis.net/gml/3.1.0/gml.xsd');
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type,encoding) VALUES ('application/gml+xml','utf-8');
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type,encoding) VALUES ('application/json','utf-8');
+-- https://tools.ietf.org/html/rfc3302
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type) VALUES ('image/tiff');
+-- https://www.ietf.org/rfc/rfc4047.txt
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type) VALUES ('image/fits');
+-- https://tools.ietf.org/html/rfc3745
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type) VALUES ('image/jp2');
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type) VALUES ('image/png');
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type) VALUES ('image/jpeg');
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type) VALUES ('image/gif');
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type) VALUES ('application/octet-stream');
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type) VALUES ('application/vnd.google-earth.kml+xml');
+-- https://www.iana.org/assignments/media-types/application/zip
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type) VALUES ('application/zip');
+-- https://www.iana.org/assignments/media-types/application/xml
+INSERT INTO CollectionDB.PrimitiveFormats (mime_type,encoding) VALUES ('application/xml','utf-8');
+
+create table CollectionDB.ows_Format (
+    id serial primary key,
+    primitive_format_id int references CollectionDB.PrimitiveFormats(id),
+    maximum_megabytes int,
+    def boolean,
+	use_mapserver bool,
+	ms_styles text
+);
+
+create table CollectionDB.ows_DataDescription (
+    id serial primary key,
+    format_id int references CollectionDB.ows_Format(id)
+);
+
+create table CollectionDB.PrimitiveUom (
+	id serial primary key,
+	uom varchar
+);
+-- source : Open Geospatial Consortium - URNs of definitions in ogc namespace
+insert into CollectionDB.PrimitiveUom (uom) values ('degree');
+insert into CollectionDB.PrimitiveUom (uom) values ('radian');
+insert into CollectionDB.PrimitiveUom (uom) values ('metre');
+insert into CollectionDB.PrimitiveUom (uom) values ('unity');
+
+create table CollectionDB.LiteralDataDomain (
+    possible_literal_values varchar,
+    default_value varchar,
+    data_type_id int references CollectionDB.PrimitiveDataTypes(id),
+    uom int references CollectionDB.PrimitiveUom(id),
+    def boolean
+) inherits (CollectionDB.ows_DataDescription);
+alter table CollectionDB.LiteralDataDomain add constraint literal_data_domain_id unique (id);
+
+create table CollectionDB.BoundingBoxData (
+    epsg int
+) inherits (CollectionDB.ows_DataDescription);
+alter table CollectionDB.BoundingBoxData add constraint bounding_box_data_id unique (id);
+
+create table CollectionDB.ComplexData (
+) inherits (CollectionDB.ows_DataDescription);
+alter table CollectionDB.ComplexData add constraint complex_data_id unique (id);
+
+create table CollectionDB.AllowedValues (
+    id serial primary key,
+    allowed_value varchar(255)
+);
+
+create table CollectionDB.AllowedValuesAssignment (
+    id serial primary key,
+    literal_data_domain_id int references CollectionDB.LiteralDataDomain (id),
+    allowed_value_id int references CollectionDB.AllowedValues (id)
+);
+
+create table CollectionDB.ows_AdditionalParameter (
+    id serial primary key,
+    key varchar,
+    value varchar,
+    additional_parameters_id int references CollectionDB.ows_AdditionalParameters(id)
+);
+
+create table CollectionDB.ows_Input (
+    id int primary key default nextval('collectiondb.descriptions_id_seq'::regclass),
+    title text,
+    abstract text,
+    identifier varchar(255),
+    min_occurs int,
+    max_occurs int
+); -- inherits (CollectionDB.Descriptions);
+alter table CollectionDB.ows_Input add constraint codb_input_id unique (id);
+CREATE TRIGGER ows_Input_proc AFTER INSERT ON CollectionDB.ows_Input FOR EACH ROW EXECUTE PROCEDURE update_Description();
+
+create table CollectionDB.ows_Output (
+    id int primary key default nextval('collectiondb.descriptions_id_seq'::regclass),
+    title text,
+    abstract text,
+    identifier varchar(255)
+); --inherits (CollectionDB.Descriptions);
+alter table CollectionDB.ows_Output add constraint codb_output_id unique (id);
+CREATE TRIGGER ows_Output_proc AFTER INSERT ON CollectionDB.ows_Output FOR EACH ROW EXECUTE PROCEDURE update_Description();
+
+create table CollectionDB.zoo_PrivateMetadata (
+    id serial primary key,
+    identifier varchar,
+    metadata_date timestamp
+);
+
+create table CollectionDB.ows_Process (
+    id int primary key default nextval('collectiondb.descriptions_id_seq'::regclass),
+    title text,
+    abstract text,
+    identifier varchar(255),
+    availability boolean,
+    process_description_xml text,
+    private_metadata_id int references CollectionDB.zoo_PrivateMetadata(id)
+); -- inherits (CollectionDB.Descriptions);
+alter table CollectionDB.ows_Process add constraint codb_process_id unique (id);
+alter table CollectionDB.ows_Process add constraint codb_process_identifier unique (identifier);
+CREATE TRIGGER ows_Process_proc AFTER INSERT ON CollectionDB.ows_Process FOR EACH ROW EXECUTE PROCEDURE update_Description();
+
+create table CollectionDB.InputInputAssignment (
+    id serial primary key,
+    parent_input int references CollectionDB.ows_Input(id),
+    child_input int references CollectionDB.ows_Input(id)
+);
+
+create table CollectionDB.InputDataDescriptionAssignment (
+    id serial primary key,
+    input_id int references CollectionDB.ows_Input(id),
+    data_description_id int check (CollectionDB.is_in_ows_DataDescription(data_description_id))
+);
+
+create table CollectionDB.OutputOutputAssignment (
+    id serial primary key,
+    parent_output int references CollectionDB.ows_Output(id),
+    child_output int references CollectionDB.ows_Output(id)
+);
+
+create table CollectionDB.OutputDataDescriptionAssignment (
+    id serial primary key,
+    output_id int references CollectionDB.ows_Output(id),
+    data_description_id int check (CollectionDB.is_in_ows_DataDescription(data_description_id))
+);
+
+create table CollectionDB.zoo_ServiceTypes (
+	id serial primary key,
+	service_type varchar
+);
+insert into CollectionDB.zoo_ServiceTypes (service_type) VALUES ('HPC');
+insert into CollectionDB.zoo_ServiceTypes (service_type) VALUES ('C');
+insert into CollectionDB.zoo_ServiceTypes (service_type) VALUES ('Java');
+insert into CollectionDB.zoo_ServiceTypes (service_type) VALUES ('Mono');
+insert into CollectionDB.zoo_ServiceTypes (service_type) VALUES ('JS');
+insert into CollectionDB.zoo_ServiceTypes (service_type) VALUES ('PHP');
+insert into CollectionDB.zoo_ServiceTypes (service_type) VALUES ('Python');
+
+insert into CollectionDB.zoo_ServiceTypes (service_type) VALUES ('OTB');
+
+create table CollectionDB.zoo_DeploymentMetadata (
+    id serial primary key,
+    executable_name varchar,
+    configuration_identifier varchar,
+	service_type_id int references CollectionDB.zoo_ServiceTypes(id)
+);
+
+create table CollectionDB.zoo_PrivateProcessInfo (
+    id serial primary key
+);
+
+create table CollectionDB.PrivateMetadataDeploymentMetadataAssignment (
+    id serial primary key,
+    private_metadata_id int references CollectionDB.zoo_PrivateMetadata(id),
+    deployment_metadata_id int references CollectionDB.zoo_DeploymentMetadata(id)
+);
+
+create table CollectionDB.PrivateMetadataPrivateProcessInfoAssignment (
+    id serial primary key,
+    private_metadata_id int references CollectionDB.zoo_PrivateMetadata(id),
+    private_process_info_id int references CollectionDB.zoo_PrivateProcessInfo(id)
+);
+
+create table CollectionDB.ProcessInputAssignment (
+    id serial primary key,
+    process_id int references CollectionDB.ows_Process(id),
+    input_id int references CollectionDB.ows_Input(id),
+    index int
+);
+
+create table CollectionDB.ProcessOutputAssignment (
+    id serial primary key,
+    process_id int references CollectionDB.ows_Process(id),
+    output_id int references CollectionDB.ows_Output(id),
+    index int
+);
+
+CREATE OR REPLACE VIEW public.ows_process AS
+       (SELECT
+	id,
+	identifier,
+	title,
+	abstract,
+	(SELECT service_type FROM CollectionDB.zoo_ServiceTypes WHERE id = (SELECT service_type_id FROM CollectionDB.zoo_DeploymentMetadata WHERE id = (SELECT deployment_metadata_id FROM CollectionDB.PrivateMetadataDeploymentmetadataAssignment WHERE private_metadata_id=(SELECT id FROM CollectionDB.zoo_PrivateMetadata WHERE id = CollectionDB.ows_Process.private_metadata_id)))) as service_type,
+	(SELECT executable_name  as service_provider FROM CollectionDB.zoo_DeploymentMetadata WHERE id = (SELECT deployment_metadata_id FROM CollectionDB.PrivateMetadataDeploymentmetadataAssignment WHERE private_metadata_id=(SELECT id FROM CollectionDB.zoo_PrivateMetadata WHERE id = CollectionDB.ows_Process.private_metadata_id))) as service_provider,
+	availability
+	FROM CollectionDB.ows_Process
+	WHERE
+	 availability
+	);
