diff --git a/ICD/index.html b/ICD/index.html new file mode 100644 index 0000000..618bd06 --- /dev/null +++ b/ICD/index.html @@ -0,0 +1,2840 @@ + + + + + + + + + + +Resource Catalogue Interface Control Document: EOEPCA.SDD.xxx + + + + + +
+
+
+
+

EO Exploitation Platform Common Architecture
+Resource Catalogue Interface Control Document
+EOEPCA.SDD.xxx

+
+ ++++ + + + + + + + + + + +

COMMENTS and ISSUES
+If you would like to raise comments or issues on this document, please do so by raising an Issue at the following URL https://github.com/EOEPCA/rm-resource-catalogue/issues.

PDF
+This document is available in PDF format here.

EUROPEAN SPACE AGENCY CONTRACT REPORT
+The work described in this report was done under ESA contract. Responsibility for the contents resides in the author or organisation that prepared it.

TELESPAZIO VEGA UK Ltd
+350 Capability Green, Luton, Bedfordshire, LU1 3LU, United Kingdom.
+Tel: +44 (0)1582 399000
+www.telespazio-vega.com

+
+
+
+
AMENDMENT HISTORY
+
+

This document shall be amended by releasing a new edition of the document in its entirety.
+The Amendment Record Sheet below records the history and issue status of this document.

+ + +++++ + + + + + + + + + + + + + + +
Table 1. Amendment Record Sheet
ISSUEDATEREASON

0.1

dd/mm/yyyy

Initial in-progress draft

+
+
+
+
+
+
+
+
+
+

1. Introduction

+
+
+

1.1. Purpose and Scope

+
+

This document presents the Resource Catalogue Interfaces for the Common Architecture.

+
+
+
+

1.2. Structure of the Document

+
+
+
Section 2 - Overview
+
+

Provides an over of the Resource Catalogue component, within the context of the wider Common Architecture design.

+
+
Section 3 - [mainDesign]
+
+

Provides the design of the Resource Catalogue component.

+
+
+
+
+
+

1.3. Reference Documents

+
+

The following is a list of Reference Documents with a direct bearing on the content of this document.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ReferenceDocument DetailsVersion

[EOEPCA-UC]

+

EOEPCA - Use Case Analysis
+EOEPCA.TN.005
+https://eoepca.github.io/use-case-analysis

+
+

Issue 1.0,
+02/08/2019

+

[EP-FM]

+

Exploitation Platform - Functional Model,
+ESA-EOPSDP-TN-17-050

+
+

Issue 1.0,
+30/11/2017

+

[TEP-OA]

+

Thematic Exploitation Platform Open Architecture,
+EMSS-EOPS-TN-17-002

+
+

Issue 1,
+12/12/2017

+

[WPS-T]

+

OGC Testbed-14: WPS-T Engineering Report,
+OGC 18-036r1,
+http://docs.opengeospatial.org/per/18-036r1.html

+
+

18-036r1,
+07/02/2019

+

[WPS-REST-JSON]

+

OGC WPS 2.0 REST/JSON Binding Extension, Draft,
+OGC 18-062,
+https://raw.githubusercontent.com/opengeospatial/wps-rest-binding/develop/docs/18-062.pdf

+
+

1.0-draft

+

[CWL]

+

Common Workflow Language Specifications,
+https://www.commonwl.org/v1.0/

+
+

v1.0.2

+

[TB13-AP]

+

OGC Testbed-13, EP Application Package Engineering Report,
+OGC 17-023,
+http://docs.opengeospatial.org/per/17-023.html

+
+

17-023,
+30/01/2018

+

[TB13-ADES]

+

OGC Testbed-13, Application Deployment and Execution Service Engineering Report,
+OGC 17-024,
+http://docs.opengeospatial.org/per/17-024.html

+
+

17-024,
+11/01/2018

+

[TB14-AP]

+

OGC Testbed-14, Application Package Engineering Report,
+OGC 18-049r1,
+http://docs.opengeospatial.org/per/18-049r1.html

+
+

18-049r1,
+07/02/2019

+

[TB14-ADES]

+

OGC Testbed-14, ADES & EMS Results and Best Practices Engineering Report,
+OGC 18-050r1, http://docs.opengeospatial.org/per/18-050r1.html

+
+

18-050r1,
+08/02/2019

+

[OS-GEO-TIME]

+

OpenSearch GEO: OpenSearch Geo and Time Extensions,
+OGC 10-032r8,
+http://www.opengeospatial.org/standards/opensearchgeo

+
+

10-032r8,
+14/04/2014

+

[OS-EO]

+

OpenSearch EO: OGC OpenSearch Extension for Earth Observation,
+OGC 13-026r9,
+http://docs.opengeospatial.org/is/13-026r8/13-026r8.html

+
+

13-026r9,
+16/12/2016

+

[GEOJSON-LD]

+

OGC EO Dataset Metadata GeoJSON(-LD) Encoding Standard,
+OGC 17-003r1/17-084

+
+

17-003r1/17-084

+

[GEOJSON-LD-RESP]

+

OGC OpenSearch-EO GeoJSON(-LD) Response Encoding Standard,
+OGC 17-047

+
+

17-047

+

[PCI-DSS]

+

v3.2.1

+

[CEOS-OS-BP]

+

v1.2,
+13/06/2017

+

[OIDC]

+

v1.0,
+08/11/2014

+

[OARec]

+

OGC API - Records - Part 1: Core,
+OGC 20-004,
+https://docs.ogc.org/DRAFTS/20-004.html

+
+

v1.0,
+13/01/2020

+

[STAC-API]

+

SpatioTemporal Asset Catalog API,
+https://github.com/radiantearth/stac-api-spec

+
+

v1.0.0-beta.2,
+01/06/2020

+

[CQL]

+

OGC API - Features - Part 3: Filtering and the Common Query Language (CQL),
+OGC 19-079r1,
+https://docs.ogc.org/DRAFTS/19-079.html

+
+

v1.0.0-draft.2,
+27/01/2021

+

[OGC-CSW]

+

OGC Catalogue Services 3.0 Specification - HTTP Protocol Binding (Catalogue Services for the Web),
+OGC 12-176r7,
+http://docs.opengeospatial.org/is/12-176r7/12-176r7.html

+
+

v3.0,
+10/06/2016

+

[OGC-WMS]

+

OGC Web Map Server Implementation Specification,
+OGC 06-042,
+http://portal.opengeospatial.org/files/?artifact_id=14416

+
+

v1.3.0,
+05/03/2006

+

[OGC-WMTS]

+

OGC Web Map Tile Service Implementation Standard,
+OGC 07-057r7,
+http://portal.opengeospatial.org/files/?artifact_id=35326

+
+

v1.0.0,
+06/04/2010

+

[OGC-WFS]

+

OGC Web Feature Service 2.0 Interface Standard – With Corrigendum,
+OGC 09-025r2,
+http://docs.opengeospatial.org/is/09-025r2/09-025r2.html

+
+

v2.0.2,
+10/07/2014

+

[OGC-WCS]

+

OGC Web Coverage Service (WCS) 2.1 Interface Standard - Core,
+OGC 17-089r1,
+http://docs.opengeospatial.org/is/17-089r1/17-089r1.html

+
+

v2.1,
+16/08/2018

+

[OGC-WCPS]

+

Web Coverage Processing Service (WCPS) Language Interface Standard,
+OGC 08-068r2,
+http://portal.opengeospatial.org/files/?artifact_id=32319

+
+

v1.0.0,
+25/03/2009

+

[AWS-S3]

+

Amazon Simple Storage Service REST API,
+https://docs.aws.amazon.com/AmazonS3/latest/API

+
+

API Version 2006-03-01

+

[OGC-OpenSearch-EO]

+

OGC OpenSearch Extension for Earth Observation,
+OGC 13-026r9,
+http://docs.opengeospatial.org/is/13-026r9/13-026r9.html

+
+

v1.1,
+25/11/2019

+

[ISO-19115:2003]

+

ISO 19115:2003 Geographic information — Metadata,
+ISO 19115:2003,
+https://www.iso.org/standard/26020.html

+
+

v1,
+01/05/2003

+

[ISO-19115-2:2009]

+

ISO 19115-2:2009
+Geographic information — Metadata — Part 2: Extensions for imagery and gridded data,
+ISO 19115-2:2009,
+https://www.iso.org/standard/39229.html

+
+

v1,
+01/02/2009

+
+
+
+

1.4. Terminology

+
+

The following terms are used in the Master System Design.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TermMeaning

Admin

User with administrative capability on the EP

Algorithm

A self-contained set of operations to be performed, typically to achieve a desired data manipulation. The algorithm must be implemented (codified) for deployment and execution on the platform.

Analysis Result

The Products produced as output of an Interactive Application analysis session.

Analytics

A set of activities aimed to discover, interpret and communicate meaningful patters within the data. Analytics considered here are performed manually (or in a semi-automatic way) on-line with the aid of Interactive Applications.

Application Artefact

The 'software' component that provides the execution unit of the Application Package.

Application Deployment and Execution Service (ADES)

WPS-T (REST/JSON) service that incorporates the Docker execution engine, and is responsible for the execution of the processing service (as a WPS request) within the ‘target’ Exploitation Platform.

Application Descriptor

A file that provides the metadata part of the Application Package. Provides all the metadata required to accommodate the processor within the WPS service and make it available for execution.

Application Package

A platform independent and self-contained representation of a software item, providing executable, metadata and dependencies such that it can be deployed to and executed within an Exploitation Platform. Comprises the Application Descriptor and the Application Artefact.

Bulk Processing

Execution of a Processing Service on large amounts of data specified by AOI and TOI.

Code

The codification of an algorithm performed with a given programming language - compiled to Software or directly executed (interpretted) within the platform.

Compute Platform

The Platform on which execution occurs (this may differ from the Host or Home platform where federated processing is happening)

Consumer

User accessing existing services/products within the EP. Consumers may be scientific/research or commercial, and may or may not be experts of the domain

Catalogue Service for the Web (CSW)

OGC standard that provides a simple HTTP interface for searching collections of descriptive metadata for data, services and relation information objects.

Data Access Library

An abstraction of the interface to the data layer of the resource tier. The library provides bindings for common languages (including python, Javascript) and presents a common object model to the code.

Development

The act of building new products/services/applications to be exposed within the platform and made available for users to conduct exploitation activities. Development may be performed inside or outside of the platform. If performed outside, an integration activity will be required to accommodate the developed service so that it is exposed within the platform.

Discovery

User finds products/services of interest to them based upon search criteria.

Execution

The act to start a Processing Service or an Interactive Application.

Execution Management Service (EMS)

The EMS is responsible for the orchestration of workflows, including the possibility of steps running on other (remote) platforms, and the on-demand deployment of processors to local/remote ADES as required.

Expert

User developing and integrating added-value to the EP (Scientific Researcher or Service Developer)

Exploitation Tier

The Exploitation Tier represents the end-users who exploit the services of the platform to perform analysis, or using high-level applications built-in on top of the platform’s services

External Application

