Abstract

The Allotrope Data Format (ADF) [ADF] consists of several APIs and taxonomies. This document constitutes the specification for the ADF Data Package (ADF-DP). It defines how to store multiple data files such as audio, video, images or text in a single package. The purpose of packaging is to ensure consistency and integrity of data files and meta-data during storage and transfer. Files stored in the data package can represent measurements or results of an experiment or process described in the data description.

Disclaimer

THESE MATERIALS ARE PROVIDED "AS IS" AND ALLOTROPE EXPRESSLY DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE WARRANTIES OF NON-INFRINGEMENT, TITLE, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

Status of This Document

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current Allotrope publications and the latest revision of this technical report can be found in the Allotrope technical reports index at http://purl.allotrope.org/TR/.

This document is part of a set of specifications on the Allotrope Data Format [ADF]

This document was published by the Allotrope Foundation as a First Public Working Draft. This document is intended to become an Allotrope Recommendation. If you wish to make comments regarding this document, please send them to more.info@allotrope.org. All comments are welcome.

Publication as a First Public Working Draft does not imply endorsement by the Allotrope Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.

Table of Contents


1. Introduction

The Allotrope Data Format defines an interface for experimental data generated in analytical laboratory processes. It is intended for data exchange, long-term preservation and fast real-time data access. The ADF Data Package API defines an interface for storing files and folder structures and thus provides one of most essential operations of the ADF. A manual for using the ADF Data Package API is given in [ADF-DP-DG].

The document is structured as follows: Next the role of the ADF Data Package API within the high level structure is explained. Then the functional as well non-functional requirements for the ADF Data Package API are listed and based on that the ADF Data Package Architecture is described in detail. Then an overview of the ADF-DP ontology as well as a detailed description of the operations on files and folders are given.

1.1 Document Conventions

1.1.1 Namespaces

Within this specification, the following namespace prefix bindings are used:

Prefix Namespace
owl:http://www.w3.org/2002/07/owl#
rdf:http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs:http://www.w3.org/2000/01/rdf-schema#
xsd:http://www.w3.org/2001/XMLSchema#
skos:http://www.w3.org/2004/02/skos/core#
dct:http://purl.org/dc/terms/
foaf:http://xmlns.com/foaf/0.1/
adf-dp:http://purl.allotrope.org/ontologies/datapackage#
pav:http://purl.org/pav/

1.1.2 Number Formatting

Within this document, decimal numbers will use a dot "." as the decimal mark.

Within this document the definitions of MUST, SHOULD and MAY are used as defined in [rfc2119].

2. ADF High-Level Structure

The following figure illustrates the high level structure of the Allotrope Data Format (ADF) [ADF] API stack:

Fig. 1 The high-level structure of the Allotrope Data Format (ADF) API stack.

This document focuses on the Data Package API. The ADF Data Package Ontology is described in [ADF-DPO].

3. Requirements

This section first introduces the key requirements to the Allotrope Data Package (ADF-DP) and then describes these in detail.

3.1 Key Requirements

The key requirements for ADF-DP are:

3.2 Detailed Requirements

This section describes the functional and non-functional requirements in detail.

3.2.1 Functional Requirements

The ADF Data Package API has the following functional requirements:

  • package management: manage the contents of the data package
    • create empty files and remove files
    • read and write files (= stream to File Content; read , write , seek (random access) , append )
    • rename files (in File data description, optional: in HDF)
    • copy files (new File, clone File Content)
    • move files (File: adjust File Data description (parent), in HDF move Dataset, optional: move of File Content)
    • create folder
    • remove empty folders (convenience: folder with contents , recursive )
    • rename folder
    • move folder
    • copy folders (= copy folder plus its contents): do we really need that? (copy vs xcopy /s)
    • support links between files (symbolic links, hard links, aliases)
      • motivation: save storage space, support different organization concepts
    • import / export files and folders
  • integrity management
    • create and update checksums (e.g. MD5, SHA1, etc.)
    • support signatures
    • support encryption
      • If yes, on which level? application level, ADF level, DP folder level, DP file level, (DC data cube level, TS level)
  • support different file formats (e.g. WIFF, RAW, ..., JPEG, PNG, ..., PDF, ...)
  • support different encodings
    • binary
    • text (character encoding, e.g. UTF-8; line feed, e.g. CR-LF)
    • image (native HDF format)
  • data description management: manage the data description of the contents of the data package (File, File Content, Folder, Link(?), etc.)
    • inherent file meta data: file name, file size, timestamps (created, last modified, ...), file encoding, file creator, last file modificator, file extension
      • created: timestamp when created in ADF/HDF (original creation date: see provenance)
      • write protection
    • provenance metadata: who? from where? what? when? etc.
      • e.g. reproduce original filesystem structure
      • file attributes (e.g. read-only/executable/directory/archive/hidden)
    • file format: MIME type
    • file format specific metadata, e.g. image size, subformats, versions, codecs, etc.
  • provide efficient audit trail of meta data (who? when? depending on GxP: why?)

