C.1  
 

Service DEFINITIONS AUTOMATIC TAGS ::=

BEGIN

-- Catalog

Catalog ::= SEQUENCE
{
	user-identifier IdentifierString ,
	user-name NameString ,
	location LocationString ,
	study SET OF Study
}

Study ::= SEQUENCE
{
	study-identifier IdentifierString OPTIONAL ,
	study-name NameString OPTIONAL ,
	type StudyType OPTIONAL ,
	status StudyStatus OPTIONAL ,
	visibility StudyVisibility OPTIONAL ,
	location LocationString OPTIONAL ,
	owner SEQUENCE
	{
		user-identifier IdentifierString ,
		user-name NameString
	}
	OPTIONAL ,
	table SEQUENCE
	{
		location LocationString
	}
	OPTIONAL ,
	model SEQUENCE
	{
		location LocationString
	}
	OPTIONAL ,
	panel SEQUENCE
	{
		location LocationString
	}
	OPTIONAL ,
	roster SEQUENCE
	{
		location LocationString
	}
	OPTIONAL
}

StudyType ::= ENUMERATED
{
	class (1) ,
	rank (2) ,
	number (3) ,
	chance (4)
}

StudyStatus ::= ENUMERATED
{
	running (1) ,
	paused (2) ,
	stopped (3)
}

StudyVisibility ::= ENUMERATED
{
	private (1) ,
	public (2)
}

-- Roster

Roster ::= SEQUENCE
{
	study-identifier IdentifierString ,
	study-name NameString ,
	location LocationString ,
	role SET OF Role
}

Role ::= SEQUENCE
{
	location LocationString OPTIONAL ,
	roleholder SEQUENCE
	{
		user-identifier IdentifierString ,
		user-name NameString OPTIONAL
	}
	OPTIONAL ,
	role SEQUENCE
	{
		get-study BOOLEAN OPTIONAL ,
		delete-study BOOLEAN OPTIONAL ,
		get-roster BOOLEAN OPTIONAL ,
		post-roster BOOLEAN OPTIONAL ,
		get-role BOOLEAN OPTIONAL ,
		put-role BOOLEAN OPTIONAL ,
		delete-role BOOLEAN OPTIONAL ,
		get-panel BOOLEAN OPTIONAL ,
		get-control BOOLEAN OPTIONAL ,
		put-control BOOLEAN OPTIONAL ,
		post-table BOOLEAN OPTIONAL ,
		get-model BOOLEAN OPTIONAL ,
		post-model BOOLEAN OPTIONAL
	} ,
	study SEQUENCE
	{
		study-identifier IdentifierString ,
		study-name NameString OPTIONAL
	}
	OPTIONAL
}

-- Panel

Panel ::= SEQUENCE
{
	study-identifier IdentifierString ,
	location LocationString ,
	control SEQUENCE ( SIZE ( 10 ) ) OF Control
}

Control ::= CHOICE
{
	study-name-control SEQUENCE
	{
		study-identifier IdentifierString OPTIONAL ,
		location LocationString OPTIONAL ,
		study-name NameString
	} ,
	type-control SEQUENCE
	{
		study-identifier IdentifierString OPTIONAL ,
		type StudyType
	} ,
	status-control SEQUENCE
	{
		study-identifier IdentifierString OPTIONAL ,
		location LocationString OPTIONAL ,
		status StudyStatus
	} ,
	visibility-control SEQUENCE
	{
		study-identifier IdentifierString OPTIONAL ,
		location LocationString OPTIONAL ,
		visibility StudyVisibility
	} ,
	block-count-control SEQUENCE
	{
		study-identifier IdentifierString OPTIONAL ,
		block-count INTEGER ( 0..18446744073709551615 ) -- unsigned 64 bit integer
	} ,
	cell-count-control SEQUENCE
	{
		study-identifier IdentifierString OPTIONAL ,
		cell-count INTEGER ( 0..18446744073709551615 ) -- unsigned 64 bit integer
	} ,
	prospect-count-control SEQUENCE
	{
		study-identifier IdentifierString OPTIONAL ,
		prospect-count INTEGER ( 0..18446744073709551615 ) -- unsigned 64 bit integer
	} ,
	creation-time-control SEQUENCE
	{
		study-identifier IdentifierString OPTIONAL ,
		creation-time GeneralizedTime -- UTC time with millisecond precision
	} ,
	latest-block-time-control SEQUENCE
	{
		study-identifier IdentifierString OPTIONAL ,
		latest-block-time GeneralizedTime -- UTC time with millisecond precision
	} ,
	latest-prospect-time-control SEQUENCE
	{
		study-identifier IdentifierString OPTIONAL ,
		latest-prospect-time GeneralizedTime -- UTC time with millisecond precision
	}
}