An application or script that is developed and executed outside of the Exploitation Platform, but is able to use the data/services of the EP via a programmatic interface (API).

Guest

An unregistered User or an unauthenticated Consumer with limited access to the EP’s services

Home Platform

The Platform on which a User is based or from which an action was initiated by a User

Host Platform

The Platform through which a Resource has been published

Identity Provider (IdP)

The source for validating user identity in a federated identity system, (user authentication as a service).

Interactive Application

A stand-alone application provided within the exploitation platform for on-line hosted processing. Provides an interactive interface through which the user is able to conduct their analysis of the data, producing Analysis Results as output. Interactive Applications include at least the following types: console application, web application (rich browser interface), remote desktop to a hosted VM.

Interactive Console Application

A simple Interactive Application for analysis in which a console interface to a platform-hosted terminal is provided to the user. The console interface can be provided through the user’s browser session or through a remote SSH connection.

Interactive Remote Desktop

An Interactive Application for analysis provided as a remote desktop session to an OS-session (or directly to a 'native' application) on the exploitation platform. The user will have access to a number of applications within the hosted OS. The remote desktop session is provided through the user’s web browser.

Interactive Web Application

An Interactive Application for analysis provided as a rich user interface through the user’s web browser.

Key-Value Pair

A key-value pair (KVP) is an abstract data type that includes a group of key identifiers and a set of associated values. Key-value pairs are frequently used in lookup tables, hash tables and configuration files.

Kubernetes (K8s)

Container orchestration system for automating application deployment, scaling and management.

Login Service

An encapsulation of Authenticated Login provision within the Exploitation Platform context. The Login Service is an OpenID Connect Provider that is used purely for authentication. It acts as a Relying Party in flows with external IdPs to obtain access to the user’s identity.

EO Network of Resources

The coordinated collection of European EO resources (platforms, data sources, etc.).

Object Store

A computer data storage architecture that manages data as objects. Each object typically includes the data itself, a variable amount of metadata, and a globally unique identifier.

OGC API - Records (OARec)

Draft OGC API standard that provides the capability to create, modify, and query metadata on the Web. The draft specification enables the discovery of geospatial resources by standardizing the way collections of descriptive information about the resources (metadata) are exposed. OARec is the successor to OGC CSW specification.

On-demand Processing Service

A Processing Service whose execution is initiated directly by the user on an ad-hoc basis.

Platform (EP)

An on-line collection of products, services and tools for exploitation of EO data

Platform Tier

The Platform Tier represents the Exploitation Platform and the services it offers to end-users

Processing

A set of pre-defined activities that interact to achieve a result. For the exploitation platform, comprises on-line processing to derive data products from input data, conducted by a hosted processing service execution.

Processing Result

The Products produced as output of a Processing Service execution.

Processing Service

A non-interactive data processing that has a well-defined set of input data types, input parameterisation, producing Processing Results with a well-defined output data type.

Products

EO data (commercial and non-commercial) and Value-added products and made available through the EP. It is assumed that the Hosting Environment for the EP makes available an existing supply of EO Data

Resource

A entity, such as a Product, Processing Service or Interactive Application, which is of interest to a user, is indexed in a catalogue and can be returned as a single meaningful search result

Resource Tier

The Resource Tier represents the hosting infrastructure and provides the EO data, storage and compute upon which the exploitation platform is deployed

Reusable Research Object

An encapsulation of some research/analysis that describes all aspects required to reproduce the analysis, including data used, processing performed etc.

Scientific Researcher

Expert user with the objective to perform scientific research. Having minimal IT knowledge with no desire to acquire it, they want the effort for the translation of their algorithm into a service/product to be minimised by the platform.

Service Developer

Expert user with the objective to provide a performing, stable and reliable service/product. Having deeper IT knowledge or a willingness to acquire it, they require deeper access to the platform IT functionalities for optimisation of their algorithm.

Software

The compilation of code into a binary program to be executed within the platform on-line computing environment.

Systematic Processing Service

A Processing Service whose execution is initiated automatically (on behalf of a user), either according to a schedule (routine) or triggered by an event (e.g. arrival of new data).

Terms & Conditions (T&Cs)

The obligations that the user agrees to abide by in regard of usage of products/services of the platform. T&Cs are set by the provider of each product/service.

Transactional Web Processing Service (WPS-T)

Transactional extension to WPS that allows adhoc deployment / undeployment of user-provided processors.

User

An individual using the EP, of any type (Admin/Consumer/Expert/Guest)

Value-added products

Products generated from processing services of the EP (or external processing) and made available through the EP. This includes products uploaded to the EP by users and published for collaborative consumption

Visualisation

To obtain a visual representation of any data/products held within the platform - presented to the user within their web browser session.

Web Coverage Service (WCS)

OGC standard that provides an open specification for sharing raster datasets on the web.

Web Coverage Processing Service (WCPS)

OGC standard that defines a protocol-independent language for the extraction, processing, and analysis of multi-dimentional coverages representing sensor, image, or statistics data.

Web Feature Service (WFS)

OGC standard that makes geographic feature data (vector geospatial datasets) available on the web.

Web Map Service (WMS)

OGC standard that provides a simple HTTP interface for requesting geo-registered map images from one or more distributed geospatial databases.

Web Map Tile Service (WMTS)

OGC standard that provides a simple HTTP interface for requesting map tiles of spatially referenced data using the images with predefined content, extent, and resolution.

Web Processing Services (WPS)

OGC standard that defines how a client can request the execution of a process, and how the output from the process is handled.

Workspace

A user-scoped 'container' in the EP, in which each user maintains their own links to resources (products and services) that have been collected by a user during their usage of the EP. The workspace acts as the hub for a user’s exploitation activities within the EP

+
+
+

1.5. Glossary

+
+

The following acronyms and abbreviations have been used in this report.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TermDefinition

AAI

Authentication & Authorization Infrastructure

ABAC

Attribute Based Access Control

ADES

Application Deployment and Execution Service

ALFA

Abbreviated Language For Authorization

AOI

Area of Interest

API

Application Programming Interface

CMS

Content Management System

CQL

Common Query Language

CSW

Catalogue Service for the Web

CWL

Common Workflow Language

DAL

Data Access Library

EMS

Execution Management Service

EO

Earth Observation

EP

Exploitation Platform

FUSE

Filesystem in Userspace

GeoXACML

Geo-specific extension to the XACML Policy Language

IAM

Identity and Access Management

IdP

Identity Provider

ISO

International Organization for Standardization

JSON

JavaScript Object Notation

K8s

Kubernetes

KVP

Key-value Pair

M2M

Machine-to-machine

OARec

OGC API - Records

OGC

Open Geospatial Consortium

PDE

Processor Development Environment

PDP

Policy Decision Point

PEP

Policy Enforcement Point

PIP

Policy Information Point

RBAC

Role Based Access Control

REST

Representational State Transfer

SSH

Secure Shell

STAC

SpatioTemporal Asset Catalog

TOI

Time of Interest

UMA

User-Managed Access

VNC

Virtual Network Computing

WCS

Web Coverage Service

WCPS

Web Coverage Processing Service

WFS

Web Feature Service

WMS

Web Map Service

WMTS

Web Map Tile Service

WPS

Web Processing Service

WPS-T

Transactional Web Processing Service

XACML

eXtensible Access Control Markup Language

+
+
+
+
+
+

2. Overview

+
+
+

This Interface Control Document (ICD) is a companion to the System Design
+Document for the Resource Catalogue. The ICD provides a Building Block level
+specification of the interfaces exposed by the RC to other EOEPCA components.

+
+
+
+
+
+

3. Data Discovery Interfaces

+
+
+

3.1. Endpoints

+
+

3.1.1. OGC API - Records

+
+
3.1.1.1. Landing page
+
+

GET /catalogue

+
+
+
3.1.1.1.1. Description
+
+

Returns an overview of the service, endpoints, and contact.

+
+
+
+
3.1.1.1.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + +
NameDescriptionRequired

f

The output format of the response. One of json or html.

+
+
+
+
3.1.1.1.3. Content Type
+
+
    +
  • +

    application/json

    +
  • +
  • +

    text/html

    +
  • +
+
+
+
+
3.1.1.1.4. Responses
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CodeMessageDatatype

200

The landing page

application/json

200

The landing page

text/html

400

Bad request

application/json

400

Bad request

text/html

+
+
+
+
3.1.1.2. OpenAPI
+
+

GET /catalogue/openapi

+
+
+
3.1.1.2.1. Description
+
+

Provides an OpenAPI document describing service endpoints, models, perameters, and other API information.

+
+
+
+
3.1.1.2.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + +
NameDescriptionRequired

f

The output format of the response. One of json or html.

+
+
+
+
3.1.1.2.3. Content Type
+
+
    +
  • +

    application/json

    +
  • +
  • +

    text/html

    +
  • +
+
+
+
+
3.1.1.2.4. Responses
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CodeMessageDatatype

200

The OpenAPI document

application/vnd.oai.openapi+json;version=3.0

200

The OpenAPI document via Swagger

text/html

400

Bad request

application/json

400

Bad request

text/html

+
+
+
+
3.1.1.3. Conformance
+
+

GET /catalogue/conformance

+
+
+
3.1.1.3.1. Description
+
+

Returns a list of supported OGC API conformance classes.

+
+
+
+
3.1.1.3.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + +
NameDescriptionRequired

f

The output format of the response. One of json or html.

+
+
+
+
3.1.1.3.3. Content Type
+
+
    +
  • +

    application/json

    +
  • +
  • +

    text/html

    +
  • +
+
+
+
+
3.1.1.3.4. Responses
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CodeMessageDatatype

200

The conformance page

application/json

200

The conformance page

text/html

400

Bad request

application/json

400

Bad request

text/html

+
+
+
+
3.1.1.4. Collections
+
+

GET /catalogue/collections

+
+
+
3.1.1.4.1. Description
+
+

Returns a list of collections of metadata.

+
+
+
+
3.1.1.4.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + +
NameDescriptionRequired

f

The output format of the response. One of json or html.

+
+
+
+
3.1.1.4.3. Content Type
+
+
    +
  • +

    application/json

    +
  • +
  • +

    text/html

    +
  • +
+
+
+
+
3.1.1.4.4. Responses
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CodeMessageDatatype

200

The listing of metadata collections

application/json

200

The listing of metadata collections

text/html

400

Bad request

application/json

400

Bad request

text/html

+
+
+
+
3.1.1.5. Main collection
+
+

GET /catalogue/collections/metadata:main

+
+
+
3.1.1.5.1. Description
+
+

Returns a description of the main collection of metadata.

+
+
+
+
3.1.1.5.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + +
NameDescriptionRequired

f

The output format of the response. One of json or html.

+
+
+
+
3.1.1.5.3. Content Type
+
+
    +
  • +

    application/json

    +
  • +
  • +

    text/html

    +
  • +
+
+
+
+
3.1.1.5.4. Responses
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CodeMessageDatatype

200

The description of the main metadata collection

application/json

200

The description of the main metadata collection

text/html

400

Bad request

application/json

400

Bad request

text/html