3.2.2 Non-Functional Requirements

The ADF Data Package API has the following non-functional requirements:

  • Data Consistency
  • Space efficiency
    • compression: support compression of files
  • Concurrency:
    • support concurrent read of one file within an ADF file
    • support concurrent write of different files within an ADF file
  • Performance
  • Embeddability into HDF 5
  • Synchronization between ADF-DP and ADF-DD
    • DP -> DD: If an update via DP is done, the metadata MUST be updated.
    • DD -> DP: If an update via DD is done, the data package MUST be updated.
    • DD -> DP: Prevent certain updates on DD that have side effects on DP, e.g. changing the relation between a file and a folder in DD

3.2.2.1 Interoperability Requirements for Different File Systems

The ADF Data Package API has the following interoperability requirements:

  • Maximum filename length: 255 bytes
  • Allowable characters in folder entries: The following characters are not allowed: /, \, :, *, ?, ", <, >, |, NUL and %. In addition, ASCII control characters (0-31, 127 are excluded as well.
    • Limitations in HDF 5: path names MAY neither contain '/' nor '%'. Names MUST be 7bit ASCII characters. Idea: Use URL Encoding for names that contain characters that are not allowed.
    • Limitations of Windows: path names MAY not contain the following characters: /, \, :, *, ?, ", <, >, | and NUL
    • Limitations of Unix: path names MAY not contain: / and NUL.
    • . and .. MAY not stand alone, but only be contained in names
    • International character support: UTF-8
      • (Windows: UTF-16 LE, Java: UTF-16 BE, XML/RDF: UTF-8, Unix: ISO-8859-x resp. UTF-x)
  • Maximum pathname length: 250 bytes
  • Maximum file size: unlimited
    • HDF5 does not limit the size of files or the size or number of objects in a file (see here).
  • Maximum volume size
  • Case sensitivity

4. ADF Data Package Architecture

This section describes the architecture of ADF-DP.

4.1 High-Level Architecture

The following figure illustrates the high level architecture of the Allotrope Data Format (ADF):

Fig. 2 The high-level structure of the Allotrope Data Format (ADF).

Given an ADF file, the Data Package is located in the top-level folder 'data-package'. The Data Package MAY contain files and folders. Meta data of these files and folders are stored in the ADF Triple Store (ADF-QS) via the ADF Data Description (ADF-DD) API.

4.2 Mapping to HDF 5

This section describes the mapping of the Allotrope Data Package to [HDF5].

In HDF 5, the Allotrope Data Package MUST be represented as follows:

Characteristics of the Mapping:

5. ADF Data Package Operations

This section describes the operations that can be carried out with the Data Package API. First, the operations on folders are described, then the operations on files.

The terminology that is used below is defined in [ADF-DPO].

5.1 Accessing the Data Package

The Data Package API MUST provide a method that offers access to the Data Package contained in a given ADF file. The method takes as argument the ADF file and returns a reference to the Data Package contained in the file.

5.2 Folder Operations

5.2.1 Creating a Folder

The Data Package API MUST provide a method to create a folder in another folder of the Data Package. The method takes the name of the new folder as argument and returns a reference to the new folder.

Preconditions

The method MUST throw an exception, if a folder or file with this name already exists in the target folder.

The name of the folder MUST fulfil the interoperability requirements (e.g. avoid invalid characters, see subsection above). If not, the method MUST throw an exception.

Postconditions

The Data Package MUST contain the new Folder, which MUST have as parent the target Folder.

For the folder, a HDF group MUST have been created in the HDF group representing the target folder. HDF5 named objects like Groups or Datasets MUST use the identifier part of the UUID URN of the resource as specified in [rfc4122]. The name of the new HDF group MUST be the UUID part of <folder-URI>, where folder-URI is a UUID URN using a type 4 (pseudo randomly generated) UUID.

