SDAI file is the compressed ZIP format file complying with the following specifications:
.ZIP file comment length
field in the end of central directory record
is equal to 0.SDAI file contains all binary and property files of the SdaiRepository, normally stored in the special SdaiRepository directory. The list of files that could be stored in SDAI file:
repository
file is used to store an information about the SdaiRepository, SdaiModels, SchemaInstances
and associated SdaiModels as well as included SchemaInstances, if any. Only the repository
file is mandatory in SDAI file.
SdaiRepository binary file formatmX
files are used to store a data of the SdaiModel. There the X
in the
file name means the SdaiModel's identifier which can be obtained using the
jsdai.lang.SdaiModel.getId() method.
SdaiModel binary file formatextdata.properties
file is used to store an information about an external data of
SdaiRepository instances. The persistent label of the entity instance is used as a property key and
the name of the external data is stored as a property value.eX
files are used to store the external data. There the X
in the
file name means the persistent label of the entity instance.sdai_repository_file := 'R' // SdaiRepository start BUILD_NUMBER: integer // build number JSDAI_VERSION_MAJOR: short // major version number JSDAI_VERSION_MIDDLE: short // middle version number JSDAI_VERSION_MINOR: short // minor version number 'B' DESCRIPTION_COUNT: short // count of descriptions { DESCRIPTION: string } // descriptions 'B' NAME: string // SdaiRepository name CHANGE_DATE: string // SdaiRepository changed date AUTHOR_COUNT: integer // count of SdaiRepository authors { AUTHOR: string } // SdaiRepository authors ORGANIZATION_COUNT: integer // count of SdaiRepository organizations { ORGANIZATION: string } // SdaiRepository organizations PREPROCESSOR_VERSION: string // SdaiRepository preprocessor version ORIGINATING_SYSTEM: string // SdaiRepository originating system AUTHORIZATION: string // SdaiRepository authorization 'B' 0: short // RESERVED 'B' [ 'L' DEFAUL_LANGUAGE: string ] // default/general language [ 'C' CONTEXT_COUNT: short // count of contexts names { CONTEXT: string } // contexts names ] 'I' LARGEST_PERSISTENT_LABEL: long // largest persistent label 'S' // section of schema names SCHEMA_COUNT: short // count of schema { SCHEMA_NAME: string } // schema names 'S' // section of SdaiModels SDAI_MODEL_COUNT: integer // count of SdaiModels SDAI_MODEL_COUNT: short // count of SdaiModels { SDAI_MODEL: sdai_model_definition } // SdaiModels 'S' // section of SchemaInstances SCHEMA__INSTANCE_COUNT: short // count of SchemaInstances { SCHEMA_INSTANCE: schema_instance_definition } // SchemaInstances 'E' // SdaiRepository end sdai_model_definition := 'B' // SdaiModel start NAME: string // name of SdaiModel ID: integer // identifier of SdaiModel UNDERLYING_SCHEMA_INDEX: short // index of underlying schema 'D' CHANGE_DATE: string // change date [ 'L' DEFAULT_LANGUAGE: string ] // default language [ 'C' CONTEXT_COUNT: short // count of contexts { CONTEXT: string } // contexts ] schema_instance_definition := 'B' // SchemaInstance start NAME: string // name of SchemaInstance NATIVE_SCHEMA_INDEX: short // index of native schema 'D' CHANGE_DATE: string // change date VALIDATION_DATE: string // validation date VALIDATION_RESULT: byte // validation result: true, false VALIDATION_LEVEL: short // validation level DESCRIPTION_COUNT: short // count of descriptions { DESCRIPTION }: string // descriptions AUTHOR_COUNT: short // count of authors { AUTHOR }: string // authors ORGANIZATION_COUNT: short // count of organizations { ORGANIZATION }: string // organizations [ 'P' PREPROCESSOR_VERSION: string ] // preprocessor version [ 'O' ORIGINATING_SYSTEM: string ] // originating system [ 'A' AUTHORIZATION: string ] // authorization [ 'L' LANGUAGE: string ] // language 'C' CONTEXT_COUNT: short // count of contexts { CONTEXT }: string // contexts ASSOCIATED_SDAI_MODEL_COUNT: short // count of associated SdaiModels { ASSCOCIATED_SDAI_MODEL: associated_sdai_model_definition } // associated SdaiModels [ INCLUDED_SCHEMA_INSTANCES: incl_schema_instances_list ] // included SchemaInstances list associated_sdai_model_definition := ( 'L' INDEX: integer // index of SdaiModel | 'E' NAME: string // name of SdaiModel SDAI_REPOSITORY_NAME: string // name of SdaiRepository } incl_schema_instances_list := 'I' INCLUDED_SCHEMA_INSTANCES_COUNT: short // count of included SchemaInstances { INCLUDED_SCHEMA_INSTANCE: included_schema_instance_definition } // included SchemaInstances included_schema_instance_definition := ( 'L' INDEX: integer // index of SchemaInstance | 'E' NAME: string // name of SchemaInstance SDAI_REPOSITORY_NAME: string // name of SdaiRepository }
sdai_model_file := 'D' // SdaiModel start BUILD_NUMBER: integer // build number INSTANCE_COUNT: long // count of instances in this SdaiModel { PERSISTENT_LABEL: long } // persistent labels (sorted in increasing order) of instances of this SdaiModel 'S' DEFINED_TYPE_COUNT: short // count of defined data types which do not have an immediate underlying select data type { DEFINED_TYPE_NAME: string } // names of the defined data types 'S' ENTITY_TYPE_COUNT: short // count of entity data types { ENTITY_TYPE: entity_type_definition } // entity data types in upper case, sorted alphabetically 'S' POPULATED_COMPLEX_TYPE_COUNT: short // count of populated complex entity data types, even those with only one entity data type { COMPLEX_ENTITY_INSTANCE: complex_entity_instance_definition } // complex entity instances sorted lexicographically { ENTITY_INSTANCE_VALUE: entity_instance_value_definition } // entity instance sorted by persistent label 'E' // SdaiModel end entity_type_definition := ENTITY_TYPE_NAME: string // entity data type name from dictionary EXPLICIT_ATTRIBUTE_COUNT: short // count of all non-redeclaring explicit attributes of this entity data type, but not of it's supertypes // the order is as defined in express. It can be used as index 0, 1, 2... { EXPLICIT_ATTRIBUTE_NAME: string } // explicit attribute names SUPERTYPE_COUNT: short // count of supertypes { SUPERTYPE_INDEX: short } // index of supertypes complex_entity_instance_definition := ENTITY_TYPE_COUNT: short // count of leave entity data types { ENTITY_TYPE_INDEX: short } // indexes of all leave entity data types in upper case, sorted alphabetically INSTANCE_COUNT: long // count of instances { PERSISTENT_LABEL: long } ; // persistent labels (sorted in increasing order) entity_instance_value_definition := 'c' // start-indication COMPLEX_TYPE_INDEX: short // index to complex entity type { VALUE: value_definition } // values for all attributes in single entity data types sorted in given order above (composing) [{ AIM2ARM_LINK: aim2arm_link_definition }] // AIM to ARM links value_definition := // value of a single attribute ( '$' // MISSING, UNSET | '*' // REDEFINED | 'u' // UNKNOWN | 't' // TRUE | 'f' // FALSE | 'r' VALUE: double // Real value | 'i' VALUE: integer // Integer value | 's' VALUE: string // String value | 'b' VALUE: string // Binary value | 'B' // Binary value BINARY_LENGTH := long BINARY_UNUSED := byte {BINARY_BYTES := byte ^ 0x80} | 'e' VALUE: string // Enumeration value definition | 'p' VALUE: short // index to typed parameters needed for values of select data types, recursive definition | ( '1' // instance-ref inside this SdaiModel POPULATED_COMPLEX_ENTITY_INDEX: short // index of populated complex entity type INSTANCE_INDEX: integer // instance index ) | ( '2' // instance reference inside this SdaiRepository with SdaiModel name SDAI_MODEL_NAME: string // SdaiModel name ENTITY_TYPE: entity_type_reference // entity type PERSISTENT_LABEL: long // persistent label ) | ( '3' // instance reference inside this SdaiRepository with SdaiModel index SDAI_MODEL_INDEX: short // SdaiModel index ENTITY_TYPE: entity_type_reference // entity type PERSISTENT_LABEL: long // persistent label ) | ( '4' // instance reference with SdaiRepository name and SdaiModel name SDAI_REPOSITORY_NAME: string // SdaiRepository name SDAI_MODEL_NAME: string // SdaiModel name ENTITY_TYPE: entity_type_reference // entity type PERSISTENT_LABEL: long // persistent label ) | ( '5' // instance reference with SdaiRepository index and SdaiModel name SDAI_REPOSITORY_INDEX: short // SdaiRepository index SDAI_MODEL_NAME: string // SdaiModel name ENTITY_TYPE: entity_type_reference // entity type PERSISTENT_LABEL: long // persistent label ) | ( '6' // instance reference with SdaiRepository index and SdaiModel index SDAI_REPOSITORY_INDEX: short // SdaiRepository index SDAI_MODEL_INDEX: short // SdaiModel index ENTITY_TYPE: entity_type_reference // entity type PERSISTENT_LABEL: long // persistent label ) | '(' { value } ')' // for all aggregates, starting with first member or valid index position ) entity_type_reference := ( ( '1' // types from the current data dictionary are used POPULATED_COMPLEX_ENTITY_INDEX: short // index of populated complex entity type ) | ( '2' // type is not found in the current data dictionary POPULATED_COMPLEX_ENTITY_NAME: string // name of populated complex entity type ) | ( '3' // type is not found in the current data dictionary POPULATED_COMPLEX_ENTITY_INDEX: short // index of populated complex entity type ) ) aim2arm_link_definition := ( 'l' SDAI_REPOSITORY_NAME: string // ARM SdaiRepository name (empty string "" indicates current SdaiRepository) SDAI_MODEL_NAME: string // ARM SdaiModel name PERSISTENT_LABEL: long // ARM instance persistent label ) | ( 'k' SDAI_MODEL_INDEX: short // ARM SdaiModel index PERSISTENT_LABEL: long // ARM instance persistent label )