-- Block

Block ::= SEQUENCE
{	
	study-identifier IdentifierString OPTIONAL ,
	type BlockType OPTIONAL ,
	object CHOICE
	{
		empty NULL , -- empty block
		predictor SEQUENCE OF Predictor , -- column block
		specimen SEQUENCE OF Specimen -- row block
	}
}

BlockType ::= ENUMERATED
{
	empty (0) ,
	row (1) ,
	column (2)
}

Predictor ::= SEQUENCE
{
	name INTEGER ( 1..18446744073709551614 ) , -- predictor (column) identifier; strictly positive, unsigned, 64 bit integer, excluding X'FFFFFFFFFFFFFFFF'
	status PredictorStatus OPTIONAL , -- predictor status
	type PredictorType OPTIONAL , -- predictor type
	level PredictorLevel OPTIONAL , -- measurement level
	cell SEQUENCE OF Cell OPTIONAL -- specimen values
}

PredictorStatus ::= ENUMERATED
{
	active (1) ,
	inactive (2)
}

PredictorType ::= ENUMERATED
{
	categorical (1) ,
	continuous (2)
}

PredictorLevel ::= ENUMERATED
{
	nominal (1) ,
	ordinal (2) ,
	interval (3) ,
	ratio (4)
}

Specimen ::= SEQUENCE
{
	key INTEGER ( 0..18446744073709551614 ) OPTIONAL , -- specimen (row) identifier; unsigned, 64 bit integer, excluding X'FFFFFFFFFFFFFFFF'
	status SpecimenStatus OPTIONAL , -- specimen status
	weight INTEGER ( 1..18446744073709551614 ) OPTIONAL , -- sampling weight; strictly positive, unsigned, 64 bit integer, excluding X'FFFFFFFFFFFFFFFF'
	type ValueType ( empty | natural | integer | real ) OPTIONAL ,
	value CHOICE 
	{
		empty NULL , -- unavailable response
		natural INTEGER ( 0..18446744073709551615 ) , -- unsigned, 64 bit integer
		integer INTEGER ( -9223372036854775808..9223372036854775807 ) , -- signed, 64 bit integer
		real REAL ( WITH COMPONENTS { mantissa ( -2..2 ) , base ( 2 ) , exponent ( -1022..1023 ) } ) -- double-precision, floating point number
	}
	OPTIONAL ,
	cell SEQUENCE OF Cell OPTIONAL -- predictor values
}

SpecimenStatus ::= ENUMERATED
{
	active (1) ,
	inactive (2)
}

Cell ::= SEQUENCE
{
	coordinate CHOICE
	{
		name INTEGER ( 1..18446744073709551614 ) , -- predictor (column) identifier, for cells within specimens
		key INTEGER ( 0..18446744073709551614 ) -- specimen (row) identifier, for cells within predictors
	} ,
	type ValueType OPTIONAL ,
	value CHOICE
	{
		empty NULL , -- unavailable response
		natural INTEGER ( 0..18446744073709551615 ) , -- unsigned, 64 bit integer
		integer INTEGER ( -9223372036854775808..9223372036854775807 ) , -- signed, 64 bit integer
		real REAL ( WITH COMPONENTS { mantissa ( -2..2 ) , base ( 2 ) , exponent ( -1022..1023 ) } ) , -- double-precision, floating point number
		special INTEGER ( 1..18446744073709551615 ) -- strictly positive, unsigned, 64 bit integer
	}
 	OPTIONAL 
}

ValueType ::= ENUMERATED
{
	empty (0) ,
	natural (1) ,
	integer (2) ,
	real (3) ,
	special (4)
}

IdentifierString ::= VisibleString ( SIZE ( 16 ) ) ( FROM ( "1".."9" | "a".."z" | "A".."Z" ) )

NameString ::= VisibleString ( SIZE ( 0..256 ) ) -- ASCII X'20' (space) thru X'7E' (tilde) inclusive

LocationString ::= VisibleString ( SIZE ( 1..1024 ) )

-- Message

Message ::= SEQUENCE
{
	type MessageType ,
	text VisibleString
}

MessageType ::= ENUMERATED
{
	information (1) ,
	error (2)
}

END