+
+
+
+
3.1.1.6. Main collection queryables
+
+

GET /catalogue/collections/metadata:main/queryables

+
+
+
3.1.1.6.1. Description
+
+

Returns a listing of all queryables of the main collection of metadata.

+
+
+
+
3.1.1.6.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + +
NameDescriptionRequired

f

The output format of the response. One of json or html.

+
+
+
+
3.1.1.6.3. Content Type
+
+
    +
  • +

    application/json

    +
  • +
  • +

    text/html

    +
  • +
+
+
+
+
3.1.1.6.4. Responses
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CodeMessageDatatype

200

The main metadata collection’s queryables

application/json

200

The main metadata collection’s queryables

text/html

400

Bad request

application/json

400

Bad request

text/html

+
+
+
+
3.1.1.7. Metadata collection items
+
+

GET /catalogue/collections/metadata:main/items
+POST /catalogue/collections/metadata:main/items

+
+
+
3.1.1.7.1. Description
+
+

Returns metadata items as a result of query.

+
+
+
+
3.1.1.7.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequired

f

The output format of the response. One of json or html.

q

Free-text search terms to query.

bbox

The record bounding bounding box to filter on. Expressed as 'minx,minyx,maxx,maxy' in CRS84.

datetime

The temporal period to filter on. Expressed as 'minx,minyx,maxx,maxy' in CRS84.

startindex

The page/offset on which to apply on the result set.

limit

The limit on which to apply on the result set.

filter

The CQL TEXT filter to apply when querying records.

+
+
+JSON Body Parameters + +++++ + + + + + + + + + + + + + + +
NameDescriptionRequired

<object>

JSON payload conforming to an OGC CQL expression

X

+
+
+
+
+
3.1.1.8. Metadata collection item
+
+

GET /catalogue/collections/metadata:main/items/{recordId}

+
+
+
3.1.1.8.1. Description
+
+

Returns a single metadata item.

+
+
+
+
3.1.1.8.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + +
NameDescriptionRequired

f

The output format of the response. One of json, xml or html.

+
+
+
+
3.1.1.8.3. Content Type
+
+
    +
  • +

    application/json

    +
  • +
  • +

    application/xml

    +
  • +
  • +

    text/html

    +
  • +
+
+
+
+
3.1.1.8.4. Responses
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CodeMessageDatatype

200

The single record result

application/json

200

The single record result

application/xml

200

The single record result

text/html

400

Bad request

application/json

400

Bad request

text/html

404

Record not found

application/json

404

Record not found

text/html

+
+
+
+
+

3.1.2. OGC CSW 3.0 / OpenSearch

+
+
3.1.2.1. GET Capabilities / Description Document
+
+

GET /catalogue/csw

+
+
+
3.1.2.1.1. Description
+
+

Returns the Capabilities XML or OpenSearch description document.

+
+
+
+
3.1.2.1.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequired

service

The OWS service to use. Fixed to 'CSW' in this request.

X

version

The OWS service version to use. One of '3.0.0' or '2.0.2'.

X

request

The OWS request type to use. Fixed to 'GetCapabilities' in this request.

X

mode

The mode flag to use. Fixed to 'opensearch' in this request.

+
+
+
+
3.1.2.1.3. Content Type
+
+
    +
  • +

    application/xml

    +
  • +
+
+
+
+
3.1.2.1.4. Responses
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
CodeMessageDatatype

200

Capabilities XML

application/xml

200

The OpenSearch Description Document (if 'mode=opensearch' is specified)

application/xml

400

Bad request

application/xml

+
+
+
+
3.1.2.2. GET Domain Values
+
+

GET /catalogue/csw

+
+
+
3.1.2.2.1. Description
+
+

Returns unique values of properties and API parameters.

+
+
+
+
3.1.2.2.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequired

service

The OWS service to use. Fixed to 'CSW' in this request.

X

version

The OWS service version to use. One of '3.0.0' or '2.0.2'.

X

request

The OWS request type to use. Fixed to 'GetDomain' in this request.

X

valuereference

The property name to query

parametername

The API parameter to query

+
+
+
+
3.1.2.2.3. Content Type
+
+
    +
  • +

    application/xml

    +
  • +
+
+
+
+
3.1.2.2.4. Responses
+ +++++ + + + + + + + + + + + + + + + + + + + +
CodeMessageDatatype

200

GetDomain response XML

application/xml

400

Bad request

application/xml

+
+
+
+
3.1.2.3. GET Records
+
+

GET /catalogue/csw

+
+
+
3.1.2.3.1. Description
+
+

Returns metadata records based on search request parameters.

+
+
+
+
3.1.2.3.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequired

service

The OWS service to use. Fixed to 'CSW' in this request.

X

version

The OWS service version to use. One of '2.0.2' or '3.0.0'.

X

request

The OWS request type to use. Fixed to 'GetRecords' in this request.

X

mode

The mode to to use. Fixed to 'opensearch' in this request.

typenames

Metadata record type to query. Fixed to 'csw:Record' in this request.

X

elementsetname

Metadata subset. One of 'brief', 'summary' or 'full' (default).

X

outputformat

The metadata encoding to use. One of 'application/xml' or 'application/json'

outputschema

The metadata record schema to use. One of 'http://www.opengis.net/cat/csw/3.0' or 'http://www.isotc211.org/2005/gmd'

recordids

Comma-separated list of 1..n record ids to return

q

Free-text search terms to query.

bbox

The record bounding bounding box to filter on. Expressed as 'minx,minyx,maxx,maxy' in CRS84.

time

The temporal period to filter on. Expressed as 'minx,minyx,maxx,maxy' in CRS84.

start

The starting temporal period to filter on. Expressed as ISO8601.

start

The ending temporal period to filter on. Expressed as ISO8601.

startposition

The page/offset on which to apply on the result set.

maxrecords

The limit on which to apply on the result set.

eo:cloudCover

Percentage of cloud cover to filter on (number).

eo:instrument

Instrument to filter on.

eo:platform

Platform to filter on.

eo:orbitDirection

Orbit direction to filter on. One of 'DESCENDING' or 'ASCENDING'

eo:orbitNumber

Orbit number to filter on.

eo:processingLevel

The processing level applied to the entry

eo:productType

Product type to filter on.

eo:productType

Product type to filter on.

eo:sensorType

Sensor type to filter on.

eo:snowCover

Percentage of snow cover to filter on (number).

eo:spectralRange

Sensor spectral range to filter on.

+
+
+
+
3.1.2.3.3. Content Type
+
+
    +
  • +

    application/xml

    +
  • +
  • +

    application/atom+xml

    +
  • +
  • +

    application/json

    +
  • +
+
+
+
+
3.1.2.3.4. Responses
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CodeMessageDatatype

200

The result set corresponding to a given search

application/xml

200

The result set corresponding to a given search (if 'mode=opensearch' is specified)

application/atom+xml

200

The result set corresponding to a given search

application/json

400

Bad request

application/xml

+
+
+
+
3.1.2.4. GET Record by Identifier
+
+

GET /catalogue/csw

+
+
+
3.1.2.4.1. Description
+
+

Returns a single metadata record by identifier.

+
+
+
+
3.1.2.4.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequired

service

The OWS service to use. Fixed to 'CSW' in this request.

X

version

The OWS service version to use. One of '3.0.0' or '2.0.2'.

X

request

The OWS request type to use. Fixed to 'GetRecordById' in this request.

X

id

The mode flag to use. Fixed to 'opensearch' in this request.

X

elementsetname

Metadata subset. One of 'brief', 'summary' or 'full' (default).

outputformat

The metadata encoding to use. One of 'application/xml' or 'application/json'

outputschema

The metadata record schema to use. One of 'http://www.opengis.net/cat/csw/3.0' or 'http://www.isotc211.org/2005/gmd'

+
+
+
+
3.1.2.4.3. Content Type
+
+
    +
  • +

    application/xml

    +
  • +
  • +

    application/json

    +
  • +
+
+
+
+
3.1.2.4.4. Responses
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
CodeMessageDatatype

200

Metadata record document

application/xml

200

Metadata record document

application/json

400

Bad request

application/xml

+
+
+
+
3.1.2.5. GET Record by Identifier in Native format
+
+

GET /catalogue/csw

+
+
+
3.1.2.5.1. Description
+
+

Returns a single metadata record by identifier in its native metadata format.

+
+
+
+
3.1.2.5.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequired

service

The OWS service to use. Fixed to 'CSW' in this request.

X

version

The OWS service version to use. One of '3.0.0' or '2.0.2'.

X

request

The OWS request type to use. Fixed to 'GetRepositoryItem' in this request.

X

id

The mode flag to use. Fixed to 'opensearch' in this request.

X

+
+
+
+
3.1.2.5.3. Content Type
+
+
    +
  • +

    application/xml

    +
  • +
  • +

    application/json

    +
  • +
+
+
+
+
3.1.2.5.4. Responses
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CodeMessageDatatype

200

Metadata record document

application/xml

200

Metadata record document

application/json

400

Bad request

application/xml

404

Record not found

application/xml

+
+
+
+
+

3.1.3. SpatioTemporal Asset Catalog

+
+
3.1.3.1. Landing page
+
+

GET /catalogue

+
+
+
3.1.3.1.1. Description
+
+

Returns an overview of the service, endpoints, and contact.

+
+
+
+
3.1.3.1.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + +
NameDescriptionRequired

f

The output format of the response. One of json or html.

+
+
+
+
3.1.3.1.3. Content Type
+
+
    +
  • +

    application/json

    +
  • +
  • +

    text/html

    +
  • +
+
+
+
+
3.1.3.1.4. Responses
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CodeMessageDatatype

200

The landing page

application/json

200

The landing page

text/html

400

Bad request

application/json

400

Bad request

text/html

+
+
+
+ +
+

GET /catalogue/search
+POST /catalogue/search

+
+
+
3.1.3.2.1. Description
+
+

Returns metadata items as a result of query.

+
+
+
+
3.1.3.2.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequired

f

The output format of the response. One of json or html.

q

Free-text search terms to query.

bbox

The record bounding bounding box to filter on. Expressed as 'minx,minyx,maxx,maxy' in CRS84.

datetime

The temporal period to filter on. Expressed as 'minx,minyx,maxx,maxy' in CRS84.

startindex

The page/offset on which to apply on the result set.

limit

The limit on which to apply on the result set.

filter

The CQL TEXT filter to apply when querying records.

+
+
+JSON Body Parameters + +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequired

bbox

The record bounding bounding box to filter on. Expressed as 'minx,minyx,maxx,maxy' in CRS84.

datetime

The temporal period to filter on. Expressed as 'minx,minyx,maxx,maxy' in CRS84.

limit

The limit on which to apply on the result set.

+
+
+
+
+
3.1.3.3. Metadata collection item
+
+

GET /catalogue/collections/metadata:main/items/{recordId}

+
+
+
3.1.3.3.1. Description
+
+

Returns a single metadata item.

+
+
+
+
3.1.3.3.2. Parameters
+
+Query Parameters + +++++ + + + + + + + + + + + + + + +
NameDescriptionRequired