Meta data of the folder MUST have been added to the ADF-QS via ADF-DD that fulfil the following requirements:

  • Exactly one identifier ("id") is set: property dct:identifier, type xsd:string
  • Exactly one folder name is specified with maximum length of 255 bytes is set not containing restricted characters: name "folder name", property dct:title, type xsd:string
  • Exactly one creation time is set that MUST be the system time when the folder was created: name "created" property dct:created, type xsd:dateTime
  • Exactly one system user is specified: name "created by", property dct:creator, type dct:Agent. If not exists, an instance of foaf:Person with dct:identifier <userid> is created.
  • The creation date time is also set as the modification date time: name "modified", property dct:modified, type xsd:dateTime
  • The system user responsible for the creation is also set as the modifier: name "modified by", property adf-dp:modifiedBy, type dct:Agent
  • Exactly one folder is specified as the parent folder: name "parent folder", property dct:isPartOf, type adf-dp:Folder. The only exception here is the root folder. From the parent folder an inverse relation dct:hasPart and ldp:contains are set, referencing the newly created folder. The values of dct:modified and adf-dp:created of the parent folder are updated to hold the same values as the newly created folder.
  • Exactly one URI is set for physical representation of the folder: name "physical representation", property adf-dp:representedBy, type hdf:Group. The URI is built from the absolute path of the folder within the HDF file.

Non-Functional Requirements

The method has to be transactional.

5.2.1.1 Creating the Root Folder

When creating the root folder, an UUID URN URI MUST be generated (folder-URI) in the ADF-QS and the class of the folder stated (adf-dp:Folder and ldp:Container). The only difference of requirements when creating a root folder is that a "parent folder" MUST NOT be specified.

5.2.2 Accessing a Folder

The ADF-DP API MUST provide a method to access a given folder in a Data Package. The folder MAY be given by URI, by absolute path or by relative path. The method takes the name resp. the URI of the folder as argument and returns a reference to this folder, if it exists.

Preconditions

The method MUST throw an exception, if the folder given by URI or by path does not exist.

Postconditions

The folder returned by this method MUST fulfil the following requirements for accessing a folder:

  • Exactly one identifier is specified: name "id", property dct:identifier, type xsd:string
  • Exactly one folder name is specified with maximum length of 255 bytes is set not containing restricted characters: name "folder name", property dct:title, type xsd:string
  • Exactly one creation time is specified that MUST be the system time when the folder was created: name "created" property dct:created, type xsd:dateTime
  • Exactly one system user is specified: name "created by", property dct:creator, type dct:Agent.
  • Exactly one date of the last modification is specified: name "modified", property dct:modified, type xsd:dateTime
  • Exactly one responsible for the last modification is specified: name "modified by", property adf-dp:modifiedBy, type dct:Agent
  • At most one parent folder is specified: name "parent folder", property dct:isPartOf, type adf-df:Folder.

5.2.2.1 Accessing the Root Folder
The ADF-DP API MUST provide a method that returns a reference to the root folder of the Data Package. The root folder of the Data Package is represented by "/" in the ADF-DP API and by the top-level HDF group 'data-package' in the ADF file.
Postconditions

The folder returned by this method fulfils the requirements of the method of accessing a folder described above.

5.2.3 Updating a Folder

When updating a folder, the meta data of this folder MUST fulfil the following requirements:

  • Exactly one identifier is specified: name "id", property dct:identifier, type xsd:string
  • Exactly one folder name is specified with maximum length of 255 bytes is set not containing restricted characters: name "folder name", property dct:title, type xsd:string
  • Exactly one creation time is specified that MUST be the system time when the folder was created: name "created" property dct:created, type xsd:dateTime. May not be changed.
  • Exactly one system user is specified: name "created by", property dct:creator, type dct:Agent. May not be changed.
  • Exactly one date of the last modification is specified: name "modified", property dct:modified, type xsd:dateTime
  • Exactly one responsible for the last modification is specified: name "modified by", property adf-dp:modifiedBy, type dct:Agent
  • At most one parent folder is specified: name "parent folder", property dct:isPartOf and ldp:member, type adf-df:Folder. From the parent folder an inverse relation dct:hasPart and ldp:contains MUST be set, referencing the updated folder. The values of dct:modified and adf-dp:modifiedBy of the parent folder are updated to hold the same values as the newly created folder.
  • Exactly one URI is set for physical representation of the folder: name "physical representation", property adf-dp:representedBy, type hdf:Group. The URI is built from the absolute path of the folder within the HDF file.