f

The output format of the response. One of json, xml or html.

+
+
+
+
3.1.3.3.3. Content Type
+
+
    +
  • +

    application/json

    +
  • +
  • +

    application/xml

    +
  • +
  • +

    text/html

    +
  • +
+
+
+
+
3.1.3.3.4. Responses
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CodeMessageDatatype

200

The single record result

application/json

200

The single record result

application/xml

200

The single record result

text/html

400

Bad request

application/json

400

Bad request

text/html

404

Record not found

application/json

404

Record not found

text/html

+
+
+

<< End of Document >>

+
+
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/ICD/index.pdf b/ICD/index.pdf new file mode 100644 index 0000000..a1a0454 Binary files /dev/null and b/ICD/index.pdf differ diff --git a/ICD/logo.png b/ICD/logo.png new file mode 100644 index 0000000..6e9ff5c Binary files /dev/null and b/ICD/logo.png differ diff --git a/ICD/stylesheets/asciidoctor.css b/ICD/stylesheets/asciidoctor.css new file mode 100644 index 0000000..37a53c3 --- /dev/null +++ b/ICD/stylesheets/asciidoctor.css @@ -0,0 +1,420 @@ +/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */ +/* Uncomment @import statement below to use as custom stylesheet */ +@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; +article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} +audio,canvas,video{display:inline-block} +audio:not([controls]){display:none;height:0} +script{display:none!important} +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%} +a{background:transparent} +a:focus{outline:thin dotted} +a:active,a:hover{outline:0} +h1{font-size:2em;margin:.67em 0} +abbr[title]{border-bottom:1px dotted} +b,strong{font-weight:bold} +dfn{font-style:italic} +hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} +mark{background:#ff0;color:#000} +code,kbd,pre,samp{font-family:monospace;font-size:1em} +pre{white-space:pre-wrap} +q{quotes:"\201C" "\201D" "\2018" "\2019"} +small{font-size:80%} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sup{top:-.5em} +sub{bottom:-.25em} +img{border:0} +svg:not(:root){overflow:hidden} +figure{margin:0} +fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} +legend{border:0;padding:0} +button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} +button,input{line-height:normal} +button,select{text-transform:none} +button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} +button[disabled],html input[disabled]{cursor:default} +input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +textarea{overflow:auto;vertical-align:top} +table{border-collapse:collapse;border-spacing:0} +*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box} +html,body{font-size:100%} +body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased} +a:hover{cursor:pointer} +img,object,embed{max-width:100%;height:auto} +object,embed{height:100%} +img{-ms-interpolation-mode:bicubic} +.left{float:left!important} +.right{float:right!important} +.text-left{text-align:left!important} +.text-right{text-align:right!important} +.text-center{text-align:center!important} +.text-justify{text-align:justify!important} +.hide{display:none} +img,object,svg{display:inline-block;vertical-align:middle} +textarea{height:auto;min-height:50px} +select{width:100%} +.center{margin-left:auto;margin-right:auto} +.stretch{width:100%} +.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} +div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr} +a{color:#2156a5;text-decoration:underline;line-height:inherit} +a:hover,a:focus{color:#1d4b8f} +a img{border:none} +p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} +p aside{font-size:.875em;line-height:1.35;font-style:italic} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} +h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} +h1{font-size:2.125em} +h2{font-size:1.6875em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} +h4,h5{font-size:1.125em} +h6{font-size:1em} +hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0} +em,i{font-style:italic;line-height:inherit} +strong,b{font-weight:bold;line-height:inherit} +small{font-size:60%;line-height:inherit} +code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} +ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} +ul,ol{margin-left:1.5em} +ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em} +ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit} +ul.square{list-style-type:square} +ul.circle{list-style-type:circle} +ul.disc{list-style-type:disc} +ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} +dl dt{margin-bottom:.3125em;font-weight:bold} +dl dd{margin-bottom:1.25em} +abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help} +abbr{text-transform:none} +blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} +blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)} +blockquote cite::before{content:"\2014 \0020"} +blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)} +blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} +@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} +h1{font-size:2.75em} +h2{font-size:2.3125em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} +h4{font-size:1.4375em}} +table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede} +table thead,table tfoot{background:#f7f8f7} +table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} +table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} +table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7} +table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} +h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} +.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table} +.clearfix::after,.float-group::after{clear:both} +*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word} +*:not(pre)>code.nobreak{word-wrap:normal} +*:not(pre)>code.nowrap{white-space:nowrap} +pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed} +em em{font-style:normal} +strong strong{font-weight:400} +.keyseq{color:rgba(51,51,51,.8)} +kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap} +.keyseq kbd:first-child{margin-left:0} +.keyseq kbd:last-child{margin-right:0} +.menuseq,.menuref{color:#000} +.menuseq b:not(.caret),.menuref{font-weight:inherit} +.menuseq{word-spacing:-.02em} +.menuseq b.caret{font-size:1.25em;line-height:.8} +.menuseq i.caret{font-weight:bold;text-align:center;width:.45em} +b.button::before,b.button::after{position:relative;top:-1px;font-weight:400} +b.button::before{content:"[";padding:0 3px 0 2px} +b.button::after{content:"]";padding:0 2px 0 3px} +p a>code:hover{color:rgba(0,0,0,.9)} +#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} +#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table} +#header::after,#content::after,#footnotes::after,#footer::after{clear:both} +#content{margin-top:1.25em} +#content::before{content:none} +#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} +#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf} +#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px} +#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap} +#header .details span:first-child{margin-left:-.125em} +#header .details span.email a{color:rgba(0,0,0,.85)} +#header .details br{display:none} +#header .details br+span::before{content:"\00a0\2013\00a0"} +#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} +#header .details br+span#revremark::before{content:"\00a0|\00a0"} +#header #revnumber{text-transform:capitalize} +#header #revnumber::after{content:"\00a0"} +#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} +#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em} +#toc>ul{margin-left:.125em} +#toc ul.sectlevel0>li>a{font-style:italic} +#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} +#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} +#toc li{line-height:1.3334;margin-top:.3334em} +#toc a{text-decoration:none} +#toc a:active{text-decoration:underline} +#toctitle{color:#7a2518;font-size:1.2em} +@media screen and (min-width:768px){#toctitle{font-size:1.375em} +body.toc2{padding-left:15em;padding-right:0} +#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} +#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em} +#toc.toc2>ul{font-size:.9em;margin-bottom:0} +#toc.toc2 ul ul{margin-left:0;padding-left:1em} +#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} +body.toc2.toc-right{padding-left:0;padding-right:15em} +body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}} +@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} +#toc.toc2{width:20em} +#toc.toc2 #toctitle{font-size:1.375em} +#toc.toc2>ul{font-size:.95em} +#toc.toc2 ul ul{padding-left:1.25em} +body.toc2.toc-right{padding-left:0;padding-right:20em}} +#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} +#content #toc>:first-child{margin-top:0} +#content #toc>:last-child{margin-bottom:0} +#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em} +#footer-text{color:rgba(255,255,255,.8);line-height:1.44} +#content{margin-bottom:.625em} +.sect1{padding-bottom:.625em} +@media screen and (min-width:768px){#content{margin-bottom:1.25em} +.sect1{padding-bottom:1.25em}} +.sect1:last-child{padding-bottom:0} +.sect1+.sect1{border-top:1px solid #e7e7e9} +#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} +#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} +#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} +#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} +#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} +.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} +.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} +table.tableblock.fit-content>caption.title{white-space:nowrap;width:0} +.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)} +table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit} +.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} +.admonitionblock>table td.icon{text-align:center;width:80px} +.admonitionblock>table td.icon img{max-width:none} +.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} +.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)} +.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} +.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px} +.exampleblock>.content>:first-child{margin-top:0} +.exampleblock>.content>:last-child{margin-bottom:0} +.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} +.sidebarblock>:first-child{margin-top:0} +.sidebarblock>:last-child{margin-bottom:0} +.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} +.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} +.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8} +.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1} +.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em} +@media screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}} +@media screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}} +.literalblock pre.nowrap,.literalblock pre.nowrap pre,.listingblock pre.nowrap,.listingblock pre.nowrap pre{white-space:pre;word-wrap:normal} +.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)} +.listingblock pre.highlightjs{padding:0} +.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px} +.listingblock pre.prettyprint{border-width:0} +.listingblock>.content{position:relative} +.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999} +.listingblock:hover code[data-lang]::before{display:block} +.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:#999} +.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"} +table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none} +table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45} +table.pyhltable td.code{padding-left:.75em;padding-right:0} +pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #dddddf} +pre.pygments .lineno{display:inline-block;margin-right:.25em} +table.pyhltable .linenodiv{background:none!important;padding-right:0!important} +.quoteblock{margin:0 1em 1.25em 1.5em;display:table} +.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em} +.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} +.quoteblock blockquote{margin:0;padding:0;border:0} +.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} +.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} +.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right} +.verseblock{margin:0 1em 1.25em} +.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} +.verseblock pre strong{font-weight:400} +.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} +.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} +.quoteblock .attribution br,.verseblock .attribution br{display:none} +.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)} +.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none} +.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0} +.quoteblock.abstract{margin:0 1em 1.25em;display:block} +.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center} +.quoteblock.excerpt,.quoteblock .quoteblock{margin:0 0 1.25em;padding:0 0 .25em 1em;border-left:.25em solid #dddddf} +.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem} +.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0} +table.tableblock{max-width:100%;border-collapse:separate} +p.tableblock:last-child{margin-bottom:0} +td.tableblock>.content{margin-bottom:-1.25em} +table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} +table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0} +table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0} +table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0} +table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px} +table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0} +table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0} +table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0} +table.frame-all{border-width:1px} +table.frame-sides{border-width:0 1px} +table.frame-topbot,table.frame-ends{border-width:1px 0} +table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd){background:#f8f8f7} +table.stripes-none tr,table.stripes-odd tr:nth-of-type(even){background:none} +th.halign-left,td.halign-left{text-align:left} +th.halign-right,td.halign-right{text-align:right} +th.halign-center,td.halign-center{text-align:center} +th.valign-top,td.valign-top{vertical-align:top} +th.valign-bottom,td.valign-bottom{vertical-align:bottom} +th.valign-middle,td.valign-middle{vertical-align:middle} +table thead th,table tfoot th{font-weight:bold} +tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7} +tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold} +p.tableblock>code:only-child{background:none;padding:0} +p.tableblock{font-size:1em} +td>div.verse{white-space:pre} +ol{margin-left:1.75em} +ul li ol{margin-left:1.5em} +dl dd{margin-left:1.125em} +dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} +ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} +ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none} +ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em} +ul.unstyled,ol.unstyled{margin-left:0} +ul.checklist{margin-left:.625em} +ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em} +ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em} +ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em} +ul.inline>li{margin-left:1.25em} +.unstyled dl dt{font-weight:400;font-style:normal} +ol.arabic{list-style-type:decimal} +ol.decimal{list-style-type:decimal-leading-zero} +ol.loweralpha{list-style-type:lower-alpha} +ol.upperalpha{list-style-type:upper-alpha} +ol.lowerroman{list-style-type:lower-roman} +ol.upperroman{list-style-type:upper-roman} +ol.lowergreek{list-style-type:lower-greek} +.hdlist>table,.colist>table{border:0;background:none} +.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} +td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em} +td.hdlist1{font-weight:bold;padding-bottom:1.25em} +.literalblock+.colist,.listingblock+.colist{margin-top:-.5em} +.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top} +.colist td:not([class]):first-child img{max-width:none} +.colist td:not([class]):last-child{padding:.25em 0} +.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd} +.imageblock.left{margin:.25em .625em 1.25em 0} +.imageblock.right{margin:.25em 0 1.25em .625em} +.imageblock>.title{margin-bottom:0} +.imageblock.thumb,.imageblock.th{border-width:6px} +.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} +.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} +.image.left{margin-right:.625em} +.image.right{margin-left:.625em} +a.image{text-decoration:none;display:inline-block} +a.image object{pointer-events:none} +sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super} +sup.footnote a,sup.footnoteref a{text-decoration:none} +sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline} +#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} +#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0} +#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em} +#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em} +#footnotes .footnote:last-of-type{margin-bottom:0} +#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} +.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0} +.gist .file-data>table td.line-data{width:99%} +div.unbreakable{page-break-inside:avoid} +.big{font-size:larger} +.small{font-size:smaller} +.underline{text-decoration:underline} +.overline{text-decoration:overline} +.line-through{text-decoration:line-through} +.aqua{color:#00bfbf} +.aqua-background{background-color:#00fafa} +.black{color:#000} +.black-background{background-color:#000} +.blue{color:#0000bf} +.blue-background{background-color:#0000fa} +.fuchsia{color:#bf00bf} +.fuchsia-background{background-color:#fa00fa} +.gray{color:#606060} +.gray-background{background-color:#7d7d7d} +.green{color:#006000} +.green-background{background-color:#007d00} +.lime{color:#00bf00} +.lime-background{background-color:#00fa00} +.maroon{color:#600000} +.maroon-background{background-color:#7d0000} +.navy{color:#000060} +.navy-background{background-color:#00007d} +.olive{color:#606000} +.olive-background{background-color:#7d7d00} +.purple{color:#600060} +.purple-background{background-color:#7d007d} +.red{color:#bf0000} +.red-background{background-color:#fa0000} +.silver{color:#909090} +.silver-background{background-color:#bcbcbc} +.teal{color:#006060} +.teal-background{background-color:#007d7d} +.white{color:#bfbfbf} +.white-background{background-color:#fafafa} +.yellow{color:#bfbf00} +.yellow-background{background-color:#fafa00} +span.icon>.fa{cursor:default} +a span.icon>.fa{cursor:inherit} +.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} +.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c} +.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} +.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900} +.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400} +.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000} +.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} +.conum[data-value] *{color:#fff!important} +.conum[data-value]+b{display:none} +.conum[data-value]::after{content:attr(data-value)} +pre .conum[data-value]{position:relative;top:-.125em} +b.conum *{color:inherit!important} +.conum:not([data-value]):empty{display:none} +dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility} +h1,h2,p,td.content,span.alt{letter-spacing:-.01em} +p strong,td.content strong,div.footnote strong{letter-spacing:-.005em} +p,blockquote,dt,td.content,span.alt{font-size:1.0625rem} +p{margin-bottom:1.25rem} +.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} +.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc} +.print-only{display:none!important} +@page{margin:1.25cm .75cm} +@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important} +html{font-size:80%} +a{color:inherit!important;text-decoration:underline!important} +a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} +a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} +abbr[title]::after{content:" (" attr(title) ")"} +pre,blockquote,tr,img,object,svg{page-break-inside:avoid} +thead{display:table-header-group} +svg{max-width:100%} +p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} +h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} +#toc,.sidebarblock,.exampleblock>.content{background:none!important} +#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important} +body.book #header{text-align:center} +body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em} +body.book #header .details{border:0!important;display:block;padding:0!important} +body.book #header .details span:first-child{margin-left:0!important} +body.book #header .details br{display:block} +body.book #header .details br+span::before{content:none!important} +body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} +body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} +.listingblock code[data-lang]::before{display:block} +#footer{padding:0 .9375em} +.hide-on-print{display:none!important} +.print-only{display:block!important} +.hide-for-print{display:none!important} +.show-for-print{display:inherit!important}} +@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem} +.sect1{padding:0!important} +.sect1+.sect1{border:0} +#footer{background:none} +#footer-text{color:rgba(0,0,0,.6);font-size:.9em}} +@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}} \ No newline at end of file diff --git a/ICD/stylesheets/eoepca.css b/ICD/stylesheets/eoepca.css new file mode 100644 index 0000000..46a3ba5 --- /dev/null +++ b/ICD/stylesheets/eoepca.css @@ -0,0 +1,25 @@ +@import "asciidoctor.css"; + +/* Centre align figure captions */ +.imageblock.text-center>.title { + text-align: center; +} + +/* Scale font size of CodeRay [source] elements, which seem a bit big */ +pre.CodeRay code { + font-size: 0.9em; +} + +/* Bold font for the numbers in an ordered list */ +div.strong > ol { + font-weight: bold; +} + +/* + * EXAMPLE for custom code-block scaling... + * Use an asciidoc source element like this '[source.src-scale05,python]' and then apply a custom style like below. + * This basically adds the custom CSS class 'src-scale05' to the root of the DOM for the code block, which we can then exploit for styling. + */ + .src-scale05 pre.CodeRay code { + font-size: 0.5em; +} diff --git a/SDD/index.html b/SDD/index.html new file mode 100644 index 0000000..2317ef4 --- /dev/null +++ b/SDD/index.html @@ -0,0 +1,1138 @@ + + + + + + + + + + +<Template Service> Design Document: EOEPCA.SDD.xxx + + + + + +
+
+
+
+

EO Exploitation Platform Common Architecture
+<Template Service> Design Document
+EOEPCA.SDD.xxx

+
+ ++++ + + + + + + + + + + +

COMMENTS and ISSUES
+If you would like to raise comments or issues on this document, please do so by raising an Issue at the following URL https://github.com/EOEPCA/template-svce/issues.

PDF
+This document is available in PDF format here.

EUROPEAN SPACE AGENCY CONTRACT REPORT
+The work described in this report was done under ESA contract. Responsibility for the contents resides in the author or organisation that prepared it.

TELESPAZIO VEGA UK Ltd
+350 Capability Green, Luton, Bedfordshire, LU1 3LU, United Kingdom.
+Tel: +44 (0)1582 399000
+www.telespazio-vega.com

+
+
+
+
AMENDMENT HISTORY
+
+

This document shall be amended by releasing a new edition of the document in its entirety.
+The Amendment Record Sheet below records the history and issue status of this document.

+ + +++++ + + + + + + + + + + + + + + +
Table 1. Amendment Record Sheet
ISSUEDATEREASON

0.1

dd/mm/yyyy

Initial in-progress draft

+
+
+
+
+
+
+
+
+
+

1. Introduction

+
+
+

1.1. Purpose and Scope

+
+

This document presents the <Template Service> Design for the Common Architecture.

+
+
+
+

1.2. Structure of the Document

+
+
+
Section 2 - Overview
+
+

Provides an over of the <Template Service> component, within the context of the wider Common Architecture design.

+
+
Section 3 - Design
+
+

Provides the design of the <Template Service> component.

+
+
+
+
+
+

1.3. Reference Documents

+
+

The following is a list of Reference Documents with a direct bearing on the content of this document.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ReferenceDocument DetailsVersion

[EOEPCA-UC]

+

EOEPCA - Use Case Analysis
+EOEPCA.TN.005
+https://eoepca.github.io/use-case-analysis

+
+

Issue 1.0,
+02/08/2019

+

[EP-FM]

+

Exploitation Platform - Functional Model,
+ESA-EOPSDP-TN-17-050

+
+

Issue 1.0,
+30/11/2017

+

[TEP-OA]

+

Thematic Exploitation Platform Open Architecture,
+EMSS-EOPS-TN-17-002

+
+

Issue 1,
+12/12/2017

+

[WPS-T]

+

OGC Testbed-14: WPS-T Engineering Report,
+OGC 18-036r1,
+http://docs.opengeospatial.org/per/18-036r1.html

+
+

18-036r1,
+07/02/2019

+

[WPS-REST-JSON]

+

OGC WPS 2.0 REST/JSON Binding Extension, Draft,
+OGC 18-062,
+https://raw.githubusercontent.com/opengeospatial/wps-rest-binding/develop/docs/18-062.pdf

+
+

1.0-draft

+

[CWL]

+

Common Workflow Language Specifications,
+https://www.commonwl.org/v1.0/

+
+

v1.0.2

+

[TB13-AP]

+

OGC Testbed-13, EP Application Package Engineering Report,
+OGC 17-023,
+http://docs.opengeospatial.org/per/17-023.html

+
+

17-023,
+30/01/2018

+

[TB13-ADES]

+

OGC Testbed-13, Application Deployment and Execution Service Engineering Report,
+OGC 17-024,
+http://docs.opengeospatial.org/per/17-024.html

+
+

17-024,
+11/01/2018

+

[TB14-AP]

+

OGC Testbed-14, Application Package Engineering Report,
+OGC 18-049r1,
+http://docs.opengeospatial.org/per/18-049r1.html

+
+

18-049r1,
+07/02/2019

+

[TB14-ADES]

+

OGC Testbed-14, ADES & EMS Results and Best Practices Engineering Report,
+OGC 18-050r1, http://docs.opengeospatial.org/per/18-050r1.html

+
+

18-050r1,
+08/02/2019

+

[OS-GEO-TIME]

+

OpenSearch GEO: OpenSearch Geo and Time Extensions,
+OGC 10-032r8,
+http://www.opengeospatial.org/standards/opensearchgeo

+
+

10-032r8,
+14/04/2014

+

[OS-EO]

+

OpenSearch EO: OGC OpenSearch Extension for Earth Observation,
+OGC 13-026r9,
+http://docs.opengeospatial.org/is/13-026r8/13-026r8.html

+
+

13-026r9,
+16/12/2016

+

[GEOJSON-LD]

+

OGC EO Dataset Metadata GeoJSON(-LD) Encoding Standard,
+OGC 17-003r1/17-084

+
+

17-003r1/17-084

+

[GEOJSON-LD-RESP]

+

OGC OpenSearch-EO GeoJSON(-LD) Response Encoding Standard,
+OGC 17-047

+
+

17-047

+

[PCI-DSS]

+

v3.2.1

+

[CEOS-OS-BP]

+

v1.2,
+13/06/2017

+

[OIDC]

+

v1.0,
+08/11/2014

+

[OARec]

+

OGC API - Records - Part 1: Core,
+OGC 20-004,
+https://docs.ogc.org/DRAFTS/20-004.html

+
+

v1.0,
+13/01/2020

+

[STAC-API]

+

SpatioTemporal Asset Catalog API,
+https://github.com/radiantearth/stac-api-spec

+
+

v1.0.0-beta.2,
+01/06/2020

+

[CQL]

+

OGC API - Features - Part 3: Filtering and the Common Query Language (CQL),
+OGC 19-079r1,
+https://docs.ogc.org/DRAFTS/19-079.html

+
+

v1.0.0-draft.2,
+27/01/2021

+

[OGC-CSW]

+

OGC Catalogue Services 3.0 Specification - HTTP Protocol Binding (Catalogue Services for the Web),
+OGC 12-176r7,
+http://docs.opengeospatial.org/is/12-176r7/12-176r7.html

+
+

v3.0,
+10/06/2016

+

[OGC-WMS]

+

OGC Web Map Server Implementation Specification,
+OGC 06-042,
+http://portal.opengeospatial.org/files/?artifact_id=14416

+
+

v1.3.0,
+05/03/2006

+

[OGC-WMTS]

+

OGC Web Map Tile Service Implementation Standard,
+OGC 07-057r7,
+http://portal.opengeospatial.org/files/?artifact_id=35326

+
+

v1.0.0,
+06/04/2010

+

[OGC-WFS]

+

OGC Web Feature Service 2.0 Interface Standard – With Corrigendum,
+OGC 09-025r2,
+http://docs.opengeospatial.org/is/09-025r2/09-025r2.html

+
+

v2.0.2,
+10/07/2014

+

[OGC-WCS]

+

OGC Web Coverage Service (WCS) 2.1 Interface Standard - Core,
+OGC 17-089r1,
+http://docs.opengeospatial.org/is/17-089r1/17-089r1.html

+
+

v2.1,
+16/08/2018

+

[OGC-WCPS]

+

Web Coverage Processing Service (WCPS) Language Interface Standard,
+OGC 08-068r2,
+http://portal.opengeospatial.org/files/?artifact_id=32319

+
+

v1.0.0,
+25/03/2009

+

[AWS-S3]

+

Amazon Simple Storage Service REST API,
+https://docs.aws.amazon.com/AmazonS3/latest/API

+
+

API Version 2006-03-01

+
+
+
+

1.4. Terminology

+
+

The following terms are used in the Master System Design.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TermMeaning

Admin

User with administrative capability on the EP

Algorithm

A self-contained set of operations to be performed, typically to achieve a desired data manipulation. The algorithm must be implemented (codified) for deployment and execution on the platform.

Analysis Result

The Products produced as output of an Interactive Application analysis session.

Analytics

A set of activities aimed to discover, interpret and communicate meaningful patters within the data. Analytics considered here are performed manually (or in a semi-automatic way) on-line with the aid of Interactive Applications.

Application Artefact

The 'software' component that provides the execution unit of the Application Package.

Application Deployment and Execution Service (ADES)

WPS-T (REST/JSON) service that incorporates the Docker execution engine, and is responsible for the execution of the processing service (as a WPS request) within the ‘target’ Exploitation Platform.

Application Descriptor

A file that provides the metadata part of the Application Package. Provides all the metadata required to accommodate the processor within the WPS service and make it available for execution.

Application Package

A platform independent and self-contained representation of a software item, providing executable, metadata and dependencies such that it can be deployed to and executed within an Exploitation Platform. Comprises the Application Descriptor and the Application Artefact.

Bulk Processing

Execution of a Processing Service on large amounts of data specified by AOI and TOI.

Catalogue Service for the Web (CSW)

OGC standard that provides a simple HTTP interface for searching collections of descriptive metadata for data, services and relation information objects.

Code

The codification of an algorithm performed with a given programming language - compiled to Software or directly executed (interpretted) within the platform.

Compute Platform

The Platform on which execution occurs (this may differ from the Host or Home platform where federated processing is happening)

Consumer

User accessing existing services/products within the EP. Consumers may be scientific/research or commercial, and may or may not be experts of the domain

Data Access Library

An abstraction of the interface to the data layer of the resource tier. The library provides bindings for common languages (including python, Javascript) and presents a common object model to the code.

Development

The act of building new products/services/applications to be exposed within the platform and made available for users to conduct exploitation activities. Development may be performed inside or outside of the platform. If performed outside, an integration activity will be required to accommodate the developed service so that it is exposed within the platform.

Discovery

User finds products/services of interest to them based upon search criteria.

Execution

The act to start a Processing Service or an Interactive Application.

Execution Management Service (EMS)

The EMS is responsible for the orchestration of workflows, including the possibility of steps running on other (remote) platforms, and the on-demand deployment of processors to local/remote ADES as required.

Expert

User developing and integrating added-value to the EP (Scientific Researcher or Service Developer)

Exploitation Tier

The Exploitation Tier represents the end-users who exploit the services of the platform to perform analysis, or using high-level applications built-in on top of the platform’s services

External Application

An application or script that is developed and executed outside of the Exploitation Platform, but is able to use the data/services of the EP via a programmatic interface (API).

Guest

An unregistered User or an unauthenticated Consumer with limited access to the EP’s services

Home Platform

The Platform on which a User is based or from which an action was initiated by a User

Host Platform

The Platform through which a Resource has been published

Identity Provider (IdP)

The source for validating user identity in a federated identity system, (user authentication as a service).

Interactive Application

A stand-alone application provided within the exploitation platform for on-line hosted processing. Provides an interactive interface through which the user is able to conduct their analysis of the data, producing Analysis Results as output. Interactive Applications include at least the following types: console application, web application (rich browser interface), remote desktop to a hosted VM.

Interactive Console Application

A simple Interactive Application for analysis in which a console interface to a platform-hosted terminal is provided to the user. The console interface can be provided through the user’s browser session or through a remote SSH connection.

Interactive Remote Desktop

An Interactive Application for analysis provided as a remote desktop session to an OS-session (or directly to a 'native' application) on the exploitation platform. The user will have access to a number of applications within the hosted OS. The remote desktop session is provided through the user’s web browser.

Interactive Web Application

An Interactive Application for analysis provided as a rich user interface through the user’s web browser.

Key-Value Pair

A key-value pair (KVP) is an abstract data type that includes a group of key identifiers and a set of associated values. Key-value pairs are frequently used in lookup tables, hash tables and configuration files.

Kubernetes (K8s)

Container orchestration system for automating application deployment, scaling and management.

Login Service

An encapsulation of Authenticated Login provision within the Exploitation Platform context. The Login Service is an OpenID Connect Provider that is used purely for authentication. It acts as a Relying Party in flows with external IdPs to obtain access to the user’s identity.

EO Network of Resources

The coordinated collection of European EO resources (platforms, data sources, etc.).

Object Store

A computer data storage architecture that manages data as objects. Each object typically includes the data itself, a variable amount of metadata, and a globally unique identifier.

OGC API - Records (OARec)

Draft OGC API standard that provides the capability to create, modify, and query metadata on the Web. The draft specification enables the discovery of geospatial resources by standardizing the way collections of descriptive information about the resources (metadata) are exposed. OARec is the successor to OGC CSW specification.

On-demand Processing Service

A Processing Service whose execution is initiated directly by the user on an ad-hoc basis.

Platform (EP)

An on-line collection of products, services and tools for exploitation of EO data

Platform Tier

The Platform Tier represents the Exploitation Platform and the services it offers to end-users

Processing

A set of pre-defined activities that interact to achieve a result. For the exploitation platform, comprises on-line processing to derive data products from input data, conducted by a hosted processing service execution.

Processing Result

The Products produced as output of a Processing Service execution.

Processing Service

A non-interactive data processing that has a well-defined set of input data types, input parameterisation, producing Processing Results with a well-defined output data type.

Products

EO data (commercial and non-commercial) and Value-added products and made available through the EP. It is assumed that the Hosting Environment for the EP makes available an existing supply of EO Data

Resource

A entity, such as a Product, Processing Service or Interactive Application, which is of interest to a user, is indexed in a catalogue and can be returned as a single meaningful search result

Resource Tier

The Resource Tier represents the hosting infrastructure and provides the EO data, storage and compute upon which the exploitation platform is deployed

Reusable Research Object

An encapsulation of some research/analysis that describes all aspects required to reproduce the analysis, including data used, processing performed etc.

Scientific Researcher

Expert user with the objective to perform scientific research. Having minimal IT knowledge with no desire to acquire it, they want the effort for the translation of their algorithm into a service/product to be minimised by the platform.

Service Developer

Expert user with the objective to provide a performing, stable and reliable service/product. Having deeper IT knowledge or a willingness to acquire it, they require deeper access to the platform IT functionalities for optimisation of their algorithm.

Software

The compilation of code into a binary program to be executed within the platform on-line computing environment.

Systematic Processing Service

A Processing Service whose execution is initiated automatically (on behalf of a user), either according to a schedule (routine) or triggered by an event (e.g. arrival of new data).

Terms & Conditions (T&Cs)

The obligations that the user agrees to abide by in regard of usage of products/services of the platform. T&Cs are set by the provider of each product/service.

Transactional Web Processing Service (WPS-T)

Transactional extension to WPS that allows adhoc deployment / undeployment of user-provided processors.

User

An individual using the EP, of any type (Admin/Consumer/Expert/Guest)

Value-added products

Products generated from processing services of the EP (or external processing) and made available through the EP. This includes products uploaded to the EP by users and published for collaborative consumption

Visualisation

To obtain a visual representation of any data/products held within the platform - presented to the user within their web browser session.

Web Coverage Service (WCS)

OGC standard that provides an open specification for sharing raster datasets on the web.

Web Coverage Processing Service (WCPS)

OGC standard that defines a protocol-independent language for the extraction, processing, and analysis of multi-dimentional coverages representing sensor, image, or statistics data.

Web Feature Service (WFS)

OGC standard that makes geographic feature data (vector geospatial datasets) available on the web.

Web Map Service (WMS)

OGC standard that provides a simple HTTP interface for requesting geo-registered map images from one or more distributed geospatial databases.

Web Map Tile Service (WMTS)

OGC standard that provides a simple HTTP interface for requesting map tiles of spatially referenced data using the images with predefined content, extent, and resolution.

Web Processing Services (WPS)

OGC standard that defines how a client can request the execution of a process, and how the output from the process is handled.

Workspace

A user-scoped 'container' in the EP, in which each user maintains their own links to resources (products and services) that have been collected by a user during their usage of the EP. The workspace acts as the hub for a user’s exploitation activities within the EP

+
+
+

1.5. Glossary

+
+

The following acronyms and abbreviations have been used in this report.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TermDefinition

AAI

Authentication & Authorization Infrastructure

ABAC

Attribute Based Access Control

ADES

Application Deployment and Execution Service

ALFA

Abbreviated Language For Authorization

AOI

Area of Interest

API

Application Programming Interface

CMS

Content Management System

CQL

Common Query Language

CSW

Catalogue Service for the Web

CWL

Common Workflow Language

DAL

Data Access Library

EMS

Execution Management Service

EO

Earth Observation

EP

Exploitation Platform

FOSS

Free and Open Source

FUSE

Filesystem in Userspace

GeoXACML

Geo-specific extension to the XACML Policy Language

IAM

Identity and Access Management

IdP

Identity Provider

JSON

JavaScript Object Notation

K8s

Kubernetes

KVP

Key-value Pair

M2M

Machine-to-machine

OAProc

OGC API - Processes

OARec

OGC API - Records

OGC

Open Geospatial Consortium

PDE

Processor Development Environment

PDP

Policy Decision Point

PEP

Policy Enforcement Point

PIP

Policy Information Point

RBAC

Role Based Access Control

REST

Representational State Transfer

SSH

Secure Shell

STAC

SpatioTemporal Asset Catalog

TOI

Time of Interest

UMA

User-Managed Access

VNC

Virtual Network Computing

WCS

Web Coverage Service

WCPS

Web Coverage Processing Service

WFS

Web Feature Service

WMS

Web Map Service

WMTS

Web Map Tile Service

WPS

Web Processing Service

WPS-T

Transactional Web Processing Service

XACML

eXtensible Access Control Markup Language

+
+
+
+
+
+

2. Overview

+
+
+

TBD

+
+
+
+
+
+

3. Design

+
+
+

3.1. Resource Catalogue Service

+
+

3.1.1. Overview and Purpose

+
+

The purpose of the resource catalogue service is to register metadata from
+either data sources or processing results where they are indexed for discovery
+and search by downstream applications.

+
+
+
+

3.1.2. Software Reuse and Dependencies

+
+

This service uses the free and open source https://pycsw.org product with custom
+configuration.

+
+
+
+

3.1.3. Interfaces

+
+

This service provides the following interfaces:

+
+
+
    +
  1. +

    OGC API - Records - Part 1.0, Core, version 1.0

    +
  2. +
  3. +

    OGC Catalogue Service for the Web, version 3.0.0

    +
  4. +
  5. +

    OGC Catalogue Service for the Web, version 2.0.2

    +
  6. +
  7. +

    Spatio Temporal Asset Catalog (STAC) API, version 1.0.0-rc1

    +
  8. +
  9. +

    OpenSearch with Extensions for Geo, Time and Earth Observation

    +
  10. +
  11. +

    Open Archives Initiative Protocol for Metadata Harvesting (OAI-PMH)

    +
  12. +
  13. +

    Search/Retrieval via URL (SRU) search protocol

    +
  14. +
+
+
+

Request / response mechanisms are via HTTP GET (RESTful / KVP) and POST (XML/JSON). SOAP
+bindings are also supported.

+
+
+
+

3.1.4. Data

+
+
3.1.4.1. Configuration
+
+

This service uses an INI based configuration to allow configuration from
+various metadata sources parsed using various schemas into the backends.

+
+
+
+
3.1.4.2. Data flow
+
+

The resource-catalogue is implemented as a library as well as a server
+process. The library is implemented as a backend which is called by the
+registrar. When the registrar sends metadata to the resource catalogue, the
+metadata is processed according to the workflow and written to the underlying
+pycsw backend.

+
+
+

The resource-catalogue server process makes registered metadata discoverable
+via the interfaces described above.

+
+
+

The resource-catalogue supports the following item schemes:

+
+
+
    +
  • +

    Sentinel-2: This expects an unpacked Sentinel-2 Level 2A or Level 1C SAFE package and a STAC item (JSON) as
    +the path input. It will parse all product and granule related metadata and
    +generate an ISO 19115-2 document of the product as a single item

    +
  • +
  • +

    Landsat: This scheme expects a Landsat scene package and a STAC item (JSON). It will parse all product related metadata and
    +generate an ISO 19115-2 document of the product as a single item

    +
  • +
  • +

    STAC-Catalog: This scheme requires a path to a directory containing at least
    +one STAC item file that will be read and parsed for metadata, generating an
    +ISO 19115-2 document of the processing result as a single item

    +
  • +
  • +

    STAC-Item: This scheme requires a STAC item file that will be read and parsed for metadata, generating an
    +ISO 19115-2 document of the item

    +
  • +
  • +

    ISO 19115: This scheme expects an ISO 19115 document (encoded as ISO 19139 XML)

    +
  • +
  • +

    Common Workflow Language (CWL): This scheme expects a CWL document as input. It will parse all included metadata (schema.org) and
    +generate an ISO 19115-2 document of the product as a single item

    +
  • +
  • +

    Application Deployment and Execution Service (ADES): This scheme expects OGC API - Processes (OAProc) ADES service definition / landing page (JSON) as input. It will parse all included metadata (schema.org) and
    +generate an ISO 19115-2 document of the service as a single item

    +
  • +
+
+
+
+
+

3.1.5. Applicable Resources

+ +
+
+
+
+
+

4. Workflow

+
+
+

4.1. Backend ingest and metadata processing

+
+

The metadata repository is initialized via the configuration that is defined
+as part of the resource-catalogue. The registrar queries the backend to
+determine whether an incoming item has already been registered.

+
+
+

Depending on the input type/scheme, the resource-catalogue will process the
+supported schemes into ISO 19115 metadata for ingest in support of discovery.

+
+
+

If the item is a product, both the MTD_MSIL2A.xml and INSPIRE.xml files
+are processed and used as input to generate an ISO 19115-2 document with
+spatial and temporal extents, platform and instrument information, as well as
+links to all data and granules.

+
+
+

If the item is a processing result, the STAC item is processed and used as
+input to generate an ISO 19115-2 document with spatial and temporal extents,
+platform and instrument information, as well as links to all results generated
+as a result of the process.

+
+
+

If the item is a CWL definition, the CWL is processed into an ISO 19115 document.

+
+
+

If the item is a STAC Item, the CWL is processed into an ISO 19115 document.

+
+
+

If the item is a STAC Catalog, the Catalog is read for any STAC items which are
+then processed into their equivalent ISO 19115 documents.

+
+
+

In all cases, if the metadata record already exists in the
+resource-catalogue, and if overwriting is enabled, the record will be
+sent as an update. Else, the record is sent as new metadata.

+
+
+
+

<< End of Document >>

+
+
+
+
+
+ + + \ No newline at end of file diff --git a/SDD/index.pdf b/SDD/index.pdf new file mode 100644 index 0000000..b93f73c Binary files /dev/null and b/SDD/index.pdf differ diff --git a/SDD/logo.png b/SDD/logo.png new file mode 100644 index 0000000..6e9ff5c Binary files /dev/null and b/SDD/logo.png differ diff --git a/SDD/stylesheets/asciidoctor.css b/SDD/stylesheets/asciidoctor.css new file mode 100644 index 0000000..37a53c3 --- /dev/null +++ b/SDD/stylesheets/asciidoctor.css @@ -0,0 +1,420 @@ +/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */ +/* Uncomment @import statement below to use as custom stylesheet */ +@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; +article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} +audio,canvas,video{display:inline-block} +audio:not([controls]){display:none;height:0} +script{display:none!important} +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%} +a{background:transparent} +a:focus{outline:thin dotted} +a:active,a:hover{outline:0} +h1{font-size:2em;margin:.67em 0} +abbr[title]{border-bottom:1px dotted} +b,strong{font-weight:bold} +dfn{font-style:italic} +hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} +mark{background:#ff0;color:#000} +code,kbd,pre,samp{font-family:monospace;font-size:1em} +pre{white-space:pre-wrap} +q{quotes:"\201C" "\201D" "\2018" "\2019"} +small{font-size:80%} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sup{top:-.5em} +sub{bottom:-.25em} +img{border:0} +svg:not(:root){overflow:hidden} +figure{margin:0} +fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} +legend{border:0;padding:0} +button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} +button,input{line-height:normal} +button,select{text-transform:none} +button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} +button[disabled],html input[disabled]{cursor:default} +input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +textarea{overflow:auto;vertical-align:top} +table{border-collapse:collapse;border-spacing:0} +*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box} +html,body{font-size:100%} +body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased} +a:hover{cursor:pointer} +img,object,embed{max-width:100%;height:auto} +object,embed{height:100%} +img{-ms-interpolation-mode:bicubic} +.left{float:left!important} +.right{float:right!important} +.text-left{text-align:left!important} +.text-right{text-align:right!important} +.text-center{text-align:center!important} +.text-justify{text-align:justify!important} +.hide{display:none} +img,object,svg{display:inline-block;vertical-align:middle} +textarea{height:auto;min-height:50px} +select{width:100%} +.center{margin-left:auto;margin-right:auto} +.stretch{width:100%} +.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} +div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr} +a{color:#2156a5;text-decoration:underline;line-height:inherit} +a:hover,a:focus{color:#1d4b8f} +a img{border:none} +p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} +p aside{font-size:.875em;line-height:1.35;font-style:italic} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} +h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} +h1{font-size:2.125em} +h2{font-size:1.6875em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} +h4,h5{font-size:1.125em} +h6{font-size:1em} +hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0} +em,i{font-style:italic;line-height:inherit} +strong,b{font-weight:bold;line-height:inherit} +small{font-size:60%;line-height:inherit} +code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} +ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} +ul,ol{margin-left:1.5em} +ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em} +ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit} +ul.square{list-style-type:square} +ul.circle{list-style-type:circle} +ul.disc{list-style-type:disc} +ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} +dl dt{margin-bottom:.3125em;font-weight:bold} +dl dd{margin-bottom:1.25em} +abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help} +abbr{text-transform:none} +blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} +blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)} +blockquote cite::before{content:"\2014 \0020"} +blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)} +blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} +@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} +h1{font-size:2.75em} +h2{font-size:2.3125em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} +h4{font-size:1.4375em}} +table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede} +table thead,table tfoot{background:#f7f8f7} +table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} +table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} +table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7} +table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} +h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} +.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table} +.clearfix::after,.float-group::after{clear:both} +*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word} +*:not(pre)>code.nobreak{word-wrap:normal} +*:not(pre)>code.nowrap{white-space:nowrap} +pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed} +em em{font-style:normal} +strong strong{font-weight:400} +.keyseq{color:rgba(51,51,51,.8)} +kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap} +.keyseq kbd:first-child{margin-left:0} +.keyseq kbd:last-child{margin-right:0} +.menuseq,.menuref{color:#000} +.menuseq b:not(.caret),.menuref{font-weight:inherit} +.menuseq{word-spacing:-.02em} +.menuseq b.caret{font-size:1.25em;line-height:.8} +.menuseq i.caret{font-weight:bold;text-align:center;width:.45em} +b.button::before,b.button::after{position:relative;top:-1px;font-weight:400} +b.button::before{content:"[";padding:0 3px 0 2px} +b.button::after{content:"]";padding:0 2px 0 3px} +p a>code:hover{color:rgba(0,0,0,.9)} +#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} +#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table} +#header::after,#content::after,#footnotes::after,#footer::after{clear:both} +#content{margin-top:1.25em} +#content::before{content:none} +#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} +#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf} +#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px} +#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap} +#header .details span:first-child{margin-left:-.125em} +#header .details span.email a{color:rgba(0,0,0,.85)} +#header .details br{display:none} +#header .details br+span::before{content:"\00a0\2013\00a0"} +#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} +#header .details br+span#revremark::before{content:"\00a0|\00a0"} +#header #revnumber{text-transform:capitalize} +#header #revnumber::after{content:"\00a0"} +#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} +#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em} +#toc>ul{margin-left:.125em} +#toc ul.sectlevel0>li>a{font-style:italic} +#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} +#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} +#toc li{line-height:1.3334;margin-top:.3334em} +#toc a{text-decoration:none} +#toc a:active{text-decoration:underline} +#toctitle{color:#7a2518;font-size:1.2em} +@media screen and (min-width:768px){#toctitle{font-size:1.375em} +body.toc2{padding-left:15em;padding-right:0} +#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} +#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em} +#toc.toc2>ul{font-size:.9em;margin-bottom:0} +#toc.toc2 ul ul{margin-left:0;padding-left:1em} +#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} +body.toc2.toc-right{padding-left:0;padding-right:15em} +body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}} +@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} +#toc.toc2{width:20em} +#toc.toc2 #toctitle{font-size:1.375em} +#toc.toc2>ul{font-size:.95em} +#toc.toc2 ul ul{padding-left:1.25em} +body.toc2.toc-right{padding-left:0;padding-right:20em}} +#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} +#content #toc>:first-child{margin-top:0} +#content #toc>:last-child{margin-bottom:0} +#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em} +#footer-text{color:rgba(255,255,255,.8);line-height:1.44} +#content{margin-bottom:.625em} +.sect1{padding-bottom:.625em} +@media screen and (min-width:768px){#content{margin-bottom:1.25em} +.sect1{padding-bottom:1.25em}} +.sect1:last-child{padding-bottom:0} +.sect1+.sect1{border-top:1px solid #e7e7e9} +#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} +#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} +#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} +#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} +#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} +.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} +.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} +table.tableblock.fit-content>caption.title{white-space:nowrap;width:0} +.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)} +table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit} +.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} +.admonitionblock>table td.icon{text-align:center;width:80px} +.admonitionblock>table td.icon img{max-width:none} +.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} +.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)} +.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} +.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px} +.exampleblock>.content>:first-child{margin-top:0} +.exampleblock>.content>:last-child{margin-bottom:0} +.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} +.sidebarblock>:first-child{margin-top:0} +.sidebarblock>:last-child{margin-bottom:0} +.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} +.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} +.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8} +.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1} +.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em} +@media screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}} +@media screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}} +.literalblock pre.nowrap,.literalblock pre.nowrap pre,.listingblock pre.nowrap,.listingblock pre.nowrap pre{white-space:pre;word-wrap:normal} +.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)} +.listingblock pre.highlightjs{padding:0} +.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px} +.listingblock pre.prettyprint{border-width:0} +.listingblock>.content{position:relative} +.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999} +.listingblock:hover code[data-lang]::before{display:block} +.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:#999} +.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"} +table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none} +table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45} +table.pyhltable td.code{padding-left:.75em;padding-right:0} +pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #dddddf} +pre.pygments .lineno{display:inline-block;margin-right:.25em} +table.pyhltable .linenodiv{background:none!important;padding-right:0!important} +.quoteblock{margin:0 1em 1.25em 1.5em;display:table} +.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em} +.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} +.quoteblock blockquote{margin:0;padding:0;border:0} +.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} +.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} +.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right} +.verseblock{margin:0 1em 1.25em} +.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} +.verseblock pre strong{font-weight:400} +.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} +.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} +.quoteblock .attribution br,.verseblock .attribution br{display:none} +.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)} +.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none} +.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0} +.quoteblock.abstract{margin:0 1em 1.25em;display:block} +.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center} +.quoteblock.excerpt,.quoteblock .quoteblock{margin:0 0 1.25em;padding:0 0 .25em 1em;border-left:.25em solid #dddddf} +.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem} +.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0} +table.tableblock{max-width:100%;border-collapse:separate} +p.tableblock:last-child{margin-bottom:0} +td.tableblock>.content{margin-bottom:-1.25em} +table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} +table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0} +table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0} +table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0} +table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px} +table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0} +table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0} +table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0} +table.frame-all{border-width:1px} +table.frame-sides{border-width:0 1px} +table.frame-topbot,table.frame-ends{border-width:1px 0} +table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd){background:#f8f8f7} +table.stripes-none tr,table.stripes-odd tr:nth-of-type(even){background:none} +th.halign-left,td.halign-left{text-align:left} +th.halign-right,td.halign-right{text-align:right} +th.halign-center,td.halign-center{text-align:center} +th.valign-top,td.valign-top{vertical-align:top} +th.valign-bottom,td.valign-bottom{vertical-align:bottom} +th.valign-middle,td.valign-middle{vertical-align:middle} +table thead th,table tfoot th{font-weight:bold} +tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7} +tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold} +p.tableblock>code:only-child{background:none;padding:0} +p.tableblock{font-size:1em} +td>div.verse{white-space:pre} +ol{margin-left:1.75em} +ul li ol{margin-left:1.5em} +dl dd{margin-left:1.125em} +dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} +ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} +ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none} +ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em} +ul.unstyled,ol.unstyled{margin-left:0} +ul.checklist{margin-left:.625em} +ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em} +ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em} +ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em} +ul.inline>li{margin-left:1.25em} +.unstyled dl dt{font-weight:400;font-style:normal} +ol.arabic{list-style-type:decimal} +ol.decimal{list-style-type:decimal-leading-zero} +ol.loweralpha{list-style-type:lower-alpha} +ol.upperalpha{list-style-type:upper-alpha} +ol.lowerroman{list-style-type:lower-roman} +ol.upperroman{list-style-type:upper-roman} +ol.lowergreek{list-style-type:lower-greek} +.hdlist>table,.colist>table{border:0;background:none} +.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} +td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em} +td.hdlist1{font-weight:bold;padding-bottom:1.25em} +.literalblock+.colist,.listingblock+.colist{margin-top:-.5em} +.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top} +.colist td:not([class]):first-child img{max-width:none} +.colist td:not([class]):last-child{padding:.25em 0} +.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd} +.imageblock.left{margin:.25em .625em 1.25em 0} +.imageblock.right{margin:.25em 0 1.25em .625em} +.imageblock>.title{margin-bottom:0} +.imageblock.thumb,.imageblock.th{border-width:6px} +.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} +.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} +.image.left{margin-right:.625em} +.image.right{margin-left:.625em} +a.image{text-decoration:none;display:inline-block} +a.image object{pointer-events:none} +sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super} +sup.footnote a,sup.footnoteref a{text-decoration:none} +sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline} +#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} +#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0} +#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em} +#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em} +#footnotes .footnote:last-of-type{margin-bottom:0} +#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} +.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0} +.gist .file-data>table td.line-data{width:99%} +div.unbreakable{page-break-inside:avoid} +.big{font-size:larger} +.small{font-size:smaller} +.underline{text-decoration:underline} +.overline{text-decoration:overline} +.line-through{text-decoration:line-through} +.aqua{color:#00bfbf} +.aqua-background{background-color:#00fafa} +.black{color:#000} +.black-background{background-color:#000} +.blue{color:#0000bf} +.blue-background{background-color:#0000fa} +.fuchsia{color:#bf00bf} +.fuchsia-background{background-color:#fa00fa} +.gray{color:#606060} +.gray-background{background-color:#7d7d7d} +.green{color:#006000} +.green-background{background-color:#007d00} +.lime{color:#00bf00} +.lime-background{background-color:#00fa00} +.maroon{color:#600000} +.maroon-background{background-color:#7d0000} +.navy{color:#000060} +.navy-background{background-color:#00007d} +.olive{color:#606000} +.olive-background{background-color:#7d7d00} +.purple{color:#600060} +.purple-background{background-color:#7d007d} +.red{color:#bf0000} +.red-background{background-color:#fa0000} +.silver{color:#909090} +.silver-background{background-color:#bcbcbc} +.teal{color:#006060} +.teal-background{background-color:#007d7d} +.white{color:#bfbfbf} +.white-background{background-color:#fafafa} +.yellow{color:#bfbf00} +.yellow-background{background-color:#fafa00} +span.icon>.fa{cursor:default} +a span.icon>.fa{cursor:inherit} +.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} +.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c} +.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} +.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900} +.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400} +.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000} +.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} +.conum[data-value] *{color:#fff!important} +.conum[data-value]+b{display:none} +.conum[data-value]::after{content:attr(data-value)} +pre .conum[data-value]{position:relative;top:-.125em} +b.conum *{color:inherit!important} +.conum:not([data-value]):empty{display:none} +dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility} +h1,h2,p,td.content,span.alt{letter-spacing:-.01em} +p strong,td.content strong,div.footnote strong{letter-spacing:-.005em} +p,blockquote,dt,td.content,span.alt{font-size:1.0625rem} +p{margin-bottom:1.25rem} +.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} +.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc} +.print-only{display:none!important} +@page{margin:1.25cm .75cm} +@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important} +html{font-size:80%} +a{color:inherit!important;text-decoration:underline!important} +a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} +a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} +abbr[title]::after{content:" (" attr(title) ")"} +pre,blockquote,tr,img,object,svg{page-break-inside:avoid} +thead{display:table-header-group} +svg{max-width:100%} +p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} +h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} +#toc,.sidebarblock,.exampleblock>.content{background:none!important} +#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important} +body.book #header{text-align:center} +body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em} +body.book #header .details{border:0!important;display:block;padding:0!important} +body.book #header .details span:first-child{margin-left:0!important} +body.book #header .details br{display:block} +body.book #header .details br+span::before{content:none!important} +body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} +body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} +.listingblock code[data-lang]::before{display:block} +#footer{padding:0 .9375em} +.hide-on-print{display:none!important} +.print-only{display:block!important} +.hide-for-print{display:none!important} +.show-for-print{display:inherit!important}} +@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem} +.sect1{padding:0!important} +.sect1+.sect1{border:0} +#footer{background:none} +#footer-text{color:rgba(0,0,0,.6);font-size:.9em}} +@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}} \ No newline at end of file diff --git a/SDD/stylesheets/eoepca.css b/SDD/stylesheets/eoepca.css new file mode 100644 index 0000000..46a3ba5 --- /dev/null +++ b/SDD/stylesheets/eoepca.css @@ -0,0 +1,25 @@ +@import "asciidoctor.css"; + +/* Centre align figure captions */ +.imageblock.text-center>.title { + text-align: center; +} + +/* Scale font size of CodeRay [source] elements, which seem a bit big */ +pre.CodeRay code { + font-size: 0.9em; +} + +/* Bold font for the numbers in an ordered list */ +div.strong > ol { + font-weight: bold; +} + +/* + * EXAMPLE for custom code-block scaling... + * Use an asciidoc source element like this '[source.src-scale05,python]' and then apply a custom style like below. + * This basically adds the custom CSS class 'src-scale05' to the root of the DOM for the code block, which we can then exploit for styling. + */ + .src-scale05 pre.CodeRay code { + font-size: 0.5em; +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..38b41cb --- /dev/null +++ b/index.html @@ -0,0 +1,18 @@ + + + + + + + Document + + +

Resource Catalogue Service Documentation

+
+ +
+ +