5.2.4 Listing the Content of a Folder

The ADF-DP API SHOULD provide a method to list the contents of a folder in a given Data Package. The method MUST return an empty list, if the folder does not have any contents.

The metadata of files and folders to load is based on the requirements for accessing files and accessing folders.

5.2.5 Deleting a Folder

The ADF Data Package API MUST provide a method to remove an empty folder within a Data Package. If the given folder does not exist in the Data Package, the method MUST throw an exception. If the folder is not empty, the method MUST throw an exception. If the folder is referenced by other predicates in ADF-QS, it MUST NOT be removed and the method MUST throw an exception.

Here "removal" means that the folder is removed from the Data Package - it does not need to be removed physically in HDF! Further meta data of the folder are removed from the ADF-QS.

5.3 File Operations

5.3.1 Creating a File

When creating a file, a UUID URN URI MUST be generated (file-URI) and the class of the file stated (adf-dp:File and ldp:Resource) in the ADF-QS. In addition the following requirements for the class adf-dp:File MUST be fulfilled at creation time:

  • Exactly one identifier is specified: name "id", property dct:identifier, type xsd:string
  • Exactly one folder name is specified with maximum length of 255 bytes is set not containing restricted characters: name "folder name", property dct:title, type xsd:string
  • Exactly one creation time is specified that MUST be the system time when the folder was created: name "created" property dct:created, type xsd:dateTime
  • Exactly one system user is specified: name "created by", property dct:creator, type dct:Agent.
  • Exactly one date of the last modification is specified: name "modified", property dct:modified, type xsd:dateTime
  • Exactly one responsible for the last modification is specified: name "modified by", property adf-dp:modifiedBy, type dct:Agent
  • Exactly one file format is specified: name "file format", property dct:format, value from [MediaTypes] (default value is http://purl.org/NET/mediatypes/application/octet-stream)
  • Exactly one size of the file content in bytes is specified: name "file size", property adf-dp:fileSize, type xsd:long
  • At most one charset such as UTF-8 (default value) is specified: name "charset", property adf-dp:charset, type xsd:string. The character set (encoding) is required, if file format is text.
  • At most one line separator (one of "CR", "LF", "CRLF", "NEL" (see [UTR-13])) is specified: name "line separator", property adf-dp:lineSeparator, type xsd:string. The line separator is required, if file format is text.
  • At most one parent folder is specified: name "parent folder", property dct:isPartOf and ldp:member, type adf-df:Folder
  • Exactly one path is specified: name "physical representation", property adf-dp:representedBy, type hdf:Dataset

5.3.2 Accessing a File

The ADF-DP API MUST provide a method to access a given file in a Data Package. The file MAY be given by URI, by absolute path or by relative path. The method takes the name resp. the URI of the file as argument and returns a reference to this file, if it exists.

Preconditions

The method MUST throw an exception, if the file given by URI or by path does not exist.

Postconditions

The file returned by this method MUST fulfil the following requirements:

  • Exactly one identifier is specified: name "id", property dct:identifier, type xsd:string
  • Exactly one folder name is specified with maximum length of 255 bytes is set not containing restricted characters: name "folder name", property dct:title, type xsd:string
  • Exactly one creation time is specified that MUST be the system time when the folder was created: name "created" property dct:created, type xsd:dateTime
  • Exactly one system user is specified: name "created by", property dct:creator, type dct:Agent.
  • Exactly one date of the last modification is specified: name "modified", property dct:modified, type xsd:dateTime
  • Exactly one responsible for the last modification is specified: name "modified by", property adf-dp:modifiedBy, type dct:Agent
  • Exactly one file format is specified: name "file format", property dct:format, value from [MediaTypes] (default value is http://purl.org/NET/mediatypes/application/octet-stream)
  • Exactly one size of the file content in bytes is specified: name "file size", property adf-dp:fileSize, type xsd:long
  • At most one charset such as UTF-8 (default value) is specified: name "charset", property adf-dp:charset, type xsd:string. The character set (encoding) is required, if file format is text.
  • At most one line separator (one of "CR", "LF", "CRLF", "NEL" (see [UTR-13])) is specified: name "line separator", property adf-dp:lineSeparator, type xsd:string. The line separator is required, if file format is text.
  • At most one parent folder is specified: name "parent folder", property dct:isPartOf and ldp:member, type adf-df:Folder

5.3.3 Updating a File

When updating a file, the following meta data of the class adf-dp:File MUST be fulfilled at modification time and updated in the ADF-QS.:

  • Exactly one identifier is specified: name "id", property dct:identifier, type xsd:string. The identifier MAY NOT be changed (MUST be exactly the UUID part of the URI).
  • Exactly one folder name is specified with maximum length of 255 bytes is set not containing restricted characters: name "folder name", property dct:title, type xsd:string
  • Exactly one creation time is specified that MUST be the system time when the folder was created: name "created" property dct:created, type xsd:dateTime. May not be changed.
  • Exactly one system user is specified: name "created by", property dct:creator, type dct:Agent. MAY NOT be changed.
  • Exactly one date of the last modification is specified: name "modified", property dct:modified, type xsd:dateTime. MUST be set to the current system time.
  • Exactly one responsible for the last modification is specified: name "modified by", property adf-dp:modifiedBy, type dct:Agent. The user MUST be set to the current system user, the agent SHOULD be an instance a foaf:Person with dct:identifier = <username>
  • Exactly one file format is specified: name "file format", property dct:format, value from [MediaTypes] (default value is http://purl.org/NET/mediatypes/application/octet-stream)
  • Exactly one size of the file content in bytes is specified: name "file size", property adf-dp:fileSize, type xsd:long. MAY need to be changed.
  • At most one charset such as UTF-8 (default value) is specified: name "charset", propertyadf-dp:charset, type xsd:string. The character set (encoding) is required, if file format is text.
  • At most one line separator (one of "CR", "LF", "CRLF", "NEL" (see [UTR-13])) is specified: name "line separator", property adf-dp:lineSeparator, type xsd:string. The line separator is required, if file format is text.
  • At most one parent folder is specified: name "parent folder", property dct:isPartOf and ldp:member, type adf-df:Folder. The requirements for updating a folder MUST be fulfilled at modification time for the parent folder.

The ADF-DP API MUST provide a method to write bytes into a given File within a Data Package, using a streaming API.

The method MUST support the following use cases:

  • If the given file does not exist in the Data Package, the method MUST create it (cp. StandardOpenOption.CREATE in Java).
  • If a file or folder with the given name already exists in the folder, the method MUST throw an exception (cp. StandardOpenOption.CREATE_NEW in Java).
  • If the given file does already exist, the method MUST to support the following options:
    • Overwrite the existing file, starting at the beginning of the file (cp. StandardOpenOption.TRUNCATE_EXISTING in Java).
    • Append to the existing file, starting at the end of the file (cp. StandardOpenOption.APPEND in Java).

Non-Functional Requirements

The method MUST support variable length files. The chunk size MUST be configurable and preset to a reasonable value. When using a chunked HDF dataset and exceeding the size of the current chunk, a new chunk MUST be allocated and used implicitly. The method MAY support fixed length files in a later release of ADF, e.g. for performance optimization of read-only files (using HDF opaque data type).

Postconditions

In case of CREATE, a variable length HDF dataset using the HDF VLEN type based on byte MUST have been created, representing the new File. The bytes MUST have been written into this HDF dataset. Meta data of the file MUST have been added to the ADF-QS via ADF-DD as defined in Creating a File.

In the non-exceptional case of CREATE_NEW, the bytes MUST have been written into the existing HDF dataset representing the file, starting at the first index position. Meta data of the file MUST have been updated in the ADF-QS via ADF-DD according to the requirements for updating a file.

In case of TRUNCATE_EXISTING, the bytes MUST have been written into the existing HDF dataset representing the file, starting at the first index position. Meta data of the file MUST have been updated in the ADF-QS via ADF-DD according to the requirements for updating a file.

In case of APPEND, the bytes MUST have been written into the existing HDF dataset representing the file, starting at the last index position. Meta data of the file MUST have been updated in the ADF-QS via ADF-DD according to the requirements for updating a file.

The method MUST set (in case of create) respectively adjust (in case of update) the inherent meta data of the file (e.g. file size, etc.). The implementation MUST add RDF statements to ADF-QS via ADF-DD according to the requirements for creating a file respectively the requirements for updating a file.
Design Decisions
The method WILL NOT support accessing a selected position within the existing file and overwriting it with new bytes (random access write).

5.3.4 Deleting a File

The ADF Data Package API MUST provide a method for the removal of files. Here "Removal" means that the file is marked as removed, but not actually physically removed - this holds for both, its HDF 5 representation and its RDF representation.

In order to be able to remove a file, it MUST be ensured that it is not referenced by a resource in ADF-QS.

5.4 Import and export files and folders

The ADF-DP API MUST provide methods to import files and folders into ADF and methods to export these files and folders.

5.4.1 Import

The import service creates ADF-DpFiles and ADF-DpFolders according to the given source and MUST preserve the hierarchy of the source. Additionally, the following retrieval and source meta-data are stored:

  • Retrieving agent, pav:retrievedBy, type dct:Agent
  • Retrieval time, pav:retrievedBy, type xsd:dateTime
  • Meta-data of the source, pav:retrievedFrom
    • File name, dct:title, type xsd:string
    • Creator, pav:createdBy, type dct:Agent
    • Creation time, pav:createdOn, type xsd:dateTime
    • Last modified, dct:modified, type xsd:dateTime
    • Path to the source, adf-dp:URL, type xsd:anyURI
    • Meta-data of the host, adf-dp:path
      • host name, adf-dp:hostname, type xsd:string
    • Path of the corresponding ADF-DpFile or ADF-DpFolder, adf-dp:path, type xsd:string
    • Path to the parent ADF-DPFolder, adf-dp:path, type dct:identifier
Symbolic links are followed. There is a switch to turn this behavior off.

Preconditions

The method MUST throw an exception if either the source path or the target ADF-DPFolder do not exist.

5.4.2 Export

The export service restores the files and folders of the original source to the specified target. Symbolic links are replaced by their target.

Preconditions

The method MUST throw an exception if either the source ADF-DpFile or ADF-DPFolder or the target path do not exist.

6. Change History

Version Release Date Remarks
0.3.0 2015-04-30 Initial Working Draft version
0.4.0 2015-06-29
  • included requirements from Allotrope wiki
  • included image for ADF Data Package Ontology
  • included disclaimer information
  • harmonized layout across ADF specifications
  • harmonized structure across ADF specifications
  • moved example code to ADF Data Package User Manual
  • added sections for delete operations on files and folders
1.0.0 RC 2015-09-17
  • updated links
  • updated dates
1.0.0 2015-09-29
  • updated versions, dates and document status
  • removal of files and folders: added description which meta data (timestamps) have to be updated
  • added captions to figures
1.1.0 RC 2016-03-11
  • updated versions, dates and document status
  • added section on number formatting to document conventions
  • updated Fig. 1
1.1.0 RF 2016-03-31
  • updated versions, dates and document status
1.1.5 2016-05-13
  • updated versions and dates
1.2.0 Preview 2016-09-23
  • corrected the type of a DpFile from integer to long
1.2.0 RC 2016-12-07
  • updated versions and dates
1.3.0 Preview 2017-03-31
  • updated versions and dates
1.3.0 RF 2017-06-30
  • updated versions and dates, authors
  • added section on Importing and exporting files and folders
  • minor edits
  • updated images

A. References

A.1 Normative references

[ADF]
Allotrope. Allotrope Data Format Overview. URL: http://purl.allotrope.org/TR/adf-overview/Allotrope Data Format.html
[ADF-DP-DG]
Allotrope. ADF Data Package API Developer's Guide. URL: http://purl.allotrope.org/TR/adf-dp-dg/ADF Data Package Developer's Guide.html
[ADF-DPO]
Allotrope. Allotrope Data Package Ontology. URL: http://purl.allotrope.org/TR/adf-dp/ADF Data Package Ontology.html
[HDF5]
The HDF Group. HDF5 File Format Specification. URL: https://portal.hdfgroup.org/display/HDF5/File+Format+Specification
[UTR-13]
UTR-13: Unicode Newline Guidelines.. URL: http://unicode.org/standard/reports/tr13/tr13-5.html
[rfc2119]
S. Bradner. IETF. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
[rfc4122]
P. Leach; M. Mealling; R. Salz. IETF. A Universally Unique IDentifier (UUID) URN Namespace. July 2005. Proposed Standard. URL: https://tools.ietf.org/html/rfc4122

A.2 Informative references

[MediaTypes]
Internet Assigned Numbers Authority (IANA). Media Types. URL: http://www.iana.org/assignments/media-types/media-types.xhtml