diff --git a/docs/delta/api/acls-api.html b/docs/delta/api/acls-api.html index 27579ff984..e9c85e3d3a 100644 --- a/docs/delta/api/acls-api.html +++ b/docs/delta/api/acls-api.html @@ -259,7 +259,7 @@ @@ -293,13 +293,6 @@
-
-
Snapshot version
-

-You are browsing the docs for the snapshot version of Nexus, -the latest release is available here -

-

Access Control Lists

Access Control Lists are rooted in the /v1/acls collection.

@@ -1014,7 +1007,7 @@

-Snapshot +v1.9.x

diff --git a/docs/delta/api/archives-api.html b/docs/delta/api/archives-api.html index f5992f7190..4978feb356 100644 --- a/docs/delta/api/archives-api.html +++ b/docs/delta/api/archives-api.html @@ -254,7 +254,7 @@ @@ -283,13 +283,6 @@
-

Archives

An archive is a collection of resources stored inside an archive file. The archiving format chosen for this purpose is ZIP. Archive resources are rooted in the /v1/archives/{org_label}/{project_label}/ collection.

@@ -580,7 +573,7 @@

diff --git a/docs/delta/api/authentication.html b/docs/delta/api/authentication.html index 4e1c33c01f..4444981b11 100644 --- a/docs/delta/api/authentication.html +++ b/docs/delta/api/authentication.html @@ -251,7 +251,7 @@ @@ -277,13 +277,6 @@
-

Authentication & Authorization

Authentication is the process of validating that users are who they claim to be while authorization gives those users permission to access an API resource.

@@ -306,7 +299,7 @@

-Snapshot +v1.9.x

diff --git a/docs/delta/api/content-negotiation.html b/docs/delta/api/content-negotiation.html index 0094850c60..b63011b429 100644 --- a/docs/delta/api/content-negotiation.html +++ b/docs/delta/api/content-negotiation.html @@ -250,7 +250,7 @@ @@ -275,13 +275,6 @@
-

Content Negotiation

When performing a request against Nexus Delta, clients can specify the desired format of the response they would like to receive. This is done through a mechanism called Content Negotiation. Nexus Delta uses the HTTP Accept Header in order to provide Content Negotiation capabilities.

@@ -305,7 +298,7 @@

<

diff --git a/docs/delta/api/error-signaling.html b/docs/delta/api/error-signaling.html index e05db0d97b..9c753b742c 100644 --- a/docs/delta/api/error-signaling.html +++ b/docs/delta/api/error-signaling.html @@ -243,7 +243,7 @@ @@ -252,13 +252,6 @@
-

Error Signaling

Nexus Delta makes use of the HTTP status codes to report the outcome of each API call. The status codes are complemented by a consistent response data model for reporting client and system level failures.

@@ -288,7 +281,7 @@

diff --git a/docs/delta/api/events-api.html b/docs/delta/api/events-api.html index e1090661d1..eb16b3daae 100644 --- a/docs/delta/api/events-api.html +++ b/docs/delta/api/events-api.html @@ -251,7 +251,7 @@ @@ -277,13 +277,6 @@
-

Global events

Nexus provides a global events endpoint, which allows the users to access the stream of events for all the resources in Nexus, including ACLs, permissions, realms, etc.

@@ -337,7 +330,7 @@

diff --git a/docs/delta/api/files-api.html b/docs/delta/api/files-api.html index 4c8a754d0f..7de4687868 100644 --- a/docs/delta/api/files-api.html +++ b/docs/delta/api/files-api.html @@ -270,7 +270,7 @@ @@ -315,13 +315,6 @@
-

Files

Files are attachment resources rooted in the /v1/files/{org_label}/{project_label}/ collection.

@@ -1157,7 +1150,7 @@

diff --git a/docs/delta/api/graph-analytics-api.html b/docs/delta/api/graph-analytics-api.html index 4954e33df4..ead18ef4fe 100644 --- a/docs/delta/api/graph-analytics-api.html +++ b/docs/delta/api/graph-analytics-api.html @@ -257,7 +257,7 @@ @@ -289,13 +289,6 @@
-

Graph analytics

Graph analytics is a feature introduced by the graph-analytics plugin and rooted in the /v1/graph-analytics/{org_label}/{project_label} collection.

@@ -669,7 +662,7 @@

diff --git a/docs/delta/api/id-resolution.html b/docs/delta/api/id-resolution.html index 61055315d9..17681c5016 100644 --- a/docs/delta/api/id-resolution.html +++ b/docs/delta/api/id-resolution.html @@ -260,7 +260,7 @@ @@ -295,13 +295,6 @@
-

Id Resolution

Id Resolution allows to resolve a resource by providing only a resource identifier (the @id value of a resource). In case there are multiple resources with the same identifier across different projects, the response provides all choices for disambiguation.

Authorization notes
@@ -453,7 +446,7 @@

diff --git a/docs/delta/api/identities.html b/docs/delta/api/identities.html index 5e1ddd5cdd..5b0b88b21d 100644 --- a/docs/delta/api/identities.html +++ b/docs/delta/api/identities.html @@ -243,7 +243,7 @@ @@ -252,13 +252,6 @@
-

Identities

The /v1/identities endpoint allows user to retrieve the identities that the user has in the platform. Calling the endpoint without a token will result in only one identity returned: Anonymous. Calling it with token should return multiple identities. There are four different types of identities:

@@ -316,7 +309,7 @@

-Snapshot +v1.9.x

diff --git a/docs/delta/api/index.html b/docs/delta/api/index.html index 22c41b1183..74ff685d48 100644 --- a/docs/delta/api/index.html +++ b/docs/delta/api/index.html @@ -265,7 +265,7 @@ @@ -305,13 +305,6 @@
-

API Reference

Nexus Delta exposes a RESTful interface over HTTP(S) for synchronous communication. The generally adopted transport format is JSON based, specifically JSON-LD. However, other response formats are supported through Content-Negotiation

@@ -392,7 +385,7 @@

diff --git a/docs/delta/api/jira.html b/docs/delta/api/jira.html index 9812825835..52a93a934e 100644 --- a/docs/delta/api/jira.html +++ b/docs/delta/api/jira.html @@ -255,7 +255,7 @@ @@ -285,13 +285,6 @@
-

Jira integration

The Jira integration plugin comes from the need at BBP to have the Nexus platform and Jira to interact by linking Nexus resources and Jira issues.

@@ -354,7 +347,7 @@

-Snapshot +v1.9.x

diff --git a/docs/delta/api/multi-fetch.html b/docs/delta/api/multi-fetch.html index 8dcccde00b..41da59f8d7 100644 --- a/docs/delta/api/multi-fetch.html +++ b/docs/delta/api/multi-fetch.html @@ -251,7 +251,7 @@ @@ -277,13 +277,6 @@
-

Multi fetch

The multi-fetch operation allows to get in a given format multiple resources that can live in multiple projects.

@@ -402,7 +395,7 @@

<

diff --git a/docs/delta/api/orgs-api.html b/docs/delta/api/orgs-api.html index 76b35d9202..a5dd4e40b6 100644 --- a/docs/delta/api/orgs-api.html +++ b/docs/delta/api/orgs-api.html @@ -259,7 +259,7 @@ @@ -293,13 +293,6 @@
-

Organizations

Organizations are rooted in the /v1/orgs path and are used to group and categorize sub-resources.

Authorization notes
@@ -638,7 +631,7 @@

diff --git a/docs/delta/api/permissions-api.html b/docs/delta/api/permissions-api.html index 3b87184a4b..87d1524636 100644 --- a/docs/delta/api/permissions-api.html +++ b/docs/delta/api/permissions-api.html @@ -257,7 +257,7 @@ @@ -289,13 +289,6 @@
-

Permissions

Permissions are rooted in the /v1/permissions collection.

@@ -720,7 +713,7 @@

diff --git a/docs/delta/api/projects-api.html b/docs/delta/api/projects-api.html index 0db6f52e57..c8c5d3c5fa 100644 --- a/docs/delta/api/projects-api.html +++ b/docs/delta/api/projects-api.html @@ -265,7 +265,7 @@ @@ -305,13 +305,6 @@
- +

For details on available configuration, please visit the plugin configuration.

GET /v1/project-deletion/config
 

It returns the configuration of the project deletion plugin.

@@ -1340,7 +1333,7 @@

diff --git a/docs/delta/api/quotas.html b/docs/delta/api/quotas.html index 65b62b18c0..1e5c970208 100644 --- a/docs/delta/api/quotas.html +++ b/docs/delta/api/quotas.html @@ -250,7 +250,7 @@ @@ -275,13 +275,6 @@
diff --git a/docs/delta/api/realms-api.html b/docs/delta/api/realms-api.html index 60ae753518..02a80d8047 100644 --- a/docs/delta/api/realms-api.html +++ b/docs/delta/api/realms-api.html @@ -257,7 +257,7 @@
@@ -289,13 +289,6 @@
diff --git a/docs/delta/api/resolvers-api.html b/docs/delta/api/resolvers-api.html index 30fc239075..8b47e6700f 100644 --- a/docs/delta/api/resolvers-api.html +++ b/docs/delta/api/resolvers-api.html @@ -273,7 +273,7 @@
@@ -321,13 +321,6 @@
diff --git a/docs/delta/api/resources-api.html b/docs/delta/api/resources-api.html index 58d1da5f02..c0de709845 100644 --- a/docs/delta/api/resources-api.html +++ b/docs/delta/api/resources-api.html @@ -280,7 +280,7 @@
@@ -335,13 +335,6 @@
diff --git a/docs/delta/api/schemas-api.html b/docs/delta/api/schemas-api.html index a2711f632b..3af9ce3062 100644 --- a/docs/delta/api/schemas-api.html +++ b/docs/delta/api/schemas-api.html @@ -268,7 +268,7 @@
@@ -311,13 +311,6 @@
diff --git a/docs/delta/api/search-api.html b/docs/delta/api/search-api.html index 992455deec..a41de84c07 100644 --- a/docs/delta/api/search-api.html +++ b/docs/delta/api/search-api.html @@ -251,7 +251,7 @@
@@ -277,16 +277,9 @@
-

Global search

-

Nexus provides global search functionality across all projects through the search plugin.

Warning
+

Nexus provides global search functionality across all projects through the search plugin.

Warning

The search plugin is experimental and its functionality and API can change without notice.

For instructions on how to configure global search in Nexus and how it works please visit the Search configuration page.

Query

@@ -307,7 +300,7 @@

-Snapshot +v1.9.x

diff --git a/docs/delta/api/storages-api.html b/docs/delta/api/storages-api.html index e69c452181..0b379d6ed9 100644 --- a/docs/delta/api/storages-api.html +++ b/docs/delta/api/storages-api.html @@ -273,7 +273,7 @@
@@ -321,13 +321,6 @@
-

Storages

Storages are rooted in the /v1/storages/{org_label}/{project_label} collection and are used to describe where files are physically stored.

@@ -362,7 +355,7 @@

Remote disk storage

Warning

The Remote disk storage and it remote service implementation are now deprecated and will be removed in an upcoming release.

This storage type relies on a remote HTTP service that exposes basic file operations on an underlying POSIX file-system. This is particularly handy if your organization is running some kind of distributed network storage (such as Ceph, Gluster, GPFS, Lustre, …) that you don’t want to mount directly on the system where Nexus Delta runs.

-

While there’s no formal specification for this service, you can check out or deploy our own implementation: Nexus remote storage service.

+

While there’s no formal specification for this service, you can check out or deploy our own implementation: Nexus remote storage service.

In order to be able to use this storage, the configuration flag plugins.storage.storages.remote-disk.enabled should be set to true. More information about configuration

{
   "@type": "RemoteDiskStorage",
@@ -963,7 +956,7 @@ 

diff --git a/docs/delta/api/supervision-api.html b/docs/delta/api/supervision-api.html index d7ec7715e9..af23ce0fcf 100644 --- a/docs/delta/api/supervision-api.html +++ b/docs/delta/api/supervision-api.html @@ -250,7 +250,7 @@
@@ -275,13 +275,6 @@
-

Elasticsearch Pipes

Pipes are the processing units of a pipeline for an Elasticsearch view.

@@ -407,8 +400,8 @@

Elem source for documentation about this class. -
  • GraphResource source for documentation about this class.
  • +
  • Elem source for documentation about this class.
  • +
  • GraphResource source for documentation about this class.
  • Please visit Plugins to learn about how to create/package/deploy a plugin.

    Inside this plugin, you can then define additional pipes:

    @@ -523,7 +516,7 @@

    here and the associated unit tests here.

    +

    The source code for the core pipes is available here and the associated unit tests here.

    diff --git a/docs/delta/api/views/sparql-view-api.html b/docs/delta/api/views/sparql-view-api.html index 4ee3e8ee47..e644fd70e0 100644 --- a/docs/delta/api/views/sparql-view-api.html +++ b/docs/delta/api/views/sparql-view-api.html @@ -266,7 +266,7 @@
    @@ -307,13 +307,6 @@
    -

    Architecture

    Blue Brain Nexus is a collection of software components that address various organizational needs relating to data storage, management, analysis and consumption. It was designed to support the data-driven science iterative cycle at Blue Brain but its genericity allows for its use in arbitrary contexts.

    @@ -312,7 +305,7 @@

    cluster configuration by updating the number of nodes and defining the index for each of them +
  • Change the cluster configuration by updating the number of nodes and defining the index for each of them
  • Start the cluster
  • Clustering

    New clustering deployment
    @@ -379,7 +372,7 @@

    -Snapshot +v1.9.x

    diff --git a/docs/delta/benchmarks/index.html b/docs/delta/benchmarks/index.html index 6a9c655963..db5d85cae5 100644 --- a/docs/delta/benchmarks/index.html +++ b/docs/delta/benchmarks/index.html @@ -243,7 +243,7 @@
    @@ -252,13 +252,6 @@
    -

    Plugins

    Starting from version 1.5, Delta introduces the ability to extend its functionality using plugins. Plugins enable developers to add new functionality to Nexus Delta without the need to modify Delta itself. Plugins can introduce various new functionalities, including new API endpoints and indexing capabilities.

    Note

    Plugins are still an experimental feature and Delta SDKs and dependent modules(rdf, sourcing) provide no binary compatibility guarantees.

    Plugin development

    Plugins used by Delta need to be packaged as a .jar file containing the plugin code with all its dependencies. Delta loads plugins from .jar files located in a directory specified by DELTA_PLUGINS environment variable.

    -

    Plugins must define exactly one class which extends PluginDef trait.

    +

    Plugins must define exactly one class which extends PluginDef trait.

    The class must define following methods:

    def info: PluginDescription
     
    -

    this method returns instance of PluginDescription which defines the plugin name and version.

    +

    this method returns instance of PluginDescription which defines the plugin name and version.

    def initialize(locator: Locator): Task[Plugin]
     

    this method can be used to initialize the plugin and returns an instance of a Plugin, which can additionally define logic to stop the plugin gracefully.

    @@ -381,21 +374,21 @@

    libraryDependencies += "ch.epfl.bluebrain.nexus" %% "delta-sdk" % deltaVersion % Provided

    Dependency injection

    -

    Delta uses distage library for dependency injection. Each plugin must define ModuleDef to create instances of its own classes. All the dependencies provided by ModuleDefs defined in Delta modules, as well as other plugins can be used here.

    +

    Delta uses distage library for dependency injection. Each plugin must define ModuleDef to create instances of its own classes. All the dependencies provided by ModuleDefs defined in Delta modules, as well as other plugins can be used here.

    The plugin can also define instances of following traits/classes, which will be used in Delta:

      -
    • PriorityRoute - allows the plugin to define Akka HTTP Route with priority. The priority is used by Delta to prioritize route evaluation
    • -
    • ScopeInitialization - allows the plugin to define hooks which will be run on organization and project creation.
    • -
    • ScopedEntityDefinition - allows to define the required information to be able to handle a custom scoped entity
    • -
    • Serializer - allows to define how to serialize and deserialize an event / a state to database
    • -
    • ResourceShift - enables Delta to retrieve the different resources in a common format for tasks like indexing or resolving operations.
    • -
    • SseEncoder - enables Delta to convert a database event to a SSE event
    • -
    • EventMetricEncoder - enables Delta to convert a database event to an event metric
    • -
    • MetadataContextValue - registers metadata context of this plugin into global metadata context
    • -
    • RemoteContextResolution - enables Delta to resolve static contexts defined by the plugin
    • -
    • ServiceDependency - allows the plugin to define dependencies which will be displayed in /version endpoint.
    • -
    • ApiMappings - allows the plugin to define default API mappings used to shorten URLs
    • -
    • ResourceToSchemaMappings - allows the plugin to define mapping from the resource type to schema, which can be used to interact with resources created by the plugin through /resources endpoints.
    • +
    • PriorityRoute - allows the plugin to define Akka HTTP Route with priority. The priority is used by Delta to prioritize route evaluation
    • +
    • ScopeInitialization - allows the plugin to define hooks which will be run on organization and project creation.
    • +
    • ScopedEntityDefinition - allows to define the required information to be able to handle a custom scoped entity
    • +
    • Serializer - allows to define how to serialize and deserialize an event / a state to database
    • +
    • ResourceShift - enables Delta to retrieve the different resources in a common format for tasks like indexing or resolving operations.
    • +
    • SseEncoder - enables Delta to convert a database event to a SSE event
    • +
    • EventMetricEncoder - enables Delta to convert a database event to an event metric
    • +
    • MetadataContextValue - registers metadata context of this plugin into global metadata context
    • +
    • RemoteContextResolution - enables Delta to resolve static contexts defined by the plugin
    • +
    • ServiceDependency - allows the plugin to define dependencies which will be displayed in /version endpoint.
    • +
    • ApiMappings - allows the plugin to define default API mappings used to shorten URLs
    • +
    • ResourceToSchemaMappings - allows the plugin to define mapping from the resource type to schema, which can be used to interact with resources created by the plugin through /resources endpoints.

    Class loading

    In order to avoid clashes between different plugins, Delta uses custom classloader to load plugin classes, which will load classes from the plugin first, then using application classloader and other plugins after that. It is therefore recommended to not include in the plugin jar any dependencies which are also provided by SDK. Libraries can be easily excluded from dependencies in sbt:

    @@ -413,14 +406,14 @@

    Existing plugins

    Currently, following Delta functionality is provided by plugins:

    Elasticsearch plugin is required in order to provide listings in the API, other plugins can be excluded if their functionality is not needed. All the above plugins are included in the Delta Docker image.

    @@ -431,7 +424,7 @@

    diff --git a/docs/faq.html b/docs/faq.html index cd0f4a27d7..d1bccb20b2 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -275,7 +275,7 @@
    @@ -325,13 +325,6 @@
    -

    FAQ

    General FAQ

    @@ -398,7 +391,7 @@

    Can I connect any SPARQL client to Nexus’ SPARQL endpoint?

    Yes. As long as the client supports the ability to provide a Authentication HTTP Header (for authentication purposes) on the HTTP request, any SPARQL client should work.

    How can I create an organization as an anonymous user in the docker-compose file? What needs to be done to switch to “authenticated” mode?

    -

    By default, the permissions used - for an authenticated user - when running Nexus Delta are the ones defined on the JVM property app.permissions.minimum. In order to change that behaviour, please create some ACLs for the path /. For more details about ACLs creation, visit the ACLs page.

    +

    By default, the permissions used - for an authenticated user - when running Nexus Delta are the ones defined on the JVM property app.permissions.minimum. In order to change that behaviour, please create some ACLs for the path /. For more details about ACLs creation, visit the ACLs page.

    Can I use Blue Brain Nexus from Jupyter Notebooks?

    Blue Brain Nexus can be used from Jupyter Notebooks using Nexus Forge or Nexus Python SDK. Alternatively, you can also use any Python HTTP client and use Nexus REST API directly from the Jupyter Notebook. Please consider looking at our tutorial to learn how to user Nexus Forge on the Sandbox. Other examples are provided in the folder Notebooks.

    @@ -409,7 +402,7 @@

    -Snapshot +v1.9.x

    diff --git a/docs/forge.html b/docs/forge.html index 9f722e6b35..9e3aee9210 100644 --- a/docs/forge.html +++ b/docs/forge.html @@ -243,7 +243,7 @@
    @@ -252,13 +252,6 @@
    diff --git a/docs/fusion/my-data.html b/docs/fusion/my-data.html index 96235698a1..1c8c763e50 100644 --- a/docs/fusion/my-data.html +++ b/docs/fusion/my-data.html @@ -253,7 +253,7 @@
    @@ -281,13 +281,6 @@
    diff --git a/docs/fusion/organizations.html b/docs/fusion/organizations.html index 947daa0b3c..9b371b2ef1 100644 --- a/docs/fusion/organizations.html +++ b/docs/fusion/organizations.html @@ -250,7 +250,7 @@
    @@ -275,13 +275,6 @@
    -

    Organizations

    The Nexus Fusion platform provides users with the ability to manage a high-level entity that encompasses all projects within their ecosystem. This feature is accessible through the organizations page, which presents users with a comprehensive overview of all the organizations managed within a given Blue Brain Nexus deployment. Users who possess the necessary permissions are also able to create new organizations through this interface.

    @@ -300,7 +293,7 @@

    diff --git a/docs/fusion/plugins.html b/docs/fusion/plugins.html index 3439904a50..91ea00a789 100644 --- a/docs/fusion/plugins.html +++ b/docs/fusion/plugins.html @@ -271,7 +271,7 @@
    @@ -317,13 +317,6 @@
    -

    Projects

    The concept of a Project in Nexus Fusion represents a fundamental unit of data management that empowers users to effectively organize and manage a distinct set of data. The Projects page, available in two distinct modes, enables users to browse either all projects within the Nexus ecosystem or those specific to a particular organization.

    @@ -273,7 +266,7 @@

    diff --git a/docs/fusion/search.html b/docs/fusion/search.html index b0c0cc4d1c..deda0324cd 100644 --- a/docs/fusion/search.html +++ b/docs/fusion/search.html @@ -264,7 +264,7 @@
    @@ -303,13 +303,6 @@
    diff --git a/docs/fusion/studios.html b/docs/fusion/studios.html index 0a6ffadfbd..caf786406a 100644 --- a/docs/fusion/studios.html +++ b/docs/fusion/studios.html @@ -243,7 +243,7 @@
    @@ -252,13 +252,6 @@
    -

    Studios

    The Studios space within the Nexus Fusion platform provides data curators with a powerful tool to showcase their data and can effectively visualize and communicate complex data sets to a broad audience. By developing custom plugins with JavaScript, curators can tailor the presentation of query results to meet specific requirements, including the formatting of charts, graphs, and other data visualization tools.

    @@ -272,7 +265,7 @@

    <

    diff --git a/docs/getting-started/index.html b/docs/getting-started/index.html index 8a5b836f2a..e504a859f0 100644 --- a/docs/getting-started/index.html +++ b/docs/getting-started/index.html @@ -243,7 +243,7 @@
    @@ -252,13 +252,6 @@
    -

    Nexus configuration

    -

    Nexus Delta service can be highly customized using configuration file(s). Many things can be adapted to your deployment needs: port where the service is running, timeouts, pagination defaults, etc.

    +

    Nexus Delta service can be highly customized using configuration file(s). Many things can be adapted to your deployment needs: port where the service is running, timeouts, pagination defaults, etc.

    There are 3 ways to modify the default configuration:

    • Setting the env variable DELTA_EXTERNAL_CONF which defines the path to a HOCON file. The configuration keys that are defined here can be overridden by the other methods.
    • @@ -342,24 +335,24 @@

      In terms of JVM pool memory allocation, we recommend setting the following values to the JAVA_OPTS environment variable: -Xms4g -Xmx4g. The recommended values should be changed accordingly with the usage of Nexus Delta, the number of projects and the resources/schemas size.

      In order to successfully run Nexus Delta there is a minimum set of configuration flags that need to be specified

      Http configuration

      -

      The http section of the configuration defines the binding address and port where the service will be listening.

      +

      The http section of the configuration defines the binding address and port where the service will be listening.

      The configuration flag akka.http.server.parsing.max-content-length can be used to control the maximum payload size allowed for Nexus Delta resources. This value applies to all posted resources except for files.

      Postgres configuration

      -

      The database section of the configuration defines the postgres specific configuration. As Nexus Delta uses three separate pools (‘read’, ‘write’, ‘streaming’), it is recommended to set the host, port, database name, username, and password via the app.defaults.database field, as it will apply to all pools. It is however possible to accommodate more advanced setups by configuring each pool separately by changing its respective app.database.{read|write|streaming} fields.

      +

      The database section of the configuration defines the postgres specific configuration. As Nexus Delta uses three separate pools (‘read’, ‘write’, ‘streaming’), it is recommended to set the host, port, database name, username, and password via the app.defaults.database field, as it will apply to all pools. It is however possible to accommodate more advanced setups by configuring each pool separately by changing its respective app.database.{read|write|streaming} fields.

      The pool size can be set using the app.defaults.database.access.pool-size setting for all pools, or individually for each pool (app.database.{read|write|streaming}.access.pool-size).

      Note

      A default Postgres deployment will limit the number of connections to 100, unless configured otherwise. See the Postgres Connection and Authentication documentation.

      -

      Before running Nexus Delta, the init scripts should be run in the lexicographical order.

      +

      Before running Nexus Delta, the init scripts should be run in the lexicographical order.

      It is possible to let Nexus Delta automatically create them using the following configuration parameters: app.database.tables-autocreate=true.

      Note

      Auto creation of tables is included as a development convenience and should be avoided in production.

      RDF parser

      -

      The underlying Apache Jena parser used to validate incoming data is configurable using the json-ld-api field to enable different levels of strictness.

      +

      The underlying Apache Jena parser used to validate incoming data is configurable using the json-ld-api field to enable different levels of strictness.

      Service account configuration

      Nexus Delta uses a service account to perform automatic tasks under the hood. Examples of it are:

      • Granting default ACLs to the user creating a project.
      • Creating default views on project creation.
      -

      The service-account section of the configuration defines the service account configuration.

      +

      The service-account section of the configuration defines the service account configuration.

      Automatic project provisioning

      Automatic project provisioning allows to create a dedicated project for users the first time they connect to Delta that is to say the first time, they query the project listing endpoints.

      The generated project label will be:

      @@ -368,32 +361,32 @@

      The automatic-provisioning section of the configuration defines the project provisioning configuration.

      +

      The automatic-provisioning section of the configuration defines the project provisioning configuration.

      Fusion configuration

      When fetching a resource, Nexus Delta allows to return a redirection to its representation in Fusion by providing text/html in the Accept header.

      -

      The fusion section of the configuration defines the fusion configuration.

      +

      The fusion section of the configuration defines the fusion configuration.

      Projections configuration

      Projections in Nexus Delta are asynchronous processes that can replay the event log and process this information. For more information on projections, please refer to the Architecture page.

      -

      The projections section of the configuration allows to configure the projections.

      +

      The projections section of the configuration allows to configure the projections.

      In case of failure in a projection, Nexus Delta records the failure information inside the public.failed_elem_logs PostgreSQL table, which can be used for analysis, and ultimately resolution of the failures. The configuration allows to set how long the failure information is stored for (app.projections.failed-elem-ttl), and how often the projection deleting the expired failures is awoken (app.projections.delete-expired-every).

      Plugins configuration

      Since 1.5.0, Nexus Delta supports plugins. Jar files present inside the local directory defined by the DELTA_PLUGINS environment variable are loaded as plugins into the Delta service.

      Each plugin configuration is rooted under plugins.{plugin_name}. All plugins have a plugins.{plugin_name}.priority configuration flag used to determine the order in which the routes are handled in case of collisions.

      For more information about plugins, please refer to the Plugins page.

      Elasticsearch views plugin configuration

      -

      The elasticsearch plugin configuration can be found here.

      +

      The elasticsearch plugin configuration can be found here.

      The most important flags are: * plugins.elasticsearch.base which defines the endpoint where the Elasticsearch service is running. * plugins.elasticsearch.credentials.username and plugins.elasticsearch.credentials.password to allow to access to a secured Elasticsearch cluster. The user provided should have the privileges to create/delete indices and read/index from them.

      Please refer to the Elasticsearch configuration which describes the different steps to achieve this.

      Blazegraph views plugin configuration

      -

      The blazegraph plugin configuration can be found here.

      +

      The blazegraph plugin configuration can be found here.

      The most important flag is plugins.blazegraph.base which defines the endpoint where the Blazegraph service is running.

      -

      The plugins.blazegraph.slow-queries section of the Blazegraph configuration defines what is considered a slow Blazegraph query, which will get logged in the public.blazegraph_queries PostgreSQL table. This can be used to understand which Blazegraph queries can be improved.

      +

      The plugins.blazegraph.slow-queries section of the Blazegraph configuration defines what is considered a slow Blazegraph query, which will get logged in the public.blazegraph_queries PostgreSQL table. This can be used to understand which Blazegraph queries can be improved.

      Composite views plugin configuration

      -

      The composite views plugin configuration can be found here.

      +

      The composite views plugin configuration can be found here.

      There are several configuration flags related to tweaking the range of values allowed for sources, projections and rebuild interval.

      Authentication for remote sources can be specified in three different ways. The value of plugins.composite-views.remote-source-credentials should be speficied in the same way as remote storages, as shown here

      Storage plugin configuration

      -

      The storage plugin configuration can be found here.

      +

      The storage plugin configuration can be found here.

      Nexus Delta supports 3 types of storages: ‘disk’, ‘amazon’ (s3 compatible) and ‘remote’.

      • For disk storages the most relevant configuration flag is plugins.storage.storages.disk.default-volume, which defines the default location in the Nexus Delta filesystem where the files using that storage are going to be saved.
      • @@ -444,14 +437,14 @@
        Archive plugin configuration
        -

        The archive plugin configuration can be found here.

        +

        The archive plugin configuration can be found here.

        Jira plugin configuration

        -

        The Jira plugin configuration can be found here.

        +

        The Jira plugin configuration can be found here.

        Setting up the Jira plugin needs to set up the endpoint of the Jira instance but also the consumer key, the consumer secret and the private key required to interact with Jira (more details including the configuration steps in Jira here).

        Monitoring

        For monitoring, Nexus Delta relies on Kamon.

        Kamon can be disabled by passing the environment variable KAMON_ENABLED set to false.

        -

        Delta configuration for Kamon is provided in the monitoring section. For a more complete description on the different options available, please look at the Kamon website.

        +

        Delta configuration for Kamon is provided in the monitoring section. For a more complete description on the different options available, please look at the Kamon website.

        Instrumentation

        Delta provides the Kamon instrumentation for:

    diff --git a/docs/getting-started/running-nexus/index.html b/docs/getting-started/running-nexus/index.html index 9f44c10aa7..36bb0f31ff 100644 --- a/docs/getting-started/running-nexus/index.html +++ b/docs/getting-started/running-nexus/index.html @@ -278,7 +278,7 @@
    @@ -331,13 +331,6 @@
    -

    Search configuration

    -

    Nexus provides global search functionality across all projects through the search plugin.

    Warning
    +

    Nexus provides global search functionality across all projects through the search plugin.

    Warning

    The search plugin is experimental and its functionality and API can change without notice.

    There are several aspects that have been taken into consideration when adding global search capabilities in Nexus:

    diff --git a/docs/getting-started/try-nexus-movielens.html b/docs/getting-started/try-nexus-movielens.html index 7ad5d7d9aa..4097d3381b 100644 --- a/docs/getting-started/try-nexus-movielens.html +++ b/docs/getting-started/try-nexus-movielens.html @@ -258,7 +258,7 @@
    @@ -291,13 +291,6 @@
    -

    Try Nexus with the MovieLens Dataset

    In this tutorial, you will use the core features of the Nexus ecosystem through our sandbox. This requires minimal technical knowledge but the ability to install a Python library and run a jupyter notebook.

    @@ -338,9 +331,9 @@

    MovieLens dataset into the created project within Nexus Delta using the python framework Nexus Forge.

    A jupyter notebook is available for this part of the tutorial and can be spawn easily using Google Colab, binder, or locally:

    For local execution, Nexus Forge can be installed using these instructions. Make sure that the jupyter notebook|lab is launched in the same virtual environment where Nexus Forge is installed. Alternatively, set up a specialized kernel.

    If you want to try some other examples of Nexus Forge, you can use these notebooks.

    @@ -388,8 +381,8 @@

    Github -
  • Google Colab
  • +
  • Github
  • +
  • Google Colab
  • Querying a Knowledge Graph using Elasticsearch

    The goal of this notebook is to learn how to connect to an Elasticsearch view and run queries against it.

    @@ -399,8 +392,8 @@

    Github -
  • Google Colab
  • +
  • Github
  • +
  • Google Colab
  • Linking data on the web

    In this tutorial, we demonstrate how to consume structured data published on the web according to the Linked data principles to extend and enrich a knowledge graph.

    @@ -416,8 +409,8 @@

    Github -
  • Google Colab
  • +
  • Github
  • +
  • Google Colab
  • @@ -427,7 +420,7 @@

    -Snapshot +v1.9.x

    diff --git a/docs/getting-started/try-nexus.html b/docs/getting-started/try-nexus.html index f3407e82ef..1db9448ce2 100644 --- a/docs/getting-started/try-nexus.html +++ b/docs/getting-started/try-nexus.html @@ -303,7 +303,7 @@
    @@ -381,13 +381,6 @@
    -

    Try Nexus with Neuroscience Datasets

    Welcome to our Nexus tutorial! Nexus is an open-source data and metadata management suite. With Nexus, your data is catalogued and indexed as a knowledge graph, all interconnected.

    @@ -501,11 +494,11 @@

    Read more about mapping with Forge.

    -

    In the code available, we will integrate data from two sources: the AIBS and MouseLight (see Step 3). We will provide mappers for both data sources. You can check the mappers directly on GitHub. There are two mappers for the AIBS, one for neuron morphologies and another for electrophysiology data. For MouseLight, there’s only one mapper, as both morphologies and traces are in the same data source.

    +

    In the code available, we will integrate data from two sources: the AIBS and MouseLight (see Step 3). We will provide mappers for both data sources. You can check the mappers directly on GitHub. There are two mappers for the AIBS, one for neuron morphologies and another for electrophysiology data. For MouseLight, there’s only one mapper, as both morphologies and traces are in the same data source.

    2.6. Running the Notebook

    To run the notebook locally, open your terminal, clone the Nexus repository, go to the notebook directory, and run Jupyter:

    @@ -540,8 +533,8 @@

    The example notebooks will use these endpoints to collect and download the datasets and their metadata.

    3.2. Running the Notebook

    To run the notebook locally, open your terminal, clone the Nexus repository, go to the notebook directory, and run Jupyter:

    @@ -944,8 +937,8 @@

    5.2. Running the Notebook

    To run the notebook locally, open your terminal, clone the Nexus repository, go to the notebook directory, and run Jupyter:

    @@ -973,7 +966,7 @@

    -Snapshot +v1.9.x

    diff --git a/docs/getting-started/understanding-knowledge-graphs.html b/docs/getting-started/understanding-knowledge-graphs.html index ea58ff1add..ddf907c720 100644 --- a/docs/getting-started/understanding-knowledge-graphs.html +++ b/docs/getting-started/understanding-knowledge-graphs.html @@ -264,7 +264,7 @@
    @@ -303,13 +303,6 @@
    diff --git a/docs/releases/index.html b/docs/releases/index.html index 012c433f0e..716e8b64d7 100644 --- a/docs/releases/index.html +++ b/docs/releases/index.html @@ -241,9 +241,10 @@
    -
    -
    Snapshot version
    -

    -You are browsing the docs for the snapshot version of Nexus, -the latest release is available here -

    -

    Releases

    This section of the documentation lists the significant BlueBrain Nexus releases across all services and web applications.

    -

    The latest stable release is v1.8.0 released on 14.06.2023.

    -

    1.9.0

    +

    1.9.0 (18.12.2023)

    Breaking changes

    +

    Deprecations

    +
      +
    • Fetching resources using organization and project uuids
    • +
    • Tagging operations for resolvers/storages/views
    • +
    • Indexing projects within views
    • +
    • Removing generic endpoints to create/update/deprecate resources
    • +
    • Global SSE endpoint
    • +
    • SSE endpoints for realms/acls/organizations
    • +
    • SSE endpoint to fetch indexing errors
    • +
    • Injecting org/project uuids in SSEs related to resources
    • +

    New features / enhancements

    diff --git a/docs/releases/older-releases.html b/docs/releases/older-releases.html index 185f0ec554..1064af21d7 100644 --- a/docs/releases/older-releases.html +++ b/docs/releases/older-releases.html @@ -243,7 +243,7 @@
    @@ -252,13 +252,6 @@
    -

    v1.4 To v1.5 Migration

    The v1.5 release of Delta includes a lot of improvements like storing the compacted/expanded forms of resources to get immutability and improve performance.

    @@ -750,7 +743,7 @@

    Delta configuration +
  • Increasing temporarily the delay in retry strategies can also help reduce the pressure on the platform. See: Delta configuration
  • Check the statistics views for different views, they should progressively tend to get to 0 remaining events.

  • Check the cluster stats endpoint in elasticsearch, the number of indices and docs should stabilize after a while.
  • @@ -775,7 +768,7 @@

    diff --git a/docs/releases/v1.5-release-notes.html b/docs/releases/v1.5-release-notes.html index 62c36fdd41..10bc2b1f8c 100644 --- a/docs/releases/v1.5-release-notes.html +++ b/docs/releases/v1.5-release-notes.html @@ -267,7 +267,7 @@
    @@ -309,13 +309,6 @@
    -

    v1.6 Release Notes

    @@ -366,7 +359,7 @@

    Secure the Delta Elasticsearch client

    With 1.6, it is now possible to define credentials to query a secured Elasticsearch cluster: Elasticsearch configuration.

    Dedicated Blazegraph client for user-defined queries

    -

    User-defined queries could bring instability to Blazegraph because of their complexity. In 1.6, a dedicated client with a timeout which triggers a circuit breaker in Blazegraph has been introduced in order to solve that problem.

    +

    User-defined queries could bring instability to Blazegraph because of their complexity. In 1.6, a dedicated client with a timeout which triggers a circuit breaker in Blazegraph has been introduced in order to solve that problem.

    Synchronous indexing

    From 1.6, the different types of resources can be indexed directly after creation/modification without waiting for the background indexing process to pick it up.

    Graph analytics

    @@ -375,7 +368,7 @@

    Listings

    The different types of resources can now be listed at the organization level and within all the projects the current user has access to.

    Configurable RDF parser

    -

    The RDF parser allowing to validate incoming data can now be configured in order to be more or less strict.

    +

    The RDF parser allowing to validate incoming data can now be configured in order to be more or less strict.

    Automatic project provisioning

    When enabled, a dedicated project is created for the current user on its first access to the Nexus platform.

    How to enable and configure it is detailed here

    @@ -390,7 +383,7 @@

    Nexus Fusion

    Features

      -
    • Revamped Fusion search. Fusion search will now use delta search end point and will provide a improved UI with sorting, filtering, pagination etc.
    • +
    • Revamped Fusion search. Fusion search will now use delta search end point and will provide a improved UI with sorting, filtering, pagination etc.
    • Real-time updates. Fusion now uses ‘indexing=sync’ option in delta API. This means all the updates made through fusion will be indexed in delta synchronously.
    • Sub apps other than studio will be hidden in sidebar for anonymous users.
    • Fusion will show a warning message when projects are due for deletion.
    • @@ -409,7 +402,7 @@

      -Snapshot +v1.9.x

    diff --git a/docs/releases/v1.6-to-v1.7-migration.html b/docs/releases/v1.6-to-v1.7-migration.html index fca53dc0af..7817028466 100644 --- a/docs/releases/v1.6-to-v1.7-migration.html +++ b/docs/releases/v1.6-to-v1.7-migration.html @@ -251,7 +251,7 @@
    @@ -277,13 +277,6 @@
    -

    v1.7 To v1.8 Migration

    The v1.8 release of Delta introduces PostgreSQL as sole option for the Delta primary event store.

    @@ -460,12 +453,12 @@

    Create the PostgreSQL tables

    -

    Run the commands from the Delta 1.8.x schema scripts to create the tables necessary for Delta operations.

    +

    Run the commands from the Delta 1.8.x schema scripts to create the tables necessary for Delta operations.

    Elasticsearch and Blazegraph indices

    For the migration, there are two ways to make sure that the new Delta 1.8 indices do not overlap the ones from Delta 1.7 (for both Elasticsearch and Blazegraph):

    1. Delete all existing indices
    2. -
    3. Configure a different prefix for the new Delta 1.8 indices using the app.defaults.indexing.prefix field, which sets the default prefix value for both Elasticsearch and Blazegraph indices.
    4. +
    5. Configure a different prefix for the new Delta 1.8 indices using the app.defaults.indexing.prefix field, which sets the default prefix value for both Elasticsearch and Blazegraph indices.
    Note

    Elasticsearch defaults to a maximum of 1000 shards per node in the cluster. If you intend to keep both old and new indices for the time of the migration, ensure that you can double your amount of shards within this limit. It is also possible to raise this limit by configuring cluster.max_shards_per_node. In both cases, monitor your resource usage, and consider allocating more resources to Elasticsearch for the time of the migration.

    Blazegraph journal size

    Blazegraph stores data using a journaling system, which is append-only. Consider backing up your existing Blazegraph journal (by making a copy of the blazegraph.jnl file), and running with a clean instance of Blazegraph. This can allow a significant reduction in the size of the journal as only the latest state will be saved.

    @@ -720,7 +713,7 @@

    +

    Delta 1.8 contains several bug fixes and improvements that result in differences in the Blazegraph counts. As such it is expected to find differences in the migration_blazegraph_count table. Additionally, the default Blazegraph query timeout is 1 minute, so that the count may not be able to complete for large projects.

    The calls must be authenticated using the same service account as the one defined in Delta.

    Before running the tests, the following command needs to be run in your PostgreSQL instance:

    CREATE TABLE IF NOT EXISTS public.migration_resources_diff_offset(
    @@ -854,7 +847,7 @@ 

    diff --git a/docs/releases/v1.8-release-notes.html b/docs/releases/v1.8-release-notes.html index fb56304d55..6b7d16e7de 100644 --- a/docs/releases/v1.8-release-notes.html +++ b/docs/releases/v1.8-release-notes.html @@ -278,7 +278,7 @@
    @@ -331,13 +331,6 @@
    -

    v1.9 Release Notes

    -

    TODO add link to full changes on github

    +
    +

    This is an incremental software release that adds several improvements across the board. The API is backwards compatible with v1.8.

    +

    With v1.9, Nexus Delta also changes its underlying runtime allowing to it to work properly, switching from Monix which is not maintained anymore to Cats Effect.

    +
    +

    For the detailed list of updates in this release, see the list of addressed issues since v1.8.

    If you are currently using Nexus Delta from 1.8.x, please visit the migration instructions for the necessary steps to successfully upgrade.

    Nexus Delta

    Resources

    @@ -481,7 +478,7 @@

    Compressing requests to Elasticsearch

    The different requests to Elasticsearch are now compressed by default allowing to reduce the I/Os especially during indexing.

    Composite views

    -

    New features enhance performance of indexing of composite views, as well as authentication changes for views which incorporate projects on remote Delta instances

    +

    New features enhance performance of indexing of composite views, as well as authentication changes for views which incorporate projects on remote Delta instances.

    Batching queries to the intermediate space

    Construct queries to the intermediate space can now be batched.

    More information

    @@ -558,7 +555,7 @@

    Removing Delta callback to validate the caller identity

    This callback has been replaced by a local validation of the token.

    Nexus forge

    -

    TODO

    +

    For more information about the Forge, please refer to the documentation.

    diff --git a/docs/roadmap.html b/docs/roadmap.html index e0bbc6bce8..26dbe0b08f 100644 --- a/docs/roadmap.html +++ b/docs/roadmap.html @@ -243,7 +243,7 @@
    @@ -252,13 +252,6 @@
    diff --git a/paradox.json b/paradox.json index 939fe1ed18..9d9ed0725e 100644 --- a/paradox.json +++ b/paradox.json @@ -1,4 +1,4 @@ { "name" : "docs", - "version" : "0.0.0+1-638caa36+20231218-1229-SNAPSHOT" + "version" : "0.0.0+1-a4c8f5b7+20231218-1302-SNAPSHOT" } \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json index d118b2a2ea..e2e4ecb855 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"docs":[{"location":"/paradox.json","text":"","title":""},{"location":"/docs/index.html","text":"","title":"Blue Brain Nexus"},{"location":"/docs/index.html#blue-brain-nexus","text":"Blue Brain Nexus is an ecosystem that allows you to organize and better leverage your data through the use of a Knowledge Graph. In addition to the products listed here, you’ll find a rich ecosystem of libraries and tools.","title":"Blue Brain Nexus"},{"location":"/docs/index.html#products","text":"The Blue Brain Nexus ecosystem encompasses a broad range of capabilities that are brought to you across three complementary products and a suite of utilities.","title":"Products"},{"location":"/docs/index.html#nexus-fusion","text":"Enabling Collaborative Data and Knowledge Discovery\nFusion is our extensible web application. It hosts different apps to accommodate various use cases. It comes by default with Studios (where you work with data), Admin (for managing the Nexus instance), and will soon support to organise your data activities. It runs on top of the Delta web services, and integrates neatly with our Forge python framework.\nRead more about Fusion","title":"Nexus Fusion"},{"location":"/docs/index.html#nexus-forge","text":"Building and Using Knowledge Graphs Made Easy\nNexus Forge is a domain-agnostic, generic and extensible Python framework enabling non-expert users to create and manage knowledge graphs.\nRead more about Forge","title":"Nexus Forge"},{"location":"/docs/index.html#nexus-delta","text":"Managing the Data and Knowledge Graph Lifecycle\nA scalable and secure service to store and leverage all your data, neatly organised in a Knowledge Graph. It offers an API to perform all your data management operations, this way it can easily integrate with your software stack. Its advanced indexing capabilities automatically build views from your metadata.\nRead more about Delta","title":"Nexus Delta"},{"location":"/docs/index.html#utilities","text":"The Nexus ecosystem leverages a set of smaller open-source utilities.\nDiscover the utilities","title":"Utilities"},{"location":"/docs/index.html#quick-start-guide","text":"Do you know know what a knowledge graph is? Or want to deepen your understanding? Follow our introduction.\nWant to get started with Nexus right away? We provide a tutorial that uses our sandbox environment to let you try the functionalities.\nReady to deploy your own instance of Nexus? Follow our guide.","title":"Quick Start Guide"},{"location":"/docs/index.html#versions","text":"Looking for docs for another release of Nexus ?\nList of versions","title":"Versions"},{"location":"/docs/index.html#roadmap","text":"Curious about our upcoming features? Read our open Roadmap to find out more.","title":"Roadmap"},{"location":"/docs/versions.html","text":"","title":"Versions"},{"location":"/docs/versions.html#versions","text":"","title":"Versions"},{"location":"/docs/versions.html#current-v1-9-x-","text":"Documentation Github Release notes","title":"Current (v1.9.x)"},{"location":"/docs/versions.html#snapshot","text":"Documentation Github","title":"Snapshot"},{"location":"/docs/versions.html#previous-releases","text":"","title":"Previous releases"},{"location":"/docs/versions.html#v1-8-x","text":"Documentation Github Release notes","title":"v1.8.x"},{"location":"/docs/versions.html#v1-7-x","text":"Documentation Github Release notes","title":"v1.7.x"},{"location":"/docs/versions.html#v1-6-x","text":"Documentation Github Release notes","title":"v1.6.x"},{"location":"/docs/versions.html#v1-5-x","text":"Documentation Github Release notes","title":"v1.5.x"},{"location":"/docs/getting-started/index.html","text":"","title":"Getting Started"},{"location":"/docs/getting-started/index.html#getting-started","text":"The Nexus ecosystem is a data catalog with several technologies and techniques used to get insight and explore the data within the ecosystem.\nOne of the powerful ways to query data is through the Knowledge Graph built in Nexus. For that reason we encourage you to get familiar with these concepts reading Understanding Knowledge Graphs.\nThe next steps would be to either try Nexus using the Sandbox deployment or run Nexus locally.","title":"Getting Started"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html","text":"","title":"Understanding Knowledge Graphs"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#understanding-knowledge-graphs","text":"This section will help you understand knowledge graphs and related standards and technologies.","title":"Understanding Knowledge Graphs"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#what-is-a-knowledge-graph-","text":"A knowledge graph is a graph structure that links entities together. The links between the entities contain knowledge, based on how they connect to each other. For example, an apple can be connected to a tree (to show that it grows on trees) or in another case connected to a pie recipe (to show that it is part of a recipe). It is a formalized knowledge that enables programmatical reasoning about concepts in the world around us.\nIn this introduction to knowledge graphs the authors conclude that there is no clear definition of what a knowledge graph is. The term itself was coined in 2012 by Google as they introduced their Knowledge Graph as a mean of finding more relevant related search results by linking connected data on the web. As an idea, knowledge graphs are similar to semantic networks which date back to the 60’s and 70’s. The difference mainly lies in the size of the network, with knowledge graphs being larger. Knowledge graphs are also often generated in a rather manual way (data ingestion, data cleaning) instead of being generated and governed by a set of strict logical rules.\nFor a further introduction to knowledge graphs the “What is a knowledge graph” video from the CS520 Stanford course is a good resource.","title":"What is a knowledge graph?"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#the-graph-structure","text":"A knowledge graph consists of entities (nodes) that are connected to each other with relations (edges).\nThe entity is an object with properties that describe it. For example, a person, a company, an event, a thing… These properties can be called the entity’s “metadata”.\nThe relation describes how entities are connected. For example, being member of, visiting a place, belonging to a country…\nIt’s worth noting that having this graph data structure makes it easy to add new data into an existing graph by connecting new entities and new relations.","title":"The graph structure"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#describing-knowledge-in-a-graph","text":"After deciding what concept or idea that we wish to model in a knowledge graph, we need to collect the metadata that describes our entities. In order to make our data interoperable with other data and to allow us to import data from existing sources we should use a shared language when describing entities and relations. This is achieved using an ontology.\nThe ontology is a kind of dictionary containing types that can be used to describe entities. The metadata is created by picking a type from the ontology that matches what you wish to describe and defining the properties of the chosen type. E.g. a person can be described by a Person type. The name of the person can be encoded in a givenName property. This results in a set of data that can be processed both by humans and computers (as it is structured).\nFor example, in the image below, you can see that the entity Toy Story with a property Release date that has the value March 29th, 1995 and the Director property with the value John Lasseter.","title":"Describing knowledge in a graph"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#inferring-new-data-from-existing-relationships","text":"Since the entities are encoded using well-defined ontologies it allows us to draw conclusions based on the data we have and create new inferred data. This is done by giving the knowledge graph to an inference engine that can apply a set of logical rules to the data to derive new information. For example, if we have a knowledge graph containing persons and their birth year we could create an inference engine with rules that determine whether a person is a child or a retired person.\nIn the second example below, we have Toy Story, it has characters (using the relation called Character) and we have asserted the cast of characters. Having defined this, we can now define a rule that instructs the inference engine to create new relations Voice Cast whenever we find the Cast of a Character. This enables us to query the graph and directly get Toy Story’s voices cast without having to navigate through its Cast first.\nIn reality inferring knowledge is a complex topic. This video lecture shows some real-world examples of algorithms and rules for inference engines. E.g. reasoning about a persons creditworthiness based on what their home address is or trying to spot fake papers that have been submitted to a journal.","title":"Inferring new data from existing relationships"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#growing-a-knowledge-graph","text":"A graph is a flexible data structure, and an ontology can evolve as new data comes in. As a result, data can continually be added to help serve new use cases.\nThe illustration below shows how the initial graph representing Toy Story can be augmented to capture many other related domains such as:\nToy Story’s similar movies (e.g. Cars) Cities and associations related to motion picture production (e.g. Motion Picture Association of America) Places and people connected to animation movies (e.g. Steve Jobs)","title":"Growing a knowledge graph"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#encoding-knowledge-graphs-rdf-json-ld-and-other-standards","text":"","title":"Encoding knowledge graphs: RDF, JSON-LD, and other standards"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#rdf","text":"How do you encode knowledge graphs in a way that is interoperable with other applications and can be integrated with other data sources? You use some common formalism, a language, to describe your entities and relationships. For knowledge graphs this format is RDF. RDF (Resource Description Framework) is a data format where every piece of knowledge can be broken down into a structure (subject, predicate and object) called triple.\nRDF-formatted data can be queried using a query language such as SPARQL. This allows us to create applications that can process knowledge graphs, for example, to infer new data or get answers to questions we may have for the data that is stored in the knowledge graph.","title":"RDF"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#json-ld","text":"RDF is however only a part of what we need in order to encode a graph. We also need an implementation, a “concrete RDF syntax” that shows how to write down an RDF-formatted graph in a format that can be shared e.g. between applications. One syntax that can be used is JSON-LD. It stands for JSON for Linking Data.\nWe start by looking at a simple JSON example:\n[\n \t{\n \"title\":\"Floating island\",\n \"author\":\"Unknown\"\n \t},\n \t{\n \"title\":\"Apple balloon\",\n \"author\":\"Grant Achatz\"\n \t},\n \t{\n \"title\":\"Opera\",\n \"author\":\"Cyriaque Gavillon\"\n \t}\n\n ]\nAfter reading the above JSON we can ask ourselves what this data describes? If we don’t recognise the names we may think these perhaps are titles of books or movies. There is clearly a lack of context resulting in an ambiguity. JSON-LD allows to solve the ambiguity problem by enabling a semantic-preserving data encoding. This is achieved by adding an @context object where every key is associated with an identifier.\nIf we extend the JSON example with the payload below, then both a machine and a human can look up the context to find out that the JSON refers to recipes. I.e. Floating island, Apple balloon and Opera.\n[\n \t{\n \"@context\":\"https://json-ld.org/contexts/recipe.jsonld\",\n \"title\":\"Floating island\",\n \"author\":\"Unknown\"\n \t},\n \t{\n \"@context\":\"https://json-ld.org/contexts/recipe.jsonld\",\n \"title\":\"Apple balloon\",\n \"author\":\"Grant Achatz\"\n \t},\n \t{\n \"@context\":\"https://json-ld.org/contexts/recipe.jsonld\",\n \"title\":\"Opera\",\n \"author\":\"Cyriaque Gavillon\"\n \t }\n\n ]\nIn the JSON-LD playground you can try examples of JSON-LD.","title":"JSON-LD"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#using-schema-org-as-a-common-vocabulary","text":"Having defined a grammar (RDF) and a concrete syntax (JSON-LD) to encode knowledge graphs, there is one more thing to add in order to achieve interoperability with other knowledge graphs. We need a common vocabulary that defines which properties an entity should have - an ontology.\nOne such ontology that is commonly used is the Schema.org vocabulary. You can look up how different concepts are described by searching for them on the schema.org web page. For example, a video game entity is described by properties such as cheatCode or gamePlatform.","title":"Using Schema.org as a common vocabulary"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#reasoning-with-owl","text":"If you wish to reason about knowledge that is stored in a knowledge graph it is useful to have a language that can express properties and relations for the entities in the ontology (the dictionary) that your knowledge graph consists of. OWL (Web Ontology Language) is such a language. It is built on top of RDF (which can be seen as the grammar for OWL) and it is different from JSON-LD, since JSON-LD merely describes the syntax we use to encode our knowledge graph.\nWith OWL you can form axioms and expressions for the entities in your ontology. For example, expressing that a woman is a subclass of a person:\nSubClassOf( :Woman :Person )","title":"Reasoning with OWL"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#references-and-resources-","text":"The sections below contain references and resources that can be used to learn more about knowledge graphs.\nIntroduction: What Is a Knowledge Graph? in Knowledge Graphs: Methodology, Tools and Selected Use Cases Author: Fensel, Dieter et al Published: Springer International Publishing, 2020 DOI: 10.1007/978-3-030-37439-6_1 What are some knowledge graph inference algorithms? Published: 23.04.2020, Youtube.com What is the role of knowledge graphs in machine learning? - Challenges for explainable AI Published: 20.05.2020, Youtube.com Programming the Semantic Web Author: Segaran, Toby et al Published: O’Reilly Media, Inc., 2009 ISBN: 9780596153816 What is a knowledge graph? Published: 23.04.2020, Youtube.com RDF 1.1 primer Author: W3C Working Group Editors: Schreiber, G., Raimond, Y Published: 24.06.2014 JSON-LD 1.1 Editors: Kellogg G., Champin P-A., Longley D. Published: 16.07.2020 JSON LD - curated resources This is probably one of the best resources to start with if you are interested in JSON-LD. OWL 2 Web Ontology Language Document Overview (Second Edition) Author: W3C Working Group Published: 11.12.2012 Linked Data Patterns Authors: Leigh Dodds, Ian Davis Published: 31.05.2012 Validating RDF Data Authors: Jose Emilio labra Gayo, Eric Prud’hommeaux, Iovka Boneva, Dimitris Kontokostas Published: 2018","title":"References and resources:"},{"location":"/docs/getting-started/try-nexus.html","text":"","title":"Try Nexus with Neuroscience Datasets"},{"location":"/docs/getting-started/try-nexus.html#try-nexus-with-neuroscience-datasets","text":"Welcome to our Nexus tutorial! Nexus is an open-source data and metadata management suite. With Nexus, your data is catalogued and indexed as a knowledge graph, all interconnected.\nNexus consists of different products, such as:\nNexus Delta: our core data management platform Nexus Fusion: your web interface to access the metadata and data stored in the knowledge graph Nexus Forge: a Python library to work with knowledge graphs, and in particular Nexus Delta\nIn this tutorial, you’ll learn to interact with the knowledge graph through these different tools. Nexus can be used for any kind of data although this tutorial focuses on neuroscience data.\nThis tutorial is also part of the edX EPFL Simulation Neuroscience MOOC.\nIn Step 0, you’ll learn to setup your Python environment if you want to run the Jupyter notebooks locally. You can skip this step if you use Binder or Google Colaboratory (preferred).\nIn Step 1, you’ll learn about the Nexus Sandbox deployment, a dedicated environment for this tutorial. You’ll use Nexus Fusion to login and access your dedicated project instantiated in Nexus Delta.\nIn Step 2, you’ll learn to download and register data from the Allen Institute for Brain Science (AIBS). You’ll use Nexus Forge in a Jupyter notebook to interact with Nexus Delta.\nIn Step 3, you’ll learn to download and register data from multiple sources (AIBS and MouseLight). You’ll use Nexus Forge in a Jupyter notebook to interact with Nexus Delta.\nIn Step 4, you’ll learn to organize your data on the web for easier sharing and publishing. You’ll use Nexus Fusion on the Sandbox deployment.\nIn Step 5, you’ll learn to prepare your data in order to search for similar datasets across the data you have integrated in Blue Brain Nexus.\nLet’s go!\nYou can use the side menu to navigate between the page’s sections.","title":"Try Nexus with Neuroscience Datasets"},{"location":"/docs/getting-started/try-nexus.html#step-0-python-setup","text":"In this tutorial, you are encouraged to run Nexus Forge to interact with Nexus. Nexus Forge is a python library. We provide Jupyter Notebooks with examples.\nYou can either run the notebooks in Binder or Google Colaboratory, or run them locally.","title":"Step 0: Python Setup"},{"location":"/docs/getting-started/try-nexus.html#running-python-and-jupyter-locally","text":"Here is a step-by-step guide to setup your Python environment to work with Nexus Forge, Jupyter, and the Allen SDK.\nThis is not mandatory, feel free to use your preferred method. If you are using Binder or Google Colaboratory, you can skip this section.","title":"Running Python and Jupyter Locally"},{"location":"/docs/getting-started/try-nexus.html#install-miniconda","text":"Go to Miniconda and download and install the latest for your operating system.","title":"Install Miniconda"},{"location":"/docs/getting-started/try-nexus.html#create-an-environment","text":"Open the terminal and type:\nconda create -yn kgforge python=3.7","title":"Create an environment"},{"location":"/docs/getting-started/try-nexus.html#switch-to-the-environment","text":"In the terminal, type:\nconda activate kgforge","title":"Switch to the environment"},{"location":"/docs/getting-started/try-nexus.html#install-additional-packages","text":"To avoid any issues, install Jupyter in your environment.\npip install jupyter","title":"Install Additional Packages"},{"location":"/docs/getting-started/try-nexus.html#clone-the-nexus-repository","text":"The notebooks used for this tutorial are maintained in the Nexus GitHub repository under /docs/src/main/paradox/docs/getting-started/notebooks.\nTo clone the repository, you will need to install Git (if not already present on your system), then open the terminal, navigate to your preferred location, and type:\ngit clone https://github.com/BlueBrain/nexus.git","title":"Clone the Nexus Repository"},{"location":"/docs/getting-started/try-nexus.html#running-notebooks-in-binder-or-google-colaboratory","text":"","title":"Running Notebooks in Binder or Google Colaboratory"},{"location":"/docs/getting-started/try-nexus.html#step-1-nexus-setup","text":"We run the latest version of Nexus publicly for education. You can also use the instance in your organization (if any), or setup Nexus from scratch.","title":"Step 1: Nexus Setup"},{"location":"/docs/getting-started/try-nexus.html#1-1-using-the-sandbox","text":"The Sandbox is a deployment of Nexus for educational purposes.\nOnce on the Sandbox homepage, click on the “Connect” button. It will open a dropdown.\nAt the moment we only provide one identity provider (idP) in the sandbox environment - GitHub. Choose this option from the dropdown of the “Connect” button.\nYou will need an account on GitHub to be able to continue this tutorial.\nOnce logged in, you can get your token. The token is your secure, private, code that you will use in the rest of this tutorial to interact with Nexus.\nThe Sandbox environment automatically provisions a project for you so you don’t have to. Navigate to the Organizations page or click on the “Organizations” tab in the homepage, and you will see the list of organisations in Nexus. A project is contained in an organisation. The organisation where your project is created depends on your identity provider. If you logged in with GitHub for example, your project was created under the github-users organisation.\nNavigate to the correct organisation then search or scroll down to find your project (i.e. your username). You will need the names of the organisation and project for the next parts of the tutorial.","title":"1.1. Using the Sandbox"},{"location":"/docs/getting-started/try-nexus.html#1-2-running-your-own-instance-of-nexus","text":"We do not recommend to setup your own instance for this tutorial. If you are interested to install your own instance, check our guide.","title":"1.2. Running your Own Instance of Nexus"},{"location":"/docs/getting-started/try-nexus.html#step-2-download-and-register-data-from-a-single-source","text":"In this section, you will learn about metadata (and MINDS), provenance, and integrate data from the Allen Institute for Brain Science in Nexus.","title":"Step 2: Download and Register Data from a Single Source"},{"location":"/docs/getting-started/try-nexus.html#2-1-data-vs-metadata","text":"When we talk about data, we’re mostly talking about binary or text files. When we hear metadata, it means “data about the data”.\nIn neuroscience, you will have images of brain slices. You will have images of stained cells. You will find files of 3D-morphologies or electrophysiology recordings of the cell or neuron.\nThe brain is big, and the amount of data collected grows every second.\nAs a result, it quickly becomes extremely difficult for groups of scientists to manage, track, share, and work with this data.\nTo solve this growing pain, we can add metadata, or context, to the data collected. Specifically for neuroscience, we designed MINDS. MINDS is the Minimal Information about a Neuroscience DataSet.\nIn the diagram above, you can see that your data (which we will call Dataset from now on) has now additional properties:\nSubject: Species, age etc. of subject from which dataset was generated Brain Location: Brain region or 3D coordinates within a brain atlas Data Types: Type of the data stored in the dataset Contributions: The agent (scientists, organizations) to whom the dataset is attributed to Distribution: Direct link to the dataset binaries (downloadURL) or web page describing how to download them (accessURL) License: Dataset license (e.g. CC BY 4.0)\nYou can check the details of MINDS by visiting Neuroshapes. Neuroshapes provide open schemas for F.A.I.R. neuroscience data.","title":"2.1. Data vs Metadata"},{"location":"/docs/getting-started/try-nexus.html#2-2-provenance","text":"You have just seen how we can add metadata to our datasets to give more context. This allows scientists to find their data as well as their peers’ more easily.\nAnother important factor to consider is where the data comes from, i.e. what experiment generated it, who conducted the experiment, and what data was used to derive the new data.\nLuckily for us, some good folks have defined a provenance data model that we can use.\nThe diagram above is the basic representation of provenance. Our Dataset is an extension of the Entity. The Entity itself was generated by an Activity, which itself used (or not) another Entity. Finally, the Activity is associated with an Agent (e.g. a Person or Institution).\nThere are ways to add more details, for example with “qualified” relations. You can read more about it in the W3C PROV specification.","title":"2.2. Provenance"},{"location":"/docs/getting-started/try-nexus.html#2-3-allen-institute-for-brain-science-data","text":"The goal of the Allen Institute for Brain Science (AIBS) is to accelerate the understanding of how the brain works.\nThe AIBS has its data (mouse and human brains) available online for free. For the purpose of this tutorial, we’re mostly interested in Cells. Check out their data portal.\nYou can for example access a cell’s morphology page and browse and download the morphology data. Or you can head to the cell’s electrophysiology page to do the same.\nYou can either download and get the required information directly from their portal, or use the Allen SDK (Software Development Kit) to do so from your Python script (as shown in the example notebooks).","title":"2.3. Allen Institute for Brain Science Data"},{"location":"/docs/getting-started/try-nexus.html#2-5-mappers","text":"In Nexus Forge, a mapper will map, transform, and format fields from one source into another. In the case of Nexus, it will map the fields from a data source such as the AIBS to the formats supported by Nexus (the JSON payloads or resources).\nMore specifically, let’s imagine that we have a data source x that contains the following fields:\n{\n \"id\": 123,\n \"givenName\": \"john\",\n \"familyName\": \"doe\",\n \"gender\": \"male\"\n}\nWe want to map these to the fields id, name, and gender. This is how it could look like:\n{\n \"id\" : forge.format(\"identifier\", x.id)\n \"name\" : f\"{x.givenName}/{x.familyName}\",\n \"sex\" : forge.resolve(text=x.gender, scope=\"ontologies\", target=\"terms\")\n}\nWe see that the original id will be formatted to a type identifier, that the givenName and familyName were concatenated, and finally that for the gender, we will check to see if the value exists in an ontology (and is thus already standardized).\nRead more about mapping with Forge.\nIn the code available, we will integrate data from two sources: the AIBS and MouseLight (see Step 3). We will provide mappers for both data sources. You can check the mappers directly on GitHub. There are two mappers for the AIBS, one for neuron morphologies and another for electrophysiology data. For MouseLight, there’s only one mapper, as both morphologies and traces are in the same data source.","title":"2.5. Mappers"},{"location":"/docs/getting-started/try-nexus.html#2-6-running-the-notebook","text":"Github Google Colab Binder\nTo run the notebook locally, open your terminal, clone the Nexus repository, go to the notebook directory, and run Jupyter:\ngit clone https://github.com/BlueBrain/nexus.git\ncd nexus\ncd docs/src/main/paradox/docs/getting-started/notebooks\njupyter notebook one_cell_minds.ipynb","title":"2.6. Running the Notebook"},{"location":"/docs/getting-started/try-nexus.html#2-7-check-resources-in-the-sandbox","text":"Once you have registered resources through Nexus Forge (in the notebook), you can check that they are effectively present in Nexus. You now have two options to do so.","title":"2.7. Check Resources in the Sandbox"},{"location":"/docs/getting-started/try-nexus.html#2-7-1-viewing-resources-across-all-projects","text":"Navigate to the Sandbox landing page. Make sure you are logged in. You should be able to see all the data that was created through the Jupyter notebook under the My data section. Here you can see all the data that has been indexed across all projects you have the right to read from. In the case of this tutorial, you are likely to have access to your own project only.\nYou can also check resources of a particular type by clicking on the corresponding card for that type on the landing page. These cards allow you to search by different datasets. For example if you click on the card labeled “MINDS” on the screen shown in the screenshot above, you should see the following results\nPlease note that each instance of Nexus will have its own Search configuration, the BBP Sandbox has been configured to show NeuronMorphology and Trace datasets for the purpose of this tutorial.\nEach of the rows of this table represent Knowledge Graph entities that we have decided to expose, including some specific metadata describing them (the columns). You can now click on any row in this table to open the corresponding dataset and look into its details.\nYou can find more documentation on how to use Search here.","title":"2.7.1 Viewing resources across all projects"},{"location":"/docs/getting-started/try-nexus.html#2-7-2-by-browsing-your-personal-project","text":"Navigate to the Sandbox then to the correct organisation and project. In the project page, you will have the list of all resources present in your project (Default Query), including the ones that you just integrated. Depending on how you ran the notebook, you should find at least one NeuronMorphology and one Trace resource.","title":"2.7.2 By browsing your personal Project"},{"location":"/docs/getting-started/try-nexus.html#step-3-download-and-register-data-from-multiple-sources","text":"In this section, you will integrate additional data from MouseLight and the Allen Institute for Brain Science.","title":"Step 3: Download and Register Data from Multiple Sources"},{"location":"/docs/getting-started/try-nexus.html#3-1-mouselight-data","text":"The Janelia Research Campus makes MouseLight available to the scientific community. MouseLight generates complete morphological reconstructions of individual neurons from datasets of whole mouse brains imaged at sub-micron resolution.\nYou can access the MouseLight data directly in the browser. You can also access it programmatically through different endpoints, such as GraphQL: http://ml-neuronbrowser.janelia.org/graphql/.\nThe example notebooks will use these endpoints to collect and download the datasets and their metadata.","title":"3.1. MouseLight Data"},{"location":"/docs/getting-started/try-nexus.html#3-2-running-the-notebook","text":"Github Google Colab Binder\nTo run the notebook locally, open your terminal, clone the Nexus repository, go to the notebook directory, and run Jupyter:\ngit clone https://github.com/BlueBrain/nexus.git\ncd nexus\ncd docs/src/main/paradox/docs/getting-started/notebooks\njupyter notebook dataset_from_different_sources.ipynb","title":"3.2. Running the Notebook"},{"location":"/docs/getting-started/try-nexus.html#3-3-check-resources-in-the-sandbox","text":"Go back to section 2.7to learn how to check resources in the Sandbox.","title":"3.3. Check Resources in the Sandbox"},{"location":"/docs/getting-started/try-nexus.html#step-4-organize-and-visualize-cells-in-nexus-fusion","text":"Nexus Fusion allows you to browse the data stored in Nexus. Our extensible architecture also enables the development of visualization plugins.","title":"Step 4: Organize and Visualize Cells in Nexus Fusion"},{"location":"/docs/getting-started/try-nexus.html#4-1-sparql-and-rdf","text":"SPARQL is an RDF query language. In other words, it’s a way to request a subset of data from a database that conforms to the RDF (Resource Description Framework) model.\nWhen writing data to Nexus, the different payloads are stored in a long table, each row representing a resource. The data is then synced to our RDF database and thus converted to a graph. When reading the data, you can query this graph with SPARQL.\nLet us take a JSON-LD example payload:\n{\n \"@type\": [\"http://schema.org/Dataset\", \"http://www.w3.org/ns/prov#Entity\"],\n \"http://schema.org/description\": \"My first dataset\",\n \"http://schema.org/name\": \"Dataset\",\n \"http://schema.org/distribution\": [\n {\n \"@type\": \"http://schema.org/DataDownload\",\n \"http://schema.org/contentUrl\": {\n \"@id\": \"http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"http://schema.org/name\": \"mesh-gradient.png\"\n }\n ]\n}\nYou can copy and paste this JSON-LD payload in the JSON-LD Playground and see the expanded results.\nHere’s what it would look like as an RDF graph:\nThe graph is composed of triples of the form Subject - predicate -> Object. In the example above, _:b0 would be a subject (in our case _:b0 is just an arbitrary ID for the payload), is a predicate, and Dataset an object.\nIf we want to query this graph and return only the name and description of Dataset data types, we can write a simple SPARQL query:\nSELECT ?name ?description\nWHERE {\n ?resource ;\n ?name ;\n ?description .\n}\nThis would result in the following table:\nname description Dataset My first dataset\nLet’s decompose this query. The SELECT statement lists all the fields (i.e. variables) that we want to display. The WHERE clause shows how to get to these fields: which graph paths (or traversals) do we need to do to get to that field. In the WHERE clause, semi-colons ; indicate that we are still talking about the same Subject but with different predicates. A full stop . indicates that the statement is finished, i.e. that we have finished talking about a specific Subject. A WHERE clause can have multiple statements. If an Object in the statement has a value, it has to match, otherwise it won’t give any results. If the Object is prefixed by a question mark ? it becomes a variable. Variables can have any names.\nIf not using semi-colons, we could have written the query as three separate statements:\nSELECT ?name ?description\nWHERE {\n ?resource .\n ?resource ?name .\n ?resource ?description .\n}\nLet’s imagine that we now want to also get the contentUrl, the query can be adapted to:\nSELECT ?name ?description ?contentUrl\nWHERE {\n ?resource ;\n ?name ;\n ?description ;\n ?distribution .\n ?distribution ?contentUrl .\n}\nThis would result in the following table:\nname description contentURL Dataset My first dataset http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\nIf there were more resources that matched the same graph patterns, the query would have returned them as well.","title":"4.1. SPARQL and RDF"},{"location":"/docs/getting-started/try-nexus.html#4-1-1-optional-improving-json-ld-id-context-and-more","text":"The JSON-LD payload above is quite verbose. Let’s have a look at the different ways to improve it.\nThe first thing to notice is that if I want to reference my dataset, I don’t have an identifier. The node in the graph is a blank node _:b0. I can easily add an ID like this:\n{\n \"@id\": \"http://example.com/my_gradient_dataset\",\n \"@type\": [\"http://schema.org/Dataset\", \"http://www.w3.org/ns/prov#Entity\"],\n \"http://schema.org/description\": \"My first dataset\",\n \"http://schema.org/name\": \"Dataset\",\n \"http://schema.org/distribution\": [\n {\n \"@type\": \"http://schema.org/DataDownload\",\n \"http://schema.org/contentUrl\": {\n \"@id\": \"http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"http://schema.org/name\": \"mesh-gradient.png\"\n }\n ]\n}\nInstead of _:b0, the node will be identified by http://example.com/my_gradient_dataset. The @id uniquely identifies node objects.\nCan we now make the JSON-LD less verbose and easier to read? Yes, by defining a context. A context defines the short-hand names used in the JSON-LD payload. In particular, a context can contain a vocab.\n{\n \"@context\": {\n \"@vocab\": \"http://schema.org/\"\n },\n \"@id\": \"http://example.com/my_gradient_dataset\",\n \"@type\": [\"Dataset\", \"http://www.w3.org/ns/prov#Entity\"],\n \"description\": \"My first dataset\",\n \"name\": \"Dataset\",\n \"distribution\": [\n {\n \"@type\": \"DataDownload\",\n \"contentUrl\": {\n \"@id\": \"http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"name\": \"mesh-gradient.png\"\n }\n ]\n}\nIf you copy the above snippet to the JSON-LD Playground and look at the expanded form, you will notice that the properties all expand with the http://schema.org/ prefix. Don’t hesitate to do the same for the ones below. Play a little with the payload to see what happens to the expanded form.\nBut what if we want to shorten specific values? We can add them in the context as well.\n{\n \"@context\": {\n \"@vocab\": \"http://schema.org/\",\n \"Entity\": \"http://www.w3.org/ns/prov#Entity\"\n },\n \"@id\": \"http://example.com/my_gradient_dataset\",\n \"@type\": [\"Dataset\", \"Entity\"],\n \"description\": \"My first dataset\",\n \"name\": \"Dataset\",\n \"distribution\": [\n {\n \"@type\": \"DataDownload\",\n \"contentUrl\": {\n \"@id\": \"http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"name\": \"mesh-gradient.png\"\n }\n ]\n}\nFinally, the last improvement would be to shorten our IDs. For this we can use a base.\n{\n \"@context\": {\n \"@base\": \"http://example.com/\",\n \"@vocab\": \"http://schema.org/\",\n \"Entity\": \"http://www.w3.org/ns/prov#Entity\"\n },\n \"@id\": \"my_gradient_dataset\",\n \"@type\": [\"Dataset\", \"Entity\"],\n \"description\": \"My first dataset\",\n \"name\": \"Dataset\",\n \"distribution\": [\n {\n \"@type\": \"DataDownload\",\n \"contentUrl\": {\n \"@id\": \"cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"name\": \"mesh-gradient.png\"\n }\n ]\n}\nBy default, in Nexus, the base (resp. vocab) defaults to your project, e.g. https://bbp.epfl.ch/nexus/v1/resources/github-users/adulbrich/_/ (resp. https://bbp.epfl.ch/nexus/v1/vocabs/github-users/adulbrich/).\nThe context can also point to another resource so that it is defined once and can be re-used in multiple resources. In Nexus, a default context for the Nexus-specific metadata is defined.\nThere’s much more to the JSON-LD syntax. Don’t hesitate to have a look for a more detailed explanation.","title":"4.1.1. (Optional) Improving JSON-LD: ID, Context and More"},{"location":"/docs/getting-started/try-nexus.html#4-1-2-optional-improving-sparql-prefixes","text":"The SPARQL query above was quite verbose in the sense that we had to write the full URI for predicates, similarly to the full properties URIs in the JSON payload.\nThere is a way to shorten these with PREFIX statements. Prefixes are similar to the base and vocabs for JSON-LD in their use.\nPREFIX rdf: \nPREFIX schema: \nSELECT ?name ?description ?contentUrl\nWHERE {\n ?resource rdf:type schema:Dataset ;\n schema:name ?name ;\n schema:description ?description ;\n schema:distribution ?distribution .\n ?distribution schema:contentUrl ?contentUrl .\n}\nThe new query will yield the exact same results as the one defined earlier, but is much more readable. By defining prefixes, we can replace long URIs by the prefix and the actual property. This means that for example becomes schema:distribution.\nYou will often see that instead of rdf:type (the shortened version of ), people use a. This is an RDF specific keyword to point to types. In the example above, the line would then be ?resource a schema:Dataset.\nYou can learn more about SPARQL in the official documentation.","title":"4.1.2. (Optional) Improving SPARQL: Prefixes"},{"location":"/docs/getting-started/try-nexus.html#4-2-project-and-resource-views","text":"As you saw in the example above, we can use SPARQL to query the cells in our Nexus project.\nLet’s start by accessing your Nexus instance or the Sandbox. Go to your project by clicking on the “Projects” card and searching for your project.\nIn the Sandbox, the organization corresponds to the identity provider used, and the project to your username. For example, if you used GitHub, the organization will be github-users and your project will be your GitHub username.\nIn the Project view, you will have the list of all resources that you’ve registered within your project. You can filter by type or search for a specific term in the name, label, or description.\nClick on a resource to open the Resource view.\nDepending on the resource data type, you might see one or more “plugins”. Plugins are components that will show up for specific resources or properties. For example, if you registered a neuron morphology and the data is properly attached through the distribution, you will be able to see a 3D morphology browser plugin.\nMore importantly, you will find the Advanced view plugin at the bottom of the view. Expand it and you will see the actual resource payload stored by Nexus, and navigate the graph through links, or visualize the surrounding graph in the graph tab.\nHere’s an example of the JSON payload of the neuron morphology resource previously registered (context left out for clarity):\n{\n \"@context\": {...},\n \"@id\": \"https://bbp.epfl.ch/neurosciencegraph/data/neuronmorphologies/491ea474-34f1-4143-8e1d-9f077602d36e\",\n \"@type\": [\n \"Dataset\",\n \"NeuronMorphology\"\n ],\n \"apicalDendrite\": \"spiny\",\n \"brainLocation\": {\n \"@type\": \"BrainLocation\",\n \"brainRegion\": {\n \"@id\": \"mba:778\",\n \"label\": \"VISp5\"\n },\n \"coordinatesInBrainAtlas\": {\n \"valueX\": 8881,\n \"valueY\": 953.839501299405,\n \"valueZ\": 7768.22695782726\n },\n \"hemisphere\": \"right\",\n \"layer\": \"5\"\n },\n \"cell_reporter_status\": \"positive\",\n \"contribution\": {\n \"@type\": \"Contribution\",\n \"agent\": {\n \"@id\": \"https://www.grid.ac/institutes/grid.417881.3\",\n \"@type\": \"Organization\",\n \"label\": \"Allen Institute for Brain Science\"\n }\n },\n \"csl__normalized_depth\": 0.478343598387418,\n \"distribution\": {\n \"@type\": \"DataDownload\",\n \"atLocation\": {\n \"@type\": \"Location\",\n \"store\": {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\"\n }\n },\n \"contentSize\": {\n \"unitCode\": \"bytes\",\n \"value\": 83865\n },\n \"contentUrl\": \"https://sandbox.bluebrainnexus.io/v1/files/github-users/adulbrich/30704eaf-7c87-4d74-8d41-50f673961580\",\n \"digest\": {\n \"algorithm\": \"SHA-256\",\n \"value\": \"833a94e1b6de4b4bc5beef4ccc75f84cfec9d5e5f40752d7cefb0ed1f545bbda\"\n },\n \"encodingFormat\": \"application/swc\",\n \"name\": \"reconstruction.swc\"\n },\n \"generation\": {\n \"@type\": \"Generation\",\n \"activity\": {\n \"@type\": \"NeuronMorphologyReconstruction\",\n \"hadProtocol\": {}\n }\n },\n \"identifier\": 485909730,\n \"license\": {\n \"@id\": \"https://alleninstitute.org/legal/terms-use/\",\n \"@type\": \"License\"\n },\n \"name\": \"Cux2-CreERT2;Ai14-205530.03.02.01\",\n \"nr__average_contraction\": 0.891127894162828,\n \"nr__average_parent_daughter_ratio\": 0.844376941289302,\n \"nr__max_euclidean_distance\": 446.97383394351,\n \"nr__number_bifurcations\": 18,\n \"nr__number_stems\": 7,\n \"nr__reconstruction_type\": \"dendrite-only\",\n \"objectOfStudy\": {\n \"@id\": \"http://bbp.epfl.ch/neurosciencegraph/taxonomies/objectsofstudy/singlecells\",\n \"@type\": \"ObjectOfStudy\",\n \"label\": \"Single Cell\"\n },\n \"subject\": {\n \"@type\": \"Subject\",\n \"age\": {\n \"period\": \"Post-natal\"\n },\n \"identifier\": 485250100,\n \"name\": \"Cux2-CreERT2;Ai14-205530\",\n \"sex\": {},\n \"species\": {\n \"label\": \"Mus musculus\"\n },\n \"strain\": {\n \"label\": \"Cux2-CreERT2\"\n }\n },\n \"tag__apical\": \"intact\"\n}","title":"4.2. Project and Resource Views"},{"location":"/docs/getting-started/try-nexus.html#4-3-query-neuroscience-data","text":"Going back to the project view, you will notice a tab named ‘Query’. Let’s click on it and start experimenting. On clicking on the ‘Query tab’, you will see a sparql query editor.\nWe want to list the morphologies that we previously registered in our project. Let’s write some SPARQL to retrieve it.\nPREFIX nxv: \nPREFIX nsg: \nPREFIX schema: \nPREFIX prov: \nPREFIX rdf: \nPREFIX rdfs: \nPREFIX skos: \nSELECT DISTINCT ?self ?name ?brainRegion ?brainRegionLayer ?subjectSpecies ?subjectStrain ?registered_by ?registeredAt\nWHERE {\n?entity nxv:self ?self ;\n a nsg:NeuronMorphology ;\n schema:name ?name ;\n nxv:createdBy ?registered_by ;\n nxv:createdAt ?registeredAt ;\n nxv:deprecated false ;\n nsg:brainLocation / nsg:brainRegion / rdfs:label ?brainRegion ;\n nsg:brainLocation / nsg:layer ?brainRegionLayer ;\n nsg:subject / nsg:species / rdfs:label ?subjectSpecies ;\n nsg:subject / nsg:strain / rdfs:label ?subjectStrain.\n}\nLIMIT 1000\nWe list a couple more prefixes in this query. Even though we don’t use most of them, they are common ones.\nWe introduce a new notation to traverse the graph: slashes /. This helps us writing more succinct queries by not referencing a temporary variable every time we want to traverse a node.\nFinally, you will notice the self. This is an internal Nexus property (in addition to createdBy and createdAt, as illustrated by the use of the nxv prefix) that points to the actual source of the resource. We will need the self to open the resource view from a Studio (see next section).\nNote that we have have a LIMIT 1000 clause at the end. This will limit the number of returned results in case there are more than 1000.\nHere’s the result of the above query:\nself name brainRegion brainRegionLayer subjectSpecies subjectStrain registered_by registeredAt https://sandbox.bluebrainnexus.io/v1/resources/github-users/adulbrich/_/... Cux2-CreERT2;Ai14-205530.03.02.01 VISp5 5 Mus musculus Cux2-CreERT2 https://sandbox.bluebrainnexus.io/v1/realms/github/users/adulbrich 2021-07-27T18:58:45.238Z","title":"4.3. Query Neuroscience Data"},{"location":"/docs/getting-started/try-nexus.html#4-4-create-a-studio","text":"Go back to your project view. Click on the ‘Studios’ tab. It will open in a new window.\nYou will land on:\nOn this page you can create a new studio. A Studio is a dedicated web page in your project that you can organise into pages (workspaces, as horizontal tabs at the top) and sections (dashboards, as vertical tabs on the left side) and list your data in a logical way. The tables are powered by SPARQL queries and the data present in your project.\nStart by creating a Workspace. To create a workspace, click the Workspace button and in the menu that appears click Add Workspace. You will be presented with a dialog requesting the label of the workspace and optionally a description. Enter a label of your choosing and click Save.\nNext, create a Dashboard. Click the Dashboard button and choose Add from the pop-up menu. In the Dashboard creation dialog, specify the default Sparql Index view and specify the SPARQL query above. The ‘Configure Columns’ button will list the columns to be returned by the query and support specifying options on the columns such as enabling searching or sorting.\nBecause we are using the self, clicking on a row of the newly created table will open the resource view.\nIt’s your turn now to add a dashboard to list your Neuron Electrophysiology data. Create the dashboard and modify the SPARQL query above.\nCongratulations! You’ve created your very first studio, which completes this tutorial step.","title":"4.4. Create a Studio"},{"location":"/docs/getting-started/try-nexus.html#step-5-finding-similar-datasets-using-recommendations","text":"In this section, you will first learn about recommendation systems, then reuse the data you have integrated in Nexus in previous steps and build a recommendation system to find datasets that are similar to a chosen neuron morphology or electrophysiology recording.","title":"Step 5: Finding Similar Datasets using Recommendations"},{"location":"/docs/getting-started/try-nexus.html#5-1-introduction-to-recommendations","text":"Recommendation systems are widely used in many domains, for example, streaming services provide recommendations for movies or songs, online stores generate product recommendations, etc. Such systems allow selecting the most relevant entities from the vast space of all the available choices. This selection can be based on different criteria, for example, various features of target entities (movie genre, country, cast), user profiles, and interactions with the entities of interest (for example, previously watched movies).\nIn a similar way, there is a need for recommendation systems that help us to explore our Knowledge Graphs when they become overwhelmingly large. Given a node in a Knowledge Graph (corresponding to, for example, a neuron morphology dataset), we may want to recommend a set of most similar nodes according to some complex criteria.\nOne of the most common techniques for building a recommendation system is based on entity embedding that represents each entity with a numerical vector. Given a starting entity (a neuron morphology dataset), the task of finding similar entities can be reduced to a simple search for the nearest neighbors in the vector space of our embedding.\nOne of the first modern approaches to entity embedding reflecting their semantic similarity was developed by the Natural Language Processing (NLP) community and is called word2vec. To generate vector representations of words, it trains a neural network on a large text corpus from which word contexts are extracted. The resulting vector representation is able to capture the semantic similarity between different words.\nSimilarity to word2vec, node2vec builds vector representations of graph nodes. To generate ‘context’ for different nodes, this approach performs random walks and explores the neighborhood of a given node.\nFinally, another derivative of word2vec, adapted specifically for building node embedding on Knowledge Graphs, is called rdf2vec.\nIn this tutorial, we use rdf2vec in order to build a toy recommendation system for exploring similar neuron morphologies and electrophysiology recordings.\nFurther reads on graph embedding:\nGraph embedding techniques, applications, and performance: A survey Knowledge Graph Embedding: A Survey of Approaches and Applications","title":"5.1. Introduction to Recommendations"},{"location":"/docs/getting-started/try-nexus.html#5-2-running-the-notebook","text":"Github Google Colab Binder\nTo run the notebook locally, open your terminal, clone the Nexus repository, go to the notebook directory, and run Jupyter:\ngit clone https://github.com/BlueBrain/nexus.git\ncd nexus\ncd docs/src/main/paradox/docs/getting-started/notebooks\nNote: You will need gcc installed locally to run the following notebook.\njupyter notebook MOOC_Content_based_Recommender_System_using_Blue_Brain_Nexus.ipynb\nWell done! You have now completed the last part of this tutorial. To learn more, scroll down or navigate to our documentation, or start contributing to our Github repositories.\nIf you have reached this tutorial via the Simulation Neuroscience MOOC, you can now head back to the edX platform and complete this week assignment.","title":"5.2. Running the Notebook"},{"location":"/docs/getting-started/try-nexus.html#learn-more","text":"","title":"Learn More"},{"location":"/docs/getting-started/try-nexus.html#another-tutorial-with-the-movielens-dataset","text":"Nexus can be used to manage more than neuroscience data. If you want to try it, head over to our MovieLens Tutorial!","title":"Another Tutorial with the MovieLens Dataset"},{"location":"/docs/getting-started/try-nexus-movielens.html","text":"","title":"Try Nexus with the MovieLens Dataset"},{"location":"/docs/getting-started/try-nexus-movielens.html#try-nexus-with-the-movielens-dataset","text":"In this tutorial, you will use the core features of the Nexus ecosystem through our sandbox. This requires minimal technical knowledge but the ability to install a Python library and run a jupyter notebook.\nIn the first step, you’ll learn:\nto login into our Nexus Sandbox, create an organization and project, get your personal token.\nIn the second step, you’ll learn:\ninstall Nexus Forge, configure a Knowledge Graph forge, transform data, load the transformed data into the project, search for data using a SPARQL query.\nIn the third step, you’ll learn:\ncreate a Studio in Nexus Fusion, visualize and filter loaded data.\nFinally, check our Learn More section for more advanced tutorials based on the same datasets.","title":"Try Nexus with the MovieLens Dataset"},{"location":"/docs/getting-started/try-nexus-movielens.html#configuring-your-project-in-nexus-fusion","text":"The Nexus Sandbox is a deployment of Nexus Delta and Fusion publicly available to anybody. Please note that you should not store any sensitive data in this environment. Also, we do not offer guaranty as to how long the data will be kept, this is only for learning and testing purposes.\nNexus Fusion is the web interface that you will use in order to interact with Nexus Delta (the web services that manages the underlying knowledge graph).\nPlease bear in mind that the data stored in the Nexus Sandbox is being purged at regular intervals. We recommend you do not store any sensitive data in this environment since it is accessible to many other users.\nThe first step is to login, by clicking in the upper right corner of the screen. You can login with your Github credentials.\nThe Sandbox environment automatically provisions a project for you so you don’t have to. From the landing page, click on the “Organizations” card and you will see the list of organisations in Nexus. A project is contained in an organisation. The organisation where your project is created depends on your identity provider. If you logged in with GitHub for example, your project was created under the github-users organisation.\nNow open the github-users organisation and find your own project, which is named after your login. Once the project is created, you’ll land on the project view. There is no resources at first. Wait for it. You will quickly see that the project has finished indexing (top right corner).\nWhich means that the system has created default indices and storage for you.\nWe’re all set! We now have a project to host our resources and datasets. Let’s move on to the second part of this tutorial.","title":"Configuring your Project in Nexus Fusion"},{"location":"/docs/getting-started/try-nexus-movielens.html#working-with-data-in-nexus-forge","text":"We’ll load the MovieLens dataset into the created project within Nexus Delta using the python framework Nexus Forge.\nA jupyter notebook is available for this part of the tutorial and can be spawn easily using Google Colab, binder, or locally:\nGoogle Colab binder Github\nFor local execution, Nexus Forge can be installed using these instructions. Make sure that the jupyter notebook|lab is launched in the same virtual environment where Nexus Forge is installed. Alternatively, set up a specialized kernel.\nIf you want to try some other examples of Nexus Forge, you can use these notebooks.\nThe next step is to use this query to create a Studio view in Nexus Fusion.","title":"Working with Data in Nexus Forge"},{"location":"/docs/getting-started/try-nexus-movielens.html#exploring-the-graph-in-nexus-fusion","text":"Login the Sandbox and navigate your previously created project.\nClick on the studio tab.\nIn a new browser tab, you will see a list of all studios you have access to. Click on Create Studio.\nGive a name to your Studio and click Save.\nHere’s your empty Studio. Click the + icon to Add Workspace.\nGive a name to your Workspace and click Save.\nYou now have one Workspace configured. Click the + icon to Add Dashboard..\nIn order to query the graph in a Studio Dashboard, a small modification of the previous query is necessary. You can find more information about it in the Studio docs.\nPREFIX vocab: \nPREFIX nxv: \nSELECT DISTINCT ?self ?title\nWHERE {\n?id nxv:self ?self ;\n nxv:deprecated false ;\n vocab:title ?title ;\n ^vocab:movieId / vocab:tag \"thought-provoking\" .\n}\nLIMIT 20\nChoose a name for your Dashboard, copy the query. For the “View” select https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex from the dropdown. Click on Configure Columns button to see a preview of all the columns the dashboard will have. Now click Save.\nAnd there are the results:\nGood job! You just finished this introductory course to Nexus using our Sandbox. You can now install Nexus locally or continue with the tutorials below.","title":"Exploring the Graph in Nexus Fusion"},{"location":"/docs/getting-started/try-nexus-movielens.html#learn-more","text":"","title":"Learn More"},{"location":"/docs/getting-started/try-nexus-movielens.html#querying-knowledge-graph-using-sparql","text":"This tutorial introduces the basics of SPARQL, a query language for querying RDF based knowledge graph. It also demonstrates how to query a Nexus SparqlView.\nYou will build queries to explore and navigate a knowledge graph using SPARQL and Nexus.\nYou will learn:\nthe basics of the SPARQL query language, how to connect to and query a SparqlView in Nexus.\nYou will need Python 3.5 or higher with support for Jupyter notebook.\nThis tutorial code is available on:\nGithub Google Colab","title":"Querying knowledge graph using SPARQL"},{"location":"/docs/getting-started/try-nexus-movielens.html#querying-a-knowledge-graph-using-elasticsearch","text":"The goal of this notebook is to learn how to connect to an Elasticsearch view and run queries against it.\nIt is not a tutorial about the Elasticsearch DSL language for which many well written learning resources are available.\nYou will build a simple python client to connect to a Nexus ElasticSearchView and query a knowledge graph using Elasticsearch DSL.\nYou will learn how to connect to and query a ElasticSearchView in Nexus.\nYou will need Python 3.5 or higher with support for Jupyter notebook.\nThe tutorial code is available on:\nGithub Google Colab","title":"Querying a Knowledge Graph using Elasticsearch"},{"location":"/docs/getting-started/try-nexus-movielens.html#linking-data-on-the-web","text":"In this tutorial, we demonstrate how to consume structured data published on the web according to the Linked data principles to extend and enrich a knowledge graph.\nYou will build a simple pipeline to query entities managed within Blue Brain Nexus, connect them with entities available on the web as structured data and extend and enrich their metadata.\nYou will learn:\nan understanding of linked data principles, how to query data stored in a Nexus SparqlView, how to query structured data on the web, how to extend the metadata of entities managed within Blue Brain Nexus with external structured data on the web: we target Wikidata as an example, how to update entities within Blue Brain Nexus using the SDK and enrich their metadata.\nYou will need Python 3.6 or higher with support for Jupyter notebook.\nThis tutorial code is available on:\nGithub Google Colab","title":"Linking data on the web"},{"location":"/docs/getting-started/running-nexus/index.html","text":"","title":"Running Nexus"},{"location":"/docs/getting-started/running-nexus/index.html#running-nexus","text":"If you wish to quickly try out Nexus, we provide a public sandbox. For a more in-depth test-drive of Nexus on your machine, we recommend the Docker Compose approach. For a production deployment on your in-house or cloud infrastructure, please refer to our deployment guide.","title":"Running Nexus"},{"location":"/docs/getting-started/running-nexus/index.html#using-the-public-sandbox","text":"A public instance of Nexus is running at https://sandbox.bluebrainnexus.io. You can log in with a GitHub account. It’s provided for evaluation purposes only, without any guarantees.\nThe API root is https://sandbox.bluebrainnexus.io/v1.\nNote Do not ingest any proprietary or sensitive data. The environment will be wiped regularly, your data and credentials can disappear anytime.","title":"Using the public sandbox"},{"location":"/docs/getting-started/running-nexus/index.html#run-nexus-locally-with-docker","text":"","title":"Run Nexus locally with Docker"},{"location":"/docs/getting-started/running-nexus/index.html#requirements","text":"","title":"Requirements"},{"location":"/docs/getting-started/running-nexus/index.html#docker","text":"Regardless of your OS, make sure to run a recent version of the Docker Engine. This was tested with version 20.10.23. The Docker Engine, along the Docker CLI, come with an installation of Docker Desktop. Visit the official Docker Desktop documentation for detailed installation steps.\nCommand :\ndocker --version\nExample :\n$ docker --version\nDocker version 20.10.23, build 7155243","title":"Docker"},{"location":"/docs/getting-started/running-nexus/index.html#memory-and-cpu-limits","text":"On macOS and Windows, Docker effectively runs containers inside a VM created by the system hypervisor. Nexus requires at least 2 CPUs and 8 GiB of memory in total. You can increase the limits in Docker settings in the menu Settings > Resources.\nFor a proper evaluation using Docker, we recommend allocating at least 16GiB of RAM to run the provided templates. Feel free to tweak memory limits in order to fit your hardware constraints. At the cost of a slower startup and a decreased overall performance, you should be able to go as low as:\nService Memory [MiB] PostgreSQL 512 Elasticsearch 512 Blazegraph 1024 Delta 1024","title":"Memory and CPU limits"},{"location":"/docs/getting-started/running-nexus/index.html#docker-compose","text":"","title":"Docker Compose"},{"location":"/docs/getting-started/running-nexus/index.html#set-up","text":"Download the Docker Compose template into a directory of your choice, for instance ~/docker/nexus/. Download the Delta configuration to the same directory. Download the http proxy configuration to the same directory.","title":"Set-up"},{"location":"/docs/getting-started/running-nexus/index.html#starting-nexus","text":"From within the directory that contains the docker-compose.yaml you downloaded, run the containers using Docker Compose:\nCommand :\ndocker compose --project-name nexus --file=docker-compose.yaml up --detach\nExample :\n$ cd ~/docker/nexus\n$ docker compose --project-name nexus --file=docker-compose.yaml up --detach\n...\n⠿ Network nexus_default Created 0.0s\n⠿ Container nexus-elasticsearch-1 Started 1.2s\n⠿ Container nexus-postgres-1 Started 1.2s\n⠿ Container nexus-blazegraph-1 Started 1.1s\n⠿ Container nexus-delta-1 Started 1.6s\n⠿ Container nexus-web-1 Started 1.8s\n⠿ Container nexus-router-1 Started 2.1s\nWhen running the command for the first time, Docker will pull all necessary images from Dockerhub if they are not available locally. Once all containers are running, wait one or two minutes and you should be able to access Nexus locally, on the port 80:\nCommand :\ncurl http://localhost/v1/version\nExample :\n$ curl http://localhost/v1/version | jq\n{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/version.json\",\n \"delta\": \"1.9.0\",\n \"dependencies\": {\n \"blazegraph\": \"2.1.6-SNAPSHOT\",\n \"elasticsearch\": \"8.11.1\",\n \"postgres\": \"15.5\"\n },\n \"environment\": \"dev\",\n \"plugins\": {\n \"archive\": \"1.9.0\",\n \"blazegraph\": \"1.9.0\",\n \"composite-views\": \"1.9.0\",\n \"elasticsearch\": \"1.9.0\",\n \"storage\": \"1.9.0\"\n }\n}","title":"Starting Nexus"},{"location":"/docs/getting-started/running-nexus/index.html#using-fusion","text":"Fusion can be accessed by opening http://localhost in your web browser. You can start by creating an organization from the http://localhost/admin page.\nNote This setup runs the Nexus ecosystem without an identity provider, and the anonymous user is given all default permissions; do not publicly expose the endpoints of such a deployment.","title":"Using Fusion"},{"location":"/docs/getting-started/running-nexus/index.html#administration","text":"To list running services or access logs, please refer to the official Docker documentation.","title":"Administration"},{"location":"/docs/getting-started/running-nexus/index.html#stopping-nexus","text":"You can stop and delete the entire deployment with:\nCommand :\ndocker compose --project-name nexus down --volumes\nExample :\n$ docker compose --project-name nexus down --volumes\n[+] Running 7/7\n⠿ Container nexus-router-1 Removed 0.2s\n⠿ Container nexus-web-1 Removed 0.3s\n⠿ Container nexus-delta-1 Removed 0.5s\n⠿ Container nexus-postgres-1 Removed 0.3s\n⠿ Container nexus-blazegraph-1 Removed 10.3s\n⠿ Container nexus-elasticsearch-1 Removed 1.0s\n⠿ Network nexus_default Removed 0.1s\nNote As no data is persisted outside the containers, everything will be lost once you shut down the Nexus deployment. If you’d like help with creating persistent volumes, feel free to contact us on Github Discussions.","title":"Stopping Nexus"},{"location":"/docs/getting-started/running-nexus/index.html#endpoints","text":"The provided reverse proxy (the nginx image) exposes several endpoints:\nroot: Nexus Fusion v1: Nexus Delta elasticsearch: Elasticsearch endpoint blazegraph: Blazegraph web interface\nIf you’d like to customize the listening port or remove unnecessary endpoints, you can simply modify the nginx.conf file.","title":"Endpoints"},{"location":"/docs/getting-started/running-nexus/index.html#postgresql-partitioning","text":"Nexus Delta takes advantage of PostgreSQL’s Table Partitioning feature. This allows for improved query performance, and facilitates loading, deleting, or transferring data.\nThe public.scoped_events and public.scoped_states are partitioned by organization, which is itself partitioned by the projects it contains; this follows the natural hierarchy that can be found in Nexus Delta.\nNexus Delta takes care of handling the creation and deletion of the partitions.\nIf the created project is the first one of a given organization, both the organization partition and the project subpartition will be created. If the organization partition already exist, then only the project subpartition will be created upon project creation.\nThe naming scheme of the (sub)partitions is as follows:\n{table_name}_{MD5_org_hash} for organization partitions\n{table_name}_{MD5_project_hash} for project partition\nwhere\n{table_name} is either scoped_events or scoped_states {MD5_org_hash} is the MD5 hash of the organization name {MD5_project_has} is the MD5 hash of the project reference (i.e. has the form {org_name}/{project_name})\nMD5 hashing is used in order to guarantee a constant partition name length (PostgreSQL table names are limited to 63 character by default), as well as to avoid any special characters that might be allowed in project names but not in PostgreSQL table names (such as -).\nExample:\nYou create the organization called myorg, inside of which you create the myproject project. When the project is created, Nexus Delta will have created the following partitions:\nscoped_events_B665280652D01C4679777AFD9861170C, the partition of events from the myorg organization scoped_events_7922DA7049D5E38C83053EE145B27596, the subpartition of the events from the myorg/myproject project scoped_states_B665280652D01C4679777AFD9861170C, the partition of states from the myorg organization scoped_states_7922DA7049D5E38C83053EE145B27596, the subpartition of the states from the myorg/myproject project","title":"PostgreSQL partitioning"},{"location":"/docs/getting-started/running-nexus/index.html#advanced-subpartitioning","text":"While Nexus Delta provides table partitioning out-of-the-box, it is primarily addressing the case where the data is more or less uniformly spread out across multiple projects. If however there is one or more project that are very large, it is possible to add further subpartitions according to a custom rule. This custom subpartitioning must be decided on a case-by-case basis using your knowledge of the given project; the idea is to create uniform partitions of your project. Please refer to the PostgreSQL Table Partitioning documentation.","title":"Advanced subpartitioning"},{"location":"/docs/getting-started/running-nexus/index.html#on-premise-cloud-deployment","text":"There are several things to consider when preparing to deploy Nexus “on premise” because the setup depends a lot on the various usage profiles, but the most important categories would be:\nAvailability Latency & throughput Capacity Efficient use of hardware resources Backup and restore Monitoring & alerting\nEach of the Nexus services and “off the shelf” products can be deployed as a single instance or as a cluster (with one exception at this point being Blazegraph which doesn’t come with a clustering option). The advantages for deploying clusters are generally higher availability, capacity and throughput at the cost of higher latency, consistency and having to potentially deal with network instability.\nThe decision to go with single node deployments or clustered deployments can be revisited later on and mixed setups (some services single node while others clustered) are also possible.\nThe Nexus distribution is made up of Docker images which can be run on any host operating system and each of the “off the shelf” products that also offer Docker as a deployment option. We would generally recommend using a container orchestration solution like Kubernetes as it offers good management capabilities, discovery, load balancing and self-healing. They also accommodate changes in hardware allocations for the deployments, changes that can occur due to evolving usage patterns, software updates etc. Currently, the largest Nexus deployment is at EPFL and runs on Kubernetes.","title":"On premise / cloud deployment"},{"location":"/docs/getting-started/running-nexus/index.html#choice-of-hardware","text":"Depending on the target throughput, usage profiles and data volume the hardware specification can vary greatly; please take a look at the benchmarks section to get an idea of what you should expect in terms of throughput with various hardware configurations. When the usage profiles are unknown a couple of rules of thumb should narrow the scope:\nNexus uses a collection of data stores (PostgreSQL, Elasticsearch, Blazegraph) which depend performance wise to the underlying disk access, so: prefer local storage over network storage for lower latency when doing IO, prefer SSD over HDDs because random access speed is more important than sequential access, one exception is the file storage (file resources which are stored as binary blobs on the filesystem) where the network disks should not be a cause for concern, nor random access speed; this assumes that accessing attachments is not the at the top in the usage profile All of Nexus services and most of the “off the shelf” products are built to run on top of the JVM which usually require more memory over computing power. A rough ratio of 2 CPU cores per 8GB of RAM is probably a good one (this of course depends on the CPU specification). Due to the design for scalability of Nexus services and “off the shelf” products the network is a very important characteristic of the deployment as frequent dropped packets or network partitions can seriously affect the availability of the system. Clustered / distributed systems generally use some form of consensus){ open=new } which is significantly affected by the reliability of the network. If the reliability of the network is a concern within the target deployment then vertical scalability is desirable over horizontal scalability: fewer host nodes with better specifications is better over more commodity hardware host nodes.","title":"Choice of hardware"},{"location":"/docs/getting-started/running-nexus/index.html#postgresql","text":"Nexus uses PostgreSQL as its primary store as for its strong reputation for performance, reliability and flexibility. It can also be run in different contexts from integration to\nSince this is the primary store it is the most important system to be backed up. All of the data that Nexus uses in other stores can be recomputed from the one stored in PostgreSQL as the other stores are used as mere indexing systems.\n// TODO capacity planning + recommendations\nAs described in the architecture section the generally adopted persistence model is an EventSourced model in which the data store is used as an append only store. This has implications to the total amount of disk used by the primary store.\n// TODO formula computing disk space","title":"PostgreSQL"},{"location":"/docs/getting-started/running-nexus/index.html#elasticsearch","text":"Nexus uses Elasticsearch to host several system indices and user defined ones. It offers sharding and replication out of the box. Deciding whether this system requires backup depends on the tolerated time for a restore. Nexus can be instructed to rebuild all indices using the data from the primary store, but being an incremental indexing process it can take longer than restoring from a backup. Since it can be configured to host a number of replicas for each shard it can tolerate a number of node failures.\nThe Elasticsearch setup documentation contains the necessary information on how to install and configure it, but recommendations on sizing the nodes and cluster are scarce because it depends on usage.\nA formula for computing the required disk space:\ntotal = (resource_size * count * documents + lucene_index) * replication_factor\n… where the lucene_index while it can vary should be less than twice the size of the original documents.\nAn example, assuming:\n10KB per resource 1.000.000 distinct resources 3 documents per resource (the number of documents depends on the configured views in the system) 2 additional shard replicas (replication factor of 3)\n… the total required disk size would be:\n(10KB * 1.000.000 * 3 + 2 * (10KB * 1.000.000 * 3)) * 3 = 270.000.000KB ~= 260GB\nThe resulting size represents the total disk space of the data nodes in the cluster; a 5 data node cluster with the data volume in the example above would have to be configured with 60GB disks per node.","title":"Elasticsearch"},{"location":"/docs/getting-started/running-nexus/index.html#blazegraph","text":"Nexus uses Blazegraph as an RDF (triple) store to provide a advanced querying capabilities on the hosted data. This store is treated as a specialized index on the data so as with Kafka and Elasticsearch in case of failures, the system can be fully restored from the primary store. While the technology is advertised to support High Availability and Scaleout deployment configurations, we have yet to be able to setup a deployment in this fashion.\nWe currently recommend deploying Blazegraph using the prepackaged tar.gz distribution available to download from GitHub.\nNote We’re looking at alternative technologies and possible application level (within Nexus) sharding and replicas.\nThe Hardware Configuration section in the documentation gives a couple of hints about the requirements to operate Blazegraph and there are additional sections for optimizations in terms of Performance, IO and Query.\nBlazegraph stores data in an append only journal which means updates will use additional disk space.\nA formula for computing the required disk space:\ntotal = (resource_triples + nexus_triples) * count * number_updates * triple_size + lucene_index\n… where the lucene_index while it can vary should be less than twice the size of the original documents.\nAn example, assuming:\n100 triples (rough estimate for a 10KB json-ld resource representation) 20 additional nexus triples on average 1.000.000 distinct resources 10 updates per resource 200 bytes triple size (using quads mode)\n… the total required disk size would be:\n(100 + 20) * 1.000.000 * 10 * 200 / 1024 * 3 ~= 700.000.000KB ~= 670GB\nCompactions can be applied to the journal using the CompactJournalUtility to reduce the disk usage, but it takes quite a bit a time and requires taking the software offline during the process.","title":"Blazegraph"},{"location":"/docs/getting-started/running-nexus/configuration/index.html","text":"","title":"Nexus configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#nexus-configuration","text":"Nexus Delta service can be highly customized using configuration file(s). Many things can be adapted to your deployment needs: port where the service is running, timeouts, pagination defaults, etc.\nThere are 3 ways to modify the default configuration:\nSetting the env variable DELTA_EXTERNAL_CONF which defines the path to a HOCON file. The configuration keys that are defined here can be overridden by the other methods. Using JVM properties as arguments when running the service: -D{property}. For example: -Dapp.http.interface=\"127.0.0.1\". Using FORCE_CONFIG_{property} environment variables. In order to enable this style of configuration, the JVM property -Dconfig.override_with_env_vars=true needs to be set. Once set, a configuration flag can be overridden. For example: CONFIG_FORCE_app_http_interface=\"127.0.0.1\".\nIn terms of JVM pool memory allocation, we recommend setting the following values to the JAVA_OPTS environment variable: -Xms4g -Xmx4g. The recommended values should be changed accordingly with the usage of Nexus Delta, the number of projects and the resources/schemas size.\nIn order to successfully run Nexus Delta there is a minimum set of configuration flags that need to be specified","title":"Nexus configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#http-configuration","text":"The http section of the configuration defines the binding address and port where the service will be listening.\nThe configuration flag akka.http.server.parsing.max-content-length can be used to control the maximum payload size allowed for Nexus Delta resources. This value applies to all posted resources except for files.","title":"Http configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#postgres-configuration","text":"The database section of the configuration defines the postgres specific configuration. As Nexus Delta uses three separate pools (‘read’, ‘write’, ‘streaming’), it is recommended to set the host, port, database name, username, and password via the app.defaults.database field, as it will apply to all pools. It is however possible to accommodate more advanced setups by configuring each pool separately by changing its respective app.database.{read|write|streaming} fields.\nThe pool size can be set using the app.defaults.database.access.pool-size setting for all pools, or individually for each pool (app.database.{read|write|streaming}.access.pool-size).\nNote A default Postgres deployment will limit the number of connections to 100, unless configured otherwise. See the Postgres Connection and Authentication documentation.\nBefore running Nexus Delta, the init scripts should be run in the lexicographical order.\nIt is possible to let Nexus Delta automatically create them using the following configuration parameters: app.database.tables-autocreate=true.\nNote Auto creation of tables is included as a development convenience and should be avoided in production.","title":"Postgres configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#rdf-parser","text":"The underlying Apache Jena parser used to validate incoming data is configurable using the json-ld-api field to enable different levels of strictness.","title":"RDF parser"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#service-account-configuration","text":"Nexus Delta uses a service account to perform automatic tasks under the hood. Examples of it are:\nGranting default ACLs to the user creating a project. Creating default views on project creation.\nThe service-account section of the configuration defines the service account configuration.","title":"Service account configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#automatic-project-provisioning","text":"Automatic project provisioning allows to create a dedicated project for users the first time they connect to Delta that is to say the first time, they query the project listing endpoints.\nThe generated project label will be:\nThe current username where only non-diacritic alphabetic characters ([a-zA-Z]), numbers, dashes and underscores will be preserved. This resulting string is then truncated to 64 characters if needed.\nThis feature can be turned on via the flag app.automatic-provisioning.enabled.\nThe automatic-provisioning section of the configuration defines the project provisioning configuration.","title":"Automatic project provisioning"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#fusion-configuration","text":"When fetching a resource, Nexus Delta allows to return a redirection to its representation in Fusion by providing text/html in the Accept header.\nThe fusion section of the configuration defines the fusion configuration.","title":"Fusion configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#projections-configuration","text":"Projections in Nexus Delta are asynchronous processes that can replay the event log and process this information. For more information on projections, please refer to the Architecture page.\nThe projections section of the configuration allows to configure the projections.\nIn case of failure in a projection, Nexus Delta records the failure information inside the public.failed_elem_logs PostgreSQL table, which can be used for analysis, and ultimately resolution of the failures. The configuration allows to set how long the failure information is stored for (app.projections.failed-elem-ttl), and how often the projection deleting the expired failures is awoken (app.projections.delete-expired-every).","title":"Projections configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#plugins-configuration","text":"Since 1.5.0, Nexus Delta supports plugins. Jar files present inside the local directory defined by the DELTA_PLUGINS environment variable are loaded as plugins into the Delta service.\nEach plugin configuration is rooted under plugins.{plugin_name}. All plugins have a plugins.{plugin_name}.priority configuration flag used to determine the order in which the routes are handled in case of collisions.\nFor more information about plugins, please refer to the Plugins page.","title":"Plugins configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#elasticsearch-views-plugin-configuration","text":"The elasticsearch plugin configuration can be found here.\nThe most important flags are: * plugins.elasticsearch.base which defines the endpoint where the Elasticsearch service is running. * plugins.elasticsearch.credentials.username and plugins.elasticsearch.credentials.password to allow to access to a secured Elasticsearch cluster. The user provided should have the privileges to create/delete indices and read/index from them.\nPlease refer to the Elasticsearch configuration which describes the different steps to achieve this.","title":"Elasticsearch views plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#blazegraph-views-plugin-configuration","text":"The blazegraph plugin configuration can be found here.\nThe most important flag is plugins.blazegraph.base which defines the endpoint where the Blazegraph service is running.\nThe plugins.blazegraph.slow-queries section of the Blazegraph configuration defines what is considered a slow Blazegraph query, which will get logged in the public.blazegraph_queries PostgreSQL table. This can be used to understand which Blazegraph queries can be improved.","title":"Blazegraph views plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#composite-views-plugin-configuration","text":"The composite views plugin configuration can be found here.\nThere are several configuration flags related to tweaking the range of values allowed for sources, projections and rebuild interval.\nAuthentication for remote sources can be specified in three different ways. The value of plugins.composite-views.remote-source-credentials should be speficied in the same way as remote storages, as shown here","title":"Composite views plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#storage-plugin-configuration","text":"The storage plugin configuration can be found here.\nNexus Delta supports 3 types of storages: ‘disk’, ‘amazon’ (s3 compatible) and ‘remote’.\nFor disk storages the most relevant configuration flag is plugins.storage.storages.disk.default-volume, which defines the default location in the Nexus Delta filesystem where the files using that storage are going to be saved. For S3 compatible storages the most relevant configuration flags are the ones related to the S3 settings: plugins.storage.storages.amazon.default-endpoint, plugins.storage.storages.amazon.default-access-key and plugins.storage.storages.amazon.default-secret-key. For remote disk storages the most relevant configuration flags are plugins.storage.storages.remote-disk.default-endpoint (the endpoint where the remote storage service is running) and plugins.storage.storages.remote-disk.credentials (the method to authenticate to the remote storage service).","title":"Storage plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#file-configuration","text":"When the media type is not provided by the user, Delta relies on automatic detection based on the file extension in order to provide one.\nFrom 1.9, it is possible to provide a list of extensions with an associated media type to compute the media type.\nThis list can be defined at files.media-type-detector.extensions:\nfiles {\n # Allows to define default media types for the given file extensions\n media-type-detector {\n extensions {\n custom = \"application/custom\"\n ntriples = \"application/n-triples\"\n }\n }\n}\nThe media type resolution process follow this order stopping at the first successful step:\nSelect the Content-Type header from the file creation/update request Compare the extension to the custom list provided in the configuratio Fallback on akka automatic detection Fallback to the default value application/octet-stream","title":"File configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#remote-storage-configuration","text":"Authentication for remote storage can be specified in three different ways. The value of plugins.storage.storages.remote-disk.credentials can be:","title":"Remote storage configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#recommended-client-credentials-openid-authentication-","text":"{\n type: \"client-credentials\"\n user: \"username\"\n password: \"password\"\n realm: \"internal\"\n}\nThis configuration tells Delta to log into the internal realm (which should have already been defined) with the user and password credentials, which will give Delta an access token to use when making requests to remote storage","title":"Recommended: client credentials (OpenId authentication)"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#anonymous","text":"{\n type: \"anonymous\"\n}","title":"Anonymous"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#long-living-auth-token-legacy-","text":"{\n type: \"jwt-token\"\n token: \"long-living-auth-token\"\n}","title":"Long-living auth token (legacy)"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#archive-plugin-configuration","text":"The archive plugin configuration can be found here.","title":"Archive plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#jira-plugin-configuration","text":"The Jira plugin configuration can be found here.\nSetting up the Jira plugin needs to set up the endpoint of the Jira instance but also the consumer key, the consumer secret and the private key required to interact with Jira (more details including the configuration steps in Jira here).","title":"Jira plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#monitoring","text":"For monitoring, Nexus Delta relies on Kamon.\nKamon can be disabled by passing the environment variable KAMON_ENABLED set to false.\nDelta configuration for Kamon is provided in the monitoring section. For a more complete description on the different options available, please look at the Kamon website.","title":"Monitoring"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#instrumentation","text":"Delta provides the Kamon instrumentation for:\nExecutors Scala futures Logback System metrics","title":"Instrumentation"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#reporters","text":"Kamon reporters are also available for:\nJaeger Prometheus","title":"Reporters"},{"location":"/docs/getting-started/running-nexus/search-configuration.html","text":"","title":"Search configuration"},{"location":"/docs/getting-started/running-nexus/search-configuration.html#search-configuration","text":"Nexus provides global search functionality across all projects through the search plugin.\nWarning The search plugin is experimental and its functionality and API can change without notice.\nThere are several aspects that have been taken into consideration when adding global search capabilities in Nexus:\nglobal search requires a common (index) data model for correct analysis, indexing and querying it must obey the configured access control (search results should include only entries that the client has access to) clients must be able to discover the data model in order to be able to build appropriate queries projects administrators should be able to control, reconfigure or opt out of presenting information in global search","title":"Search configuration"},{"location":"/docs/getting-started/running-nexus/search-configuration.html#how-global-search-works","text":"Considering the requirements listed above, the implementation relies on existing Nexus features, namely:\nComposite Views as control resources for partitioning of indices, how data is indexed, what information to collect, what permissions are required for querying Automatic provisioning of project resources after creation Plugins for orchestrating the behaviour and exposing specific endpoints\nWhen the search plugin is enabled and configured it will automatically create within each project a CompositeView that controls what resources are indexed and what information is collected for each resource. The reasons for using one CompositeView per project are that resources shapes may differ between projects but also the indices must be partitioned such that when consuming the query interface, the query must be dispatched only to the indices that the client has access to. The CompositeView id is identical for each project: https://bluebrain.github.io/nexus/vocabulary/searchView.\nOnce the CompositeView is created by the plugin, it can be updated by each project administrator (specifically any client that demonstrates views/write permission on the target project) to adjust the configuration based on the specifics of the project (different access control, different resource shapes, custom selection of resources etc.).\nCompositeViews have been chosen because they are quite versatile, support a wide range of configuration options:\nmultiple sources multiple projections (indices) project graph traversal for collecting the necessary fields simple transformations\nMore information about CompositeViews can be found in the API Reference.\nThe search plugin introduces a new namespace (/v1/search) with two sub-resources (query and config).\nThe query endpoint accepts submitting an Elasticsearch query via POST, similar to other views based on Elasticsearch, like ElasticSearchView, AggregateElasticSearchView or CompositeView with configured Elasticsearch projections. The query will be dispatched to all ElasticSearch indices managed by the CompositeViews created by the search plugin (the ones that share the id mentioned above) for which the client has access to. This ensures that access to information is restricted based on each project’s access control.\nThe config endpoint allows clients to discover the underlying index data model such that it can present users (like in the case of Fusion) an appropriate interface for querying, filtering, sorting, aggregations etc. A minimal response for the config endpoint is like the following example:\n{\n \"fields\": [\n {\n \"name\": \"project\",\n \"label\": \"Project\",\n \"array\": false,\n \"optional\": false,\n \"fields\": [\n {\n \"name\": \"identifier\",\n \"format\": [\n \"uri\"\n ],\n \"optional\": false\n },\n {\n \"name\": \"label\",\n \"format\": [\n \"keyword\",\n \"text\"\n ],\n \"optional\": false\n }\n ]\n },\n {\n \"name\": \"@type\",\n \"label\": \"Types\",\n \"array\": true,\n \"optional\": false,\n \"format\": [\n \"uri\"\n ]\n }\n ]\n}\n… where the returned document describes a set of fields to be expected in the indices:\nname: String - the name of the field in the Elasticsearch document label: String - a human-readable label to be presented to users array: Boolean - true if the field can have multiple values, false otherwise optional: Boolean - true if the field may not exist in certain documents, false otherwise format: Array(String) - the expected formats of the field (e.g. uri, keyword, text, boolean, number etc.); format and fields cannot be present at the same time fields: Array(Object) - enumeration of nested fields; there are situations where a field value can (should) be handled differently depending on the intent, like for example ontological values that are represented by a Uri but also a String (name or label). Clients should be aware of such case to understand what to present to their users but also how to properly compute queries. format and fields cannot be present at the same time fields.name: String - the name of the sub-field in the Elasticsearch document fields.format: Array(String) - the expected formats of the field (e.g. uri, keyword, text, boolean, number etc.) fields.optional: Boolean - true if the field may not exist in certain documents, false otherwise\nThe config endpoint was created to allow clients to discover how resources are indexed and can be queried. It is currently loaded as a static file (plugins.search.fields={pathToFile}) during Delta’s bootstrapping, and it must match the rest of the search configuration:\nplugins.search.indexing.resource-types={pathToFile} - the list of types which will be used to filter resources to be indexed in the ElasticSearch projection plugins.search.indexing.query={pathToFile} - SPARQL construct query that will be used to create triples which will be then compacted using the provided context and indexed in the ElasticSearch projection plugins.search.indexing.context={pathToFile} - the context which is used to transform the results of the SPARQL construct query into compacted JSON-LD which will be indexed in the ElasticSearch projection plugins.search.indexing.mapping={pathToFile} - the Elasticsearch mappings that will be used in the ElasticSearch projection plugins.search.indexing.settings={pathToFile}- additional Elasticsearch settings that will be used in the ElasticSearch projection\nThe search plugin must also be enabled using the plugins.search.enabled=true setting.\nThese additional settings pertain to the configuration of the CompositeViews that are automatically provisioned by the search plugin. The CompositeView API Reference provides a detailed explanation on how CompositeViews work and how these options affect the generation of the indices.","title":"How Global Search works"},{"location":"/docs/getting-started/running-nexus/search-configuration.html#example-use-case","text":"This section describes a search configuration for a hypothetical data model presented in the diagram below. The example uses four related data types (Dataset, DataDownload, Person and License) and the intent is to provide the ability to query resources of type Dataset along with information registered in related resources (of type DataDownload, Person or License).\nThere are a couple of things to notice in the data model diagram:\nschema:name and rdfs:label are both optional but mostly used for the same purpose; the information should be collected from one with a fallback on the other schema:license is also optional, not all datasets may have a license when some fields are marked as optional it means that the resource of type Dataset may not include those fields, but this doesn’t mean that all related resources exist (a Dataset may refer to a Person that does not exist in the project)\nThe goal is that indexing will produce Elasticsearch documents that has the following structure:\n{\n \"@id\": \"...\",\n \"@type\": [\"http://schema.org/Dataset\", \"http://other...\"],\n \"name\": \"\",\n \"description\": \"...\",\n \"author\": \" if exists\",\n \"license\": \"\",\n \"reason\": \"\"\n} Example copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/error.json\",\n \"@type\": \"IllegalFilterFormat\",\n \"reason\": \"Unable to parse 'path' as an uri\",\n \"field\": \"DownField(filter)/DownField(path)\"\n}\nIn addition to mandatory @type and reason fields, arbitrary fields may be present for extra information in certain scenarios.","title":"Error Signaling"},{"location":"/docs/delta/api/version.html","text":"","title":"Version"},{"location":"/docs/delta/api/version.html#version","text":"GET /v1/version\nThis endpoint returns information about the running Delta instance: Delta version, plugin versions and service dependency versions(e.g PostgreSQL).\nExample copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/version.json\",\n \"delta\": \"1.9.0\",\n \"dependencies\": {\n \"blazegraph\": \"2.1.6-RC\",\n \"postgresql\": \"15.5\",\n \"elasticsearch\": \"8.11.1\",\n \"remoteStorage\": \"1.9.0\"\n },\n \"plugins\": {\n \"archive\": \"1.9.0\",\n \"blazegraph\": \"1.9.0\",\n \"composite-views\": \"1.9.0\",\n \"elasticsearch\": \"1.9.0\",\n \"storage\": \"1.9.0\"\n }\n}\nAuthorization notes When accessing the version endpoint, the caller must have version/read permission /. Please visit Authentication & authorization section to learn more about it.","title":"Version"},{"location":"/docs/delta/api/authentication.html","text":"","title":"Authentication & Authorization"},{"location":"/docs/delta/api/authentication.html#authentication-authorization","text":"Authentication is the process of validating that users are who they claim to be while authorization gives those users permission to access an API resource.","title":"Authentication & Authorization"},{"location":"/docs/delta/api/authentication.html#authentication","text":"In order to interact with Nexus Delta, clients need a valid access token in order to claim their identity. Tokens can be obtained from authentication providers. Please see, realms for documentation on how to find available providers(realms).\nEach realm defines openid-configuration endpoint. From that endpoint, clients can obtain the information necessary to acquire an access token, especially the authorize and token endpoints for the provider.\nPlease see oauth2 documentation for different authentication flows available for different types of applications.","title":"Authentication"},{"location":"/docs/delta/api/authentication.html#authorization","text":"The access token obtained during the authentication process has a series of identities that the authorization process leverages to grant access to certain API resources.\nThe configuration of Nexus Delta access control for different identities is described in the ACLs section of the documentation. Each API resource section describes the required permissions an identity must have in order to be able to access that endpoint.\nA client should provide the access token information to Nexus Delta when accessing a protected API endpoint through the Authorization HTTP header.\nExample\ncurl -H \"Authorization: Bearer {ACCESS_TOKEN}\" \"http://localhost:8080/v1/version\"","title":"Authorization"},{"location":"/docs/delta/api/identities.html","text":"","title":"Identities"},{"location":"/docs/delta/api/identities.html#identities","text":"The /v1/identities endpoint allows user to retrieve the identities that the user has in the platform. Calling the endpoint without a token will result in only one identity returned: Anonymous. Calling it with token should return multiple identities. There are four different types of identities:\nAnonymous - represents anonymous user Authenticated - represents a realm via which the user is authenticated Group - represents a group to which a user belongs in a realm User - represents the user.\nThe following HTTP call can used to retrieve the identities:\nGET /v1/identities\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/identities\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/identities.json\"\n ],\n \"identities\": [\n {\n \"@id\": \"http://localhost:8080/v1/anonymous\",\n \"@type\": \"Anonymous\"\n },\n {\n \"@id\": \"localhost:8080/v1/realms/nexusdev/authenticated\",\n \"@type\": \"Authenticated\",\n \"realm\": \"nexusdev\"\n },\n {\n \"@id\": \"localhost:8080/v1/realms/nexusdev/groups/test-group\",\n \"@type\": \"Group\",\n \"group\": \"test-group\",\n \"realm\": \"nexusdev\"\n },\n {\n \"@id\": \"localhost:8080/v1/realms/nexusdev/users/test-user\",\n \"@type\": \"User\",\n \"realm\": \"nexusdev\",\n \"subject\": \"test-user\"\n }\n ]\n}","title":"Identities"},{"location":"/docs/delta/api/permissions-api.html","text":"","title":"Permissions"},{"location":"/docs/delta/api/permissions-api.html#permissions","text":"Permissions are rooted in the /v1/permissions collection.\nEach permission is the basic unit to provide a way to limit applications’ access to sensitive information.\nAuthorization notes When modifying permissions, the caller must have permissions/write permissions on the path /. When reading permissions, the caller must have permissions/read permissions on the path /. Please visit Authentication & authorization section to learn more about it.","title":"Permissions"},{"location":"/docs/delta/api/permissions-api.html#minimum-permissions","text":"Delta is configured to include minimum permissions, i.e. permissions that cannot be removed, because they are necessary for correct functioning of Nexus.\nCurrently, the following permissions are required:\ndefault permissions for acls, with the exception that everyone should be able to see his own permissions acls/read acls/write default permissions for permissions permissions/read permissions/write default permissions for realms realms/read realms/write generic permissions for full read access to the event log through Server Sent Events events/read default permissions for organizations organizations/read organizations/write organizations/create default permissions for projects projects/read projects/write projects/create default permissions for resources resources/read resources/write default permissions for resolvers resolvers/write default permissions for views views/query views/write default permissions for schemas schemas/write default permissions for files files/write default permissions for storages storages/write default permissions for the version endpoint version/read default permissions for supervision supervision/read","title":"Minimum permissions"},{"location":"/docs/delta/api/permissions-api.html#replace","text":"This operation overrides the collection of permissions.\nPUT /v1/permissions?rev={previous_rev}\n {...}\n…where {previous_rev} is the last known revision number for the permissions. If there are only minimum permissions present, this query parameter can be omitted.\nThe json payload contains the set of permissions to be added.\nExample\nRequest copysourcecurl -XPUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/permissions?rev=1\" -d \\\n '{\n \"permissions\": [\n \"newpermission/read\",\n \"newpermission/write\"\n ]\n }' Payload copysource{\n \"permissions\": [\n \"newpermission/read\",\n \"newpermission/write\"\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/permissions-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/permissions\",\n \"@type\": \"Permissions\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/permissions.json\",\n \"_createdAt\": \"2021-05-10T13:48:58.246Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/permissions\",\n \"_updatedAt\": \"2021-05-10T13:49:26.043Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Replace"},{"location":"/docs/delta/api/permissions-api.html#subtract","text":"This operation removes the provided permissions from the existing collection of permissions.\nPATCH /v1/permissions?rev={previous_rev}\n {...}\n…where {previous_rev} is the last known revision number for the permissions.\nThe json payload contains the set of permissions to be deleted. Example\nRequest copysourcecurl -XPATCH \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/permissions?rev=2\" -d \\\n '{\n \"@type\": \"Subtract\",\n \"permissions\": [\n \"newpermission/write\"\n ]\n }' Payload copysource{\n \"@type\": \"Subtract\",\n \"permissions\": [\n \"newpermission/write\"\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/permissions-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/permissions\",\n \"@type\": \"Permissions\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/permissions.json\",\n \"_createdAt\": \"2021-05-10T13:48:58.246Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/permissions\",\n \"_updatedAt\": \"2021-05-10T13:49:26.043Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Subtract"},{"location":"/docs/delta/api/permissions-api.html#append","text":"This operation appends the provided permissions to the existing collection of permissions.\nPATCH /v1/permissions?rev={previous_rev}\n {...}\n…where {previous_rev} is the last known revision number for the permissions.\nThe json payload contains the set of permissions to be added.\nExample\nRequest copysourcecurl -XPATCH \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/permissions?rev=3\" -d \\\n '{\n \"@type\": \"Append\",\n \"permissions\": [\n \"newpermission/create\"\n ]\n}' Payload copysource{\n \"@type\": \"Append\",\n \"permissions\": [\n \"newpermission/create\"\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/permissions-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/permissions\",\n \"@type\": \"Permissions\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/permissions.json\",\n \"_createdAt\": \"2021-05-10T13:48:58.246Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/permissions\",\n \"_updatedAt\": \"2021-05-10T13:49:26.043Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Append"},{"location":"/docs/delta/api/permissions-api.html#delete-all-permissions","text":"This operation deletes the all the user defined permission and resets the collection to minimum permissions.\nDELETE /v1/permissions?rev={previous_rev}\n…where {previous_rev} is the last known revision number for the permissions.\nRequest copysourcecurl -XDELETE \"http://localhost:8080/v1/permissions?rev=4\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/permissions-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/permissions\",\n \"@type\": \"Permissions\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/permissions.json\",\n \"_createdAt\": \"2021-05-10T13:48:58.246Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/permissions\",\n \"_updatedAt\": \"2021-05-10T13:49:26.043Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Delete all permissions"},{"location":"/docs/delta/api/permissions-api.html#fetch-latest-revision-","text":"GET /v1/permissions\nRequest copysourcecurl \"http://localhost:8080/v1/permissions\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/permissions.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/permissions\",\n \"@type\": \"Permissions\",\n \"permissions\": [\n \"realms/write\",\n \"replaced\",\n \"projects/create\",\n \"schemas/write\",\n \"permissions/write\",\n \"organizations/read\",\n \"realms/read\",\n \"resources/read\",\n \"version/read\",\n \"acls/read\",\n \"projects/read\",\n \"permissions/read\",\n \"organizations/create\",\n \"views/query\",\n \"storages/write\",\n \"resolvers/write\",\n \"resources/write\",\n \"acls/write\",\n \"files/write\",\n \"events/read\",\n \"organizations/write\",\n \"projects/write\",\n \"views/write\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/permissions.json\",\n \"_createdAt\": \"2021-05-10T13:48:58.246Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/permissions\",\n \"_updatedAt\": \"2021-05-10T13:49:26.043Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Fetch (latest revision)"},{"location":"/docs/delta/api/permissions-api.html#fetch-specific-revision-","text":"GET /v1/permissions?rev={rev}\n…where {rev} is the revision number of the permissions to be retrieved.\nRequest copysourcecurl \"http://localhost:8080/v1/permissions?rev=1\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/permissions.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/permissions\",\n \"@type\": \"Permissions\",\n \"permissions\": [\n \"realms/write\",\n \"replaced\",\n \"projects/create\",\n \"schemas/write\",\n \"permissions/write\",\n \"organizations/read\",\n \"realms/read\",\n \"resources/read\",\n \"version/read\",\n \"acls/read\",\n \"projects/read\",\n \"permissions/read\",\n \"organizations/create\",\n \"views/query\",\n \"storages/write\",\n \"resolvers/write\",\n \"resources/write\",\n \"acls/write\",\n \"files/write\",\n \"events/read\",\n \"organizations/write\",\n \"projects/write\",\n \"views/write\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/permissions.json\",\n \"_createdAt\": \"2021-05-10T13:48:58.246Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/permissions\",\n \"_updatedAt\": \"2021-05-10T13:49:26.043Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Fetch (specific revision)"},{"location":"/docs/delta/api/permissions-api.html#server-sent-events","text":"This endpoint allows clients to receive automatic updates from the permissions in a streaming fashion.\nGET /v1/permissions/events\nwhere Last-Event-Id is an optional HTTP Header that identifies the last consumed permission event. It can be used for cases when a client does not want to retrieve the whole event stream, but to start after a specific event.\nThe response contains a series of permission events, represented in the following way\ndata:{payload}\nevent:{type}\nid:{id}\nwhere…\n{payload}: Json - is the actual payload of the current permission {type}: String - is a type identifier for the current event. Possible types are: PermissionsAppended, PermissionsSubtracted, PermissionsReplaced and PermissionsDeleted {id}: String - is the identifier of the permission event. It can be used in the Last-Event-Id HTTP Header\nExample\nRequest copysourcecurl \\\n \"http://localhost:8080/v1/permissions/events\" Response copysourcedata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/permissions.json\"],\"@type\":\"PermissionsReplaced\",\"permissions\":[\"custom\"],\"_instant\":\"2021-05-10T13:57:16.947Z\",\"_permissionsId\":\"http://localhost:8080/v1/permissions\",\"_rev\":1,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:PermissionsReplaced\nid:a1532190-b197-11eb-a8e0-49728f9d6e6c\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/permissions.json\"],\"@type\":\"PermissionsAppended\",\"permissions\":[\"appended\"],\"_instant\":\"2021-05-10T13:57:20.466Z\",\"_permissionsId\":\"http://localhost:8080/v1/permissions\",\"_rev\":2,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:PermissionsAppended\nid:a3690940-b197-11eb-a8e0-49728f9d6e6c\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/permissions.json\"],\"@type\":\"PermissionsSubtracted\",\"permissions\":[\"custom\"],\"_instant\":\"2021-05-10T13:57:23.119Z\",\"_permissionsId\":\"http://localhost:8080/v1/permissions\",\"_rev\":3,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:PermissionsSubtracted\nid:a4fdda10-b197-11eb-a8e0-49728f9d6e6c\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/permissions.json\"],\"@type\":\"PermissionsDeleted\",\"_instant\":\"2021-05-10T13:59:02.898Z\",\"_permissionsId\":\"http://localhost:8080/v1/permissions\",\"_rev\":4,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:PermissionsDeleted\nid:e0769d20-b197-11eb-a8e0-49728f9d6e6c","title":"Server Sent Events"},{"location":"/docs/delta/api/realms-api.html","text":"","title":"Realms"},{"location":"/docs/delta/api/realms-api.html#realms","text":"Realms are rooted in /v1/realms collection.\nEach realm defines a specific authentication provider. Any of the authentication providers can be used to obtain access tokens that can be used with Nexus.\nAuthorization notes When modifying realms, the caller must have realms/write permissions on the path /. When reading realms, the caller must have realms/read permissions on the path /. Please visit Authentication & authorization section to learn more about it.","title":"Realms"},{"location":"/docs/delta/api/realms-api.html#payload","text":"{\n \"name\": \"{name}\",\n \"openIdConfig\": \"{openIdConfig}\",\n \"logo\": \"{logo}\",\n \"acceptedAudiences\": {acceptedAudiences}\n}\nwhere…\n{name}: String - the realm name. {openIdConfig}: IRI - the provider OpenID configuration. {logo}: IRI - the logo Url for the realm. This field is optional. {acceptedAudiences}: Array[String] - ar array of accepted audiences as string values. If provided, the token should have the aud with some of its values matching some of the acceptedAudience values on the realm. This field is optional.","title":"Payload"},{"location":"/docs/delta/api/realms-api.html#create","text":"This operation creates a realm.\nPUT /v1/realms/{realm}\nThe following examples describe the payload used to create a realm.\nExample\nRequest copysourcecurl -XPUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/realms/realm1\" \\\n -d '{\n \"name\":\"Nexus Dev\",\n \"openIdConfig\":\"http://localhost:8080/auth/realms/bbp-test/.well-known/openid-configuration\",\n \"logo\":\"http://localhost:8080/logo.png\"\n }' Payload copysource{\n \"name\": \"Nexus Dev\",\n \"openIdConfig\": \"http://localhost:8080/auth/realms/bbp-test/.well-known/openid-configuration\",\n \"logo\": \"http://localhost:8080/logo.png\"\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/realms-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/realms/realm1\",\n \"@type\": \"Realm\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/realms.json\",\n \"_createdAt\": \"2021-05-11T09:42:41.313Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_label\": \"realm1\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/realms/realm1\",\n \"_updatedAt\": \"2021-05-11T09:42:41.313Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Create"},{"location":"/docs/delta/api/realms-api.html#update","text":"This operation updates a realm.\nPUT /v1/realms/{realm}?rev={previous_rev}\n {...}\nwhere {previous_rev} is the last known revision number for the realm. The json payload should be the same as the one used to create realms.\nExample\nRequest copysourcecurl -XPUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/realms/realm1?rev=1\" \\\n -d '{\n \"name\":\"Nexus Dev\",\n \"openIdConfig\":\"http://localhost:8080/auth/realms/bbp-test/.well-known/openid-configuration\",\n \"logo\":\"http://localhost:8080/logo.png\"\n }' Payload copysource{\n \"name\": \"Nexus Dev\",\n \"openIdConfig\": \"http://localhost:8080/auth/realms/bbp-test/.well-known/openid-configuration\",\n \"logo\": \"http://localhost:8080/logo.png\"\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/realms-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/realms/realm1\",\n \"@type\": \"Realm\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/realms.json\",\n \"_createdAt\": \"2021-05-11T09:42:41.313Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_label\": \"realm1\",\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/realms/realm1\",\n \"_updatedAt\": \"2021-05-11T09:45:20.409Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Update"},{"location":"/docs/delta/api/realms-api.html#deprecate","text":"This operation deprecates a realm.\nDELETE /v1/realms/{realm}?rev={previous_rev}\nwhere {previous_rev} is the last known revision number for the realm.\nRequest copysourcecurl -XDELETE \"http://localhost:8080/v1/realms/realm1?rev=2\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/realms-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/realms/realm1\",\n \"@type\": \"Realm\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/realms.json\",\n \"_createdAt\": \"2021-05-11T09:42:41.313Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_label\": \"realm1\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/realms/realm1\",\n \"_updatedAt\": \"2021-05-11T09:48:57.296Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Deprecate"},{"location":"/docs/delta/api/realms-api.html#list","text":"Lists all available realms.\nGET /v1/realms?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &sort={sort}\nwhere…\n{from}: Number - the offset from which to start the listings. Defaults to 0 {size}: Number - the maximum amount fo results to be returned. Defaults to 30 {deprecated}: Boolean - filter the resulting realms based on their deprecation status. Optional parameter. {rev}: Number - filter the resulting realms based on their revision value. Optional parameter. {createdBy}: Iri - filter the resulting realms based on their creator. Optional parameter. {updatedBy}: Iri - filter the resulting realms based on the person which performed the last update. Optional parameter. {sort}: String - orders the resulting realms based on its metadata fields. Optional parameter that can appear multiple times, further specifying the ordering criteria. Defaults to _createdAt, ordering realms by creation date.\nRequest copysourcecurl \"http://localhost:8080/v1/realms\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/realms.json\"\n ],\n \"_total\": 1,\n \"_results\": [\n {\n \"@id\": \"http://localhost:8080/v1/realms/realm1\",\n \"@type\": \"Realm\",\n \"logo\": \"http://localhost:8080/logo.png\",\n \"name\": \"BlueBrain\",\n \"openIdConfig\": \"http://localhost:8080/auth/realms/realm1/.well-known/openid-configuration\",\n \"_authorizationEndpoint\": \"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/auth\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/realms.json\",\n \"_createdAt\": \"2021-05-11T09:42:41.313Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_endSessionEndpoint\": \"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/logout\",\n \"_grantTypes\": [\n \"password\",\n \"clientCredentials\",\n \"refreshToken\",\n \"authorizationCode\",\n \"implicit\"\n ],\n \"_issuer\": \"http://localhost:8080/auth/realms/realm1\",\n \"_label\": \"realm1\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/realms/realm1\",\n \"_tokenEndpoint\": \"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/token\",\n \"_updatedAt\": \"2021-05-11T09:48:57.296Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_userInfoEndpoint\": \"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/userinfo\"\n }\n ]\n}","title":"List"},{"location":"/docs/delta/api/realms-api.html#fetch-current-version-","text":"GET /v1/realms/{realm}\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/realms/realm1\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/realms.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/realms/realm1\",\n \"@type\": \"Realm\",\n \"logo\": \"http://localhost:8080/logo.png\",\n \"name\": \"BlueBrain\",\n \"openIdConfig\": \"http://localhost:8080/auth/realms/BBP/.well-known/openid-configuration\",\n \"_authorizationEndpoint\": \"http://localhost:8080/auth/realms/BBP/protocol/openid-connect/auth\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/realms.json\",\n \"_createdAt\": \"2021-05-11T09:42:41.313Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_endSessionEndpoint\": \"http://localhost:8080/auth/realms/BBP/protocol/openid-connect/logout\",\n \"_grantTypes\": [\n \"password\",\n \"clientCredentials\",\n \"refreshToken\",\n \"authorizationCode\",\n \"implicit\"\n ],\n \"_issuer\": \"http://localhost:8080/auth/realms/BBP\",\n \"_label\": \"realm1\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/realms/realm1\",\n \"_tokenEndpoint\": \"http://localhost:8080/auth/realms/BBP/protocol/openid-connect/token\",\n \"_updatedAt\": \"2021-05-11T09:48:57.296Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_userInfoEndpoint\": \"http://localhost:8080/auth/realms/BBP/protocol/openid-connect/userinfo\"\n}","title":"Fetch (current version)"},{"location":"/docs/delta/api/realms-api.html#fetch-specific-version-","text":"GET /v1/realms/{realm}?rev={rev}\n… where {rev} is the revision number of the resolver to be retrieved.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/realms/realm1?rev=1\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/realms.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/realms/realm1\",\n \"@type\": \"Realm\",\n \"logo\": \"http://localhost:8080/logo.png\",\n \"name\": \"BlueBrain\",\n \"openIdConfig\": \"http://localhost:8080/auth/realms/BBP/.well-known/openid-configuration\",\n \"_authorizationEndpoint\": \"http://localhost:8080/auth/realms/BBP/protocol/openid-connect/auth\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/realms.json\",\n \"_createdAt\": \"2021-05-11T09:42:41.313Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_endSessionEndpoint\": \"http://localhost:8080/auth/realms/BBP/protocol/openid-connect/logout\",\n \"_grantTypes\": [\n \"password\",\n \"clientCredentials\",\n \"refreshToken\",\n \"authorizationCode\",\n \"implicit\"\n ],\n \"_issuer\": \"http://localhost:8080/auth/realms/BBP\",\n \"_label\": \"realm1\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/realms/realm1\",\n \"_tokenEndpoint\": \"http://localhost:8080/auth/realms/BBP/protocol/openid-connect/token\",\n \"_updatedAt\": \"2021-05-11T09:48:57.296Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_userInfoEndpoint\": \"http://localhost:8080/auth/realms/BBP/protocol/openid-connect/userinfo\"\n}","title":"Fetch (specific version)"},{"location":"/docs/delta/api/realms-api.html#server-sent-events","text":"This endpoint allows clients to receive automatic updates from the realms in a streaming fashion.\nGET /v1/realms/events\nwhere Last-Event-Id is an optional HTTP Header that identifies the last consumed realm event. It can be used for cases when a client does not want to retrieve the whole event stream, but to start after a specific event.\nThe response contains a series of realm events, represented in the following way\ndata:{payload}\nevent:{type}\nid:{id}\nwhere…\n{payload}: Json - is the actual payload of the current realm {type}: String - is a type identifier for the current realm. Possible types are: RealmCreated, RealmUpdated and RealmDeprecated {id}: String - is the identifier of the realm event. It can be used in the Last-Event-Id HTTP Header\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/realms/events\" Response copysourcedata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/realms.json\"],\"@type\":\"RealmCreated\",\"name\":\"BlueBrain\",\"openIdConfig\":\"http://localhost:8080/auth/realms/realm1/.well-known/openid-configuration\",\"_authorizationEndpoint\":\"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/auth\",\"_endSessionEndpoint\":\"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/logout\",\"_grantTypes\":[\"password\",\"clientCredentials\",\"refreshToken\",\"authorizationCode\",\"implicit\"],\"_instant\":\"2021-05-11T09:42:41.313Z\",\"_issuer\":\"http://localhost:8080/auth/realms/realm1\",\"_label\":\"realm1\",\"_realmId\":\"http://localhost:8080/v1/realms/realm1\",\"_rev\":1,\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_tokenEndpoint\":\"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/token\",\"_userInfoEndpoint\":\"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/userinfo\"}\nevent:RealmCreated\nid:3abfce50-b23d-11eb-bef4-251deaef3e83\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/realms.json\"],\"@type\":\"RealmUpdated\",\"logo\":\"http://google.com\",\"name\":\"BlueBrain\",\"openIdConfig\":\"http://localhost:8080/auth/realms/realm1/.well-known/openid-configuration\",\"_authorizationEndpoint\":\"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/auth\",\"_endSessionEndpoint\":\"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/logout\",\"_grantTypes\":[\"password\",\"clientCredentials\",\"refreshToken\",\"authorizationCode\",\"implicit\"],\"_instant\":\"2021-05-11T09:45:20.409Z\",\"_issuer\":\"http://localhost:8080/auth/realms/realm1\",\"_label\":\"realm1\",\"_realmId\":\"http://localhost:8080/v1/realms/realm1\",\"_rev\":2,\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_tokenEndpoint\":\"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/token\",\"_userInfoEndpoint\":\"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/userinfo\"}\nevent:RealmUpdated\nid:999107a0-b23d-11eb-bef4-251deaef3e83\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/realms.json\"],\"@type\":\"RealmDeprecated\",\"_instant\":\"2021-05-11T09:48:57.296Z\",\"_label\":\"realm1\",\"_realmId\":\"http://localhost:8080/v1/realms/realm1\",\"_rev\":3,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:RealmDeprecated\nid:1ad75c10-b23e-11eb-bef4-251deaef3e83","title":"Server Sent Events"},{"location":"/docs/delta/api/acls-api.html","text":"","title":"Access Control Lists"},{"location":"/docs/delta/api/acls-api.html#access-control-lists","text":"Access Control Lists are rooted in the /v1/acls collection.\nAn ACL defines the applications’ data access restriction using the following three parameters:\npermission: the value used to limit a client (user, group) access to resources. identity: a client identity reference, e.g. a certain user, a group, an anonymous user or someone who is authenticated to a certain realm. path: the location where to apply the restrictions. Examples of paths are: /, /myorg or /myorg/myproject\nAuthorization notes When modifying ACLs, the caller must have acls/write permissions on the path where the ACLs are being modified or its ancestors. When reading ACLs, the caller must have acls/read permissions on the path where the ACLs are being modified or its ancestors. Please visit Authentication & authorization section to learn more about it.","title":"Access Control Lists"},{"location":"/docs/delta/api/acls-api.html#default-permissions","text":"When the service starts for the first time, it applies the default permissions to /. This gives all permissions to the anonymous user to enable setting up realms. It is recommended to replace these permissions once user has setup an authorization realm.","title":"Default permissions"},{"location":"/docs/delta/api/acls-api.html#acls-hierarchy","text":"It is important to know that ACLs are represented in a tree-like structure depending on their path. Imagine the following scenario:\nEach block is identified by a path that contains a list of permissions for a certain identity (identities are color code divided).\nThere is a special set of permissions which restrict the use of the ACLs API:\nacls/read - an auth. token containing an identity with this permission is allowed to fetch a collection of ACL from any other identity. acls/write - an auth. token containing an identity with this permission is allowed to perform the call to the following endpoints: create ACLs, replace ACLs, subtract ACLs, append ACLs and delete ACLs.\nThose permissions need to be present in the current {path} where the API interaction occurs or in any parent path. In other words, they are inherited.\nLet’s clarify this concept with an example from the previous diagram. identity 1 could call the create ACLs endpoint on any {path} while identity 2 could only call the same endpoint for any path child of /myorg (like /myorg/myproj). At the same time, identity 3 could not perform any of the write operations.","title":"ACLs Hierarchy"},{"location":"/docs/delta/api/acls-api.html#create","text":"This operation creates a collection of ACL on the provided path.\nPUT /v1/acls/{path}\n {...}\n…where {path} is the target location for the ACL collection.\nThe json payload contains the collection of ACL to set.\nExample\nRequest copysourcecurl -XPUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/acls/org1\" -d \\\n '{\n \"acl\": [\n {\n \"permissions\": [\n \"projects/read\"\n ],\n \"identity\": {\n \"realm\": \"myrealm\",\n \"group\": \"a-group\"\n }\n },\n {\n \"permissions\": [\n \"projects/read\",\n \"projects/write\"\n ],\n \"identity\": {\n \"realm\": \"realm\",\n \"group\": \"some-group\"\n }\n },\n {\n \"permissions\": [\n \"acls/read\",\n \"acls/write\"\n ],\n \"identity\": {\n \"realm\": \"realm\",\n \"subject\": \"alice\"\n }\n }\n ]\n}' Payload copysource{\n \"acl\": [\n {\n \"permissions\": [\n \"projects/read\"\n ],\n \"identity\": {\n \"realm\": \"myrealm\",\n \"group\": \"a-group\"\n }\n },\n {\n \"permissions\": [\n \"projects/read\",\n \"projects/write\"\n ],\n \"identity\": {\n \"realm\": \"myrealm\",\n \"group\": \"some-group\"\n }\n },\n {\n \"permissions\": [\n \"acls/read\",\n \"acls/write\"\n ],\n \"identity\": {\n \"realm\": \"myrealm\",\n \"subject\": \"alice\"\n }\n }\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/acls-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/acls/org1\",\n \"@type\": \"AccessControlList\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/acls.json\",\n \"_createdAt\": \"2021-05-11T11:03:06.071Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_path\": \"/org1\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/acls/org1\",\n \"_updatedAt\": \"2021-05-11T11:03:06.071Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Create"},{"location":"/docs/delta/api/acls-api.html#replace","text":"This operation overrides the collection of ACL on the provided path.\nPUT /v1/acls/{path}?rev={previous_rev}\n {...}\n…where:\n{previous_rev}: Number - the last known revision for the ACL collection. Not required for replacing empty ACLs. {path}: String - is the target location for the ACL collection.\nThe json payload contains the collection of ACL to set.\nExample\nRequest copysourcecurl -XPUT \\\n-H \"Content-Type: application/json\" \"http://localhost:8080/v1/acls/org1?rev=1\" -d \\\n'{\n \"acl\": [\n {\n \"permissions\": [\n \"projects/read\"\n ],\n \"identity\": {\n \"realm\": \"myrealm\",\n \"group\": \"a-group\"\n }\n },\n {\n \"permissions\": [\n \"projects/read\",\n \"projects/write\"\n ],\n \"identity\": {\n \"realm\": \"realm\",\n \"group\": \"some-group\"\n }\n },\n {\n \"permissions\": [\n \"acls/read\",\n \"acls/write\"\n ],\n \"identity\": {\n \"realm\": \"realm\",\n \"subject\": \"alice\"\n }\n }\n ]\n}' Payload copysource{\n \"acl\": [\n {\n \"permissions\": [\n \"projects/read\"\n ],\n \"identity\": {\n \"realm\": \"myrealm\",\n \"group\": \"a-group\"\n }\n },\n {\n \"permissions\": [\n \"projects/read\",\n \"projects/write\"\n ],\n \"identity\": {\n \"realm\": \"myrealm\",\n \"group\": \"some-group\"\n }\n },\n {\n \"permissions\": [\n \"acls/read\",\n \"acls/write\"\n ],\n \"identity\": {\n \"realm\": \"myrealm\",\n \"subject\": \"alice\"\n }\n }\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/acls-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/acls/org1\",\n \"@type\": \"AccessControlList\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/acls.json\",\n \"_createdAt\": \"2021-05-11T11:03:06.071Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_path\": \"/org1\",\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/acls/org1\",\n \"_updatedAt\": \"2021-05-11T11:03:32.596Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Replace"},{"location":"/docs/delta/api/acls-api.html#subtract","text":"This operation removes the provided ACL collection from the existing collection of ACL on the provided path.\nPATCH /v1/acls/{path}?rev={previous_rev}\n {...}\n…where:\n{previous_rev}: Number - the last known revision for the ACL collection. {path}: String - is the target location for the ACL collection.\nThe json payload contains the collection of ACL to remove.\nExample\nRequest copysourcecurl -XPATCH \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/acls/org1?rev=2\" -d \\\n '{\n \"@type\": \"Subtract\",\n \"acl\": [\n {\n \"permissions\": [\n \"projects/read\"\n ],\n \"identity\": {\n \"group\": \"a-group\",\n \"realm\": \"myrealm\"\n }\n }\n ]\n}' Payload copysource{\n \"@type\": \"Subtract\",\n \"acl\": [\n {\n \"permissions\": [\n \"projects/read\"\n ],\n \"identity\": {\n \"realm\": \"myrealm\",\n \"group\": \"a-group\"\n }\n }\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/acls-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/acls/org1\",\n \"@type\": \"AccessControlList\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/acls.json\",\n \"_createdAt\": \"2021-05-11T11:03:06.071Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_path\": \"/org1\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/acls/org1\",\n \"_updatedAt\": \"2021-05-11T11:03:52.875Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Subtract"},{"location":"/docs/delta/api/acls-api.html#append","text":"This operation appends the provided ACL collection to the existing collection of ACL on the provided path.\nPATCH /v1/acls/{path}?rev={previous_rev}\n {...}\n…where:\n{previous_rev}: Number - the last known revision for the ACL collection. Not required for appending to empty ACLs. {path}: String - is the target location for the ACL collection.\nThe json payload contains the collection of ACL to add.\nExample\nRequest copysourcecurl -XPATCH \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/acls/org1?rev=3\" -d \\\n '{\n \"@type\": \"Append\",\n \"acl\": [\n {\n \"permissions\": [\n \"own\",\n \"other\"\n ],\n \"identity\": {\n \"realm\": \"myrealm\",\n \"group\": \"a-group\"\n }\n }\n ]\n }' Payload copysource{\n \"@type\": \"Append\",\n \"acl\": [\n {\n \"permissions\": [\n \"own\",\n \"other\"\n ],\n \"identity\": {\n \"realm\": \"myrealm\",\n \"group\": \"a-group\"\n }\n }\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/acls-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/acls/org1\",\n \"@type\": \"AccessControlList\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/acls.json\",\n \"_createdAt\": \"2021-05-11T11:03:06.071Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_path\": \"/org1\",\n \"_rev\": 4,\n \"_self\": \"http://localhost:8080/v1/acls/org1\",\n \"_updatedAt\": \"2021-05-11T11:04:54.614Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Append"},{"location":"/docs/delta/api/acls-api.html#delete","text":"This operation deletes the entire collection of ACL on the provided path.\nDELETE /v1/acls/{path}?rev={previous_rev}\n…where:\n{previous_rev}: Number - the last known revision for the ACL collection. {path}: String - is the target location for the ACL collection.\nRequest copysourcecurl -XDELETE \"http://localhost:8080/v1/acls/org1?rev=4\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/acls-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/acls/org1\",\n \"@type\": \"AccessControlList\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/acls.json\",\n \"_createdAt\": \"2021-05-11T11:03:06.071Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_path\": \"/org1\",\n \"_rev\": 5,\n \"_self\": \"http://localhost:8080/v1/acls/org1\",\n \"_updatedAt\": \"2021-05-11T11:05:15.919Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Delete"},{"location":"/docs/delta/api/acls-api.html#fetch","text":"GET /v1/acls/{path}?rev={rev}&self={self}\n…where\n{path}: String - is the target location for the ACL collection. {rev}: Number - the revision of the ACL to be retrieved. This parameter is optional and it defaults to the current revision. {self}: Boolean - if true, only the ACLs containing the identities found on the auth. token are included in the response. If false all the ACLs on the current {path} are included. This parameter is optional and it defaults to true.\nThe ability to use the query parameter self=false depends on whether or not any of the identities found on the auth. token contains the acls:read permission on the provided {path} or its ancestors. For further details, check ACLs hierarchy.\nRequest copysourcecurl \"http://localhost:8080/v1/acls/org1?rev=1&self=false\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/acls.json\"\n ],\n \"_total\": 1,\n \"_results\": [\n {\n \"@id\": \"http://localhost:8080/v1/acls/org1\",\n \"@type\": \"AccessControlList\",\n \"acl\": [\n {\n \"identity\": {\n \"@id\": \"http://localhost:8080/v1/realms/myrealm/groups/a-group\",\n \"@type\": \"Group\",\n \"group\": \"a-group\",\n \"realm\": \"myrealm\"\n },\n \"permissions\": [\n \"projects/read\"\n ]\n },\n {\n \"identity\": {\n \"@id\": \"http://localhost:8080/v1/realms/realm/groups/some-group\",\n \"@type\": \"Group\",\n \"group\": \"some-group\",\n \"realm\": \"realm\"\n },\n \"permissions\": [\n \"projects/read\",\n \"projects/write\"\n ]\n },\n {\n \"identity\": {\n \"@id\": \"http://localhost:8080/v1/realms/realm/users/alice\",\n \"@type\": \"User\",\n \"realm\": \"realm\",\n \"subject\": \"alice\"\n },\n \"permissions\": [\n \"acls/read\",\n \"acls/write\"\n ]\n }\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/acls.json\",\n \"_createdAt\": \"2021-05-11T11:03:06.071Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_path\": \"/org1\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/acls/org1\",\n \"_updatedAt\": \"2021-05-11T11:03:06.071Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n }\n ]\n}","title":"Fetch"},{"location":"/docs/delta/api/acls-api.html#list","text":"GET /v1/acls/{path}?ancestors={ancestors}&self={self}\n…where\n{path}: String - is the target location for the ACL collection. {ancestors}: Boolean - if true, the ACLs of the parent {path} are included in the response. If false only the ACLs on the current {path} are included. This parameter is optional and it defaults to false. {self}: Boolean - if true, only the ACLs containing the identities found on the auth. token are included in the response. If false all the ACLs on the current {path} are included. This parameter is optional and it defaults to true.\nThe ability to use the query parameter self=false and ancestors=true depends on whether or not any of the identities found on the auth. token contains the acls:read permission on the provided {path} or its parents. For further details, check ACLs hierarchy.\nThe {path} can contain the special character * which can be read as any.\nLet’s imagine we have the ACLs from the following diagram in place. If we query this endpoint with the path /myorg/*, we are selecting the ACLs defined in /myorg/myproj and myorg/myproj2. Likewise If we use the path /*, we are selecting the ACLs defined in /myorg and myorg2.\nThe following examples illustrate listings from the diagram on the section ACLs hierarchy with the following considerations:\nidentity 1: Is a group called one identity 2: Is a group called two identity 3: Is a user called me The auth. token is linked to the identity 1.\nRequest copysourcecurl \"http://localhost:8080/v1/acls/*?ancestors=true&self=true\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/acls.json\"\n ],\n \"_total\": 2,\n \"_results\": [\n {\n \"@id\": \"http://localhost:8080/v1/acls/myorg/myproj\",\n \"@type\": \"AccessControlList\",\n \"acl\": [\n {\n \"permissions\": [\n \"read\",\n \"write\"\n ],\n \"identity\": {\n \"@id\": \"http://localhost:8080/v1/realm/groups/two\",\n \"@type\": \"Group\",\n \"realm\": \"myrealm\",\n \"group\": \"two\"\n }\n }\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/acls.json\",\n \"_createdAt\": \"2018-09-17T14:55:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_deprecated\": false,\n \"_path\": \"/myorg/myproj\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/acls/myorg/myproj\",\n \"_updatedAt\": \"2018-09-17T15:05:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n },\n {\n \"@id\": \"http://localhost:8080/v1/acls/myorg/myproj2\",\n \"@type\": \"AccessControlList\",\n \"acl\": [\n {\n \"permissions\": [\n \"read\"\n ],\n \"identity\": {\n \"@id\": \"http://localhost:8080/v1/realms/myrealm/users/me\",\n \"@type\": \"User\",\n \"realm\": \"myrealm\",\n \"subject\": \"me\"\n }\n }\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/acls.json\",\n \"_createdAt\": \"2018-09-17T14:00:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/alice\",\n \"_deprecated\": false,\n \"_path\": \"/myorg/myproj2\",\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/acls/myorg/myproj2\",\n \"_updatedAt\": \"2018-09-17T14:05:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/alice\"\n }\n ]\n} Request (with ancestors) copysourcecurl \"http://localhost:8080/v1/acls/myorg/*?ancestors=false&self=false\" Response (with ancestors) copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/resource.json\",\n \"https://bluebrain.github.io/nexus/contexts/iam.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\"\n ],\n \"_total\": 3,\n \"_results\": [\n {\n \"@id\": \"http://localhost:8080/v1/acls/\",\n \"@type\": \"AccessControlList\",\n \"acl\": [\n {\n \"permissions\": [\n \"acls/write\"\n ],\n \"identity\": {\n \"@id\": \"http://localhost:8080/v1/realms/myrealm/groups/one\",\n \"@type\": \"Group\",\n \"realm\": \"myrealm\",\n \"group\": \"one\"\n }\n }\n ],\n \"_createdAt\": \"2018-09-17T14:55:42.939Z\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/acls.json\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_deprecated\": false,\n \"_path\": \"/\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/acls\",\n \"_updatedAt\": \"2018-09-17T15:05:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n },\n {\n \"@id\": \"http://localhost:8080/v1/acls/myorg\",\n \"@type\": \"AccessControlList\",\n \"acl\": [\n {\n \"permissions\": [\n \"acls/write\"\n ],\n \"identity\": {\n \"@id\": \"http://localhost:8080/v1/realms/myrealm/groups/two\",\n \"@type\": \"Group\",\n \"realm\": \"myrealm\",\n \"group\": \"two\"\n }\n }\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/acls.json\",\n \"_createdAt\": \"2018-09-17T14:00:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/alice\",\n \"_deprecated\": false,\n \"_path\": \"/myorg\",\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/acls/myorg\",\n \"_updatedAt\": \"2018-09-17T14:05:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/alice\"\n },\n {\n \"@id\": \"http://localhost:8080/v1/acls/myorg2\",\n \"@type\": \"nxv:AccessControlList\",\n \"acl\": [\n {\n \"permissions\": [\n \"other\"\n ],\n \"identity\": {\n \"@id\": \"http://localhost:8080/v1/realms/myrealm/groups/one\",\n \"@type\": \"Group\",\n \"realm\": \"myrealm\",\n \"group\": \"one\"\n }\n }\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/acls.json\",\n \"_createdAt\": \"2018-09-17T14:00:42.939Z\",\n \"_deprecated\": false,\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/alice\",\n \"_path\": \"/myorg2\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/acls/myorg2\",\n \"_updatedAt\": \"2018-09-17T14:05:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/alice\"\n }\n ]\n}","title":"List"},{"location":"/docs/delta/api/acls-api.html#acl-server-sent-events","text":"This endpoint allows clients to receive automatic updates from the ACLs in a streaming fashion.\nGET /v1/acls/events\nwhere Last-Event-Id is an optional HTTP Header that identifies the last consumed ACL event. It can be used for cases when a client does not want to retrieve the whole event stream, but to start after a specific event.\nThe response contains a series of ACL events, represented in the following way\ndata:{payload}\nevent:{type}\nid:{id}\nwhere…\n{payload}: Json - is the actual payload of the current ACL {type}: String - is a type identifier for the current ACL. Possible types are: AclAppended, AclSubtracted, AclReplaced, AclDeleted {id}: String - is the identifier of the ACL event. It can be used in the Last-Event-Id HTTP Header\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/acls/events\" Response copysourcedata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/acls.json\"],\"@type\":\"AclReplaced\",\"acl\":[{\"identity\":{\"@id\":\"http://localhost:8080/v1/realms/myrealm/groups/a-group\",\"@type\":\"Group\",\"group\":\"a-group\",\"realm\":\"myrealm\"},\"permissions\":[\"projects/read\"]},{\"identity\":{\"@id\":\"http://localhost:8080/v1/realms/realm/groups/some-group\",\"@type\":\"Group\",\"group\":\"some-group\",\"realm\":\"realm\"},\"permissions\":[\"projects/read\",\"projects/write\"]},{\"identity\":{\"@id\":\"http://localhost:8080/v1/realms/realm/users/alice\",\"@type\":\"User\",\"realm\":\"realm\",\"subject\":\"alice\"},\"permissions\":[\"acls/read\",\"acls/write\"]}],\"_aclId\":\"http://localhost:8080/v1/acls/org1\",\"_instant\":\"2021-05-11T11:03:06.071Z\",\"_path\":\"/org1\",\"_rev\":1,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:AclReplaced\nid:76848d80-b248-11eb-a0d9-6dedbaa155f8\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/acls.json\"],\"@type\":\"AclReplaced\",\"acl\":[{\"identity\":{\"@id\":\"http://localhost:8080/v1/realms/myrealm/groups/a-group\",\"@type\":\"Group\",\"group\":\"a-group\",\"realm\":\"myrealm\"},\"permissions\":[\"projects/read\"]},{\"identity\":{\"@id\":\"http://localhost:8080/v1/realms/realm/groups/some-group\",\"@type\":\"Group\",\"group\":\"some-group\",\"realm\":\"realm\"},\"permissions\":[\"projects/read\",\"projects/write\"]},{\"identity\":{\"@id\":\"http://localhost:8080/v1/realms/realm/users/alice\",\"@type\":\"User\",\"realm\":\"realm\",\"subject\":\"alice\"},\"permissions\":[\"acls/read\",\"acls/write\"]}],\"_aclId\":\"http://localhost:8080/v1/acls/org1\",\"_instant\":\"2021-05-11T11:03:32.596Z\",\"_path\":\"/org1\",\"_rev\":2,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:AclReplaced\nid:8653f250-b248-11eb-a0d9-6dedbaa155f8\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/acls.json\"],\"@type\":\"AclSubtracted\",\"acl\":[{\"identity\":{\"@id\":\"http://localhost:8080/v1/realms/myrealm/groups/a-group\",\"@type\":\"Group\",\"group\":\"a-group\",\"realm\":\"myrealm\"},\"permissions\":[\"projects/read\"]}],\"_aclId\":\"http://localhost:8080/v1/acls/org1\",\"_instant\":\"2021-05-11T11:03:52.875Z\",\"_path\":\"/org1\",\"_rev\":3,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:AclSubtracted\nid:926a46c0-b248-11eb-a0d9-6dedbaa155f8\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/acls.json\"],\"@type\":\"AclAppended\",\"acl\":[{\"identity\":{\"@id\":\"http://localhost:8080/v1/realms/myrealm/groups/a-group\",\"@type\":\"Group\",\"group\":\"a-group\",\"realm\":\"myrealm\"},\"permissions\":[\"own\",\"other\"]}],\"_aclId\":\"http://localhost:8080/v1/acls/org1\",\"_instant\":\"2021-05-11T11:04:54.614Z\",\"_path\":\"/org1\",\"_rev\":4,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:AclAppended\nid:b736bf60-b248-11eb-a0d9-6dedbaa155f8\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/acls.json\"],\"@type\":\"AclDeleted\",\"_aclId\":\"http://localhost:8080/v1/acls/org1\",\"_instant\":\"2021-05-11T11:05:15.919Z\",\"_path\":\"/org1\",\"_rev\":5,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:AclDeleted\nid:c3e9c900-b248-11eb-a0d9-6dedbaa155f8","title":"ACL Server Sent Events"},{"location":"/docs/delta/api/user-permissions-api.html","text":"","title":"User Permissions"},{"location":"/docs/delta/api/user-permissions-api.html#user-permissions","text":"A user of delta is given certain permissions. This is done using the ACLs API\nSometimes for the sake of simplicity, it can be easier to ask whether the current user has a specific permission in a specific context. This is why the user permissions API exists\nNote The described endpoints are experimental and the responses structure might change in the future.\nRequests All requests should have no body Responses A response will have a 204 (no content) status code if the user is authorised A response will have a 403 (forbidden) status code if the user is not authorised","title":"User Permissions"},{"location":"/docs/delta/api/user-permissions-api.html#standard-permissions","text":"This operation determines whether the current logged in user has a specific permission in a specific context\nHEAD /v1/user/permissions/{org_label}/{project_label}?permission={permission}\nwhere - {permission}: String - the permission to check","title":"Standard permissions"},{"location":"/docs/delta/api/user-permissions-api.html#storage-access-permissions","text":"This operation determines whether the current logged in user would be able to access files on a specific storage\nHEAD /v1/user/permissions/{org_label}/{project_label}?storage={storage_id}&type={access_type}\nwhere - {storage_id}: String - the id of the storage - {access_type}: String - the access type of the storage. Can be read or write","title":"Storage access permissions"},{"location":"/docs/delta/api/orgs-api.html","text":"","title":"Organizations"},{"location":"/docs/delta/api/orgs-api.html#organizations","text":"Organizations are rooted in the /v1/orgs path and are used to group and categorize sub-resources.\nAuthorization notes When creating organizations, the caller must have organizations/create permissions on the current path of the organization or /. When updating organizations, the caller must have organizations/write permissions on the current path of the organization or /. When reading organizations, the caller must have organizations/read permissions on the current path of the organization or /. Please visit Authentication & authorization section to learn more about it.","title":"Organizations"},{"location":"/docs/delta/api/orgs-api.html#payload","text":"{\n \"description\": \"{description}\"\n}\n…where {description} as an optional String providing some descriptive information about the organization.","title":"Payload"},{"location":"/docs/delta/api/orgs-api.html#create","text":"PUT /v1/orgs/{label}\n {...}\n…where {label} is the user friendly name assigned to this organization. The semantics of the label should be consistent with the type of data provided by its sub-resources, since it’ll be a part of the sub-resources’ URI.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/orgs/myorg\" \\\n -d '{\"description\": \"organization description\"}' Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/organizations-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/orgs/myorg\",\n \"@type\": \"Organization\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/organizations.json\",\n \"_createdAt\": \"2021-05-10T13:31:24.223Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_label\": \"myorg\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/orgs/myorg\",\n \"_updatedAt\": \"2021-05-10T13:31:24.223Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"2393f414-8fff-4e79-b622-d7a887649952\"\n}","title":"Create"},{"location":"/docs/delta/api/orgs-api.html#update","text":"This operation overrides the organization payload (description field).\nIn order to ensure a client does not perform any changes to an organization without having had seen the previous revision of the organization, the last revision needs to be passed as a query parameter.\nPUT /v1/orgs/{label}?rev={previous_rev}\n {...}\n… where\n{previous_rev}: Number - is the last known revision for the organization. {label}: String - is the user friendly name that identifies this organization.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/orgs/myorg?rev=1\" \\\n -d '{\"description\": \"organization updated description\"}' Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/organizations-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/orgs/myorg\",\n \"@type\": \"Organization\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/organizations.json\",\n \"_createdAt\": \"2021-05-10T13:31:24.223Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_label\": \"myorg\",\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/orgs/myorg\",\n \"_updatedAt\": \"2021-05-10T13:31:53.579Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"2393f414-8fff-4e79-b622-d7a887649952\"\n}","title":"Update"},{"location":"/docs/delta/api/orgs-api.html#deprecate","text":"Locks the organization, so that no further operations can be performed on the organization or on the child resources.\nDeprecating an organization is considered to be an update as well.\nDELETE /v1/orgs/{label}?rev={previous_rev}\n… where\n{label}: String - is the user friendly name that identifies this organization. {previous_rev}: Number - is the last known revision for the organization.\nExample\nRequest copysourcecurl -X DELETE \\\n \"http://localhost:8080/v1/orgs/myorg?rev=2\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/organizations-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/orgs/myorg\",\n \"@type\": \"Organization\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/organizations.json\",\n \"_createdAt\": \"2021-05-10T13:31:24.223Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_label\": \"myorg\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/orgs/myorg\",\n \"_updatedAt\": \"2021-05-10T13:32:31.197Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"2393f414-8fff-4e79-b622-d7a887649952\"\n}","title":"Deprecate"},{"location":"/docs/delta/api/orgs-api.html#undeprecate","text":"Reverses the deprecation of an organisation.\nUndeprecating an organization is considered to be an update as well.\nPUT /v1/orgs/{label}/undeprecate?rev={previous_rev}\n… where\n{label}: String - is the user friendly name that identifies this organization. {previous_rev}: Number - is the last known revision for the organization.\nExample\nRequest copysourcecurl -X PUT \\\n \"http://localhost:8080/v1/orgs/myorg/undeprecate?rev=2\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/organizations-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/orgs/myorg\",\n \"@type\": \"Organization\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/organizations.json\",\n \"_createdAt\": \"2021-05-10T13:31:24.223Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_label\": \"myorg\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/orgs/myorg\",\n \"_updatedAt\": \"2021-05-10T13:32:31.197Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"2393f414-8fff-4e79-b622-d7a887649952\"\n}","title":"Undeprecate"},{"location":"/docs/delta/api/orgs-api.html#delete","text":"Permanently delete an organization containing no projects. If there is a project, returns 409 Conflict.\nThe caller must have organizations/delete permissions.\nDELETE /v1/orgs/{label}?prune=true\n… where\n{label}: String - is the user friendly name that identifies this organization. prune: a flag to make permanent deletion explicit. To avoid mistakes, if prune=true then rev cannot be present and a 400 Bad Request will be returned.\nExample\nRequest copysourcecurl -X DELETE \\\n \"http://localhost:8080/v1/orgs/myorg?prune=true\"","title":"Delete"},{"location":"/docs/delta/api/orgs-api.html#fetch-current-version-","text":"GET /v1/orgs/{label}\n…where {label} is the user friendly String name that identifies this organization.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/orgs/myorg\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/organizations.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/orgs/myorg\",\n \"@type\": \"Organization\",\n \"description\": \"organization updated description\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/organizations.json\",\n \"_createdAt\": \"2021-05-10T13:31:24.223Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_label\": \"myorg\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/orgs/myorg\",\n \"_updatedAt\": \"2021-05-10T13:32:31.197Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"2393f414-8fff-4e79-b622-d7a887649952\"\n}","title":"Fetch (current version)"},{"location":"/docs/delta/api/orgs-api.html#fetch-specific-version-","text":"GET /v1/orgs/{label}?rev={rev}\n… where\n{rev}: Number - is the revision of the organization to be retrieved. {label}: String - is the user friendly name that identifies this organization.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/orgs/myorg?rev=3\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/organizations.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/orgs/myorg\",\n \"@type\": \"Organization\",\n \"description\": \"organization updated description\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/organizations.json\",\n \"_createdAt\": \"2021-05-10T13:31:24.223Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_label\": \"myorg\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/orgs/myorg\",\n \"_updatedAt\": \"2021-05-10T13:32:31.197Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"2393f414-8fff-4e79-b622-d7a887649952\"\n}","title":"Fetch (specific version)"},{"location":"/docs/delta/api/orgs-api.html#list","text":"GET /v1/orgs?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &label={label}\n &sort={sort}\nwhere…\n{from}: Number - the offset from which to start the listings. Defaults to 0 {size}: Number - the maximum amount fo results to be returned. Defaults to 30 {deprecated}: Boolean - filter the resulting organizations based on their deprecation status. Optional parameter. {rev}: Number - filter the resulting organizations based on their revision value. Optional parameter. {createdBy}: Iri - filter the resulting organizations based on their creator. Optional parameter. {updatedBy}: Iri - filter the resulting organizations based on the person which performed the last update. Optional parameter. {label}: String - filter the resulting organizations based on its label. E.g.: label=my will match any organization’s label that contains the string my. Optional parameter. {sort}: String - orders the resulting organizations based on its metadata fields. Optional parameter that can appear multiple times, further specifying the ordering criteria. Defaults to _createdAt, ordering organizations by creation date.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/orgs?label=my\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/organizations.json\"\n ],\n \"_total\": 1,\n \"_results\": [\n {\n \"@id\": \"http://localhost:8080/v1/orgs/myorg\",\n \"@type\": \"Organization\",\n \"description\": \"organization updated description\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/organizations.json\",\n \"_createdAt\": \"2021-05-10T13:31:24.223Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_label\": \"myorg\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/orgs/myorg\",\n \"_updatedAt\": \"2021-05-10T13:32:31.197Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"2393f414-8fff-4e79-b622-d7a887649952\"\n }\n ]\n}","title":"List"},{"location":"/docs/delta/api/orgs-api.html#server-sent-events","text":"This endpoint allows clients to receive automatic updates from the organizations in a streaming fashion.\nGET /v1/orgs/events\nwhere Last-Event-Id is an optional HTTP Header that identifies the last consumed organization event. It can be used for cases when a client does not want to retrieve the whole event stream, but to start after a specific event.\nThe response contains a series of organization events, represented in the following way\ndata:{payload}\nevent:{type}\nid:{id}\nwhere…\n{payload}: Json - is the actual payload of the current organization event {type}: String - is a type identifier for the current organization. Possible types are: OrganizationCreated, OrganizationUpdated and OrganizationDeprecated {id}: String - is the identifier of the organization event. It can be used in the Last-Event-Id HTTP Header\nExample\nRequest copysourcecurl -H \"Last-Event-Id: 03d578d0-b194-11eb-9673-bd8b74949729\" \\\n \"http://localhost:8080/v1/orgs/events\" Response copysourcedata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/organizations.json\"],\"@type\":\"OrganizationUpdated\",\"description\":\"organization updated description\",\"_instant\":\"2021-05-10T13:31:53.579Z\",\"_label\":\"myorg\",\"_organizationId\":\"http://localhost:8080/v1/orgs/myorg\",\"_rev\":2,\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_uuid\":\"2393f414-8fff-4e79-b622-d7a887649952\"}\nevent:OrganizationUpdated\nid:1550b8e0-b194-11eb-9673-bd8b74949729\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/organizations.json\"],\"@type\":\"OrganizationDeprecated\",\"_instant\":\"2021-05-10T13:32:31.197Z\",\"_label\":\"myorg\",\"_organizationId\":\"http://localhost:8080/v1/orgs/myorg\",\"_rev\":3,\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_uuid\":\"2393f414-8fff-4e79-b622-d7a887649952\"}\nevent:OrganizationDeprecated\nid:2bbcc600-b194-11eb-9673-bd8b74949729","title":"Server Sent Events"},{"location":"/docs/delta/api/projects-api.html","text":"","title":"Projects"},{"location":"/docs/delta/api/projects-api.html#projects","text":"Projects belong to an organization and are rooted in the corresponding /v1/projects/{org_label} path. The purposes of projects are:\nGroup and categorize sub-resources. Define global settings that apply for operations on all sub-resources. Provide isolation from resources inside other projects. This behavior can be partially changed by defining resolvers and aggregated views [1] [2]\nAuthorization notes When creating projects, the caller must have projects/create permissions on the current path of the project or the ancestor paths. When updating projects, the caller must have projects/write permissions on the current path of the project or the ancestor paths. When reading projects, the caller must have projects/read permissions on the current path of the project or the ancestor paths. When deleting projects, the caller must have projects/delete permissions on the current path of the project or the ancestor paths. Please visit Authentication & authorization section to learn more about it.","title":"Projects"},{"location":"/docs/delta/api/projects-api.html#payload","text":"{\n \"description\": \"{description}\",\n \"base\": \"{base}\",\n \"vocab\": \"{vocab}\",\n \"apiMappings\": [\n {\n \"prefix\": \"{prefix}\",\n \"namespace\": \"{namespace}\"\n },\n ...\n ]\n}\nwhere…\n{description}: String - an optional description for this project. {base}: IRI - the JSON-LD @base used for generating fully qualified IRI ids when performing operations on a sub-resource URIs and payloads (when no other @base is present in the @context payload). E.g.: Let base be http://localhost:8080/. When a resource is created and no @id is present in the payload, the platform will generate an @id which will look like http://localhost:8080/{UUID}. This field is optional and will default to {{base}}/v1/resources/{org_label}/{project_label}/_/. {vocab}: IRI - the JSON-LD @vocab for all unqualified predicates in children resources’ payload (when no other @vocab is present in the @context payload and the resources’ payload is not a JSON-LD aware payload). E.g. if the vocab is set to https://schema.org/, when a field a resource is created and a field name is present in the payload, it will be expanded to http://schema.org/name by the system during indexing and fetch operations. This field is optional and will default to {{base}}/v1/vocabs/{org_label}/{project_label}/. {apiMappings}: Json object - provides a convenient way to compact/expand URIs when performing operations on a sub-resource. This field is optional.","title":"Payload"},{"location":"/docs/delta/api/projects-api.html#api-mappings","text":"The apiMappings Json object array maps each prefix to its namespace. This is useful in order to generate IRI ids on API endpoints using the prefix as an alias or curie instead of a fully expanded url encoded IRI.\nNote The api mappings only apply to children resources URIs but not to their payload. Please, use the JSON-LD @context to achieve compaction/expansion on resources’ payload.\nHaving the following apiMappings:\n{\n \"apiMappings\": [\n {\n \"prefix\": \"{prefix}\",\n \"namespace\": \"{namespace}\"\n },\n { ... }\n ]\n}\nwhere…\n{prefix}: String - a curie or an alias. {namespace}: IRI - the actual resolution of the prefix field.\nLet’s see an example:\n{\n \"apiMappings\": [\n {\n \"prefix\": \"person\",\n \"namespace\": \"http://example.com/some/person\"\n },\n {\n \"prefix\": \"schemas\",\n \"namespace\": \"https://bluebrainnexus.io/schemas/\"\n }\n ]\n }\nThe previous project api mappings allows us to create a schema using the following endpoints:\n/v1/schemas/{org_label}/{project_label}/person. The @id of the resulting schema will be http://example.com/some/person /v1/schemas/{org_label}/{project_label}/schema:other. The @id of the resulting schema will be https://bluebrainnexus.io/schemas/other","title":"API Mappings"},{"location":"/docs/delta/api/projects-api.html#create","text":"PUT /v1/projects/{org_label}/{label}\n {...}\n…where {label} is the user friendly name assigned to this project. The semantics of the label should be consistent with the type of data provided by its sub-resources, since it’ll be a part of the sub-resources’ URI.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/projects/myorg/myproject\" \\\n -d '{\n \"description\": \"description\",\n \"vocab\": \"https://schema.org/\",\n \"apiMappings\": [\n {\n \"prefix\": \"my\",\n \"namespace\": \"http://example.com/my\"\n }\n ]\n }' Payload copysource{\n \"description\": \"description\",\n \"vocab\": \"https://schema.org/\",\n \"apiMappings\": [\n {\n \"prefix\": \"my\",\n \"namespace\": \"http://example.com/my\"\n }\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/projects-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"@type\": \"Project\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/projects.json\",\n \"_createdAt\": \"2021-05-10T15:43:36.567Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_markedForDeletion\": false,\n \"_effectiveApiMappings\": [\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/\",\n \"_prefix\": \"nxv\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\",\n \"_prefix\": \"documents\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultInProject\",\n \"_prefix\": \"defaultResolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"resource\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"_\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_prefix\": \"view\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_prefix\": \"schema\"\n },\n {\n \"_namespace\": \"http://example.com/my\",\n \"_prefix\": \"my\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_prefix\": \"storage\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_prefix\": \"file\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/resolvers.json\",\n \"_prefix\": \"resolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex\",\n \"_prefix\": \"graph\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/archives.json\",\n \"_prefix\": \"archive\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"_prefix\": \"defaultStorage\"\n }\n ],\n \"_label\": \"myproject\",\n \"_organizationLabel\": \"myorg\",\n \"_organizationUuid\": \"41f169b8-7ae4-4878-a7ff-6309cb54ae2f\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_updatedAt\": \"2021-05-10T15:43:36.567Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"813cfa79-75fc-48eb-b931-abb21edb082b\"\n}","title":"Create"},{"location":"/docs/delta/api/projects-api.html#update","text":"This operation overrides the project payload.\nIn order to ensure a client does not perform any changes to a project without having had seen the previous revision of the project, the last revision needs to be passed as a query parameter.\nPUT /v1/projects/{org_label}/{label}?rev={previous_rev}\n {...}\n… where\n{previous_rev}: Number - the last known revision for the organization. {label}: String - the user friendly name that identifies this project.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/projects/myorg/myproject?rev=1\" \\\n -d '{\n \"description\": \"updated description\",\n \"vocab\": \"https://schema.org/\"\n }' Payload copysource{\n \"description\": \"updated description\",\n \"vocab\": \"https://schema.org/\"\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/projects-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"@type\": \"Project\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/projects.json\",\n \"_createdAt\": \"2021-05-10T15:43:36.567Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_markedForDeletion\": false,\n \"_effectiveApiMappings\": [\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/\",\n \"_prefix\": \"nxv\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\",\n \"_prefix\": \"documents\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultInProject\",\n \"_prefix\": \"defaultResolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_prefix\": \"schema\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"resource\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"_\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_prefix\": \"view\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_prefix\": \"storage\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_prefix\": \"file\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/resolvers.json\",\n \"_prefix\": \"resolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex\",\n \"_prefix\": \"graph\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/archives.json\",\n \"_prefix\": \"archive\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"_prefix\": \"defaultStorage\"\n }\n ],\n \"_label\": \"myproject\",\n \"_organizationLabel\": \"myorg\",\n \"_organizationUuid\": \"41f169b8-7ae4-4878-a7ff-6309cb54ae2f\",\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_updatedAt\": \"2021-05-10T15:45:20.769Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"813cfa79-75fc-48eb-b931-abb21edb082b\"\n}","title":"Update"},{"location":"/docs/delta/api/projects-api.html#deprecate","text":"Locks the project, so no further operations (except for deletion) can be performed on it or on the children resources.\nDeprecating a project is considered to be an update as well.\nDELETE /v1/projects/{org_label}/{label}?rev={previous_rev}\n… where\n{previous_rev}: Number - the last known revision for the organization. {label}: String - the user friendly name that identifies this project.\nExample\nRequest copysourcecurl -X DELETE \\\n \"http://localhost:8080/v1/projects/myorg/myproject?rev=2\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/projects-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"@type\": \"Project\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/projects.json\",\n \"_createdAt\": \"2021-05-10T15:43:36.567Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_markedForDeletion\": false,\n \"_effectiveApiMappings\": [\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/\",\n \"_prefix\": \"nxv\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\",\n \"_prefix\": \"documents\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultInProject\",\n \"_prefix\": \"defaultResolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_prefix\": \"schema\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"resource\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"_\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_prefix\": \"view\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_prefix\": \"storage\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_prefix\": \"file\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/resolvers.json\",\n \"_prefix\": \"resolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex\",\n \"_prefix\": \"graph\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/archives.json\",\n \"_prefix\": \"archive\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"_prefix\": \"defaultStorage\"\n }\n ],\n \"_label\": \"myproject\",\n \"_organizationLabel\": \"myorg\",\n \"_organizationUuid\": \"41f169b8-7ae4-4878-a7ff-6309cb54ae2f\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_updatedAt\": \"2021-05-10T15:47:40.659Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"813cfa79-75fc-48eb-b931-abb21edb082b\"\n}","title":"Deprecate"},{"location":"/docs/delta/api/projects-api.html#undeprecate","text":"Reverses the deprecation of a project.\nUndeprecating a project is considered to be an update as well.\nPUT /v1/projects/{org_label}/{label}/undeprecate?rev={previous_rev}\n… where\n{previous_rev}: Number - the last known revision for the organization. {label}: String - the user friendly name that identifies this project.\nExample\nRequest copysourcecurl -X PUT \\\n \"http://localhost:8080/v1/projects/myorg/myproject/undeprecate?rev=2\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/projects-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"@type\": \"Project\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/projects.json\",\n \"_createdAt\": \"2021-05-10T15:43:36.567Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_markedForDeletion\": false,\n \"_effectiveApiMappings\": [\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/\",\n \"_prefix\": \"nxv\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\",\n \"_prefix\": \"documents\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultInProject\",\n \"_prefix\": \"defaultResolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_prefix\": \"schema\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"resource\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"_\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_prefix\": \"view\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_prefix\": \"storage\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_prefix\": \"file\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/resolvers.json\",\n \"_prefix\": \"resolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex\",\n \"_prefix\": \"graph\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/archives.json\",\n \"_prefix\": \"archive\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"_prefix\": \"defaultStorage\"\n }\n ],\n \"_label\": \"myproject\",\n \"_organizationLabel\": \"myorg\",\n \"_organizationUuid\": \"41f169b8-7ae4-4878-a7ff-6309cb54ae2f\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_updatedAt\": \"2021-05-10T15:47:40.659Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"813cfa79-75fc-48eb-b931-abb21edb082b\"\n}","title":"Undeprecate"},{"location":"/docs/delta/api/projects-api.html#delete","text":"Deletes the target project and all its resources.\nOnce the request is processed, an asynchronous task gets triggered and deletes the data generated from each resource type (e.g.: the indices generated by the view resources, the binaries generated by the file resources). During this time, no write operation can be performed at the project level nor at the resources level for the target project. When the task is finished, the target project can be recreated if desired.\nDeletion only works when the configuration flag app.projects.deletion.enabled is set to true and the current project is not referenced somewhere else (e.g.: in a CrossProjectResolver, an AggregatedView, etc.).\nDELETE /v1/projects/{org_label}/{label}?rev={previous_rev}&prune=true\n… where\n{previous_rev}: Number - the last known revision for the organization. {label}: String - the user friendly name that identifies this project.\nRequest copysourcecurl -L -X DELETE \\\n \"http://localhost:8080/v1/projects/myorg/myproject?rev=2&prune=true\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/projects-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"@type\": \"Project\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/projects.json\",\n \"_createdAt\": \"2021-05-10T15:43:36.567Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_markedForDeletion\": true,\n \"_effectiveApiMappings\": [\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/\",\n \"_prefix\": \"nxv\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\",\n \"_prefix\": \"documents\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultInProject\",\n \"_prefix\": \"defaultResolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_prefix\": \"schema\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"resource\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"_\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_prefix\": \"view\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_prefix\": \"storage\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_prefix\": \"file\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/resolvers.json\",\n \"_prefix\": \"resolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex\",\n \"_prefix\": \"graph\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/archives.json\",\n \"_prefix\": \"archive\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"_prefix\": \"defaultStorage\"\n }\n ],\n \"_label\": \"myproject\",\n \"_organizationLabel\": \"myorg\",\n \"_organizationUuid\": \"41f169b8-7ae4-4878-a7ff-6309cb54ae2f\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_updatedAt\": \"2021-05-10T15:47:40.659Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"813cfa79-75fc-48eb-b931-abb21edb082b\"\n}","title":"Delete"},{"location":"/docs/delta/api/projects-api.html#fetch-current-version-","text":"GET /v1/projects/{org_label}/{label}\n…where {label} is the user friendly name that identifies this project.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/projects/myorg/myproject\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/projects.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"@type\": \"Project\",\n \"apiMappings\": [],\n \"base\": \"http://localhost:8080/v1/resources/myorg/myproject/_/\",\n \"description\": \"updated description\",\n \"vocab\": \"https://schema.org/\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/projects.json\",\n \"_createdAt\": \"2021-05-10T15:43:36.567Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_markedForDeletion\": false,\n \"_effectiveApiMappings\": [\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/\",\n \"_prefix\": \"nxv\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\",\n \"_prefix\": \"documents\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultInProject\",\n \"_prefix\": \"defaultResolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_prefix\": \"schema\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"resource\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"_\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_prefix\": \"view\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_prefix\": \"storage\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_prefix\": \"file\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/resolvers.json\",\n \"_prefix\": \"resolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex\",\n \"_prefix\": \"graph\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/archives.json\",\n \"_prefix\": \"archive\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"_prefix\": \"defaultStorage\"\n }\n ],\n \"_label\": \"myproject\",\n \"_organizationLabel\": \"myorg\",\n \"_organizationUuid\": \"41f169b8-7ae4-4878-a7ff-6309cb54ae2f\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_updatedAt\": \"2021-05-10T15:47:40.659Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"813cfa79-75fc-48eb-b931-abb21edb082b\"\n}\nIf the redirect to Fusion feature is enabled and if the Accept header is set to text/html, a redirection to the fusion representation of the project will be returned.","title":"Fetch (current version)"},{"location":"/docs/delta/api/projects-api.html#fetch-specific-version-","text":"GET /v1/projects/{org_label}/{label}?rev={rev}\n…where\n{label}: String - the user friendly name that identifies this project. {rev}: Number - the revision of the project to be retrieved.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/projects/myorg/myproject?rev=1\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/projects.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"@type\": \"Project\",\n \"apiMappings\": [\n {\n \"namespace\": \"http://example.com/my\",\n \"prefix\": \"my\"\n }\n ],\n \"base\": \"http://localhost:8080/v1/resources/myorg/myproject/_/\",\n \"description\": \"description\",\n \"vocab\": \"https://schema.org/\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/projects.json\",\n \"_createdAt\": \"2021-05-10T15:43:36.567Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_markedForDeletion\": false,\n \"_effectiveApiMappings\": [\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/\",\n \"_prefix\": \"nxv\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\",\n \"_prefix\": \"documents\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultInProject\",\n \"_prefix\": \"defaultResolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"resource\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"_\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_prefix\": \"view\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_prefix\": \"schema\"\n },\n {\n \"_namespace\": \"http://example.com/my\",\n \"_prefix\": \"my\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_prefix\": \"storage\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_prefix\": \"file\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/resolvers.json\",\n \"_prefix\": \"resolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex\",\n \"_prefix\": \"graph\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/archives.json\",\n \"_prefix\": \"archive\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"_prefix\": \"defaultStorage\"\n }\n ],\n \"_label\": \"myproject\",\n \"_organizationLabel\": \"myorg\",\n \"_organizationUuid\": \"41f169b8-7ae4-4878-a7ff-6309cb54ae2f\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_updatedAt\": \"2021-05-10T15:43:36.567Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"813cfa79-75fc-48eb-b931-abb21edb082b\"\n}","title":"Fetch (specific version)"},{"location":"/docs/delta/api/projects-api.html#list","text":"GET /v1/projects?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &label={label}\n &sort={sort}\nor the variation to filter a specific organization {org_label}:\nGET /v1/projects/{org_label}?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &label={label}\n &sort={sort}\nwhere…\n{from}: Number - the offset from which to start the listings. Defaults to 0 {size}: Number - the maximum amount fo results to be returned. Defaults to 30 {deprecated}: Boolean - filter the resulting projects based on their deprecation status. Optional parameter. {rev}: Number - filter the resulting projects based on their revision value. Optional parameter. {createdBy}: Iri - filter the resulting projects based on their creator. Optional parameter. {updatedBy}: Iri - filter the resulting projects based on the person which performed the last update. Optional parameter. {label}: String - filter the resulting projects based on its label. E.g.: label=my will match any project’s label that contains the string my. Optional parameter. {sort}: String - orders the resulting projects based on its metadata fields. Optional parameter that can appear multiple times, further specifying the ordering criteria. Defaults to _createdAt, ordering projects by creation date.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/projects?label=my\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/projects.json\"\n ],\n \"_total\": 1,\n \"_results\": [\n {\n \"@id\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"@type\": \"Project\",\n \"apiMappings\": [],\n \"base\": \"http://localhost:8080/v1/resources/myorg/myproject/_/\",\n \"description\": \"updated description\",\n \"vocab\": \"https://schema.org/\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/projects.json\",\n \"_createdAt\": \"2021-05-10T15:43:36.567Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_markedForDeletion\": false,\n \"_effectiveApiMappings\": [\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/\",\n \"_prefix\": \"nxv\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\",\n \"_prefix\": \"documents\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultInProject\",\n \"_prefix\": \"defaultResolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_prefix\": \"schema\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"resource\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_prefix\": \"_\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_prefix\": \"view\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_prefix\": \"storage\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_prefix\": \"file\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/resolvers.json\",\n \"_prefix\": \"resolver\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex\",\n \"_prefix\": \"graph\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/schemas/archives.json\",\n \"_prefix\": \"archive\"\n },\n {\n \"_namespace\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"_prefix\": \"defaultStorage\"\n }\n ],\n \"_label\": \"myproject\",\n \"_organizationLabel\": \"myorg\",\n \"_organizationUuid\": \"41f169b8-7ae4-4878-a7ff-6309cb54ae2f\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_updatedAt\": \"2021-05-10T15:47:40.659Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"813cfa79-75fc-48eb-b931-abb21edb082b\"\n }\n ]\n}","title":"List"},{"location":"/docs/delta/api/projects-api.html#list-deletions","text":"Lists all the projects that were deleted or are in the process to be deleted.\nGET /v1/projects/deletions\nRequest copysourcecurl \"http://localhost:8080/v1/projects/deletions\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/deletion-status.json\"\n ],\n \"_total\": 1,\n \"_results\": [\n {\n \"progress\": \"ResourcesDeleted\",\n \"_createdAt\": \"2021-08-31T12:50:48.305Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_finished\": true,\n \"_project\": \"myorg/myproject\",\n \"_projectCreatedAt\": \"2021-08-31T12:49:19.404Z\",\n \"_projectCreatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_self\": \"http://localhost:8080/v1/projects/myorg/myproject/deletions/5d4e830b-39ad-4c8f-8c28-f63a94fbad63\",\n \"_updatedAt\": \"2021-08-31T12:50:55.305Z\",\n \"_uuid\": \"5d4e830b-39ad-4c8f-8c28-f63a94fbad63\"\n }\n ]\n}","title":"List deletions"},{"location":"/docs/delta/api/projects-api.html#server-sent-events","text":"This endpoint allows clients to receive automatic updates from the projects in a streaming fashion.\nGET /v1/projects/events\nwhere Last-Event-Id is an optional HTTP Header that identifies the last consumed project event. It can be used for cases when a client does not want to retrieve the whole event stream, but to start after a specific event.\nThe response contains a series of project events, represented in the following way\ndata:{payload}\nevent:{type}\nid:{id}\nwhere…\n{payload}: Json - is the actual payload of the current project {type}: String - is a type identifier for the current project. Possible types are: ProjectCreated, ProjectUpdated and ProjectDeprecated {id}: String - is the identifier of the project event. It can be used in the Last-Event-Id HTTP Header\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/projects/events\" Response copysourcedata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/projects.json\"],\"@type\":\"ProjectCreated\",\"apiMappings\":[{\"namespace\":\"http://example.com/my\",\"prefix\":\"my\"}],\"base\":\"http://localhost:8080/v1/resources/myorg/myproject/_/\",\"description\":\"description\",\"vocab\":\"https://schema.org/\",\"_instant\":\"2021-05-10T15:43:36.567Z\",\"_label\":\"myproject\",\"_organizationLabel\":\"myorg\",\"_organizationUuid\":\"41f169b8-7ae4-4878-a7ff-6309cb54ae2f\",\"_projectId\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_resourceId\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_rev\":1,\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_uuid\":\"813cfa79-75fc-48eb-b931-abb21edb082b\"}\nevent:ProjectCreated\nid:7bdd4bc0-b1a6-11eb-a162-35a8ee728fbb\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/projects.json\"],\"@type\":\"ProjectUpdated\",\"apiMappings\":[],\"base\":\"http://localhost:8080/v1/resources/myorg/myproject/_/\",\"description\":\"updated description\",\"vocab\":\"https://schema.org/\",\"_instant\":\"2021-05-10T15:45:20.769Z\",\"_label\":\"myproject\",\"_organizationLabel\":\"myorg\",\"_organizationUuid\":\"41f169b8-7ae4-4878-a7ff-6309cb54ae2f\",\"_projectId\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_resourceId\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_rev\":2,\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_uuid\":\"813cfa79-75fc-48eb-b931-abb21edb082b\"}\nevent:ProjectUpdated\nid:b9f8a620-b1a6-11eb-a162-35a8ee728fbb\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/projects.json\"],\"@type\":\"ProjectDeprecated\",\"_instant\":\"2021-05-10T15:47:40.659Z\",\"_label\":\"myproject\",\"_organizationLabel\":\"myorg\",\"_organizationUuid\":\"41f169b8-7ae4-4878-a7ff-6309cb54ae2f\",\"_projectId\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_resourceId\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_rev\":3,\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_uuid\":\"813cfa79-75fc-48eb-b931-abb21edb082b\"}\nevent:ProjectDeprecated\nid:0d5a5250-b1a7-11eb-a162-35a8ee728fbb","title":"Server Sent Events"},{"location":"/docs/delta/api/projects-api.html#fetch-statistics","text":"Note This endpoint is experimental and the response structure might change in the future.\nGET /v1/projects/{org_label}/{label}/statistics\nIt returns:\nthe dateTime of the latest consumed event (lastProcessedEventDateTime). the number of consumed events (eventsCount). the number of consumed resources (resourcesCount). A resource might be made of multiple events (create, update, deprecate), so this number will always be smaller or equal to eventsCount.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/projects/myorg/myproject/statistics\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/statistics.json\",\n \"lastProcessedEventDateTime\": \"2021-05-10T00:00:00Z\",\n \"eventsCount\": 10,\n \"resourcesCount\": 8\n}","title":"Fetch statistics"},{"location":"/docs/delta/api/projects-api.html#automatic-project-deletion","text":"Note This endpoint is experimental and the response structure might change in the future. The functionality is provided through the project-deletion plugin that is bundled with the software, but disabled by default. Due to the risk of inadvertently deleting unwanted projects, the plugin is disabled by default, but also provided in a different location than the default plugin location (the disabled sub-folder in the plugins folder). The plugin can be enabled by sym-linking or copying the plugin to the plugins folder and the configuring the plugin accordingly: enable the plugin -Dplugins.project-deletion.enabled=true adjust the inclusion and exclusion filters -Dplugins.project-deletion.included-projects.1=\".+\"\" and -Dplugins.project-deletion.excluded-projects.1=\".+protected.+\"\" For details on available configuration, please visit the plugin configuration.\nGET /v1/project-deletion/config\nIt returns the configuration of the project deletion plugin.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/project-deletion/config\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/project-deletion.json\",\n \"@type\": \"ProjectDeletionConfig\",\n \"_idleIntervalInSeconds\": 2592000,\n \"_idleCheckPeriodInSeconds\": 3600,\n \"_deleteDeprecatedProjects\": true,\n \"_includedProjects\": [\n \"some.+\"\n ],\n \"_excludedProjects\": [\n \"retained.+\"\n ]\n}","title":"Automatic project deletion"},{"location":"/docs/delta/api/quotas.html","text":"","title":"Quotas"},{"location":"/docs/delta/api/quotas.html#quotas","text":"Quotas are rooted in /v1/quotas collection.\nEach quota defines the maximum number of resources and events that can exist in a certain scope.\nQuotas are powered through static configuration (app.projects.quotas) and they cannot be modified at runtime.\nAuthorization notes When accessing the quotas endpoint, the caller must have quotas/read permissions on the current path of the project or the ancestor paths. Please visit Authentication & authorization section to learn more about it.","title":"Quotas"},{"location":"/docs/delta/api/quotas.html#fetch","text":"GET /v1/quotas/{org_label}/{project_label}\nThis endpoint returns information about the quotas configuration for the target project.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/quotas/myorg/myproject\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/quotas.json\",\n \"@type\": \"Quota\",\n \"events\": 4000,\n \"resources\": 2000\n}\nNote This resource endpoint is experimental and the response structure might change in the future.","title":"Fetch"},{"location":"/docs/delta/api/schemas-api.html","text":"","title":"Schemas"},{"location":"/docs/delta/api/schemas-api.html#schemas","text":"Schemas are rooted in the /v1/schemas/{org_label}/{project_label} collection. They define a set of rules and constraints using SHACL. Once those schemas are present, other resources can be created against them. Those resources won’t be successfully created unless they match the required constraints defined on the schema.\nEach schema…\nbelongs to a project identifier by the label {project_label} inside an organization identifier by the label {org_label} it is validated against the SHACL schema (version 20170720).\nAuthorization notes When modifying schemas, the caller must have schemas/write permissions on the current path of the project or the ancestor paths. When reading schemas, the caller must have resources/read permissions on the current path of the project or the ancestor paths. Please visit Authentication & authorization section to learn more about it.\nNote From Delta v1.5, remote contexts and owl:imports are only resolved during creates and updates. That means that when those get updated, the schemas importing them must be also updated to take the changes into account.","title":"Schemas"},{"location":"/docs/delta/api/schemas-api.html#indexing","text":"All the API calls modifying a schema (creation, update, tagging, deprecation) can specify whether the schema should be indexed synchronously or in the background. This behaviour is controlled using indexing query param, which can be one of two values:\nasync - (default value) the schema will be indexed asynchronously sync - the schema will be indexed synchronously and the API call won’t return until the indexing is finished","title":"Indexing"},{"location":"/docs/delta/api/schemas-api.html#create-using-post","text":"POST /v1/schemas/{org_label}/{project_label}\n {...}\nThe json payload:\nIf the @id value is found on the payload, this @id will be used. If the @id value is not found on the payload, an @id will be generated as follows: base:{UUID}. The base is the prefix defined on the resource’s project ({project_label}).\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/schemas/myorg/myproj\" \\\n -d \\\n'{\n \"@context\": {\n \"this\": \"http://localhost:8080/v1/schemas/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c/shapes\",\n \"ex\": \"http://localhost:9999/\"\n },\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"shapes\": [\n {\n \"@id\": \"this:MyShape\",\n \"@type\": \"sh:NodeShape\",\n \"nodeKind\": \"sh:BlankNodeOrIRI\",\n \"targetClass\": \"ex:Custom\",\n \"property\": [\n {\n \"path\": \"ex:name\",\n \"datatype\": \"xsd:string\",\n \"minCount\": 1\n },\n {\n \"path\": \"ex:number\",\n \"datatype\": \"xsd:integer\",\n \"minCount\": 1\n },\n {\n \"path\": \"ex:bool\",\n \"datatype\": \"xsd:boolean\",\n \"minCount\": 1\n }\n ]\n }\n ]\n}' Payload copysource{\n \"@context\": {\n \"this\": \"http://localhost:8080/v1/schemas/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c/shapes\",\n \"ex\": \"http://localhost:9999/\"\n },\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"shapes\": [\n {\n \"@id\": \"this:MyShape\",\n \"@type\": \"sh:NodeShape\",\n \"nodeKind\": \"sh:BlankNodeOrIRI\",\n \"targetClass\": \"ex:Custom\",\n \"property\": [\n {\n \"path\": \"ex:name\",\n \"datatype\": \"xsd:string\",\n \"minCount\": 1\n },\n {\n \"path\": \"ex:number\",\n \"datatype\": \"xsd:integer\",\n \"minCount\": 1\n },\n {\n \"path\": \"ex:bool\",\n \"datatype\": \"xsd:boolean\",\n \"minCount\": 1\n }\n ]\n }\n ]\n} Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/resource.json\",\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"@type\": \"Schema\",\n \"_incoming\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/outgoing\",\n \"_self\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T14:54:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Create using POST"},{"location":"/docs/delta/api/schemas-api.html#create-using-put","text":"This alternative endpoint to create a schema is useful in case the json payload does not contain an @id but you want to specify one. The @id will be specified in the last segment of the endpoint URI.\nPUT /v1/schemas/{org_label}/{project_label}/{schema_id}\n {...}\nNote that if the payload contains an @id different from the {schema_id}, the request will fail.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/schemas/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\" \\\n -d \\\n'{\n \"@context\": {\n \"this\": \"http://localhost:8080/v1/schemas/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c/shapes\",\n \"ex\": \"http://localhot:9999/\"\n },\n \"shapes\": [\n {\n \"@id\": \"this:MyShape\",\n \"@type\": \"sh:NodeShape\",\n \"nodeKind\": \"sh:BlankNodeOrIRI\",\n \"targetClass\": \"ex:Custom\",\n \"property\": [\n {\n \"path\": \"ex:name\",\n \"datatype\": \"xsd:string\",\n \"minCount\": 1\n },\n {\n \"path\": \"ex:number\",\n \"datatype\": \"xsd:integer\",\n \"minCount\": 1\n },\n {\n \"path\": \"ex:bool\",\n \"datatype\": \"xsd:boolean\",\n \"minCount\": 1\n }\n ]\n }\n ]\n}' Payload copysource{\n \"@context\": {\n \"this\": \"http://localhost:8080/v1/schemas/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c/shapes\",\n \"ex\": \"http://localhost:9999/\"\n },\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"shapes\": [\n {\n \"@id\": \"this:MyShape\",\n \"@type\": \"sh:NodeShape\",\n \"nodeKind\": \"sh:BlankNodeOrIRI\",\n \"targetClass\": \"ex:Custom\",\n \"property\": [\n {\n \"path\": \"ex:name\",\n \"datatype\": \"xsd:string\",\n \"minCount\": 1\n },\n {\n \"path\": \"ex:number\",\n \"datatype\": \"xsd:integer\",\n \"minCount\": 1\n },\n {\n \"path\": \"ex:bool\",\n \"datatype\": \"xsd:boolean\",\n \"minCount\": 1\n }\n ]\n }\n ]\n} Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/resource.json\",\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"@type\": \"Schema\",\n \"_incoming\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/outgoing\",\n \"_self\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T14:54:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Create using PUT"},{"location":"/docs/delta/api/schemas-api.html#update","text":"This operation overrides the payload.\nIn order to ensure a client does not perform any changes to a resource without having had seen the previous revision of the resource, the last revision needs to be passed as a query parameter.\nPUT /v1/schemas/{org_label}/{project_label}/{schema_id}?rev={previous_rev}\n {...}\n… where {previous_rev} is the last known revision number for the schema.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/schemas/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c?rev=1\" \\\n -d \\\n'{\n \"@context\": {\n \"this\": \"http://localhost:8080/v1/schemas/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c/shapes\",\n \"ex\": \"http://example.com/\"\n },\n \"shapes\": [\n {\n \"@id\": \"this:MyShape\",\n \"@type\": \"sh:NodeShape\",\n \"nodeKind\": \"sh:BlankNodeOrIRI\",\n \"targetClass\": \"ex:Custom\",\n \"property\": [\n {\n \"path\": \"ex:name\",\n \"datatype\": \"xsd:string\",\n \"minCount\": 1\n },\n {\n \"path\": \"ex:number\",\n \"datatype\": \"xsd:integer\",\n \"minCount\": 1\n },\n {\n \"path\": \"ex:bool\",\n \"datatype\": \"xsd:boolean\",\n \"minCount\": 1\n }\n ]\n }\n ]\n}' Payload copysource{\n \"@context\": {\n \"this\": \"http://localhost:8080/v1/schemas/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c/shapes\",\n \"ex\": \"http://localhost:9999/\"\n },\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"shapes\": [\n {\n \"@id\": \"this:MyShape\",\n \"@type\": \"sh:NodeShape\",\n \"nodeKind\": \"sh:BlankNodeOrIRI\",\n \"targetClass\": \"ex:Custom\",\n \"property\": [\n {\n \"path\": \"ex:name\",\n \"datatype\": \"xsd:string\",\n \"minCount\": 1\n },\n {\n \"path\": \"ex:number\",\n \"datatype\": \"xsd:integer\",\n \"minCount\": 1\n },\n {\n \"path\": \"ex:bool\",\n \"datatype\": \"xsd:boolean\",\n \"minCount\": 1\n }\n ]\n }\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/schemas-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"@type\": \"Schema\",\n \"_incoming\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/outgoing\",\n \"_self\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 2,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-17T14:55:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T14:56:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Update"},{"location":"/docs/delta/api/schemas-api.html#refresh","text":"This operation refreshes the compacted and expanded representations of the schema.\nThis is equivalent of doing an update with the same source as the last revision of the schema. It is useful when schemas imports have changed, in order for the changes to be reflected in the schema.\nPUT /v1/schemas/{org_label}/{project_label}/{schema_id}\nExample\nRequest copysourcecurl -X PUT \\\n \"http://localhost:8080/v1/schemas/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c/refresh\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/schemas-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"@type\": \"Schema\",\n \"_incoming\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/outgoing\",\n \"_self\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 2,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-17T14:55:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T14:56:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Refresh"},{"location":"/docs/delta/api/schemas-api.html#tag","text":"Links a schema revision to a specific name.\nTagging a schema is considered to be an update as well.\nPOST /v1/schemas/{org_label}/{project_label}/{schema_id}/tags?rev={previous_rev}\n {\n \"tag\": \"{name}\",\n \"rev\": {rev}\n }\n… where\n{previous_rev}: Number - is the last known revision for the resolver. {name}: String - label given to the schemas at specific revision. {rev}: Number - the revision to link the provided {name}.\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/schemas/myorg/myproj/myschema/e1729302-35b8-4d80-97b2-d63c984e2b5c/tags?rev=2\" \\\n -d \\\n'{\n \"tag\": \"mytag\",\n \"rev\": 1\n}' Payload copysource{\n \"tag\": \"mytag\",\n \"rev\": 1\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/schemas-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"@type\": \"Schema\",\n \"_incoming\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/outgoing\",\n \"_self\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 3,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-17T14:55:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T14:58:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Tag"},{"location":"/docs/delta/api/schemas-api.html#remove-tag","text":"Removes a given tag.\nRemoving a tag is considered to be an update as well.\nDELETE /v1/schemas/{org_label}/{project_label}/{schema_id}/tags/{tag_name}?rev={previous_rev}\n… where\n{previous_rev}: is the last known revision number for the resource. {tag_name}: String - label of the tag to remove.\nExample\nRequest copysourcecurl -X DELETE \\\n \"http://localhost:8080/v1/schemas/myorg/myproj/myschema/e1729302-35b8-4d80-97b2-d63c984e2b5c/tags/mytag?rev=2\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/schemas-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"@type\": \"Schema\",\n \"_incoming\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/outgoing\",\n \"_self\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 3,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-17T14:55:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T14:58:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Remove tag"},{"location":"/docs/delta/api/schemas-api.html#deprecate","text":"Locks the schema, so no further operations can be performed. It also deletes the schema from listing/querying results.\nDeprecating a schema is considered to be an update as well.\nDELETE /v1/schemas/{org_label}/{project_label}/{schema_id}?rev={previous_rev}\n… where {previous_rev} is the last known revision number for the schema.\nExample\nRequest copysourcecurl -X DELETE \\\n \"http://localhost:8080/v1/schemas/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c?rev=3\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/schemas-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"@type\": \"Schema\",\n \"_incoming\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/outgoing\",\n \"_self\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_deprecated\": true,\n \"_createdAt\": \"2021-04-17T14:55:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T15:05:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Deprecate"},{"location":"/docs/delta/api/schemas-api.html#fetch","text":"GET /v1/schemas/{org_label}/{project_label}/{schema_id}?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/schemas/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/schemas-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n {\n \"ex\": \"http://localhost:9999/\",\n \"this\": \"http://localhost:8080/v1/schemas/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c/shapes\",\n },\n \"https://bluebrain.github.io/nexus/contexts/shacl-20170720.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"@type\": \"Schema\",\n \"shapes\": [\n {\n \"@id\": \"this:MyShape\",\n \"@type\": \"NodeShape\",\n \"nodeKind\": \"BlankNode:OrIRI\",\n \"property\": [\n {\n \"datatype\": \"xsd:string\",\n \"minCount\": 1,\n \"path\": \"ex:name\"\n },\n {\n \"datatype\": \"xsd:boolean\",\n \"minCount\": 1,\n \"path\": \"ex:bool\"\n },\n {\n \"datatype\": \"xsd:integer\",\n \"minCount\": 1,\n \"path\": \"ex:number\"\n }\n ],\n \"targetClass\": \"ex:Custom\"\n }\n ],\n \"_incoming\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/outgoing\",\n \"_self\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_deprecated\": true,\n \"_createdAt\": \"2021-04-17T14:55:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T15:05:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}\nIf the redirect to Fusion feature is enabled and if the Accept header is set to text/html, a redirection to the fusion representation of the resource will be returned.","title":"Fetch"},{"location":"/docs/delta/api/schemas-api.html#fetch-original-payload","text":"GET /v1/schemas/{org_label}/{project_label}/{schema_id}/source?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/schemas/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c/source\" Response copysource{\n \"@context\": {\n \"this\": \"http://localhost:8080/v1/schemas/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c/shapes\",\n \"ex\": \"http://localhost:9999/\"\n },\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"shapes\": [\n {\n \"@id\": \"this:MyShape\",\n \"@type\": \"sh:NodeShape\",\n \"nodeKind\": \"sh:BlankNodeOrIRI\",\n \"targetClass\": \"ex:Custom\",\n \"property\": [\n {\n \"path\": \"ex:name\",\n \"datatype\": \"xsd:string\",\n \"minCount\": 1\n },\n {\n \"path\": \"ex:number\",\n \"datatype\": \"xsd:integer\",\n \"minCount\": 1\n },\n {\n \"path\": \"ex:bool\",\n \"datatype\": \"xsd:boolean\",\n \"minCount\": 1\n }\n ]\n }\n ]\n}","title":"Fetch original payload"},{"location":"/docs/delta/api/schemas-api.html#fetch-tags","text":"GET /v1/schemas/{org_label}/{project_label}/{schema_id}/tags?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/schemas/myorg/myproj/myschema/e1729302-35b8-4d80-97b2-d63c984e2b5c/tags?rev=2\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/tags.json\",\n \"tags\": [\n {\n \"rev\": 1,\n \"tag\": \"mytag\"\n }\n ]\n}","title":"Fetch tags"},{"location":"/docs/delta/api/schemas-api.html#list","text":"There are three available endpoint to list schemas in different scopes.","title":"List"},{"location":"/docs/delta/api/schemas-api.html#within-a-project","text":"GET /v1/schemas/{org_label}/{project_label}?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within a project"},{"location":"/docs/delta/api/schemas-api.html#within-an-organization","text":"This operation returns only schemas from projects defined in the organisation {org_label} and where the caller has the resources/read permission.\nGET /v1/schemas/{org_label}?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within an organization"},{"location":"/docs/delta/api/schemas-api.html#within-all-projects","text":"This operation returns only schemas from projects defined the organisation {org_label} and where the caller has the resources/read permission.\nGET /v1/schemas?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within all projects"},{"location":"/docs/delta/api/schemas-api.html#parameter-description","text":"{from}: Number - is the parameter that describes the offset for the current query; defaults to 0 {size}: Number - is the parameter that limits the number of results; defaults to 20 {deprecated}: Boolean - can be used to filter the resulting schemas based on their deprecation status {rev}: Number - can be used to filter the resulting schemas based on their revision value {type}: Iri - can be used to filter the resulting schemas based on their @type value. This parameter can appear multiple times, filtering further the @type value. {createdBy}: Iri - can be used to filter the resulting schemas based on their creator {updatedBy}: Iri - can be used to filter the resulting schemas based on the person which performed the last update {search}: String - can be provided to select only the schemas in the collection that have attribute values matching (containing) the provided string {sort}: String - can be used to sort schemas based on a payloads’ field. This parameter can appear multiple times to enable sorting by multiple fields. The default is done by _createdBy and @id. {aggregations}: Boolean - if true then the response will only contain aggregations of the @type and _project fields; defaults to false. See Aggregations.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/schemas/myorg/myproj\" Response copysource{\n \"@context\" : [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/search-metadata.json\"\n ],\n \"_total\": 1,\n \"_results\": [\n {\n \"@id\": \"https://bluebrain.github.io/nexus/schemas/myschema2\",\n \"@type\": \"https://bluebrain.github.io/nexus/vocabulary/Schema\",\n \"_incoming\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c/outgoing\",\n \"_self\": \"http://localhost:8080/v1/schemas/myorg/myproj/base:e1729302-35b8-4d80-97b2-d63c984e2b5c\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_deprecated\": true,\n \"_createdAt\": \"2021-04-17T14:55:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T15:05:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n }\n ],\n \"_next\": \"http://localhost:8080/v1/schemas/myorg/myproj?after=%5B1559045718752,%22https://bluebrain.github.io/nexus/schemas/myschema29%22%5D\"\n}","title":"Parameter description"},{"location":"/docs/delta/api/schemas-api.html#server-sent-events","text":"From Delta 1.5, it is possible to fetch SSEs for all schemas or just schemas in the scope of an organization or a project.\nGET /v1/schemas/events # for all schema events in the application\nGET /v1/schemas/{org_label}/events # for schema events in the given organization\nGET /v1/schemas/{org_label}/{project_label}/events # for schema events in the given project\nThe caller must have respectively the events/read permission on /, {org_label} and {org_label}/{project_label}.\n{org_label}: String - the selected organization for which the events are going to be filtered {project_label}: String - the selected project for which the events are going to be filtered Last-Event-Id: String - optional HTTP Header that identifies the last consumed resource event. It can be used for cases when a client does not want to retrieve the whole event stream, but to start after a specific event.\nNote The event type for schemas SSEs have been changed so that it is easier to distinguish them from other types of resources.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/schemas/events\" Response copysourcedata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/shacl-20170720.json\"],\"@type\":\"SchemaCreated\",\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\"_instant\":\"2021-04-17T14:55:42.939Z\",\"_organizationUuid\":\"6073a640-8da1-405d-acb5-ffa311b0877b\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"d7b102d9-f8fd-490b-b25f-23dfc5ff2bf8\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/myid2\",\"_rev\":1,\"_schemaId\":\"https://bluebrain.github.io/nexus/vocabulary/myid2\",\"_source\":{\"@context\":{\"nxv\":\"https://bluebrain.github.io/nexus/vocabulary/\"},\"@type\":\"Schema\",\"shapes\":[{\"@id\":\"nxv:MyShape\",\"@type\":\"NodeShape\",\"nodeKind\":\"sh:BlankNodeOrIRI\",\"property\":[{\"@id\":\"nxv:NameProperty\",\"datatype\":\"xsd:string\",\"minCount\":1,\"path\":\"nxv:name\"},{\"@id\":\"nxv:NumberProperty\",\"datatype\":\"xsd:integer\",\"minCount\":1,\"path\":\"nxv:number\"},{\"@id\":\"nxv:PathProperty\",\"datatype\":\"xsd:boolean\",\"minCount\":1,\"path\":\"nxv:bool\"}],\"targetClass\":\"nxv:Custom\"}]},\"_subject\":\"http://localhost:8080/v1/realms/wonderland/users/alice\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/Schema\"]}\nevent:SchemaCreated\nid:1\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/shacl-20170720.json\"],\"@type\":\"SchemaUpdated\",\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\"_instant\":\"2021-04-17T14:55:42.939Z\",\"_organizationUuid\":\"6073a640-8da1-405d-acb5-ffa311b0877b\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"d7b102d9-f8fd-490b-b25f-23dfc5ff2bf8\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/myid\",\"_rev\":2,\"_schemaId\":\"https://bluebrain.github.io/nexus/vocabulary/myid\",\"_source\":{\"@context\":{\"nxv\":\"https://bluebrain.github.io/nexus/vocabulary/\"},\"@type\":\"Schema\",\"shapes\":[{\"@id\":\"nxv:MyShape\",\"@type\":\"NodeShape\",\"nodeKind\":\"sh:BlankNodeOrIRI\",\"property\":[{\"@id\":\"nxv:NameProperty\",\"datatype\":\"xsd:string\",\"minCount\":1,\"path\":\"nxv:name\"},{\"@id\":\"nxv:NumberProperty\",\"datatype\":\"xsd:double\",\"minCount\":1,\"path\":\"nxv:number\"},{\"@id\":\"nxv:PathProperty\",\"datatype\":\"xsd:boolean\",\"minCount\":1,\"path\":\"nxv:bool\"}],\"targetClass\":\"nxv:Custom\"}]},\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/Schema\"]}\nevent:SchemaUpdated\nid:2\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/shacl-20170720.json\"],\"@type\":\"SchemaDeprecated\",\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\"_instant\":\"2021-04-17T14:55:42.939Z\",\"_organizationUuid\":\"6073a640-8da1-405d-acb5-ffa311b0877b\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"d7b102d9-f8fd-490b-b25f-23dfc5ff2bf8\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/myid\",\"_rev\":4,\"_schemaId\":\"https://bluebrain.github.io/nexus/vocabulary/myid\",\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/Schema\"]}\nevent:SchemaDeprecated\nid:3\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/shacl-20170720.json\"],\"@type\":\"SchemaTagAdded\",\"tag\":\"mytag\",\"targetRev\":1,\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/shacl-20170720.ttl\",\"_instant\":\"2021-04-17T14:55:42.939Z\",\"_organizationUuid\":\"6073a640-8da1-405d-acb5-ffa311b0877b\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"d7b102d9-f8fd-490b-b25f-23dfc5ff2bf8\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/myid2\",\"_rev\":2,\"_schemaId\":\"https://bluebrain.github.io/nexus/vocabulary/myid2\",\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/Schema\"]}\nevent:SchemaTagAdded\nid:4","title":"Server Sent Events"},{"location":"/docs/delta/api/resources-api.html","text":"","title":"Resources"},{"location":"/docs/delta/api/resources-api.html#resources","text":"Generic resources are rooted in the /v1/resources/{org_label}/{project_label}/{schema_id} collection.\nEach resource…\nbelongs to a project identifier by the label {project_label} inside an organization identifier by the label {org_label} it is validated against a schema with id {schema_id}. In case of using _ for this segment, the schema segment reads as irrelevant.\nAuthorization notes When modifying resources, the caller must have resources/write permissions on the current path of the project or the ancestor paths. When reading resources, the caller must have resources/read permissions on the current path of the project or the ancestor paths. Please visit Authentication & authorization section to learn more about it.\nRemote contexts Remote contexts are only resolved during creates and updates. That means that when those get updated, the resources importing them must be also updated to take them into account in a new version.\nJSON payloads The json payload for create and update operations cannot contain keys beginning with underscore (_), as these fields are reserved for Nexus metadata","title":"Resources"},{"location":"/docs/delta/api/resources-api.html#nexus-metadata","text":"When using the endpoints described on this page, the responses will contain global metadata described on the Nexus Metadata page. In addition, the following resource specific metadata can be present\n_project: address of the resource’s project _incoming: address to query to obtain the list of incoming links _outgoing: address to query to obtain the list of outgoing links _constrainedBy: @id of the schema used to validate the resource; the schema can only be identified uniquely together with _schemaProject. If no schema has been used to validate the resource, it will indicate the unconstrained identifier. _schemaProject: address of the project where the _constrainedBy schema is found","title":"Nexus metadata"},{"location":"/docs/delta/api/resources-api.html#indexing","text":"All the API calls modifying a resource (creation, update, tagging, deprecation) can specify whether the resource should be indexed synchronously or in the background. This behaviour is controlled using indexing query param, which can be one of two values:\nasync - (default value) the resource will be indexed asynchronously sync - the resource will be indexed synchronously and the API call won’t return until the indexing is finished","title":"Indexing"},{"location":"/docs/delta/api/resources-api.html#create-using-post","text":"POST /v1/resources/{org_label}/{project_label}/{schema_id}?tag={tag}\n {...}\nThe json payload:\nIf the @id value is found on the payload, this @id will be used. If the @id value is not found on the payload, an @id will be generated as follows: base:{UUID}. The base is the prefix defined on the resource’s project ({project_label}).\nThe {schema_id} segment allows to define an existing SHACL schema to validate the resource with:\nIf _ is provided, no SHACL validation will be performed If another value is provided, Nexus will attempt to resolve the schema then validate the expanded JSON-LD value generated from the provided payload.\nThe {tag} param is an optional tag associated with the first revision of this resource\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/resources/myorg/myproj/myschema\" \\\n -d \\\n'{\n \"@context\": {\n \"ex\": \"http://localhost:8080/\",\n \"@vocab\": \"http://localhost:8080/\"\n },\n \"@type\": \"ex:Custom\",\n \"name\": \"Alex\",\n \"number\": 24,\n \"bool\": false\n}' Payload copysource{\n \"@context\": {\n \"ex\": \"http://localhost:8080/\",\n \"@vocab\": \"http://localhost:8080/\"\n },\n \"@type\": \"ex:Custom\",\n \"name\": \"Alex\",\n \"number\": 24,\n \"bool\": false\n} Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"@type\": \"http://localhost:8080/Custom\",\n \"_incoming\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resource\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T14:54:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Create using POST"},{"location":"/docs/delta/api/resources-api.html#create-using-put","text":"This alternative endpoint to create a resource is useful in case the json payload does not contain an @id but you want to specify one. The @id will be specified in the last segment of the endpoint URI.\nPUT /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}?tag={tag}\n {...}\n… where {tag} is an optional tag associated with the first revision of this resource.\nThe {schema_id} has the same behaviour as the creation using post operation.\nNote that if the payload contains an @id different from the {resource_id}, the request will fail.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/resources/myorg/myproj/myschema/base:fd8a2b32-170e-44e8-808f-44a8cbbc49b0\" \\\n -d \\\n'{\n \"@context\": {\n \"ex\": \"http://localhost:8080/\",\n \"@vocab\": \"http://localhost:8080/\"\n },\n \"@type\": \"ex:Custom\",\n \"name\": \"Alex\",\n \"number\": 24,\n \"bool\": false\n}' Payload copysource{\n \"@context\": {\n \"ex\": \"http://localhost:8080/\",\n \"@vocab\": \"http://localhost:8080/\"\n },\n \"@type\": \"ex:Custom\",\n \"name\": \"Alex\",\n \"number\": 24,\n \"bool\": false\n} Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"@type\": \"http://localhost:8080/Custom\",\n \"_incoming\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resource\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T14:54:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Create using PUT"},{"location":"/docs/delta/api/resources-api.html#update","text":"A update operation which does not result in a change of the existing resources is ignored If the submitted update does not result in changes compared to the current revision of the resource, it will be ignored and the current revision will be returned to the user. Nevertheless, if a tag is provided, it will still be applied to the current revision of the resource.\nThis operation overrides the payload.\nIn order to ensure a client does not perform any changes to a resource without having had seen the previous revision of the resource, the last revision needs to be passed as a query parameter.\nPUT /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}?rev={previous_rev}&tag={tag}\n {...}\n… where\n{previous_rev} is the last known revision number for the resource. {tag} is an optional tag associated with the same revision as the current update. For example, if previous_rev is 2, both the updated payload and tag will be associated with revision 3; the new latest revision.\nThe {schema_id} segment allows to define an existing SHACL schema to validate the resource with:\nIf _ is provided, no SHACL validation will be performed with the latest version of its current schema If another value is provided, it has to match the identifier of the current schema as changing the schema of a resource is not currently supported. A different revision or tag of this schema can be provided though.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/resources/myorg/myproj/myschema/base:fd8a2b32-170e-44e8-808f-44a8cbbc49b0?rev=1\" \\\n -d \\\n'{\n \"@context\": {\n \"ex\": \"http://localhost:8080/\",\n \"@vocab\": \"http://localhost:8080/\"\n },\n \"@type\": \"ex:Custom\",\n \"name\": \"Alex\",\n \"number\": 24,\n \"bool\": false\n}' Payload copysource{\n \"@context\": {\n \"ex\": \"http://localhost:8080/\",\n \"@vocab\": \"http://localhost:8080/\"\n },\n \"@type\": \"ex:Custom\",\n \"name\": \"Alex\",\n \"number\": 24,\n \"bool\": false\n} Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"@type\": \"http://localhost:8080/Custom\",\n \"_incoming\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resource\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 2,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T14:56:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Update"},{"location":"/docs/delta/api/resources-api.html#refresh","text":"A refresh operation which does not result in a change of the existing resources is ignored If the refresh does not result in changes compared to the current revision of the resource, the update will be ignored and the current revision will be returned to the user.\nIf the submitted update does not result in changes compared to the current revision of the resource, it will be ignored and the current revision will be returned to the user.\nNevertheless, if a tag is provided, it will still be applied to the current revision of the resource.\n@@@\nThis operation refreshes the compacted and expanded representations of the resource.\nThis is equivalent of doing an update with the same source as the last revision of the resource. It is useful when the schema or project contexts have changed, in order for the changes to be reflected in the resource.\nPUT /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}/refresh\nExample\nRequest copysourcecurl -X PUT \\\n \"http://localhost:8080/v1/resources/myorg/myproj/myschema/base:fd8a2b32-170e-44e8-808f-44a8cbbc49b0\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"@type\": \"http://localhost:8080/Custom\",\n \"_incoming\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resource\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 2,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T14:56:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Refresh"},{"location":"/docs/delta/api/resources-api.html#tag","text":"Links a resource revision to a specific name.\nTagging a resource is considered to be an update as well.\nPOST /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}/tags?rev={previous_rev}\n {\n \"tag\": \"{name}\",\n \"rev\": {rev}\n }\n… where\n{previous_rev}: is the last known revision number for the resource. {name}: String - label given to the resources at specific revision. {rev}: Number - the revision to link the provided {name}.\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/tags?rev=2\" \\\n -d \\\n'{\n \"tag\": \"mytag\",\n \"rev\": 1\n}' Payload copysource{\n \"tag\": \"mytag\",\n \"rev\": 1\n} Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"@type\": \"http://localhost:8080/Custom\",\n \"_incoming\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resource\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 3,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"20121-04-17T14:58:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Tag"},{"location":"/docs/delta/api/resources-api.html#remove-tag","text":"Removes a given tag.\nRemoving a tag is considered to be an update as well.\nDELETE /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}/tags/{tag_name}?rev={previous_rev}\n… where\n{previous_rev}: is the last known revision number for the resource. {tag_name}: String - label of the tag to remove.\nExample\nRequest copysourcecurl -X DELETE \\\n \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/tags/mytag?rev=2\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"@type\": \"http://localhost:8080/Custom\",\n \"_incoming\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resource\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 3,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"20121-04-17T14:58:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Remove tag"},{"location":"/docs/delta/api/resources-api.html#deprecate","text":"Locks the resource, so no further operations can be performed. It also deletes the resource from listing/querying results.\nDeprecating a resource is considered to be an update as well.\nDELETE /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}?rev={previous_rev}\n… where {previous_rev} is the last known revision number for the resource.\nExample\nRequest copysourcecurl -X DELETE \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0?rev=3\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"@type\": \"http://localhost:8080/Custom\",\n \"_incoming\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resource\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_deprecated\": true,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T15:02:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Deprecate"},{"location":"/docs/delta/api/resources-api.html#undeprecate","text":"Unlocks a previously deprecated resource. Further operations can then be performed. The resource will again be found when listing/querying.\nUndeprecating a resource is considered to be an update as well.\nPUT /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}/undeprecate?rev={previous_rev}\n… where {previous_rev} is the last known revision number for the resource.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/undeprecate?rev=3\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"@type\": \"http://localhost:8080/Custom\",\n \"_incoming\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resource\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 5,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T15:02:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Undeprecate"},{"location":"/docs/delta/api/resources-api.html#change-schema","text":"This operation allows to only change the schema of a resource without providing any payload.\nPUT /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}/update-schema\nExample\nRequest copysourcecurl -X PUT \\\n \"http://localhost:8080/v1/resources/myorg/myproj/myNewSchema/myId/update-schema\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/myId\",\n \"@type\": \"http://localhost:8080/Custom\",\n \"_incoming\": \"http://localhost:8080/v1/resources/myorg/myproj/myNewSchema/myId/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resources/myorg/myproj/myNewSchema/myId/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproj/myNewSchema/myId\",\n \"_constrainedBy\": \"http://localhost:8080/v1/resources/myorg/myproj/_/myNewSchema\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 2,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T14:56:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Change schema"},{"location":"/docs/delta/api/resources-api.html#fetch","text":"GET /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nThe {schema_id} segment allows to pass the resource schema:\nIf _ is provided, the value is ignored If another value is provided, it must match the identifier of the resource schema.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n {\n \"@vocab\": \"http://localhost:8080/\",\n \"ex\": \"http://localhost:8080/\"\n }\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"@type\": \"Custom\",\n \"bool\": false,\n \"name\": \"Alex\",\n \"number\": 24,\n \"_incoming\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/base:fd8a2b32-170e-44e8-808f-44a8cbbc49b0/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/base:fd8a2b32-170e-44e8-808f-44a8cbbc49b0/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/base:fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resource\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_deprecated\": true,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T15:02:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}\nIf the redirect to Fusion feature is enabled and if the Accept header is set to text/html, a redirection to the fusion representation of the resource will be returned.","title":"Fetch"},{"location":"/docs/delta/api/resources-api.html#fetch-original-payload","text":"GET /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}/source?rev={rev}&tag={tag}&annotate={annotate}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional. {annotate}: Boolean - annotate the response with the resource metadata. This field only applies to standard resources. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nIf {annotate} is set, fields present in the metadata will override fields with the same name from the payload. The @id field is an exception to this rule\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0?rev=4\" Response copysource{\n \"@context\": {\n \"ex\": \"http://localhost:8080/\",\n \"@vocab\": \"http://localhost:8080/\"\n },\n \"@type\": \"ex:Custom\",\n \"name\": \"Alex\",\n \"number\": 24,\n \"bool\": false\n}","title":"Fetch original payload"},{"location":"/docs/delta/api/resources-api.html#fetch-remote-contexts","text":"Returns the remote contexts that have been detected during the JSON-LD resolution for this resource.\nThese contexts can be:\nStatic contexts that are statically defined in Nexus Project contexts that have been registered by Nexus, in this case the entry also provides the project this context lives and its revision at the time the JSON-LD resolution has been performed\nGET /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}/remote-contexts?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resources/org/proj/_/my-resource/remote-contexts\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/remote-contexts.json\",\n \"remoteContexts\": [\n {\n \"@type\": \"StaticContextRef\",\n \"iri\": \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n },\n {\n \"@type\": \"ProjectContextRef\",\n \"iri\": \"https://localhost/nexus/context\",\n \"resource\": {\n \"id\": \"https://localhost/nexus/context\",\n \"project\": \"org/proj\",\n \"rev\": 5\n }\n }\n ]\n}","title":"Fetch remote contexts"},{"location":"/docs/delta/api/resources-api.html#fetch-tags","text":"GET /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}/tags?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/tags?rev=2\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/tags.json\",\n \"tags\": [\n {\n \"rev\": 1,\n \"tag\": \"mytag\"\n }\n ]\n}","title":"Fetch tags"},{"location":"/docs/delta/api/resources-api.html#list","text":"There are three available endpoints to list resources in different scopes.","title":"List"},{"location":"/docs/delta/api/resources-api.html#within-a-project","text":"GET /v1/resources/{org_label}/{project_label}?from={from}\n &size={size}\n &locate={locate}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &typeOperator={typeOperator}\n &createdBy={createdBy}\n &createdAt={createdAt}\n &updatedBy={updatedBy}\n &updatedAt={updatedAt}\n &schema={schema}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within a project"},{"location":"/docs/delta/api/resources-api.html#within-an-organization","text":"This operation returns only resources from projects defined in the organisation {org_label} and where the caller has the resources/read permission.\nGET /v1/resources/{org_label}?from={from}\n &size={size}\n &locate={locate}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &typeOperator={typeOperator}\n &createdBy={createdBy}\n &createdAt={createdAt}\n &updatedBy={updatedBy}\n &updatedAt={updatedAt}\n &schema={schema}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within an organization"},{"location":"/docs/delta/api/resources-api.html#within-all-projects","text":"This operation returns only resources from projects where the caller has the resources/read permission.\nGET /v1/resources?from={from}\n &size={size}\n &locate={locate}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &typeOperator={typeOperator}\n &createdAt={createdAt}\n &createdBy={createdBy}\n &updatedAt={updatedAt}\n &updatedBy={updatedBy}\n &schema={schema}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within all projects"},{"location":"/docs/delta/api/resources-api.html#parameter-description","text":"How to use time ranges A time range parameter allows to filter resources by their creation date or their last update date. The provided dates can be: A date following the format YYYY-MM-DDTHH:MM:SSZ A wild card * to express no restriction on a limit Examples of ranges: 2023-06-08T14:00:00Z..*: Matchers resources created after the June 8, 2023 at 14.00 *..2023-06-08T14:00:00Z: Matchers resources created before the June 8, 2023 at 14.00 2023-04-01T00:00:00Z..2023-06-08T14:00:00Z: Matchers resources created between the April 1st at 00.00 and June 8, 2023 at 14.00\n{from}: Number - is the parameter that describes the offset for the current query; defaults to 0 {size}: Number - is the parameter that limits the number of results; defaults to 20 {locate}: Iri - can be used to find a resource by its @id or its address (_self) {deprecated}: Boolean - can be used to filter the resulting resources based on their deprecation status {rev}: Number - can be used to filter the resulting resources based on their revision value {type}: Iri - can be used to filter the resulting resources based on their @type value. This parameter can appear multiple times, filtering further the @type value. {typeOperator}: String (and/or) - used to determine how multiple type values affect the query, either requiring all to match (and) or any to match (or); defaults to or. See De Morgan’s laws for inference rules. {createdBy}: Iri - can be used to filter the resulting resources based on their creator {createdAt}: Time range - can be used to filter the resulting resources based on their creation date {updatedBy}: Iri - can be used to filter the resulting resources based on the person which performed the last update {updatedAt}: Time range - can be used to filter the resulting resources based when was performed the last update {schema}: Iri - can be used to filter the resulting resources based on the conformant schema {search}: String - can be provided to select only the resources in the collection that have attribute values matching (containing) the provided string {sort}: String - can be used to sort resources based on a payloads’ field. This parameter can appear multiple times to enable sorting by multiple fields. The default is done by _createdBy and @id. {aggregations}: Boolean - if true then the response will only contain aggregations of the @type and _project fields; defaults to false. See Aggregations\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resources/myorg/myproj\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/search-metadata.json\"\n ],\n \"_total\": 1,\n \"_results\": [\n {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"@type\": \"http://localhost:8080/ustom\",\n \"_incoming\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resource\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_deprecated\": true,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T15:02:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n }\n ],\n \"_next\": \"http://localhost:8080/v1/resources/myorg/myproj?after=%5B1559045718752,%22https://nexus.example.com/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b029%22%5D\"\n} Aggregations request copysourcecurl \"http://localhost:8080/v1/resources/myorg?aggregations=true\" Aggregations response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/aggregations.json\",\n \"aggregations\": {\n \"projects\": {\n \"buckets\": [\n {\n \"doc_count\": 5,\n \"key\": \"http://delta:8080/v1/projects/myorg/myproject\"\n },\n {\n \"doc_count\": 5,\n \"key\": \"http://delta:8080/v1/projects/myorg/myproject2\"\n }\n ],\n \"doc_count_error_upper_bound\": 0,\n \"sum_other_doc_count\": 0\n },\n \"types\": {\n \"buckets\": [\n {\n \"doc_count\": 6,\n \"key\": \"https://bluebrain.github.io/nexus/vocabulary/View\"\n },\n {\n \"doc_count\": 2,\n \"key\": \"https://bluebrain.github.io/nexus/vocabulary/CompositeView\"\n },\n {\n \"doc_count\": 2,\n \"key\": \"https://bluebrain.github.io/nexus/vocabulary/DiskStorage\"\n },\n {\n \"doc_count\": 2,\n \"key\": \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\"\n },\n {\n \"doc_count\": 2,\n \"key\": \"https://bluebrain.github.io/nexus/vocabulary/InProject\"\n },\n {\n \"doc_count\": 2,\n \"key\": \"https://bluebrain.github.io/nexus/vocabulary/Project\"\n },\n {\n \"doc_count\": 2,\n \"key\": \"https://bluebrain.github.io/nexus/vocabulary/Resolver\"\n },\n {\n \"doc_count\": 2,\n \"key\": \"https://bluebrain.github.io/nexus/vocabulary/SparqlView\"\n },\n {\n \"doc_count\": 2,\n \"key\": \"https://bluebrain.github.io/nexus/vocabulary/Storage\"\n }\n ],\n \"doc_count_error_upper_bound\": 0,\n \"sum_other_doc_count\": 0\n }\n },\n \"total\": 12\n}","title":"Parameter description"},{"location":"/docs/delta/api/resources-api.html#aggregations","text":"Warning Aggregations are experimental and the API is subject to change.\nAdding the aggregations=true query parameter to a list query allows to aggregate the underlying resources by predefined terms. Currently, the following aggregations will be returned:\nprojects: a bucket aggregation of the resources by the project they belong to types: a bucket aggregation of the @types featured in the resources\nAggregation works on the same scopes as listing (all projects, organization, and project), and only aggregates the resources for which the caller has resource/read permission.","title":"Aggregations"},{"location":"/docs/delta/api/resources-api.html#list-filtering-by-schema","text":"This operation is only available at the project scope.","title":"List filtering by schema"},{"location":"/docs/delta/api/resources-api.html#within-a-project","text":"GET /v1/resources/{org_label}/{project_label}/{schemaId}?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}&type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &aggregations={aggregations}","title":"Within a project"},{"location":"/docs/delta/api/resources-api.html#parameter-description","text":"{from}: Number - is the parameter that describes the offset for the current query; defaults to 0 {size}: Number - is the parameter that limits the number of results; defaults to 20 {deprecated}: Boolean - can be used to filter the resulting resources based on their deprecation status {rev}: Number - can be used to filter the resulting resources based on their revision value {type}: Iri - can be used to filter the resulting resources based on their @type value. This parameter can appear multiple times, filtering further the @type value. {createdBy}: Iri - can be used to filter the resulting resources based on their creator {updatedBy}: Iri - can be used to filter the resulting resources based on the person which performed the last update {aggregations}: Boolean - if true then the response will only contain aggregations of the @type and _project fields; defaults to false. See Aggregations\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resources/myorg/myproj/myschema\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/search-metadata.json\"\n ],\n \"_total\": 1,\n \"_results\": [\n {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"@type\": \"http://localhost:8080/ustom\",\n \"_incoming\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resource\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_deprecated\": true,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T15:02:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n }\n ],\n \"_next\": \"http://localhost:8080/v1/resources/myorg/myproj?after=%5B1559045718752,%22https://nexus.example.com/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b029%22%5D\"\n}","title":"Parameter description"},{"location":"/docs/delta/api/resources-api.html#list-incoming-links","text":"Provides a list of resources where the current resource {resource_id} is being referenced in the payload.\nGET /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}/incoming\n ?from={from}\n &size={size}\nwhere…\n{from}: Number - is the parameter that describes the offset for the current query; defaults to 0 {size}: Number - is the parameter that limits the number of results; defaults to 20\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/incoming\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\"\n ],\n \"_total\": 1,\n \"_results\": [\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/reconstruction1\",\n \"@type\": [\n \"http://localhost:8080/v1/vocabs/myorg/myproject/Entity\",\n \"http://localhost:8080/v1/vocabs/myorg/myproject/Dataset\",\n \"http://localhost:8080/v1/vocabs/myorg/myproject/ReconstructedPatchedCell\"\n ],\n \"paths\": \"http://localhost:8080/v1/vocabs/myorg/myproject/subject\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproject/_/nxv:reconstruction1\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 4,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-28T13:28:00.186Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-29T13:41:45.357Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n }\n ]\n}","title":"List incoming links"},{"location":"/docs/delta/api/resources-api.html#list-outgoing-links","text":"Provides a list of resources that are being used in the current resource {resource_id} payload. It also offers information\nGET /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}/outgoing\n ?from={from}\n &size={size}\n &includeExternalLinks={includeExternalLinks}\nwhere…\n{from}: Number - is the parameter that describes the offset for the current query; defaults to 0 {size}: Number - is the parameter that limits the number of results; defaults to 20 {includeExternalLinks}: Boolean - flag to decide whether or not external links are to be included. External links are references to resources in other projects, or even resources external to Nexus; defaults to true\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resources/myorg/myproj/myschema/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/outgoing?includeExternalLinks=true\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\"\n ],\n \"_total\": 4,\n \"_results\": [\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/mouse1\",\n \"@type\": [\n \"http://localhost:8080/v1/vocabs/myorg/myproject/Entity\",\n \"http://localhost:8080/v1/vocabs/myorg/myproject/Subject\"\n ],\n \"paths\": \"http://localhost:8080/v1/vocabs/myorg/myproject/subject\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/nxv:mouse1\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 1,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-28T13:27:42.707Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-28T13:27:42.707Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n },\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/jane\",\n \"@type\": [\n \"http://localhost:8080/v1/vocabs/myorg/myproject/Agent\",\n \"http://localhost:8080/v1/vocabs/myorg/myproject/Person\"\n ],\n \"paths\": [\n \"http://localhost:8080/v1/vocabs/myorg/myproject/contribution\",\n \"http://localhost:8080/v1/vocabs/myorg/myproject/agent\"\n ],\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproject/_/nxv:jane\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 1,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-28T13:26:27.627Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-28T13:26:27.627Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n },\n {\n \"@id\": \"http://uri.interlex.org/base/ilx_0383233\",\n \"@type\": \"http://localhost:8080/v1/vocabs/myorg/myproject/MType\",\n \"paths\": [\n \"http://localhost:8080/v1/vocabs/myorg/myproject/annotation\",\n \"http://localhost:8080/v1/vocabs/myorg/myproject/hasBody\"\n ]\n },\n {\n \"@id\": \"http://purl.obolibrary.org/obo/UBERON_0008933\",\n \"paths\": [\n \"http://localhost:8080/v1/vocabs/myorg/myproject/brainLocation\",\n \"http://localhost:8080/v1/vocabs/myorg/myproject/brainRegion\"\n ]\n }\n ]\n}","title":"List outgoing links"},{"location":"/docs/delta/api/resources-api.html#server-sent-events","text":"GET /v1/resources/events # for all resource events in the application\nGET /v1/resources/{org_label}/events # for resource events in the given organization\nGET /v1/resources/{org_label}/{project_label}/events # for resource events in the given project\nThe caller must have respectively the events/read permission on /, {org_label} and {org_label}/{project_label}.\n{org_label}: String - the selected organization for which the events are going to be filtered {project_label}: String - the selected project for which the events are going to be filtered Last-Event-Id: String - optional HTTP Header that identifies the last consumed resource event. It can be used for cases when a client does not want to retrieve the whole event stream, but to start after a specific event.\nThe server sent events response contains a series of resource events, represented in the following way\ndata:{payload}\nevent:{type}\nid:{id}\nwhere…\n{payload}: Json - is the actual payload of the current resource {type}: String - is a type identifier for the current resource. Possible types are related to core resource types (Resouce, Schema, Resolver) and available plugin types {id}: String - is the identifier of the resource event. It can be used in the Last-Event-Id query parameter\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resources/events\" Response copysourcedata:{\"@context\":\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"@type\":\"ResourceCreated\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/7887416b-d501-4508-a625-2a6664dfca94\",\"_source\":{\"@type\":\"Hobbit\",\"age\":23,\"name\":\"Frodo\"},\"_types\":[\"http://localhost:8080/v1/vocabs/myorg/myproject/Hobbit\"],\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproject\",\"_instant\":\"2021-04-24T07:35:47.447631Z\",\"_projectUuid\":\"1089947c-dc76-4cbc-8b04-3f919b436828\",\"_organizationUuid\":\"ba7053ba-54ea-41b6-baab-96ec1acd7ad4\",\"_rev\": 1,\"_subject\":\"http://localhost:8080/v1/realms/github/users/myuser\"}\nevent:ResourceCreated\nid:aebbf8f4-9652-11e9-89a7-6d3c5701d287\n\ndata:{\"@context\":\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"@type\":\"ResourceUpdated\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/7887416b-d501-4508-a625-2a6664dfca94\",\"_source\":{\"@type\":\"Hobbit\",\"age\":25,\"name\":\"Frodo\"},\"_types\":[\"http://localhost:8080/v1/vocabs/myorg/myproject/Hobbit\"],\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\", \"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproject\",\"_instant\":\"2021-04-24T07:36:27.130185Z\",\"_projectUuid\":\"1089947c-dc76-4cbc-8b04-3f919b436828\",\"_organizationUuid\":\"ba7053ba-54ea-41b6-baab-96ec1acd7ad4\",\"_rev\":2,\"_subject\":\"http://localhost:8080/v1/realms/github/users/myuser\"}\nevent:ResourceUpdated\nid:c6642f90-9652-11e9-89a7-6d3c5701d287\n\n\ndata:{\"@context\":\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"@type\":\"ResourceTagAdded\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/7887416b-d501-4508-a625-2a6664dfca94\",\"tag\":\"mytag\",\"targetRev\":1,\"_types\":[\"http://localhost:8080/v1/vocabs/myorg/myproject/Hobbit\"],\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_instant\":\"2021-04-24T07:40:59.2813Z\",\"_projectUuid\":\"1089947c-dc76-4cbc-8b04-3f919b436828\",\"_organizationUuid\":\"ba7053ba-54ea-41b6-baab-96ec1acd7ad4\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_rev\":3,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:ResourceTagAdded\nid:e024e5f0-9652-11e9-89a7-6d3c5701d287\n\ndata:{\"@context\":\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"@type\":\"ResourceDeprecated\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/7887416b-d501-4508-a625-2a6664dfca94\",\"_types\":[\"http://localhost:8080/v1/vocabs/myorg/myproject/Hobbit\"],\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_instant\":\"2021-04-24T07:45:12.558514Z\",\"_projectUuid\":\"1089947c-dc76-4cbc-8b04-3f919b436828\",\"_organizationUuid\":\"ba7053ba-54ea-41b6-baab-96ec1acd7ad4\",\"_rev\":4,\"_subject\":\"http://localhost:8080/v1/realms/github/users/myuser\"}\nevent:ResourceDeprecated\nid:ce6549e0-9652-11e9-89a7-6d3c5701d287","title":"Server Sent Events"},{"location":"/docs/delta/api/trial.html","text":"","title":"Trial"},{"location":"/docs/delta/api/trial.html#trial","text":"Trial operations contain read-only operations designed to help users compose and validate their resources before effectively saving them in Nexus.\nAuthorization notes When performing a request, the caller must have resources/read permission on the project each resource belongs to. Please visit Authentication & authorization section to learn more about it.","title":"Trial"},{"location":"/docs/delta/api/trial.html#resource-generation","text":"This endpoint allows to create and get the output of a resource, optionally validating with an existing schema or a new one.\nIt applies the same validation steps than the creation/update of resources, the main difference being that nothing is persisted.\nPOST /v1/trial/resources/{org_label}/{project_label}\n\n{\n \"schema\": {schema},\n \"resource\": {resource}\n}\nWhere:\n{schema}: String/Json: The schema to validate the provided resource. If a string is provided, it will attempt to resolve it as an existing schema. If a json payload is provided, it will attempt to generate the schema and then use the result to validate the resource. This field is optional and defaults to no SHACL validation. {resource}: Json: The resource payload to test and validate\nThe Json response will contain:\nThe generated resource in the compacted JSON-LD format if the generation and the validation was successful The generated schema if a new schema payload was provided The error if the one of the steps fails (invalid resource/invalid new schema/existing schema not found/…)\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/trial/resources/myorg/myproj/\" \\\n -d \\\n'{\n \"schema\": \"https://bbp.epfl.ch/nexus/schema/morphology\"\n \"resource\": {\n \"@context\": [\n \"https://neuroshapes.org\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n {\n \"@vocab\": \"https://bluebrain.github.io/nexus/vocabulary/\"\n }\n ],\n \"@id\": \"https://bbp.epfl.ch/nexus/data/morphology-001\",\n \"@type\": \"Morphology\",\n \"name\": \"Morphology 001\"\n }\n }' Payload copysource{\n \"schema\": \"https://bbp.epfl.ch/nexus/schema/morphology\"\n \"resource\": {\n \"@context\": [\n \"https://neuroshapes.org\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n {\n \"@vocab\": \"https://bluebrain.github.io/nexus/vocabulary/\"\n }\n ],\n \"@id\": \"https://bbp.epfl.ch/nexus/data/morphology-001\",\n \"@type\": \"Morphology\",\n \"name\": \"Morphology 001\"\n }\n} Response copysource{\n \"result\": {\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n {\n \"@vocab\": \"https://bluebrain.github.io/nexus/vocabulary/\"\n },\n \"https://neuroshapes.org\"\n ],\n \"@id\": \"https://bbp.epfl.ch/nexus/data/morphology-001\",\n \"@type\": \"Morphology\",\n \"name\": \"Morphology 001\",\n \"_constrainedBy\": \"https://bbp.epfl.ch/nexus/schema/morphology\",\n \"_createdAt\": \"2023-09-18T12:00:00Z\",\n \"_createdBy\": \"http://localhost/v1/realms/wonderland/users/alice\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost/v1/resources/myorg/myproj/_/https:%2F%2Fbluebrain.github.io%2Fnexus%2Fvocabulary%2FmyId/incoming\",\n \"_outgoing\": \"http://localhost/v1/resources/myorg/myproj/_/https:%2F%2Fbluebrain.github.io%2Fnexus%2Fvocabulary%2FmyId/outgoing\",\n \"_project\": \"http://localhost/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_schemaProject\": \"http://localhost/v1/projects/myorg/myproj\",\n \"_self\": \"http://localhost/v1/resources/myorg/myproj/_/https:%2F%2Fbluebrain.github.io%2Fnexus%2Fvocabulary%2FmyId\",\n \"_updatedAt\": \"2023-09-18T12:00:00Z\",\n \"_updatedBy\": \"http://localhost/v1/realms/wonderland/users/alice\"\n }\n}","title":"Resource generation"},{"location":"/docs/delta/api/trial.html#validate","text":"This operation runs validation of a resource against a schema. This would be useful to test whether resources would match the shape of a new schema.\nGET /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}/validate\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resources/myorg/myproj/myschema/base:fd8a2b32-170e-44e8-808f-44a8cbbc49b0/validate\" Response copysource{\n \"@context\" : \"https://bluebrain.github.io/nexus/contexts/shacl-20170720.json\",\n \"@type\" : \"sh:ValidationReport\",\n \"conforms\" : true,\n \"targetedNodes\" : 2\n}","title":"Validate"},{"location":"/docs/delta/api/multi-fetch.html","text":"","title":"Multi fetch"},{"location":"/docs/delta/api/multi-fetch.html#multi-fetch","text":"The multi-fetch operation allows to get in a given format multiple resources that can live in multiple projects.\nThe response includes a resources array that contains the resources in the order specified in the request. The structure of the returned resources is similar to that returned by the fetch API. If there is a failure getting a particular resource, the error is included in place of the resource.\nThis operation can be used to return every type of resource.\nAuthorization notes When performing a request, the caller must have resources/read permission on the project each resource belongs to. Please visit Authentication & authorization section to learn more about it.","title":"Multi fetch"},{"location":"/docs/delta/api/multi-fetch.html#payload","text":"GET|POST /v1/multi-fetch/resources\n\n{\n \"format\": {format}\n \"resources\": [\n {\n \"id\": \"{id}\",\n \"project\": \"{project}\"\n },\n ...\n ]\n}\nwhere…\n{format}: String - the format we expect for the resources in the response. Accepts the following values: source (to get the original payload), annotated-source (to get the original payload with metadata), compacted, expanded, n-triples, dot {project}: String - the project (in the format ‘myorg/myproject’) where the specified resource belongs. This field is optional. It defaults to the current project. {id}: Iri - the @id value of the resource to be returned. Can contain a tag or a revision.","title":"Payload"},{"location":"/docs/delta/api/multi-fetch.html#example","text":"The following example shows how to perform a multi-fetch and an example of response containing errors (missing permissions and resource not found). As a response, a regular json is returned containing the different resources in the requested format.\nRequest copysourcecurl -L \\\n -X GET \\\n -d '\n {\n \"format\": \"source\",\n \"resources\" : [\n {\n \"id\": \"https://bbp.epfl.ch/person/alex\",\n \"project\": \"public/person\"\n },\n {\n \"id\": \"https://bbp.epfl.ch/person/john-doe\",\n \"project\": \"public/person\"\n },\n {\n \"id\": \"https://bbp.epfl.ch/secret/xxx\",\n \"project\": \"restricted/xxx\"\n }\n ]\n }\n' Payload copysource{\n \"format\": \"source\",\n \"resources\" : [\n {\n \"id\": \"https://bbp.epfl.ch/person/alex\",\n \"project\": \"public/person\"\n },\n {\n \"id\": \"https://bbp.epfl.ch/person/john-doe\",\n \"project\": \"public/person\"\n },\n {\n \"id\": \"https://bbp.epfl.ch/secret/xxx\",\n \"project\": \"restricted/xxx\"\n }\n ]\n} Response copysource{\n \"format\": \"source\",\n \"resources\": [\n {\n \"@id\": \"https://bbp.epfl.ch/person/alex\",\n \"project\": \"public/person\",\n \"value\": {\n \"@context\": {\n \"@vocab\": \"https://bluebrain.github.io/nexus/vocabulary/\"\n },\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/success\",\n \"@type\": \"Person\",\n \"bool\": false,\n \"name\": \"Alex\",\n \"number\": 24\n }\n },\n {\n \"@id\": \"https://bbp.epfl.ch/person/john-doe\",\n \"project\": \"public/person\",\n \"error\": {\n \"@type\": \"NotFound\",\n \"reason\": \"The resource 'https://bbp.epfl.ch/person/john-doe' was not found in project 'public/person'.\"\n }\n },\n {\n \"@id\": \"https://bbp.epfl.ch/secret/xxx\",\n \"project\": \"restricted/xxx\",\n \"error\": {\n \"@type\": \"AuthorizationFailed\",\n \"reason\": \"The supplied authentication is not authorized to access this resource.\"\n }\n }\n ]\n}","title":"Example"},{"location":"/docs/delta/api/id-resolution.html","text":"","title":"Id Resolution"},{"location":"/docs/delta/api/id-resolution.html#id-resolution","text":"Id Resolution allows to resolve a resource by providing only a resource identifier (the @id value of a resource). In case there are multiple resources with the same identifier across different projects, the response provides all choices for disambiguation.\nAuthorization notes When performing a request, the caller must have resources/read permission on the project each resource belongs to. Please visit Authentication & authorization section to learn more about it.","title":"Id Resolution"},{"location":"/docs/delta/api/id-resolution.html#resolve","text":"GET /v1/resolve/{id}\nwhere…\n{id}: the identifier of the resource to resolve (URL encoded value).","title":"Resolve"},{"location":"/docs/delta/api/id-resolution.html#example","text":"The following example shows how to perform a request and possible responses. If the provided identifier can be resolved uniquely, the response is identical to that of the resource fetch operation. In case there are multiple choices, the response is that of a listing operation that filters for the resource identifier.\nRequest copysourcecurl \"http://localhost:8080/v1/resolve/https%3A%2F%2Fexample.com%2FAlice\" Response (single resource) copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n {\n \"@vocab\": \"https://schema.org/\"\n }\n ],\n \"@id\": \"https://example.com/Alice\",\n \"@type\": \"Person\",\n \"name\": \"Alice\",\n \"age\": 42,\n \"_constrainedBy\" : \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_createdAt\" : \"1970-01-01T00:00:00Z\",\n \"_createdBy\" : \"http://localhost/v1/anonymous\",\n \"_deprecated\" : false,\n \"_incoming\" : \"http://localhost/v1/resources/myorg/myproject/_/https%3A%2F%2Fexample.com%2FAlice/incoming\",\n \"_outgoing\" : \"http://localhost/v1/resources/myorg/myproject/_/https%3A%2F%2Fexample.com%2FAlice/outgoing\",\n \"_project\" : \"http://localhost/v1/projects/myorg/myproject\",\n \"_rev\" : 1,\n \"_schemaProject\" : \"http://localhost/v1/projects/myorg/myproject\",\n \"_self\" : \"http://localhost/v1/resources/myorg/myproject/_/https%3A%2F%2Fexample.com%2FAlice\",\n \"_updatedAt\" : \"1970-01-01T00:00:00Z\",\n \"_updatedBy\" : \"http://localhost/v1/anonymous\"\n} Response (multiple choices) copysource{\n \"@context\" : [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\"\n ],\n \"_total\" : 2,\n \"_results\" : [\n {\n \"@id\" : \"https://example.com/Alice\",\n \"_constrainedBy\" : \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_createdAt\" : \"2023-09-22T13:55:33.493Z\",\n \"_createdBy\" : \"http://localhost:8080/v1/realms/myrealm/users/bob\",\n \"_deprecated\" : false,\n \"_incoming\" : \"http://localhost:8080/v1/resources/myorg/myproject/_/https:%2F%2Fexample.com%2FAlice/incoming\",\n \"_outgoing\" : \"http://localhost:8080/v1/resources/myorg/myproject/_/https:%2F%2Fexample.com%2FAlice/outgoing\",\n \"_project\" : \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\" : 1,\n \"_schemaProject\" : \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_score\" : 0.0,\n \"_self\" : \"http://localhost:8080/v1/resources/myorg/myproject/_/https:%2F%2Fexample.com%2FAlice\",\n \"_updatedAt\" : \"2023-09-22T13:55:33.493Z\",\n \"_updatedBy\" : \"http://localhost:8080/v1/realms/myrealm/users/bob\"\n },\n {\n \"@id\" : \"https://example.com/Alice\",\n \"_constrainedBy\" : \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_createdAt\" : \"2023-09-22T13:55:33.459Z\",\n \"_createdBy\" : \"http://localhost:8080/v1/realms/myrealm/users/bob\",\n \"_deprecated\" : false,\n \"_incoming\" : \"http://localhost:8080/v1/resources/myorg/secondproject/_/https:%2F%2Fexample.com%2FAlice/incoming\",\n \"_outgoing\" : \"http://localhost:8080/v1/resources/myorg/secondproject/_/https:%2F%2Fexample.com%2FAlice/outgoing\",\n \"_project\" : \"http://localhost:8080/v1/projects/myorg/secondproject\",\n \"_rev\" : 1,\n \"_schemaProject\" : \"http://localhost:8080/v1/projects/myorg/secondproject\",\n \"_score\" : 0.0,\n \"_self\" : \"http://localhost:8080/v1/resources/myorg/secondproject/_/https:%2F%2Fexample.com%2FAlice\",\n \"_updatedAt\" : \"2023-09-22T13:55:33.459Z\",\n \"_updatedBy\" : \"http://localhost:8080/v1/realms/myrealm/users/bob\"\n }\n ],\n \"_maxScore\" : 0.0\n}","title":"Example"},{"location":"/docs/delta/api/id-resolution.html#resolve-proxy-pass-","text":"Note This endpoint is designed for the Nexus deployment at the Blue Brain Project and as such might not suit the needs of other deployments.\nThe resolve endpoint offers resource resolution on the resources the caller has access to. As such, if the client is a browser and does not have the ability to include an authorization header in the request, it is possible to use the proxy pass version of the resolve endpoint which will lead the client to a Nexus Fusion authentication page. This will allow to “inject” the user’s token in a subsequent resolve request made by Nexus Fusion.","title":"Resolve (Proxy Pass)"},{"location":"/docs/delta/api/id-resolution.html#configuration","text":"app.fusion.base: String - base URL for Nexus Fusion app.fusion.enable-redirects: Boolean - needs to be true in order for redirects to work (defaults to false) app.fusion.resolve-base: String - base URL to use when reconstructing the resource identifier in the proxy pass endpoint","title":"Configuration"},{"location":"/docs/delta/api/id-resolution.html#redirection","text":"The client calls /v1/resolve-proxy-pass/{segment} Nexus Delta reconstructs the resource identifier {resourceId} = {resolveBase}/{segment} Nexus Delta redirects the client to… the {fusionBaseUrl}/resolve/{resourceId} Fusion endpoint if the Accept: text/html header is present the /v1/resolve/{resourceId} Delta endpoint otherwise\nThe Nexus Fusion resolve page allows the user to authenticate (if they are not already authenticated) and will perform a call to the Nexus Delta /v1/resolve/{resourceId} with the user’s authentication token.\nAll calls to the /v1/resolve-proxy-pass endpoint lead to 303 See Other responses.","title":"Redirection"},{"location":"/docs/delta/api/id-resolution.html#example","text":"The example below assumes that:\n{fusionBaseUrl} = http://localhost:8080/fusion {segment} = nexus/data/identifier {resolveBase} = https://example.com\nRequest copysourcecurl \"http://localhost:8080/v1/resolve-proxy-pass/nexus/data/identifier\" Redirect (when Acccept:text/html is provided) copysource303 See Other\nThe response to the request can be found under this URI using a\nGET method. Redirect (no Accept:text/html provided) copysource303 See Other\nThe response to the request can be found under this URI using a\nGET method.","title":"Example"},{"location":"/docs/delta/api/id-resolution.html#remark","text":"In your networking setup, if a proxy pass is enabled to map https://example.com/nexus/data/* to https://localhost:8080/v1/resolve-proxy-pass/nexus/data/*, the proxy pass allows to de facto resolve resource with identifier of the type https://example.com/nexus/data/* by simply querying their @id.","title":"Remark"},{"location":"/docs/delta/api/resolvers-api.html","text":"","title":"Resolvers"},{"location":"/docs/delta/api/resolvers-api.html#resolvers","text":"Resolvers are rooted in the /v1/resolvers/{org_label}/{project_label} collection and are used in the following scenarios:\nBring the content of the owl:imports predicate for schema resources. The value is the @id of the resource. E.g.: You can define owl imports on a schema, as follows \"owl:imports\": \"http://example.com/myid\". The resolver will try to find a resource with \"@id\": \"http://example.com/myid\" and if found, will bring the payload into the original resource. Bring the content of the @context links. The value is the @id of the resource. E.g.: A resource might define the context as follows: \"@context\": \"http://example.com/id\". The resolver will try to find a resource with \"@id\": \"http://example.com/id\" and if found, will bring the payload into the original resource.\nEach resolver belongs to a project identifier by the label {project_label} inside an organization identifier by the label {org_label}.\nAuthorization notes When modifying resolvers, the caller must have resolvers/write permissions on the current path of the project or the ancestor paths. When reading resolvers, the caller must have resources/read permissions on the current path of the project or the ancestor paths. Please visit Authentication & authorization section to learn more about it.","title":"Resolvers"},{"location":"/docs/delta/api/resolvers-api.html#resolver-types","text":"There are several types of resolvers, which perform resolution in different scopes.","title":"Resolver types"},{"location":"/docs/delta/api/resolvers-api.html#inproject-resolver","text":"The scope of the resolution is the current project where the resource resides. In other words:\nSchema A can import schema B using the owl:imports as long as schema B is located on the same project as schema A. Resource A can reference to a remote context existing in resource B as long as resource B is located on the same project as resource A.\nThis resolver gets automatically created when the project is created and has the highest priority for resolution. It should not be modified.\nInProject resolver payload\n{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/defaultInProject\",\n \"@type\": \"InProject\",\n \"priority\": {priority},\n}\nwhere {priority} is a numeric value (from 0 - 1000) which defines the resolution priority when attempting to find the resource with a particular @id.","title":"InProject resolver"},{"location":"/docs/delta/api/resolvers-api.html#crossproject-resolver","text":"The scope of the resolution is the collections of projects P defined on the resolver. CrossProject resolution also defines a identity policy I (via the identities or the useCurrentCaller fields) to enforce ACLs. In other words:\nSchema A can import schema B using the owl:imports as long as schema B is located in some of the projects from the collection P and as long I have resources/read permissions on the schema B project. Resource A can reference to a remote context existing in resource B as long as resource B is located in some of the projects from the collection P and as long as I have resources/read permissions on the schema B project.\nCrossProject resolver payload\n{\n \"@id\": \"{someId}\",\n \"@type\": [\"Resolver\", \"CrossProject\"],\n \"priority\": {priority}\n \"resourceTypes\": [\"{resourceType}\", ...],\n \"projects\": [\"{project}\", ... ],\n \"identities\": [ {identity}, {...} ],\n \"useCurrentCaller\": {useCurrentCaller},\n}\nwhere…\n{someId}: Iri - the @id value for this resolver. {priority}: Number - value (from 0 - 1000) which defines the resolution priority when attempting to find the resource. All resolvers must have a different priority in a same project {resourceType}: Iri - resolves only the resources with @type containing {resourceType}. This field is optional. with a particular @id. {project}: String - the user friendly reference to the project from where the resolution process will attempt to find the @id’s. It follows the format {organization}/{project}. {identity}: Json object - the identity against which to enforce ACLs during resolution process. Can’t be defined if useCurrentCaller is set to true {useCurrentCaller}: Boolean - the resolution process will use the caller and its identitites to enforce acls. Can’t be true when _identity_ is defined.","title":"CrossProject resolver"},{"location":"/docs/delta/api/resolvers-api.html#indexing","text":"All the API calls modifying a resolver (creation, update, tagging, deprecation) can specify whether the resolver should be indexed synchronously or in the background. This behaviour is controlled using indexing query param, which can be one of two values:\nasync - (default value) the resolver will be indexed asynchronously sync - the resolver will be indexed synchronously and the API call won’t return until the indexing is finished","title":"Indexing"},{"location":"/docs/delta/api/resolvers-api.html#create-using-post","text":"POST /v1/resolvers/{org_label}/{project_label}\n {...}\nThe json payload:\nIf the @id value is found on the payload, this @id will be used. If the @id value is not found on the payload, an @id will be generated as follows: base:{UUID}. The base is the prefix defined on the resolver’s project ({project_label}).\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/resolvers/myorg/myproj\" \\\n -d \\\n'{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myresolver\",\n \"@type\": \"CrossProject\",\n \"projects\": [\n \"org1/project1\",\n \"org1/project2\"\n ],\n \"identities\": [\n {\n \"realm\": \"myrealm\",\n \"subject\": \"name\"\n }\n ],\n \"priority\": 50\n}' Payload copysource{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myresolver\",\n \"@type\": [\n \"CrossProject\"\n ],\n \"projects\": [\n \"org1/project1\",\n \"org1/project2\"\n ],\n \"identities\": [\n {\n \"realm\": \"myrealm\",\n \"subject\": \"name\"\n }\n ],\n \"priority\": 50\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/resolvers-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myresolver\",\n \"@type\": [\n \"Resolver\",\n \"CrossProject\"\n ],\n \"_incoming\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resolvers\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-18T09:58:00.801Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-18T09:58:00.801Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Create using POST"},{"location":"/docs/delta/api/resolvers-api.html#create-using-put","text":"This alternative endpoint to create a resolver is useful in case the json payload does not contain an @id but you want to specify one. The @id will be specified in the last segment of the endpoint URI.\nPUT /v1/resolvers/{org_label}/{project_label}/{resolver_id}\n {...}\nNote that if the payload contains an @id different from the {resolver_id}, the request will fail.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/resolvers/myorg/myproj/nxv:myresolver\" \\\n -d \\\n'{\n \"@type\": \"CrossProject\",\n \"projects\": [\n \"org1/project1\",\n \"org1/project2\"\n ],\n \"useCurrentCaller\": true,\n \"priority\": 50\n}' Payload copysource{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myresolver\",\n \"@type\": [\n \"CrossProject\"\n ],\n \"projects\": [\n \"org1/project1\",\n \"org1/project2\"\n ],\n \"identities\": [\n {\n \"realm\": \"myrealm\",\n \"subject\": \"name\"\n }\n ],\n \"priority\": 50\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/resolvers-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myresolver\",\n \"@type\": [\n \"Resolver\",\n \"CrossProject\"\n ],\n \"_incoming\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resolvers\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-18T09:58:00.801Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-18T09:58:00.801Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Create using PUT"},{"location":"/docs/delta/api/resolvers-api.html#update","text":"This operation overrides the payload.\nIn order to ensure a client does not perform any changes to a resolver without having had seen the previous revision of the resolver, the last revision needs to be passed as a query parameter.\nPUT /v1/resolvers/{org_label}/{project_label}/{resolver_id}?rev={previous_rev}\n {...}\n… where {previous_rev} is the last known revision number for the resolver.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/resolvers/myorg/myproj/nxv:myresolver?rev=1\" \\\n -d \\\n'{\n \"@type\": \"CrossProject\",\n \"projects\": [\n \"org1/project1\",\n \"org1/project2\"\n ],\n \"identities\": [\n {\n \"realm\": \"myrealm\",\n \"subject\": \"name\"\n }\n ],\n \"priority\": 50\n}' Payload copysource{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myresolver\",\n \"@type\": [\n \"CrossProject\"\n ],\n \"projects\": [\n \"org1/project1\",\n \"org1/project2\"\n ],\n \"identities\": [\n {\n \"realm\": \"myrealm\",\n \"subject\": \"name\"\n }\n ],\n \"priority\": 50\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/resolvers-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myresolver\",\n \"@type\": [\n \"Resolver\",\n \"CrossProject\"\n ],\n \"_incoming\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resolvers\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 2,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-18T09:58:00.801Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-18T10:10:00.801Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Update"},{"location":"/docs/delta/api/resolvers-api.html#tag","text":"Links a resolver revision to a specific name.\nTagging a resolver is considered to be an update as well.\nPOST /v1/resolvers/{org_label}/{project_label}/{resolver_id}/tags?rev={previous_rev}\n {\n \"tag\": \"{name}\",\n \"rev\": {rev}\n }\n… where\n{previous_rev}: Number - the last known revision for the resolver. {name}: String - label given to the resolver at specific revision. {rev}: Number - the revision to link the provided {name}.\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/resolvers/myorg/myproj/nxv:myresolver/tags?rev=2\" \\\n -d \\\n'{\n \"tag\": \"mytag\",\n \"rev\": 1\n}' Payload copysource{\n \"tag\": \"mytag\",\n \"rev\": 1\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/resolvers-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myresolver\",\n \"@type\": [\n \"Resolver\",\n \"CrossProject\"\n ],\n \"_incoming\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resolvers\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 3,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-18T09:58:00.801Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-18T10:25:00.801Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Tag"},{"location":"/docs/delta/api/resolvers-api.html#deprecate","text":"Locks the resolver, so no further operations can be performed. It will also not be taken into account in the resolution process.\nDeprecating a resolver is considered to be an update as well.\nDELETE /v1/resolvers/{org_label}/{project_label}/{resolver_id}?rev={previous_rev}\n… where {previous_rev} is the last known revision number for the resolver.\nExample\nRequest copysourcecurl -X DELETE \\\n \"http://localhost:8080/v1/resolvers/myorg/myproj/nxv:myresolver?rev=3\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/resolvers-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myresolver\",\n \"@type\": [\n \"Resolver\",\n \"CrossProject\"\n ],\n \"_incoming\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver\",\n \"_constrainedBy\" : \"https://bluebrain.github.io/nexus/schemas/resolvers.json\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_deprecated\": true,\n \"_createdAt\": \"2021-04-18T09:58:00.801Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-18T10:25:00.801Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Deprecate"},{"location":"/docs/delta/api/resolvers-api.html#fetch","text":"GET /v1/resolvers/{org_label}/{project_label}/{resolver_id}?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resolvers/myorg/myproj/nxv:myresolver\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/resolvers-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myresolver\",\n \"@type\": [\n \"Resolver\",\n \"CrossProject\"\n ],\n \"projects\": [\n \"org1/project1\",\n \"org1/project2\"\n ],\n \"identities\": [\n {\n \"@type\": \"User\",\n \"realm\": \"myrealm\",\n \"subject\": \"name\"\n }\n ],\n \"priority\": 50,\n \"_incoming\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resolvers\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_deprecated\": true,\n \"_createdAt\": \"2021-04-18T09:58:00.801Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-18T10:25:00.801Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}\nIf the redirect to Fusion feature is enabled and if the Accept header is set to text/html, a redirection to the fusion representation of the resource will be returned.","title":"Fetch"},{"location":"/docs/delta/api/resolvers-api.html#fetch-original-payload","text":"GET /v1/resolvers/{org_label}/{project_label}/{resolver_id}/source?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resolvers/myorg/myproj/nxv:myresolver/source Response copysource{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myresolver\",\n \"@type\": [\n \"CrossProject\"\n ],\n \"projects\": [\n \"org1/project1\",\n \"org1/project2\"\n ],\n \"identities\": [\n {\n \"realm\": \"myrealm\",\n \"subject\": \"name\"\n }\n ],\n \"priority\": 50\n}","title":"Fetch original payload"},{"location":"/docs/delta/api/resolvers-api.html#fetch-tags","text":"GET /v1/resolvers/{org_label}/{project_label}/{resolver_id}/tags?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resolvers/myorg/myproj/myresolvers/e1729302-35b8-4d80-97b2-d63c984e2b5c/tags?rev=2\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/tags.json\",\n \"tags\": [\n {\n \"rev\": 1,\n \"tag\": \"mytag\"\n }\n ]\n}","title":"Fetch tags"},{"location":"/docs/delta/api/resolvers-api.html#list","text":"There are three available endpoints to list resolvers in different scopes.","title":"List"},{"location":"/docs/delta/api/resolvers-api.html#within-a-project","text":"GET /v1/resolvers/{org_label}/{project_label}?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within a project"},{"location":"/docs/delta/api/resolvers-api.html#within-an-organization","text":"This operation returns only resolvers from projects defined in the organisation {org_label} and where the caller has the resources/read permission.\nGET /v1/resolvers/{org_label}?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within an organization"},{"location":"/docs/delta/api/resolvers-api.html#within-all-projects","text":"This operation returns only resolvers from projects where the caller has the resources/read permission.\nGET /v1/resolvers?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within all projects"},{"location":"/docs/delta/api/resolvers-api.html#parameter-description","text":"{from}: Number - is the parameter that describes the offset for the current query; defaults to 0 {size}: Number - is the parameter that limits the number of results; defaults to 20 {deprecated}: Boolean - can be used to filter the resulting resolvers based on their deprecation status {rev}: Number - can be used to filter the resulting resolvers based on their revision value {type}: Iri - can be used to filter the resulting resolvers based on their @type value. This parameter can appear multiple times, filtering further the @type value. {createdBy}: Iri - can be used to filter the resulting resolvers based on their creator {updatedBy}: Iri - can be used to filter the resulting resolvers based on the person which performed the last update {search}: String - can be provided to select only the resolvers in the collection that have attribute values matching (containing) the provided string {sort}: String - can be used to sort resolvers based on a payloads’ field. This parameter can appear multiple times to enable sorting by multiple fields. The default is done by _createdBy and @id. {aggregations}: Boolean - if true then the response will only contain aggregations of the @type and _project fields; defaults to false. See Aggregations.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resolvers/myorg/myproj\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/resolvers.json\"\n ],\n \"_total\": 2,\n \"_results\": [\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/InProject\",\n \"@type\": [\n \"https://bluebrain.github.io/nexus/vocabulary/Resolver\",\n \"https://bluebrain.github.io/nexus/vocabulary/InProject\"\n ],\n \"_incoming\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:defaultInProject/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:defaultInProject/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:defaultInProject\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resolver\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_createdAt\": \"2021-04-18T09:50:00.801Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-18T10:00:00.801Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_rev\": 1,\n \"_deprecated\": true\n },\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myresolver\",\n \"@type\": [\n \"https://bluebrain.github.io/nexus/vocabulary/Resolver\",\n \"https://bluebrain.github.io/nexus/vocabulary/CrossProject\"\n ],\n \"_incoming\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resolvers/myorg/myproject/nxv:myresolver\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resolver\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_createdAt\": \"2021-09-18T09:58:00.801Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2018-09-18T10:25:00.801Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_rev\": 4,\n \"_deprecated\": true\n }\n ],\n \"_next\": \"http://localhost:8080/v1/resolvers/myorg/myproj?after=%5B1559045718752,%22https://bluebrain.github.io/nexus/vocabulary/myresolver29%22%5D\"\n}","title":"Parameter description"},{"location":"/docs/delta/api/resolvers-api.html#fetch-resource-using-resolvers","text":"Fetches a resource using the provided resolver.\nIf the resolver segment ({resolver_id}) is _ the resource is fetched from the first resolver in the requested project ({org_label}/{project_label}). The resolvers are ordered by its priority field.\nGET /v1/resolvers/{org_label}/{project_label}/{resolver_id}/{resource_id}?rev={rev}\n &tag={tag}\n &showReport={showReport}\n… where\n{resource_id}: Iri - the @id value of the resource to be retrieved. {rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional. {showReport}: Boolean - return the resolver resolution steps instead of the resource for debugging purposes.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resolvers/myorg/myproj/nxv:myresolver/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n {\n \"@vocab\": \"http://localhost:8080/\",\n \"ex\": \"http://localhost:8080/\"\n }\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"@type\": \"Custom\",\n \"bool\": false,\n \"name\": \"Alex\",\n \"number\": 24,\n \"_incoming\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/base:fd8a2b32-170e-44e8-808f-44a8cbbc49b0/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/base:fd8a2b32-170e-44e8-808f-44a8cbbc49b0/outgoing\",\n \"_self\": \"http://localhost:8080/v1/resources/myorg/myproj/myschema/base:fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resource\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_deprecated\": true,\n \"_createdAt\": \"2021-04-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-17T15:02:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}","title":"Fetch resource using resolvers"},{"location":"/docs/delta/api/resolvers-api.html#fetch-original-resource-payload-using-resolvers","text":"Fetches the original source payload of a resource using the provided resolver.\nIf the resolver segment ({resolver_id}) is _ the resource is fetched from the first resolver in the requested project ({org_label}/{project_label}). The resolvers are ordered by its priority field.\nGET /v1/resolvers/{org_label}/{project_label}/{resolver_id}/{resource_id}/source?rev={rev}&tag={tag}\nwhere … - {resource_id}: Iri - the @id value of the resource to be retrieved. - {rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. - {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/resolvers/myorg/myproj/nxv:myresolver/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/source\" Response copysource{\n \"@context\": {\n \"ex\": \"http://localhost:8080/\",\n \"@vocab\": \"http://localhost:8080/\"\n },\n \"@type\": \"ex:Custom\",\n \"name\": \"Alex\",\n \"number\": 24,\n \"bool\": false\n}","title":"Fetch original resource payload using resolvers"},{"location":"/docs/delta/api/resolvers-api.html#server-sent-events","text":"From Delta 1.5, it is possible to fetch SSEs for all resolvers or just resolvers in the scope of an organization or a project.\nGET /v1/resolvers/events # for all resolver events in the application\nGET /v1/resolvers/{org_label}/events # for resolver events in the given organization\nGET /v1/resolvers/{org_label}/{project_label}/events # for resolver events in the given project\nThe caller must have respectively the events/read permission on /, {org_label} and {org_label}/{project_label}.\n{org_label}: String - the selected organization for which the events are going to be filtered {project_label}: String - the selected project for which the events are going to be filtered Last-Event-Id: String - optional HTTP Header that identifies the last consumed resource event. It can be used for cases when a client does not want to retrieve the whole event stream, but to start after a specific event.\nNote The event type for resolvers SSEs have been changed so that it is easier to distinguish them from other types of resources.\nExample\nRequest copysourcecurl \"https://localhost:8080/v1/resolvers/events\" Response copysourcedata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/resolvers.json\"],\"@type\":\"ResolverCreated\",\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/resolvers.json\",\"_instant\":\"2021-04-18T09:58:00.801Z\",\"_organizationUuid\":\"6073a640-8da1-405d-acb5-ffa311b0877b\",\"_project\":\"http://localhost:8080/v1/projects/org/project2\",\"_projectUuid\":\"d7b102d9-f8fd-490b-b25f-23dfc5ff2bf8\",\"_resolverId\":\"https://bluebrain.github.io/nexus/vocabulary/cross-project\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/cross-project\",\"_rev\":1,\"_source\":{\"@context\":{\"nxv\":\"https://bluebrain.github.io/nexus/vocabulary/\"},\"@id\":\"https://bluebrain.github.io/nexus/vocabulary/cross-project-provided-entities-put2\",\"@type\":[\"CrossProject\"],\"identities\":[{\"@type\":\"User\",\"realm\":\"wonderland\",\"subject\":\"alice\"}],\"priority\":9,\"projects\":[\"org/project1\",\"org/project2\"],\"resourceTypes\":[\"nxv:Schema\",\"nxv:Custom\"]},\"_subject\":\"http://localhost:8080/v1/realms/wonderland/users/alice\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/Resolver\",\"https://bluebrain.github.io/nexus/vocabulary/CrossProject\"]}\nevent:ResolverCreated\nid:1\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/resolvers.json\"],\"@type\":\"ResolverUpdated\",\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/resolvers.json\",\"_instant\":\"2021-04-19T09:58:00.801Z\",\"_organizationUuid\":\"6073a640-8da1-405d-acb5-ffa311b0877b\",\"_project\":\"http://localhost:8080/v1/projects/org/project\",\"_projectUuid\":\"d7b102d9-f8fd-490b-b25f-23dfc5ff2bf8\",\"_resolverId\":\"https://bluebrain.github.io/nexus/vocabulary/cross-project\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/cross-project\",\"_rev\":2,\"_source\":{\"@type\":[\"InProject\"],\"priority\":34},\"_subject\":\"http://localhost:8080/v1/realms/wonderland/users/bob\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/Resolver\",\"https://bluebrain.github.io/nexus/vocabulary/CrossProject\"]}\nevent:ResolverUpdated\nid:2\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/resolvers.json\"],\"@type\":\"ResolverTagAdded\",\"tag\":\"my-tag\",\"targetRev\":1,\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/resolvers.json\",\"_instant\":\"2021-04-20T09:58:00.801Z\",\"_organizationUuid\":\"6073a640-8da1-405d-acb5-ffa311b0877b\",\"_project\":\"http://localhost:8080/v1/projects/org/project\",\"_projectUuid\":\"d7b102d9-f8fd-490b-b25f-23dfc5ff2bf8\",\"_resolverId\":\"https://bluebrain.github.io/nexus/vocabulary/cross-project\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/cross-project\",\"_rev\":3,\"_subject\":\"http://localhost:8080/v1/realms/wonderland/users/alice\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/Resolver\",\"https://bluebrain.github.io/nexus/vocabulary/CrossProject\"]}\nevent:ResolverTagAdded\nid:3\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/resolvers.json\"],\"@type\":\"ResolverDeprecated\",\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/resolvers.json\",\"_instant\":\"2021-04-21T09:58:00.801Z\",\"_organizationUuid\":\"6073a640-8da1-405d-acb5-ffa311b0877b\",\"_project\":\"http://localhost:8080/v1/projects/org/project\",\"_projectUuid\":\"d7b102d9-f8fd-490b-b25f-23dfc5ff2bf8\",\"_resolverId\":\"https://bluebrain.github.io/nexus/vocabulary/cross-project\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/cross-project\",\"_rev\":4,\"_subject\":\"http://localhost:8080/v1/realms/wonderland/users/alice\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/Resolver\",\"https://bluebrain.github.io/nexus/vocabulary/CrossProject\"]}\nevent:ResolverDeprecated\nid:6","title":"Server Sent Events"},{"location":"/docs/delta/api/views/index.html","text":"","title":"Views"},{"location":"/docs/delta/api/views/index.html#views","text":"Views are rooted in the /v1/views/{org_label}/{project_label} collection and are used to index the selected resources into a bucket.\nEach view belongs to a project identifier by the label {project_label} inside an organization identifier by the label {org_label}.\nThere are several types of views, which relies on different technology to perform the indexing","title":"Views"},{"location":"/docs/delta/api/views/index.html#elasticsearchview","text":"A view which stores the targeted Json resources into an ElasticSearch Document.\nThe Documents created on each view are isolated from Documents created on other views by using different ElasticSearch indices.\nMore information","title":"ElasticSearchView"},{"location":"/docs/delta/api/views/index.html#aggregateelasticsearchview","text":"This view describes an aggregation of multiple existing ElasticSearch views. This approach is useful for searching documents across multiple ElasticSearch views.\nWhen querying an AggregateElasticSearchView, the query is performed on each of the described views and the results are aggregated by ElasticSearch.\nMore information","title":"AggregateElasticSearchView"},{"location":"/docs/delta/api/views/index.html#sparqlview","text":"A view that creates a Sparql namespace. which converts the targeted Json resources intro RDF triples and stores them in a Sparql store.\nThe triples created on each view are isolated from triples created on another view.\nMore information","title":"SparqlView"},{"location":"/docs/delta/api/views/index.html#aggregatesparqlview","text":"This view describes an aggregation of multiple existing Sparql views. This approach is useful for searching triples across multiple Sparql views.\nWhen querying an AggregateSparqlView, the query is performed on each of the described views. The Sparql store does not have means for aggregating the query and for that reason this approach is very limited.\nMore information","title":"AggregateSparqlView"},{"location":"/docs/delta/api/views/index.html#compositeview","text":"A view which is composed by multiple sources and projections.\nA source defines from where to retrieve the resources. It is the input for the indexing in a later stage.\nA projection defines the type of indexing and the transformations to apply to the data.\nComposite views are useful when aggregating data across multiple projects (local or remote) using multiple sources. Afterwards, by defining multiple projections, the data can be adapted to the client needs.\nMore information","title":"CompositeView"},{"location":"/docs/delta/api/views/index.html#indexing","text":"All the API calls modifying a view (creation, update, tagging, deprecation) can specify whether the view should be indexed synchronously or in the background. This behaviour is controlled using indexing query param, which can be one of two values:\nasync - (default value) the view will be indexed asynchronously sync - the view will be indexed synchronously and the API call won’t return until the indexing is finished","title":"Indexing"},{"location":"/docs/delta/api/views/index.html#list-views","text":"There are three available endpoints to list views in different scopes.","title":"List views"},{"location":"/docs/delta/api/views/index.html#within-a-project","text":"GET /v1/views/{org_label}/{project_label}?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within a project"},{"location":"/docs/delta/api/views/index.html#within-an-organization","text":"This operation returns only views from projects defined in the organisation {org_label} and where the caller has the resources/read permission.\nGET /v1/views/{org_label}?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within an organization"},{"location":"/docs/delta/api/views/index.html#within-all-projects","text":"This operation returns only views from projects where the caller has the resources/read permission.\nGET /v1/views?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within all projects"},{"location":"/docs/delta/api/views/index.html#parameter-description","text":"{from}: Number - is the parameter that describes the offset for the current query; defaults to 0 {size}: Number - is the parameter that limits the number of results; defaults to 20 {deprecated}: Boolean - can be used to filter the resulting views based on their deprecation status {rev}: Number - can be used to filter the resulting views based on their revision value {type}: Iri - can be used to filter the resulting views based on their @type value. This parameter can appear multiple times, filtering further the @type value {createdBy}: Iri - can be used to filter the resulting views based on their creator {updatedBy}: Iri - can be used to filter the resulting views based on the person which performed the last update {search}: String - can be provided to select only the views in the collection that have attribute values matching (containing) the provided string {sort}: String - can be used to sort views based on a payloads’ field. This parameter can appear multiple times to enable sorting by multiple fields. The default is done by _createdBy and @id. {aggregations}: Boolean - if true then the response will only contain aggregations of the @type and _project fields; defaults to false. See Aggregations.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/search-metadata.json\"\n ],\n \"_total\": 3,\n \"_results\": [\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticIndex\",\n \"@type\": [\n \"https://bluebrain.github.io/nexus/vocabulary/View\",\n \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\"\n ],\n \"_incoming\": \"http://localhost:8080/v1/schemas/myorg/myproj/nxv:defaultElasticSearchIndex/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/schemas/myorg/myproj/nxv:defaultElasticSearchIndex/outgoing\",\n \"_self\": \"http://localhost:8080/v1/schemas/myorg/myproj/nxv:defaultElasticSearchIndex\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-18T16:39:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-18T17:10:22.748Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n },\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex\",\n \"@type\": [\n \"https://bluebrain.github.io/nexus/vocabulary/View\",\n \"https://bluebrain.github.io/nexus/vocabulary/SparqlView\"\n ],\n \"_incoming\": \"http://localhost:8080/v1/schemas/myorg/myproj/nxv:defaultSparqlIndex/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/schemas/myorg/myproj/nxv:defaultSparqlIndex/outgoing\",\n \"_self\": \"http://localhost:8080/v1/schemas/myorg/myproj/nxv:defaultSparqlIndex\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-04-18T16:39:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-18T17:10:22.748Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n },\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview2\",\n \"@type\": [\n \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\",\n \"https://bluebrain.github.io/nexus/vocabulary/View\"\n ],\n \"_incoming\": \"http://localhost:8080/v1/schemas/myorg/myproj/nxv:myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/schemas/myorg/myproj/nxv:myview/outgoing\",\n \"_self\": \"http://localhost:8080/v1/schemas/myorg/myproj/nxv:myview\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/view\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_deprecated\": true,\n \"_createdAt\": \"2021-04-18T16:39:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-04-18T17:10:22.748Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n }\n ],\n \"_next\": \"http://localhost:8080/v1/views/myorg/myproj?after=%5B1559045718752,%22https://bluebrain.github.io/nexus/vocabulary/myview29%22%5D\"\n}","title":"Parameter description"},{"location":"/docs/delta/api/views/index.html#indexing-failures","text":"","title":"Indexing failures"},{"location":"/docs/delta/api/views/index.html#listing-indexing-failures","text":"This endpoint returns the indexing failures for the view {view_id}. The caller must have view/write permission on {org_label}/{project_label}.\nGET /v1/views/{org_label}/{project_label}/{view_id}/failures\n ?from={from}\n &size={size}\n &instant={instant}","title":"Listing indexing failures"},{"location":"/docs/delta/api/views/index.html#parameter-description","text":"{from}: Number - is the parameter that describes the offset for the current query; defaults to 0 {size}: Number - is the parameter that limits the number of results; defaults to 20 {instant}: Time Range - can be used to filter the results based on the moment they were risen\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/myview/failures\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/error.json\"\n ],\n \"_total\": 2,\n \"_results\": [\n {\n \"errorType\": \"java.lang.Exception\",\n \"id\": \"https://bluebrain.github.io/nexus/vocabulary/myid\",\n \"message\": \"The resource could not be indexed for the following reason: '...'\",\n \"offset\": {\n \"@type\": \"At\",\n \"value\": 42\n },\n \"project\": \"myorg/myproj\",\n \"_rev\": 1\n },\n {\n \"errorType\": \"java.lang.Exception\",\n \"id\": \"https://bluebrain.github.io/nexus/vocabulary/myid\",\n \"message\": \"The resource could not be indexed for the following reason: '...'\",\n \"offset\": {\n \"@type\": \"At\",\n \"value\": 42\n },\n \"_rev\": 1\n }\n ]\n}","title":"Parameter description"},{"location":"/docs/delta/api/views/index.html#fetch-indexing-failures-as-sses","text":"This endpoint fetches the available indexing failures. The Last-Event-Id is optional and provides the id of the indexing failure at which to start the stream; by default all indexing failures are fetched. The caller must have view/write permission on {org_label}/{project_label}.\nGET /v1/views/{org_label}/{project_label}/{view_id}/failures/sse\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/myview/failures/sse\" Response copysourcedata:{\"@context\":\"https://bluebrain.github.io/nexus/contexts/error.json\",\"errorType\":\"java.lang.Exception\",\"id\":\"myid\",\"message\":\"boom\",\"offset\":{\"@type\":\"At\",\"value\":42}}\nevent:IndexingFailure\nid:1","title":"Fetch indexing failures as SSEs"},{"location":"/docs/delta/api/views/index.html#server-sent-events","text":"From Delta 1.5, it is possible to fetch SSEs for all views or just views in the scope of an organization or a project.\nGET /v1/views/events # for all view events in the application\nGET /v1/views/{org_label}/events # for view events in the given organization\nGET /v1/views/{org_label}/{project_label}/events # for view events in the given project\nThe caller must have respectively the events/read permission on /, {org_label} and {org_label}/{project_label}.\n{org_label}: String - the selected organization for which the events are going to be filtered {project_label}: String - the selected project for which the events are going to be filtered Last-Event-Id: String - optional HTTP Header that identifies the last consumed resource event. It can be used for cases when a client does not want to retrieve the whole event stream, but to start after a specific event.\nNote The event type for views SSEs have been changed so that it is easier to distinguish them from other types of resources.\nExample\nRequest copysourcecurl \"https://localhost:8080/v1/views/events\" Response copysourcedata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/elasticsearch.json\"],\"@type\":\"ElasticSearchViewTagAdded\",\"_source\":{\"includeMetadata\": true},\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/views.json\",\"_instant\":\"2021-04-18T17:10:22.748Z\",\"_organizationUuid\":\"61c74973-0f04-40f0-a694-7c8ed0fb090f\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"61c74973-0f04-40f0-a694-7c8ed0fb090f\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/blazegraph-id\",\"_rev\":1,\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\",\"https://bluebrain.github.io/nexus/vocabulary/View\"],\"_uuid\":\"d6933f15-beca-4058-987f-75f2d71d1228\",\"_viewId\":\"https://bluebrain.github.io/nexus/vocabulary/blazegraph-id\"}\nevent:BlazegraphViewCreated\nid:2\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/elasticsearch.json\"],\"@type\":\"ElasticSearchViewTagAdded\",\"_source\":{\"includeMetadata\": false},\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/views.json\",\"_instant\":\"2021-04-20T14:22:32.12Z\",\"_organizationUuid\":\"61c74973-0f04-40f0-a694-7c8ed0fb090f\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"61c74973-0f04-40f0-a694-7c8ed0fb090f\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/blazegraph-id\",\"_rev\":2,\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\",\"https://bluebrain.github.io/nexus/vocabulary/View\"],\"_uuid\":\"d6933f15-beca-4058-987f-75f2d71d1228\",\"_viewId\":\"https://bluebrain.github.io/nexus/vocabulary/blazegraph-id\"}\nevent:BlazegraphViewUpdated\nid:2\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/elasticsearch.json\"],\"@type\":\"ElasticSearchViewTagAdded\",\"tag\":\"mytag\",\"targetRev\":1,\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/views.json\",\"_instant\":\"2021-04-24T06:44:34.546Z\",\"61c74973-0f04-40f0-a694-7c8ed0fb090f\":\"{{uuid}}\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"61c74973-0f04-40f0-a694-7c8ed0fb090f\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/elastic-id\",\"_rev\":3,\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\",\"https://bluebrain.github.io/nexus/vocabulary/View\"],\"_uuid\":\"d6933f15-beca-4058-987f-75f2d71d1228\",\"_viewId\":\"https://bluebrain.github.io/nexus/vocabulary/elastic-id\"}\nevent:ElasticSearchViewTagAdded\nid:3\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/blazegraph.json\"],\"@type\":\"BlazegraphViewDeprecated\",\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/views.json\",\"_instant\":\"2021-04-25T23:59:59.748Z\",\"_organizationUuid\":\"61c74973-0f04-40f0-a694-7c8ed0fb090f\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"61c74973-0f04-40f0-a694-7c8ed0fb090f\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/elastic-id\",\"_rev\":4,\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\",\"https://bluebrain.github.io/nexus/vocabulary/View\"],\"_uuid\":\"d6933f15-beca-4058-987f-75f2d71d1228\",\"_viewId\":\"https://bluebrain.github.io/nexus/vocabulary/elastic-id\"}\nevent:BlazegraphViewDeprecated\nid:4","title":"Server Sent Events"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html","text":"","title":"ElasticSearchView"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#elasticsearchview","text":"This view creates an ElasticSearch index and stores the targeted Json resources into an ElasticSearch Document.\nThe documents created on each view are isolated from documents created on other views by using different ElasticSearch indices.\nA default view gets automatically created when the project is created but other views can be created.","title":"ElasticSearchView"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#processing-pipeline","text":"An asynchronous process gets triggered for every view. This process can be visualized as a pipeline with different stages.\nThe first stage is the input of the pipeline: a stream of resource updates scoped for the project where the view was created.\nFor each incoming update, a pipeline is applied to this resource.\nA pipeline is made of pipes which are the processing units of a pipeline for an Elasticsearch view.\nThey are applied sequentially as defined by the user in the view payload and allow to transform and/or filter a resource before indexing it to Elasticsearch.","title":"Processing pipeline"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#filters","text":"Filters allow to discard a resource if it does not match a given predicate (ex: it has been deprecated or does not match an expected type). If a resource is filtered out by a pipe:\nit won’t be indexed so the execution and it will be deleted from the index if a previous revision of this resource has been indexed the execution of the next pipes is short-circuited to avoid useless computation\nIt is therefore encouraged to apply the filtering pipes at the beginning of the pipeline.\nExisting pipes and how to create new ones is defined here.","title":"Filters"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#transformations","text":"Transformations allow to modify:\nThe original payload of the resource which has been submitted by the user The metadata graph of the resource (the fields that have been generated from Nexus) The data graph of the resource (that has been computed from the original payload at ingestion time)","title":"Transformations"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#reconciliation-and-indexing","text":"When a resource makes it to the end of the pipeline, we produce a json document by merging:\nthe original payload, the data and metadata graphs that have been translated to the compacted JSON-LD format with a default context and the one provided by the view\nThe resulting json is then stripped of any @context fields and pushed to Elasticsearch.","title":"Reconciliation and indexing"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#payload","text":"The payload includes a pipeline of transformations and filters to apply to the different resources. The stages of the pipeline are applied sequentially on the resource as defined in the payload.\n{\n \"@id\": \"{someid}\",\n \"@type\": \"ElasticSearchView\",\n \"resourceTag\": \"{tag}\",\n \"pipeline\": [\n {\n \"name\" : \"{pipeName}\",\n \"config\" : _pipe_config_\n },\n ...\n ],\n \"context\": _context_,\n \"mapping\": _elasticsearch mapping_,\n \"settings\": _elasticsearch settings_,\n \"permission\": \"{permission}\"\n}\nwhere…\n{tag}: String - Selects only resources with the provided tag. This field is optional. {pipeName}: String - Identifier of the pipe to apply. More information about pipe is available here pipe_config : Json object - Configuration for the pipe {pipeName}. This field can be optional depending on {pipeName} ._context_ : Json - Additional JSON-LD context value applied when compacting the resource before indexing it to Elasticsearch. _elasticsearch mapping_: Json object - Defines the value types for the Json keys, as stated at the ElasticSearch mapping documentation. _elasticssearch settings_: Json object - defines Elasticsearch index settings for the underlying Elasticsearch index. Default settings are applied, if not specified. {someid}: Iri - The @id value for this view. {permission}: String - permission required to query this view. Defaults to views/query.\nPlease note that for retro-compatibility purposes, omitting the pipeline will apply a default one including filtering deprecated resources, discarding metadata and selecting default label predicates","title":"Payload"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#legacy-payload","text":"Retro-compatibility is ensured with the legacy payload as defined here\nThe legacy payload is now deprecated and will be removed in an upcoming version.","title":"Legacy payload"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#","text":"The following example creates an ElasticSearch view that will index resources validated against the schema with id https://bluebrain.github.io/nexus/schemas/myschema. If a resource is deprecated, it won’t be selected for indexing.\nThe resulting ElasticSearch Documents fields will be indexed according to the provided mapping rules and they won’t include the resource metadata fields.\n{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\",\n \"@type\": [\n \"ElasticSearchView\"\n ],\n \"mapping\": {\n \"dynamic\": false,\n \"properties\": {\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"number\": {\n \"type\": \"long\"\n },\n \"bool\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"pipeline\": [\n {\n \"name\" : \"filterDeprecated\"\n },\n {\n \"name\" : \"filterBySchema\",\n \"config\" : {\n \"types\" : [\n \"https://bluebrain.github.io/nexus/schemas/myschema\"\n ]\n }\n },\n {\n \"name\" : \"discardMetadata\"\n }\n ]\n}","title":"Example"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#create-using-post","text":"POST /v1/views/{org_label}/{project_label}\n {...}\nThe json payload:\nIf the @id value is found on the payload, this @id will be used. If the @id value is not found on the payload, an @id will be generated as follows: base:{UUID}. The base is the prefix defined on the resource’s project ({project_label}).\nExample\nRequest copysourcecurl -XPOST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/myproj\" -d \\\n'{\n \"@type\": \"ElasticSearchView\",\n \"mapping\": {\n \"dynamic\": false,\n \"properties\": {\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"number\": {\n \"type\": \"long\"\n },\n \"bool\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"pipeline\": []\n}' Payload copysource{\n \"@type\": [\n \"ElasticSearchView\"\n ],\n \"mapping\": {\n \"dynamic\": false,\n \"properties\": {\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"number\": {\n \"type\": \"long\"\n },\n \"bool\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"pipeline\": []\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/elasticsearch-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/386a8c21-3acf-4f10-90ab-329466f5e04c\",\n \"@type\": [\n \"ElasticSearchView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-12T09:44:35.609Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/386a8c21-3acf-4f10-90ab-329466f5e04c/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/386a8c21-3acf-4f10-90ab-329466f5e04c/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/386a8c21-3acf-4f10-90ab-329466f5e04c\",\n \"_updatedAt\": \"2021-05-12T09:44:35.609Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"ea4b3858-c1ac-4afb-ac94-13fdb1b53681\"\n}","title":"Create using POST"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#create-using-put","text":"This alternative endpoint to create a view is useful in case the json payload does not contain an @id but you want to specify one. The @id will be specified in the last segment of the endpoint URI.\nPUT /v1/views/{org_label}/{project_label}/{view_id}\n {...}\nNote that if the payload contains an @id different from the {view_id}, the request will fail.\nExample\nRequest copysourcecurl -XPUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/myproj/myview\" -d \\\n'{\n \"@type\": \"ElasticSearchView\",\n \"mapping\": {\n \"dynamic\": false,\n \"properties\": {\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"number\": {\n \"type\": \"long\"\n },\n \"bool\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"pipeline\": []\n}' Payload copysource{\n \"@type\": [\n \"ElasticSearchView\"\n ],\n \"mapping\": {\n \"dynamic\": false,\n \"properties\": {\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"number\": {\n \"type\": \"long\"\n },\n \"bool\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"pipeline\": []\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/elasticsearch-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/myview\",\n \"@type\": [\n \"ElasticSearchView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-12T09:54:28.171Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/myview\",\n \"_updatedAt\": \"2021-05-12T09:54:28.171Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"7e737b83-30a0-4ea3-b6c9-cd1ed481d743\"\n}","title":"Create using PUT"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#update","text":"This operation overrides the payload.\nIn order to ensure a client does not perform any changes to a resource without having had seen the previous revision of the view, the last revision needs to be passed as a query parameter.\nPUT /v1/views/{org_label}/{project_label}/{view_id}?rev={previous_rev}\n {...}\n… where {previous_rev} is the last known revision number for the view.\nNote Updating a view creates a new Elasticsearch index and deletes the existing one. The indexing process will start from the beginning.\nExample\nRequest copysourcecurl -XPUT \\\n-H \"Content-Type: application/json\" \\\n\"http://localhost:8080/v1/views/myorg/myproj/myview?rev=1\" -d \\\n'{\n \"@type\": [\n \"ElasticSearchView\"\n ],\n \"mapping\": {\n \"dynamic\": false,\n \"properties\": {\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"number\": {\n \"type\": \"long\"\n },\n \"bool\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"pipeline\": []\n}' Payload copysource{\n \"@type\": [\n \"ElasticSearchView\"\n ],\n \"mapping\": {\n \"dynamic\": false,\n \"properties\": {\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"number\": {\n \"type\": \"long\"\n },\n \"bool\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"pipeline\": []\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/elasticsearch-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/myview\",\n \"@type\": [\n \"ElasticSearchView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-12T09:54:28.171Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/myview\",\n \"_updatedAt\": \"2021-05-12T09:56:26.156Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"7e737b83-30a0-4ea3-b6c9-cd1ed481d743\"\n}","title":"Update"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#tag","text":"Links a view revision to a specific name.\nTagging a view is considered to be an update as well.\nPOST /v1/views/{org_label}/{project_label}/{view_id}/tags?rev={previous_rev}\n {\n \"tag\": \"{name}\",\n \"rev\": {rev}\n }\n… where\n{previous_rev}: is the last known revision number for the resource. {name}: String - label given to the view at specific revision. {rev}: Number - the revision to link the provided {name}.\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/myproj/nxv:myview/tags?rev=2\" \\\n -d \\\n'{\n \"tag\": \"mytag\",\n \"rev\": 1\n}' Payload copysource{\n \"tag\": \"mytag\",\n \"rev\": 1\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/elasticsearch-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/myview\",\n \"@type\": [\n \"ElasticSearchView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-12T09:54:28.171Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/myview\",\n \"_updatedAt\": \"2021-05-12T09:58:20.507Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"7e737b83-30a0-4ea3-b6c9-cd1ed481d743\"\n}","title":"Tag"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#deprecate","text":"Locks the view, so no further operations can be performed. It also stops indexing any more resources into it and deletes the underlying index.\nDeprecating a view is considered to be an update as well.\nNote Deprecating a view deletes the view index, making the view not searchable.\nDELETE /v1/views/{org_label}/{project_label}/{view_id}?rev={previous_rev}\n… where {previous_rev} is the last known revision number for the view.\nExample\nRequest copysourcecurl -XDELETE \\\n \"http://localhost:8080/v1/views/myorg/myproj/myview?rev=3\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/elasticsearch-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/myview\",\n \"@type\": [\n \"ElasticSearchView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-12T12:56:09.676Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/myview\",\n \"_updatedAt\": \"2021-05-12T13:01:01.232Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"7e737b83-30a0-4ea3-b6c9-cd1ed481d743\"\n}","title":"Deprecate"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#fetch","text":"GET /v1/views/{org_label}/{project_label}/{view_id}?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional. {rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/myview\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/elasticsearch.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/myview\",\n \"@type\": [\n \"ElasticSearchView\",\n \"View\"\n ],\n \"includeDeprecated\": true,\n \"includeMetadata\": true,\n \"mapping\": {\n \"dynamic\": false,\n \"properties\": {\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"bool\": {\n \"type\": \"boolean\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"number\": {\n \"type\": \"long\"\n }\n }\n },\n \"permission\": \"views/query\",\n \"resourceSchemas\": [],\n \"resourceTypes\": [],\n \"pipeline\": [],\n \"settings\": {\n \"analysis\": {\n \"analyzer\": {\n \"nexus\": {\n \"filter\": [\n \"trim\",\n \"word_delimiter_nexus\",\n \"lowercase\"\n ],\n \"tokenizer\": \"classic\",\n \"type\": \"custom\"\n }\n },\n \"filter\": {\n \"word_delimiter_nexus\": {\n \"split_on_numerics\": false,\n \"type\": \"word_delimiter_graph\"\n }\n }\n },\n \"index\": {\n \"number_of_shards\": 1\n }\n },\n \"sourceAsText\": false,\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-12T09:54:28.171Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/myview\",\n \"_updatedAt\": \"2021-05-12T09:58:20.507Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"7e737b83-30a0-4ea3-b6c9-cd1ed481d743\"\n}\nIf the redirect to Fusion feature is enabled and if the Accept header is set to text/html, a redirection to the fusion representation of the resource will be returned.\nNote that for retro-compatibility purposes, fetching an elasticsearch view returns legacy fields.","title":"Fetch"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#fetch-original-payload","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/source?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional. {rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/myview/source\" Response copysource{\n \"@type\": [\n \"ElasticSearchView\"\n ],\n \"mapping\": {\n \"dynamic\": false,\n \"properties\": {\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"number\": {\n \"type\": \"long\"\n },\n \"bool\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"pipeline\": []\n}","title":"Fetch original payload"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#search","text":"POST /v1/views/{org_label}/{project_label}/{view_id}/_search\n {...}\nThe supported payload is defined on the ElasticSearch documentation\nThe string documents is used as a prefix of the default ElasticSearch view_id\nExample\nRequest copysourcecurl -XPOST \\\n-H \"Content-Type: application/json\" \\\n\"http://localhost:8080/v1/views/myorg/myproj/myview/_search\" -d \\\n'{\n \"query\": {\n \"term\": {\n \"@type\": \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\"\n }\n }\n}' Payload copysource{\n \"query\": {\n \"term\": {\n \"@type\": \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\"\n }\n }\n} Response copysource{\n \"hits\": {\n \"hits\": [\n {\n \"_id\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\",\n \"_index\": \"delta_7e737b83-30a0-4ea3-b6c9-cd1ed481d743_3\",\n \"_score\": 0.8566987,\n \"_source\": {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\",\n \"@type\": [\n \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\",\n \"https://bluebrain.github.io/nexus/vocabulary/View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-12T09:44:22.259Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/internal/users/delta\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/documents/incoming\",\n \"_original_source\": \"{\\\"resourceSchemas\\\":[],\\\"resourceTypes\\\":[],\\\"sourceAsText\\\":true,\\\"includeMetadata\\\":true,\\\"includeDeprecated\\\":true,\\\"permission\\\":\\\"views/query\\\",\\\"@type\\\":\\\"ElasticSearchView\\\",\\\"@id\\\":\\\"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\\\"}\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/documents/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/documents\",\n \"_updatedAt\": \"2021-05-12T09:44:22.259Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/internal/users/delta\",\n \"_uuid\": \"a1147f0f-1650-49f2-8704-30ad97be8f31\"\n }\n },\n {\n \"_id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/386a8c21-3acf-4f10-90ab-329466f5e04c\",\n \"_index\": \"delta_7e737b83-30a0-4ea3-b6c9-cd1ed481d743_3\",\n \"_score\": 0.8566987,\n \"_source\": {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/386a8c21-3acf-4f10-90ab-329466f5e04c\",\n \"@type\": [\n \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\",\n \"https://bluebrain.github.io/nexus/vocabulary/View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-12T09:44:35.609Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/386a8c21-3acf-4f10-90ab-329466f5e04c/incoming\",\n \"_original_source\": \"{\\\"@type\\\":[\\\"ElasticSearchView\\\"],\\\"mapping\\\":{\\\"dynamic\\\":false,\\\"properties\\\":{\\\"@id\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"@type\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"name\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"number\\\":{\\\"type\\\":\\\"long\\\"},\\\"bool\\\":{\\\"type\\\":\\\"boolean\\\"}}},\\\"includeMetadata\\\":true,\\\"includeDeprecated\\\":true,\\\"sourceAsText\\\":true,\\\"resourceSchemas\\\":[],\\\"resourceTypes\\\":[]}\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/386a8c21-3acf-4f10-90ab-329466f5e04c/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/386a8c21-3acf-4f10-90ab-329466f5e04c\",\n \"_updatedAt\": \"2021-05-12T09:44:35.609Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"ea4b3858-c1ac-4afb-ac94-13fdb1b53681\"\n }\n },\n {\n \"_id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/indexing1\",\n \"_index\": \"delta_7e737b83-30a0-4ea3-b6c9-cd1ed481d743_3\",\n \"_score\": 0.8566987,\n \"_source\": {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/indexing1\",\n \"@type\": [\n \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\",\n \"https://bluebrain.github.io/nexus/vocabulary/View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-12T09:53:32.704Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/indexing1/incoming\",\n \"_original_source\": \"{\\\"@type\\\":[\\\"ElasticSearchView\\\"],\\\"mapping\\\":{\\\"dynamic\\\":false,\\\"properties\\\":{\\\"@id\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"@type\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"name\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"number\\\":{\\\"type\\\":\\\"long\\\"},\\\"bool\\\":{\\\"type\\\":\\\"boolean\\\"}}},\\\"includeMetadata\\\":true,\\\"includeDeprecated\\\":true,\\\"sourceAsText\\\":true,\\\"resourceSchemas\\\":[],\\\"resourceTypes\\\":[]}\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/indexing1/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/indexing1\",\n \"_updatedAt\": \"2021-05-12T09:53:32.704Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"ab97491a-0f30-4616-9906-28b92a8c0b79\"\n }\n },\n {\n \"_id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/myview\",\n \"_index\": \"delta_7e737b83-30a0-4ea3-b6c9-cd1ed481d743_3\",\n \"_score\": 0.8566987,\n \"_source\": {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/myview\",\n \"@type\": [\n \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\",\n \"https://bluebrain.github.io/nexus/vocabulary/View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-12T09:54:28.171Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/myview/incoming\",\n \"_original_source\": \"{\\\"@type\\\":[\\\"ElasticSearchView\\\"],\\\"mapping\\\":{\\\"dynamic\\\":false,\\\"properties\\\":{\\\"@id\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"@type\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"name\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"number\\\":{\\\"type\\\":\\\"long\\\"},\\\"bool\\\":{\\\"type\\\":\\\"boolean\\\"}}},\\\"includeMetadata\\\":true,\\\"includeDeprecated\\\":true,\\\"sourceAsText\\\":true,\\\"resourceSchemas\\\":[],\\\"resourceTypes\\\":[]}\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/myview\",\n \"_updatedAt\": \"2021-05-12T09:58:20.507Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"7e737b83-30a0-4ea3-b6c9-cd1ed481d743\"\n }\n }\n ],\n \"max_score\": 0.8566987,\n \"total\": {\n \"relation\": \"eq\",\n \"value\": 4\n }\n },\n \"timed_out\": false,\n \"took\": 10,\n \"_shards\": {\n \"failed\": 0,\n \"skipped\": 0,\n \"successful\": 1,\n \"total\": 1\n }\n}","title":"Search"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#fetch-elasticsearch-mapping","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/_mapping\nRetrieves the view’s ElasticSearch mapping.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/myview/_mapping\" Response copysource{\n \"delta_f488d131-5f29-4721-979e-277a0850fed2_1\": {\n \"mappings\": {\n \"properties\": {\n \"title\": {\n \"type\": \"text\",\n \"fields\": {\n \"keyword\": {\n \"type\": \"keyword\"\n }\n }\n },\n \"description\": {\n \"type\": \"text\"\n }\n }\n }\n }\n}","title":"Fetch Elasticsearch mapping"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#fetch-tags","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/tags?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/myview/tags\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/tags.json\",\n \"tags\": [\n {\n \"rev\": 1,\n \"tag\": \"mytag\"\n }\n ]\n}","title":"Fetch tags"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#fetch-statistics","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/statistics\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/nxv:myview/statistics\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/statistics.json\",\n \"@type\": \"ViewStatistics\",\n \"totalEvents\": 3754,\n \"processedEvents\": 3754,\n \"evaluatedEvents\": 3754,\n \"remainingEvents\": 0,\n \"discardedEvents\": 0,\n \"failedEvents\": 0,\n \"delayInSeconds\": 0,\n \"lastEventDateTime\": \"2021-04-30T15:04:44.021Z\",\n \"lastProcessedEventDateTime\": \"2021-04-30T15:04:44.021Z\"\n}\nwhere…\ntotalEvents - total number of events in the project processedEvents - number of events that have been considered by the view remainingEvents - number of events that remain to be considered by the view discardedEvents - number of events that have been discarded (were not evaluated due to filters, e.g. did not match schema, tag or type defined in the view) evaluatedEvents - number of events that have been used to update an index lastEventDateTime - timestamp of the last event in the project lastProcessedEventDateTime - timestamp of the last event processed by the view delayInSeconds - number of seconds between the last processed event timestamp and the last known event timestamp","title":"Fetch statistics"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#fetch-indexing","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/offset\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/myview/offset\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/offset.json\",\n \"@type\": \"TimeBasedOffset\",\n \"instant\": \"2021-05-12T12:57:19.375Z\",\n \"value\": \"95d159f6-b321-11eb-a5f9-e5c0b5ea0976\"\n}\nwhere…\ninstant - timestamp of the last event processed by the view value - the value of the offset","title":"Fetch indexing"},{"location":"/docs/delta/api/views/elasticsearch-view-api.html#restart-indexing","text":"This endpoint restarts the view indexing process. It does not delete the created indices but it overrides the resource Document when going through the event log.\nDELETE /v1/views/{org_label}/{project_label}/{view_id}/offset\nExample\nRequest copysourcecurl -XDELETE \"http://localhost:8080/v1/views/myorg/myproj/nxv:myview/offset\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/offset.json\",\n \"@type\": \"ViewStatistics\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 2,\n \"evaluatedEvents\": 8,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-12T09:58:20.507Z\",\n \"lastProcessedEventDateTime\": \"2021-05-12T09:58:20.507Z\",\n \"processedEvents\": 10,\n \"remainingEvents\": 0,\n \"totalEvents\": 10\n}","title":"Restart indexing"},{"location":"/docs/delta/api/views/pipes.html","text":"","title":"Elasticsearch Pipes"},{"location":"/docs/delta/api/views/pipes.html#elasticsearch-pipes","text":"Pipes are the processing units of a pipeline for an Elasticsearch view.\nSee here to get more details on how pipes are applied and how the indexing process to Elasticsearch works.","title":"Elasticsearch Pipes"},{"location":"/docs/delta/api/views/pipes.html#core-pipes","text":"These pipes are provided by default by Delta.","title":"Core pipes"},{"location":"/docs/delta/api/views/pipes.html#filter-deprecated","text":"Allows excluding deprecated resources from being indexed No config is needed\n{\n \"name\" : \"filterDeprecated\"\n}","title":"Filter deprecated"},{"location":"/docs/delta/api/views/pipes.html#filter-by-type","text":"Allow excluding resources which don’t have one of the provided types\n{\n \"name\" : \"filterByType\",\n \"config\" : {\n \"types\" : [\n \"https://bluebrain.github.io/nexus/types/Type1\",\n \"https://bluebrain.github.io/nexus/types/Type2\"\n ]\n }\n}","title":"Filter by type"},{"location":"/docs/delta/api/views/pipes.html#filter-by-schema","text":"Allow excluding resources which haven’t been validated by one of the provided schemas\n{\n \"name\" : \"filterBySchema\",\n \"config\" : {\n \"types\" : [\n \"https://bluebrain.github.io/nexus/schemas/Schema1\",\n \"https://bluebrain.github.io/nexus/schemas/Schema2\"\n ]\n }\n}","title":"Filter by schema"},{"location":"/docs/delta/api/views/pipes.html#discard-metadata","text":"Prevents all Nexus metadata from being indexed No configuration is needed\n{\n \"name\" : \"discardMetadata\"\n}","title":"Discard metadata"},{"location":"/docs/delta/api/views/pipes.html#source-as-text","text":"The original payload of the resource will be stored in the ElasticSearch document as a single escaped string value under the key _original_source. No configuration is needed\n{\n \"name\" : \"sourceAsText\"\n}","title":"Source as text"},{"location":"/docs/delta/api/views/pipes.html#data-construct-query","text":"The data graph of the resource will be transformed according to the provided SPARQL construct query The resource metadata is not modified by this pipe\n{\n \"name\" : \"dataConstructQuery\",\n \"config\": {\n \"query\": \"{constructQuery}\"\n }\n}","title":"Data construct query"},{"location":"/docs/delta/api/views/pipes.html#select-predicates","text":"Only the defined predicates in the data graph of the resource will be kept in the resource The resource metadata is not modified by this type\n{\n \"name\" : \"selectPredicates\",\n \"config\": {\n \"predicates\": [\n \"rdfs:label\",\n \"schema:name\"\n ]\n }\n}","title":"Select predicates"},{"location":"/docs/delta/api/views/pipes.html#default-label-predicates","text":"Only default labels defined as skos:prefLabel, rdf:tpe, rdfs:label, schema:name will be kept in the data graph of the resource No configuration is needed\n{\n \"name\" : \"defaultLabelPredicates\"\n}","title":"Default label predicates"},{"location":"/docs/delta/api/views/pipes.html#add-custom-pipes-through-plugins","text":"Note The pipe name must be a unique identifier in Delta. Please also note that removing pipes or modifying configuration for a pipe will prevent existing views relying on them to index resources as the pipeline will be broken. They will have to be updated with a valid pipeline so that indexing can be restarted.\nBesides these core pipes, it is possible to define custom pipes through plugins.\nPlease visit:\nElem source for documentation about this class. GraphResource source for documentation about this class.\nPlease visit Plugins to learn about how to create/package/deploy a plugin.\nInside this plugin, you can then define additional pipes:\nimport ch.epfl.bluebrain.nexus.delta.rdf.IriOrBNode.Iri\nimport ch.epfl.bluebrain.nexus.delta.rdf.jsonld.ExpandedJsonLd\nimport ch.epfl.bluebrain.nexus.delta.rdf.Vocabulary.nxv\nimport ch.epfl.bluebrain.nexus.delta.rdf.jsonld.decoder.JsonLdDecoder\nimport ch.epfl.bluebrain.nexus.delta.rdf.jsonld.decoder.semiauto.deriveDefaultJsonLdDecoder\nimport ch.epfl.bluebrain.nexus.delta.sourcing.state.GraphResource\nimport ch.epfl.bluebrain.nexus.delta.sourcing.stream.Elem.SuccessElem\nimport ch.epfl.bluebrain.nexus.delta.sourcing.stream.Operation.Pipe\nimport ch.epfl.bluebrain.nexus.delta.sourcing.stream.pipes.MyPipes.MyOtherCustomPipe.MyConfig\nimport ch.epfl.bluebrain.nexus.delta.sourcing.stream.{Elem, PipeDef, PipeRef}\nimport io.circe.syntax.EncoderOps\nimport io.circe.{Json, JsonObject}\nimport monix.bio.Task\nimport shapeless.Typeable\n\nobject MyPipes {\n\n // A first pipe which does not need any config\n // The function to implement needs to return a `Task[Elem[Out]]`\n final class MyCustomPipe extends Pipe {\n override type In = GraphResource\n override type Out = GraphResource\n\n override def ref: PipeRef = MyCustomPipe.ref\n\n override def inType: Typeable[GraphResource] = Typeable[GraphResource]\n\n override def outType: Typeable[GraphResource] = Typeable[GraphResource]\n\n override def apply(element: SuccessElem[GraphResource]): Task[Elem[GraphResource]] =\n element.evalMap(Task.delay(???))\n\n }\n\n object MyCustomPipe extends PipeDef {\n override type PipeType = MyCustomPipe\n override type Config = Unit\n\n override def configType: Typeable[Config] = Typeable[Unit]\n\n override def configDecoder: JsonLdDecoder[Config] = JsonLdDecoder[Unit]\n\n override def ref: PipeRef = PipeRef.unsafe(\"myCustomPipe\")\n\n override def withConfig(config: Unit): MyCustomPipe = new MyCustomPipe\n\n /**\n * Returns the pipe ref and its empty config\n */\n def apply(): (PipeRef, ExpandedJsonLd) = ref -> ExpandedJsonLd.empty\n }\n\n // A second pipe relying on a config\n class MyOtherCustomPipe(config: MyConfig) extends Pipe {\n override type In = GraphResource\n override type Out = GraphResource\n\n override def ref: PipeRef = MyOtherCustomPipe.ref\n\n override def inType: Typeable[GraphResource] = Typeable[GraphResource]\n\n override def outType: Typeable[GraphResource] = Typeable[GraphResource]\n\n override def apply(element: SuccessElem[GraphResource]): Task[Elem[GraphResource]] =\n element.evalMap(Task.delay(???))\n\n }\n\n object MyOtherCustomPipe extends PipeDef {\n override type PipeType = MyOtherCustomPipe\n override type Config = MyConfig\n\n override def configType: Typeable[Config] = Typeable[MyConfig]\n\n override def configDecoder: JsonLdDecoder[Config] = JsonLdDecoder[Config]\n\n override def ref: PipeRef = PipeRef.unsafe(\"myOtherCustomType\")\n\n override def withConfig(config: MyConfig): MyOtherCustomPipe = new MyOtherCustomPipe(config)\n\n final case class MyConfig(types: Set[Iri]) {\n def toJsonLd: ExpandedJsonLd = ExpandedJsonLd(\n Seq(\n ExpandedJsonLd.unsafe(\n nxv + ref.toString,\n JsonObject(\n (nxv + \"types\").toString -> Json.arr(types.toList.map(iri => Json.obj(\"@id\" -> iri.asJson)): _*)\n )\n )\n )\n )\n }\n\n object MyConfig {\n implicit val myConfigJsonLdDecoder: JsonLdDecoder[MyConfig] = deriveDefaultJsonLdDecoder\n }\n\n def apply(types: Set[Iri]): (PipeRef, ExpandedJsonLd) = ref -> MyConfig(types).toJsonLd\n }\n}\nAnd then declare them in the distage module definition of the plugin to make them available:\nimport izumi.distage.model.definition.ModuleDef\nobject MyPluginModule extends ModuleDef {\n\n many[PipeDef].addSetValue(\n Set(pipe1, pipe2)\n )\n \n}\nThe source code for the core pipes is available here and the associated unit tests here.","title":"Add custom pipes through plugins"},{"location":"/docs/delta/api/views/aggregated-es-view-api.html","text":"","title":"AggregateElasticSearchView"},{"location":"/docs/delta/api/views/aggregated-es-view-api.html#aggregateelasticsearchview","text":"This view is an aggregate of ElasticSearchViews. The view itself does not create any index, but it references the already existing indices of the linked ElasticSearchViews.\nNote From Delta version 1.5.0, AggregateElasticSearchView can point to other AggregateElasticSearchViews.\nWhen performing queries on the _search endpoint, this view will make use of the multi-index query capabilities of ElasticSearch in order to select the indices of every view present on this aggregate view.\nIf the caller does not have the permission views/query (or from v1.5, the user-defined permission) on all the views defined on the aggregated view, only a subset of indices (or none) will be selected, respecting the defined permissions.","title":"AggregateElasticSearchView"},{"location":"/docs/delta/api/views/aggregated-es-view-api.html#payload","text":"{\n \"@id\": \"{someid}\",\n \"@type\": \"AggregateElasticSearchView\",\n \"views\": [ \n {\n \"project\": \"{project}\",\n \"viewId\": \"{viewId}\"\n },\n ...\n ]\n}\nwhere…\n{project}: String - The project, defined as {org_label}/{project_label}, where the {viewId} is located. {viewId}: Iri - The view @id value to be aggregated.","title":"Payload"},{"location":"/docs/delta/api/views/aggregated-es-view-api.html#create-using-post","text":"POST /v1/views/{org_label}/{project_label}\n {...}\nThe json payload:\nIf the @id value is found on the payload, this @id will be used. If the @id value is not found on the payload, an @id will be generated as follows: base:{UUID}. The base is the prefix defined on the resource’s project ({project_label}).\nExample\nRequest copysourcecurl -XPOST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/myproj\" -d \\\n'{\n \"@type\": \"AggregateElasticSearchView\",\n \"views\": [\n {\n \"project\": \"myorg/myproj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n },\n {\n \"project\": \"myorg/myproj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n }\n ]\n}' Payload copysource{\n \"@type\": \"AggregateElasticSearchView\",\n \"views\": [\n {\n \"project\": \"myorg/myproj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n },\n {\n \"project\": \"myorg/myproj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n }\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/elasticsearch-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/5930546b-1a9c-493a-a3e6-e9cadc684516\",\n \"@type\": [\n \"AggregateElasticSearchView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-17T10:01:48.384Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/5930546b-1a9c-493a-a3e6-e9cadc684516/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/5930546b-1a9c-493a-a3e6-e9cadc684516/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/5930546b-1a9c-493a-a3e6-e9cadc684516\",\n \"_updatedAt\": \"2021-05-17T10:01:48.384Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Create using POST"},{"location":"/docs/delta/api/views/aggregated-es-view-api.html#create-using-put","text":"This alternative endpoint to create a view is useful in case the json payload does not contain an @id but you want to specify one. The @id will be specified in the last segment of the endpoint URI.\nPUT /v1/views/{org_label}/{project_label}/{view_id}\n {...}\nNote that if the payload contains an @id different from the {view_id}, the request will fail.\nExample\nRequest copysourcecurl -PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view\" -d \\\n'{\n \"@type\": \"AggregateElasticSearchView\",\n \"views\": [\n {\n \"project\": \"myorg/myproj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n },\n {\n \"project\": \"myorg/myproj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n }\n ]\n}' Payload copysource{\n \"@type\": \"AggregateElasticSearchView\",\n \"views\": [\n {\n \"project\": \"myorg/myproj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n },\n {\n \"project\": \"myorg/myproj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n }\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/elasticsearch-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/my_aggregate_view\",\n \"@type\": [\n \"AggregateElasticSearchView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-17T09:58:58.203Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view\",\n \"_updatedAt\": \"2021-05-17T09:58:58.203Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Create using PUT"},{"location":"/docs/delta/api/views/aggregated-es-view-api.html#update","text":"This operation overrides the payload.\nIn order to ensure a client does not perform any changes to a resource without having had seen the previous revision of the view, the last revision needs to be passed as a query parameter.\nPUT /v1/views/{org_label}/{project_label}/{view_id}?rev={previous_rev}\n {...}\n… where {previous_rev} is the last known revision number for the view.\nExample\nRequest copysourcecurl -PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view?rev=1\" -d \\\n'{\n \"@type\": \"AggregateElasticSearchView\",\n \"views\": [\n {\n \"project\": \"myorg/myproj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n },\n {\n \"project\": \"myorg/myproj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n }\n ]\n}' Payload copysource{\n \"@type\": \"AggregateElasticSearchView\",\n \"views\": [\n {\n \"project\": \"myorg/myproj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n },\n {\n \"project\": \"myorg/myproj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n }\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/elasticsearch-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/my_aggregate_view\",\n \"@type\": [\n \"AggregateElasticSearchView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-17T09:58:58.203Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view\",\n \"_updatedAt\": \"2021-05-17T10:04:30.148Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Update"},{"location":"/docs/delta/api/views/aggregated-es-view-api.html#tag","text":"Links a view revision to a specific name.\nTagging a view is considered to be an update as well.\nPOST /v1/views/{org_label}/{project_label}/{view_id}/tags?rev={previous_rev}\n {\n \"tag\": \"{name}\",\n \"rev\": {rev}\n }\n… where\n{previous_rev}: is the last known revision number for the resource. {name}: String - label given to the view at specific revision. {rev}: Number - the revision to link the provided {name}.\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view/tags?rev=2\" \\\n -d \\\n '{\n \"tag\": \"mytag\",\n \"rev\": 1\n }' Payload copysource{\n \"tag\": \"mytag\",\n \"rev\": 1\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/elasticsearch-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/my_aggregate_view\",\n \"@type\": [\n \"AggregateElasticSearchView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-17T09:58:58.203Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view\",\n \"_updatedAt\": \"2021-05-17T10:06:13.453Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Tag"},{"location":"/docs/delta/api/views/aggregated-es-view-api.html#deprecate","text":"Locks the view, so no further operations can be performed.\nDeprecating a view is considered to be an update as well.\nNote Deprecating a view makes the view not searchable.\nDELETE /v1/views/{org_label}/{project_label}/{view_id}?rev={previous_rev}\n… where {previous_rev} is the last known revision number for the view.\nExample\nRequest copysourcecurl -XDELETE \\\n \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view?rev=3\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/elasticsearch-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/my_aggregate_view\",\n \"@type\": [\n \"AggregateElasticSearchView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-17T09:58:58.203Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view\",\n \"_updatedAt\": \"2021-05-17T10:59:07.519Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Deprecate"},{"location":"/docs/delta/api/views/aggregated-es-view-api.html#fetch","text":"GET /v1/views/{org_label}/{project_label}/{view_id}?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional. {rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/elasticsearch.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/my_aggregate_view\",\n \"@type\": [\n \"AggregateElasticSearchView\",\n \"View\"\n ],\n \"views\": [\n {\n \"project\": \"myorg/myproj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n },\n {\n \"project\": \"myorg/myproj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n }\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-17T09:58:58.203Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view\",\n \"_updatedAt\": \"2021-05-17T10:06:13.453Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Fetch"},{"location":"/docs/delta/api/views/aggregated-es-view-api.html#fetch-original-payload","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/source?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional. {rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view/source\" Response copysource{\n \"@type\": \"AggregateElasticSearchView\",\n \"views\": [\n {\n \"project\": \"myorg/myproj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n },\n {\n \"project\": \"myorg/myproj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"\n }\n ]\n}","title":"Fetch original payload"},{"location":"/docs/delta/api/views/aggregated-es-view-api.html#fetch-tags","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/tags?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view/tags\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/tags.json\",\n \"tags\": [\n {\n \"rev\": 1,\n \"tag\": \"mytag\"\n }\n ]\n}","title":"Fetch tags"},{"location":"/docs/delta/api/views/aggregated-es-view-api.html#search-documents","text":"Provides aggregated search functionality across all the ElasticSearchViews referenced from the target view_id.\nPOST /v1/views/{org_label}/{project_label}/{view_id}/_search\n {...}\nThe supported payload is defined on the ElasticSearch documentation\nThe string documents is used as a prefix of the default ElasticSearch view_id\nExample\nRequest copysourcecurl -XPOST \\\n-H \"Content-Type: application/json\" \\\n\"http://localhost:8080/v1/views/myorg/myproj/my_aggregate_view/_search\" -d \\\n'{\n \"query\": {\n \"term\": {\n \"@type\": \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\"\n }\n }\n}' Payload copysource{\n \"query\": {\n \"term\": {\n \"@type\": \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\"\n }\n }\n} Response copysource{\n \"hits\": {\n \"hits\": [\n {\n \"_id\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\",\n \"_index\": \"delta_7e737b83-30a0-4ea3-b6c9-cd1ed481d743_3\",\n \"_score\": 0.8566987,\n \"_source\": {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\",\n \"@type\": [\n \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\",\n \"https://bluebrain.github.io/nexus/vocabulary/View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-12T09:44:22.259Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/internal/users/delta\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/documents/incoming\",\n \"_original_source\": \"{\\\"resourceSchemas\\\":[],\\\"resourceTypes\\\":[],\\\"sourceAsText\\\":true,\\\"includeMetadata\\\":true,\\\"includeDeprecated\\\":true,\\\"permission\\\":\\\"views/query\\\",\\\"@type\\\":\\\"ElasticSearchView\\\",\\\"@id\\\":\\\"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\\\"}\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/documents/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/documents\",\n \"_updatedAt\": \"2021-05-12T09:44:22.259Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/internal/users/delta\",\n \"_uuid\": \"a1147f0f-1650-49f2-8704-30ad97be8f31\"\n }\n },\n {\n \"_id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/386a8c21-3acf-4f10-90ab-329466f5e04c\",\n \"_index\": \"delta_7e737b83-30a0-4ea3-b6c9-cd1ed481d743_3\",\n \"_score\": 0.8566987,\n \"_source\": {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/386a8c21-3acf-4f10-90ab-329466f5e04c\",\n \"@type\": [\n \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\",\n \"https://bluebrain.github.io/nexus/vocabulary/View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-12T09:44:35.609Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/386a8c21-3acf-4f10-90ab-329466f5e04c/incoming\",\n \"_original_source\": \"{\\\"@type\\\":[\\\"ElasticSearchView\\\"],\\\"mapping\\\":{\\\"dynamic\\\":false,\\\"properties\\\":{\\\"@id\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"@type\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"name\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"number\\\":{\\\"type\\\":\\\"long\\\"},\\\"bool\\\":{\\\"type\\\":\\\"boolean\\\"}}},\\\"includeMetadata\\\":true,\\\"includeDeprecated\\\":true,\\\"sourceAsText\\\":true,\\\"resourceSchemas\\\":[],\\\"resourceTypes\\\":[]}\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/386a8c21-3acf-4f10-90ab-329466f5e04c/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/386a8c21-3acf-4f10-90ab-329466f5e04c\",\n \"_updatedAt\": \"2021-05-12T09:44:35.609Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"ea4b3858-c1ac-4afb-ac94-13fdb1b53681\"\n }\n },\n {\n \"_id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/indexing1\",\n \"_index\": \"delta_7e737b83-30a0-4ea3-b6c9-cd1ed481d743_3\",\n \"_score\": 0.8566987,\n \"_source\": {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/indexing1\",\n \"@type\": [\n \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\",\n \"https://bluebrain.github.io/nexus/vocabulary/View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-12T09:53:32.704Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/indexing1/incoming\",\n \"_original_source\": \"{\\\"@type\\\":[\\\"ElasticSearchView\\\"],\\\"mapping\\\":{\\\"dynamic\\\":false,\\\"properties\\\":{\\\"@id\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"@type\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"name\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"number\\\":{\\\"type\\\":\\\"long\\\"},\\\"bool\\\":{\\\"type\\\":\\\"boolean\\\"}}},\\\"includeMetadata\\\":true,\\\"includeDeprecated\\\":true,\\\"sourceAsText\\\":true,\\\"resourceSchemas\\\":[],\\\"resourceTypes\\\":[]}\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/indexing1/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/indexing1\",\n \"_updatedAt\": \"2021-05-12T09:53:32.704Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"ab97491a-0f30-4616-9906-28b92a8c0b79\"\n }\n },\n {\n \"_id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/myview\",\n \"_index\": \"delta_7e737b83-30a0-4ea3-b6c9-cd1ed481d743_3\",\n \"_score\": 0.8566987,\n \"_source\": {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproj/_/myview\",\n \"@type\": [\n \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\",\n \"https://bluebrain.github.io/nexus/vocabulary/View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-12T09:54:28.171Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/myproj/myview/incoming\",\n \"_original_source\": \"{\\\"@type\\\":[\\\"ElasticSearchView\\\"],\\\"mapping\\\":{\\\"dynamic\\\":false,\\\"properties\\\":{\\\"@id\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"@type\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"name\\\":{\\\"type\\\":\\\"keyword\\\"},\\\"number\\\":{\\\"type\\\":\\\"long\\\"},\\\"bool\\\":{\\\"type\\\":\\\"boolean\\\"}}},\\\"includeMetadata\\\":true,\\\"includeDeprecated\\\":true,\\\"sourceAsText\\\":true,\\\"resourceSchemas\\\":[],\\\"resourceTypes\\\":[]}\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/myproj/myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/views/myorg/myproj/myview\",\n \"_updatedAt\": \"2021-05-12T09:58:20.507Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"7e737b83-30a0-4ea3-b6c9-cd1ed481d743\"\n }\n }\n ],\n \"max_score\": 0.8566987,\n \"total\": {\n \"relation\": \"eq\",\n \"value\": 4\n }\n },\n \"timed_out\": false,\n \"took\": 10,\n \"_shards\": {\n \"failed\": 0,\n \"skipped\": 0,\n \"successful\": 1,\n \"total\": 1\n }\n}","title":"Search Documents"},{"location":"/docs/delta/api/views/sparql-view-api.html","text":"","title":"SparqlView"},{"location":"/docs/delta/api/views/sparql-view-api.html#sparqlview","text":"This view creates a Blazegraph namespace and stores the targeted resources as RDF triples into a Blazegraph instance.\nThe triples created on each view are isolated from triples created on another view through the namespace.\nA default view gets automatically created when the project is created but other views can be created.\nAuthorization notes When modifying views, the caller must have views/write permissions on the current path of the project or the ancestor paths. When querying views, the caller must have the views/query (or a custom permission from Delta v1.5) permission on the current path of the project or the ancestor paths. When reading views, the caller must have resources/read permissions on the current path of the project or the ancestor paths. Please visit Authentication & authorization section to learn more about it.","title":"SparqlView"},{"location":"/docs/delta/api/views/sparql-view-api.html#processing-pipeline","text":"An asynchronous process gets trigger for every view. This process can be visualized as a pipeline with different stages.\nThe first stage is the input of the pipeline: a stream of events scoped for the project where the view was created.\nThe last stage takes the resource, generated through the pipeline steps, and extracts its RDF triples to store them in a Blazegraph namespace.","title":"Processing pipeline"},{"location":"/docs/delta/api/views/sparql-view-api.html#payload","text":"{\n \"@id\": \"{someid}\",\n \"@type\": \"SparqlView\",\n \"resourceSchemas\": [ \"{resourceSchema}\", ...],\n \"resourceTypes\": [ \"{resourceType}\", ...],\n \"resourceTag\": \"{resourceTag}\",\n \"includeMetadata\": {includeMetadata},\n \"includeDeprecated\": {includeDeprecated},\n \"permission\": {permission}\n}\nwhere…\n{resourceSchema}: Iri - Selects only resources that are validated against the provided schema Iri. This field is optional. {resourceType}: Iri - Selects only resources of the provided type Iri. This field is optional. {resourceTag}: String - Selects the resources with the provided tag. This field is optional. {includeMetadata}: Boolean - If true, the resource’s nexus metadata (_constrainedBy, _deprecated, …) will be stored in the Sparql graph. Otherwise it won’t. The default value is false. {includeDeprecated}: Boolean - If true, deprecated resources are also indexed. The default value is false. {permission}: String - The required permission to be able to query the view. The default value is views/query. Option available from Delta v1.5","title":"Payload"},{"location":"/docs/delta/api/views/sparql-view-api.html#example","text":"The following example creates an Sparql view that will index resources not deprecated and with tag mytag.\nThe resulting RDF triples will contain the resources metadata.\n{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\",\n \"@type\": \"SparqlView\",\n \"includeMetadata\": true,\n \"includeDeprecated\": false,\n \"resourceTag\": \"mytag\"\n}","title":"Example"},{"location":"/docs/delta/api/views/sparql-view-api.html#create-using-post","text":"POST /v1/view/{org_label}/{project_label}\n {...}\nThe json payload:\nIf the @id value is found on the payload, this @id will be used. If the @id value is not found on the payload, an @id will be generated as follows: base:{UUID}. The base is the prefix defined on the view’s project ({project_label}).\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/myproj\" \\\n -d \\\n'{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\"\n \"@type\": \"SparqlView\",\n \"resourceSchemas\": [\n \"https://bluebrain.github.io/nexus/vocabulary/some-schema\"\n ],\n \"resourceTypes\": [\n \"https://bluebrain.github.io/nexus/vocabulary/SomeType\"\n ],\n \"includeMetadata\": false,\n \"includeDeprecated\": false,\n \"permission\": \"my/permission\",\n}' Payload copysource{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/indexing-view\",\n \"@type\": \"SparqlView\",\n \"resourceSchemas\": [\n \"https://bluebrain.github.io/nexus/vocabulary/some-schema\"\n ],\n \"resourceTypes\": [\n \"https://bluebrain.github.io/nexus/vocabulary/SomeType\"\n ],\n \"includeMetadata\": false,\n \"includeDeprecated\": false,\n \"permission\": \"my/permission\"\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/sparql-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\",\n \"@type\": [\n \"SparqlView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-04-18T17:10:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\",\n \"_uuid\": \"9c632570-cdaa-4a35-a6f9-1e95bd3a930e\",\n \"_deprecated\": false,\n \"_self\": \"http://localhost:8080/v1/views/org/proj/nxv:myview\",\n \"_incoming\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/org/proj\",\n \"_rev\": 1,\n \"_updatedAt\": \"2021-04-18T17:10:22.748Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\"\n}","title":"Create using POST"},{"location":"/docs/delta/api/views/sparql-view-api.html#create-using-put","text":"This alternative endpoint to create a view is useful in case the json payload does not contain an @id but you want to specify one. The @id will be specified in the last segment of the endpoint URI.\nPUT /v1/views/{org_label}/{project_label}/{view_id}\n {...}\nExample\nNote that if the payload contains an @id different from the {view_id}, the request will fail.\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/myproj/nxv:myview\" \\\n -d \\\n'{\n \"@type\": \"SparqlView\",\n \"resourceSchemas\": [\n \"https://bluebrain.github.io/nexus/vocabulary/some-schema\"\n ],\n \"resourceTypes\": [\n \"https://bluebrain.github.io/nexus/vocabulary/SomeType\"\n ],\n \"includeMetadata\": false,\n \"includeDeprecated\": false,\n \"permission\": \"my/permission\",\n}' Payload copysource{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/indexing-view\",\n \"@type\": \"SparqlView\",\n \"resourceSchemas\": [\n \"https://bluebrain.github.io/nexus/vocabulary/some-schema\"\n ],\n \"resourceTypes\": [\n \"https://bluebrain.github.io/nexus/vocabulary/SomeType\"\n ],\n \"includeMetadata\": false,\n \"includeDeprecated\": false,\n \"permission\": \"my/permission\"\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/sparql-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\",\n \"@type\": [\n \"SparqlView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-04-18T17:10:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\",\n \"_uuid\": \"9c632570-cdaa-4a35-a6f9-1e95bd3a930e\",\n \"_deprecated\": false,\n \"_self\": \"http://localhost:8080/v1/views/org/proj/nxv:myview\",\n \"_incoming\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/org/proj\",\n \"_rev\": 1,\n \"_updatedAt\": \"2021-04-18T17:10:22.748Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\"\n}","title":"Create using PUT"},{"location":"/docs/delta/api/views/sparql-view-api.html#update","text":"This operation overrides the payload.\nIn order to ensure a client does not perform any changes to a view without having had seen the previous revision of the view, the last revision needs to be passed as a query parameter.\nPUT /v1/views/{org_label}/{project_label}/{view_id}?rev={previous_rev}\n {...}\n… where {previous_rev} is the last known revision number for the view.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"https://nexus.example.com/v1/views/myorg/myproj/nxv:myview?rev=1\" \\\n -d \\\n'{\n \"@type\": \"SparqlView\",\n \"includeMetadata\": false,\n \"includeDeprecated\": false,\n \"permission\": \"my/permission\",\n}'' Payload copysource{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/indexing-view\",\n \"@type\": \"SparqlView\",\n \"resourceSchemas\": [\n \"https://bluebrain.github.io/nexus/vocabulary/some-schema\"\n ],\n \"resourceTypes\": [\n \"https://bluebrain.github.io/nexus/vocabulary/SomeType\"\n ],\n \"includeMetadata\": false,\n \"includeDeprecated\": false,\n \"permission\": \"my/permission\"\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/sparql-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\",\n \"@type\": [\n \"SparqlView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-04-18T17:10:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\",\n \"_uuid\": \"9c632570-cdaa-4a35-a6f9-1e95bd3a930e\",\n \"_deprecated\": false,\n \"_self\": \"http://localhost:8080/v1/views/org/proj/nxv:myview\",\n \"_incoming\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/org/proj\",\n \"_rev\": 2,\n \"_updatedAt\": \"2021-04-20T09:32:14.12Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\"\n}\nNote Updating a view creates a new Blazegraph namespace and deletes the existing one. The indexing process will start from the beginning.","title":"Update"},{"location":"/docs/delta/api/views/sparql-view-api.html#tag","text":"Links a view’s revision to a specific name.\nTagging a view is considered to be an update as well.\nPOST /v1/views/{org_label}/{project_label}/{view_id}/tags?rev={previous_rev}\n {\n \"tag\": \"{name}\",\n \"rev\": {rev}\n }\n… where\n{previous_rev}: Number - the last known revision for the resolver. {name}: String - label given to the view at specific revision. {rev}: Number - the revision to link the provided {name}.\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/myproj/nxv:myview/tags?rev=2\" \\\n -d \\\n'{\n \"tag\": \"mytag\",\n \"rev\": 1\n}' Payload copysource{\n \"tag\": \"mytag\",\n \"rev\": 1\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/sparql-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\",\n \"@type\": [\n \"SparqlView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-04-18T17:10:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\",\n \"_uuid\": \"9c632570-cdaa-4a35-a6f9-1e95bd3a930e\",\n \"_deprecated\": false,\n \"_self\": \"http://localhost:8080/v1/views/org/proj/myview\",\n \"_incoming\": \"http://localhost:8080/v1/views/org/proj/myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/org/proj/myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/org/proj\",\n \"_rev\": 3,\n \"_updatedAt\": \"2021-04-22T13:03:50.978Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\"\n}","title":"Tag"},{"location":"/docs/delta/api/views/sparql-view-api.html#deprecate","text":"Locks the view, so no further operations can be performed. It also stops the indexing process and delete the associated namespace.\nDeprecating a view is considered to be an update as well.\nDELETE /v1/views/{org_label}/{project_label}/{view_id}?rev={previous_rev}\n… where {previous_rev} is the last known revision number for the view.\nExample\nRequest copysourcecurl -X DELETE \\\n \"https://nexus.example.com/v1/views/myorg/myproj/nxv:myview?rev=3\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/sparql-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\",\n \"@type\": [\n \"SparqlView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-04-18T17:10:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\",\n \"_uuid\": \"9c632570-cdaa-4a35-a6f9-1e95bd3a930e\",\n \"_deprecated\": true,\n \"_self\": \"http://localhost:8080/v1/views/org/proj/nxv:myview\",\n \"_incoming\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/org/proj\",\n \"_rev\": 5,\n \"_updatedAt\": \"2021-04-24T17:28:01.321Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\"\n}","title":"Deprecate"},{"location":"/docs/delta/api/views/sparql-view-api.html#fetch","text":"GET /v1/views/{org_label}/{project_label}/{view_id}?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional. {rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/nxv:myview\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/sparql.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\",\n \"@type\" : [\n \"SparqlView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-04-18T17:10:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\",\n \"_deprecated\": false,\n \"_self\": \"http://localhost:8080/v1/views/org/proj/nxv:myview\",\n \"_incoming\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/org/proj\",\n \"_rev\": 1,\n \"_updatedAt\": \"2021-04-18T17:10:22.748Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\",\n \"includeDeprecated\": false,\n \"includeMetadata\": false,\n \"permission\": \"views/query\",\n \"resourceSchemas\": [\n \"https://bluebrain.github.io/nexus/vocabulary/some-schema\"\n ],\n \"resourceTag\": \"v1.5\",\n \"resourceTypes\": [\n \"https://bluebrain.github.io/nexus/vocabulary/SomeType\"\n ],\n \"_uuid\": \"61c74973-0f04-40f0-a694-7c8ed0fb090f\"\n}\nIf the redirect to Fusion feature is enabled and if the Accept header is set to text/html, a redirection to the fusion representation of the resource will be returned.","title":"Fetch"},{"location":"/docs/delta/api/views/sparql-view-api.html#fetch-original-payload","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/source?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional. {rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/nxv:myview/source\" Response copysource{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/indexing-view\",\n \"@type\": \"SparqlView\",\n \"resourceSchemas\": [\n \"https://bluebrain.github.io/nexus/vocabulary/some-schema\"\n ],\n \"resourceTypes\": [\n \"https://bluebrain.github.io/nexus/vocabulary/SomeType\"\n ],\n \"includeMetadata\": false,\n \"includeDeprecated\": false,\n \"permission\": \"my/permission\"\n}","title":"Fetch original payload"},{"location":"/docs/delta/api/views/sparql-view-api.html#fetch-tags","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/tags?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/tags?rev=2\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/tags.json\",\n \"tags\": [\n {\n \"rev\": 1,\n \"tag\": \"mytag\"\n }\n ]\n}","title":"Fetch tags"},{"location":"/docs/delta/api/views/sparql-view-api.html#sparql-query","text":"Provides search functionality on the SparqlView content.\nPOST /v1/views/{org_label}/{project_label}/{view_id}/sparql\n {query}\nor\nGET /v1/views/{org_label}/{project_label}/{view_id}/sparql?query={query}\nIn both endpoints, {query} is defined by the SPARQL documentation\nThe Content-Type HTTP header for POST request is application/sparql-query.\nFrom Delta 1.5, we have added support for multiple Content Negotiation types when querying the SPARQL view, allowing clients to request different response formats. The Content Negotiation is controlled by the HTTP Accept header. The following values are supported:\napplication/ld+json: Returns an expanded JSON-LD document. This is supported for a subset of SPARQL queries. application/n-triples: Returns the n-triples representation. This is supported for a subset of SPARQL queries application/rdf+xml: Returns an XML document. application/sparql-results+xml: Returns the sparql results in XML. application/sparql-results+json: Returns the sparql results in Json (default).\nExample\nRequest copysourcecurl -XPOST \\\n -H \"Content-Type: application/sparql-query\" \\\n \"https://localhost:8080/v1/views/myorg/myproj/nxv:myview/sparql\" \\\n -d 'SELECT ?s where {?s ?p ?o} LIMIT 2' Response copysource{\n \"head\": {\n \"vars\": [\n \"s\"\n ]\n },\n \"results\": {\n \"bindings\": [\n {\n \"s\": {\n \"type\": \"uri\",\n \"value\": \"http://example.com/myview\"\n }\n },\n {\n \"s\": {\n \"type\": \"uri\",\n \"value\": \"http://example.com/other\"\n }\n }\n ]\n }\n}","title":"SPARQL query"},{"location":"/docs/delta/api/views/sparql-view-api.html#fetch-indexing","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/offset\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/nxv:myview/offset\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/offset.json\",\n \"@type\": \"TimeBasedOffset\",\n \"instant\": \"2021-05-12T12:57:19.375Z\",\n \"value\": \"95d159f6-b321-11eb-a5f9-e5c0b5ea0976\"\n}\nwhere…\ninstant - timestamp of the last event processed by the view value - the value of the offset","title":"Fetch indexing"},{"location":"/docs/delta/api/views/sparql-view-api.html#fetch-statistics","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/statistics\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/nxv:myview/statistics\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/statistics.json\",\n \"@type\": \"ViewStatistics\",\n \"totalEvents\": 3754,\n \"processedEvents\": 3754,\n \"evaluatedEvents\": 3754,\n \"remainingEvents\": 0,\n \"discardedEvents\": 0,\n \"failedEvents\": 0,\n \"delayInSeconds\": 0,\n \"lastEventDateTime\": \"2021-04-30T15:04:44.021Z\",\n \"lastProcessedEventDateTime\": \"2021-04-30T15:04:44.021Z\"\n}\nwhere…\ntotalEvents - total number of events in the project processedEvents - number of events that have been considered by the view remainingEvents - number of events that remain to be considered by the view discardedEvents - number of events that have been discarded (were not evaluated due to filters, e.g. did not match schema, tag or type defined in the view) evaluatedEvents - number of events that have been used to update an index lastEventDateTime - timestamp of the last event in the project lastProcessedEventDateTime - timestamp of the last event processed by the view delayInSeconds - number of seconds between the last processed event timestamp and the last known event timestamp","title":"Fetch statistics"},{"location":"/docs/delta/api/views/sparql-view-api.html#restart-indexing","text":"This endpoint restarts the view indexing process. It does not delete the created namespaces but it overrides the resource GRAPH when going through the event log.\nDELETE /v1/views/{org_label}/{project_label}/{view_id}/offset\nExample\nRequest copysourcecurl -XDELETE \"http://localhost:8080/v1/views/myorg/myproj/nxv:myview/offset\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/offset.json\",\n \"@type\": \"ViewStatistics\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 2,\n \"evaluatedEvents\": 8,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-12T09:58:20.507Z\",\n \"lastProcessedEventDateTime\": \"2021-05-12T09:58:20.507Z\",\n \"processedEvents\": 10,\n \"remainingEvents\": 0,\n \"totalEvents\": 10\n}","title":"Restart indexing"},{"location":"/docs/delta/api/views/aggregated-sparql-view-api.html","text":"","title":"AggregateSparqlView"},{"location":"/docs/delta/api/views/aggregated-sparql-view-api.html#aggregatesparqlview","text":"This view is an aggregate of SparqlViews. The view itself does not create any namespace, but it references the already existing namespaces of the linked SparqlViews.\nWhen performing queries on the sparql endpoint, this view will query all the underlying SparqlViews and then aggregate the results. The order how the results across the different SparqlView gets merged it is not deterministic.\nIf the caller does not have the permission views/query (or from v1.5, the user-defined permission) on all the views defined on the aggregated view, only a subset of namespaces (or none) will be selected, respecting the defined permissions.","title":"AggregateSparqlView"},{"location":"/docs/delta/api/views/aggregated-sparql-view-api.html#payload","text":"{\n \"@id\": \"{someid}\",\n \"@type\": \"AggregateSparqlView\",\n \"views\": [\n {\n \"project\": \"{project}\",\n \"viewId\": \"{viewId}\"\n },\n ...\n ]\n}\nwhere…\n{project}: String - the project, defined as {org_label}/{project_label}, where the {viewId} is located. {viewId}: Iri - The Blazegraph view @id value to be aggregated.\nNote This approach to aggregate data from SPARQL does not circumvent the fact that each namespace is isolated. Neither it deals with sorting or filtering in an aggregated manner. For that reason, path traversals will not work out of the scope of the single namespace (even using an aggregate view). Ordering and DISTINCT selection won’t work either, due to the fact that the query is executed on each namespace independently. In order to have a more robust SPARQL aggregation support, please make us of CompositeView.","title":"Payload"},{"location":"/docs/delta/api/views/aggregated-sparql-view-api.html#create-using-post","text":"POST /v1/view/{org_label}/{project_label}\n {...}\nThe json payload:\nIf the @id value is found on the payload, this @id will be used. If the @id value is not found on the payload, an @id will be generated as follows: base:{UUID}. The base is the prefix defined on the view’s project ({project_label}).\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/myproj\" \\\n -d \\\n'{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/aggregate-view\",\n \"@type\": \"AggregateSparqlView\",\n \"views\": [\n {\n \"project\": \"org/proj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myview\"\n },\n {\n \"project\": \"org2/proj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myotherview\"\n }\n ]\n}' Payload copysource{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/aggregate-view\",\n \"@type\": \"AggregateSparqlView\",\n \"views\": [\n {\n \"project\": \"org/proj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myview\"\n },\n {\n \"project\": \"org2/proj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myotherview\"\n }\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/sparql-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\",\n \"@type\": [\n \"AggregateSparqlView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-04-18T17:10:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\",\n \"_uuid\": \"9c632570-cdaa-4a35-a6f9-1e95bd3a930e\",\n \"_deprecated\": false,\n \"_self\": \"http://localhost:8080/v1/views/org/proj/nxv:myview\",\n \"_incoming\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/org/proj\",\n \"_rev\": 1,\n \"_updatedAt\": \"2021-04-18T17:10:22.748Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\"\n}","title":"Create using POST"},{"location":"/docs/delta/api/views/aggregated-sparql-view-api.html#create-using-put","text":"This alternative endpoint to create a view is useful in case the json payload does not contain an @id but you want to specify one. The @id will be specified in the last segment of the endpoint URI.\nPUT /v1/views/{org_label}/{project_label}/{view_id}\n {...}\nExample\nNote that if the payload contains an @id different from the {view_id}, the request will fail.\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/myproj/nxv:myview\" \\\n -d \\\n'{\n \"@type\": \"AggregateSparqlView\",\n \"views\": [\n {\n \"project\": \"org/proj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myview\"\n },\n {\n \"project\": \"org2/proj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myotherview\"\n }\n ]\n}' Payload copysource{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/aggregate-view\",\n \"@type\": \"AggregateSparqlView\",\n \"views\": [\n {\n \"project\": \"org/proj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myview\"\n },\n {\n \"project\": \"org2/proj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myotherview\"\n }\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/sparql-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\",\n \"@type\": [\n \"AggregateSparqlView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-04-18T17:10:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\",\n \"_uuid\": \"9c632570-cdaa-4a35-a6f9-1e95bd3a930e\",\n \"_deprecated\": false,\n \"_self\": \"http://localhost:8080/v1/views/org/proj/nxv:myview\",\n \"_incoming\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/org/proj\",\n \"_rev\": 1,\n \"_updatedAt\": \"2021-04-18T17:10:22.748Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\"\n}","title":"Create using PUT"},{"location":"/docs/delta/api/views/aggregated-sparql-view-api.html#update","text":"This operation overrides the payload.\nIn order to ensure a client does not perform any changes to a view without having had seen the previous revision of the view, the last revision needs to be passed as a query parameter.\nPUT /v1/views/{org_label}/{project_label}/{view_id}?rev={previous_rev}\n {...}\n… where {previous_rev} is the last known revision number for the view.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"https://localhost:8080/v1/views/myorg/myproj/nxv:myview?rev=1\" \\\n -d \\\n'{\n \"@type\": \"AggregateSparqlView\",\n \"views\": [\n {\n \"project\": \"org/proj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myview\"\n },\n {\n \"project\": \"org3/proj3\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/yetanotherview\"\n }\n ]\n}' Payload copysource{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/aggregate-view\",\n \"@type\": \"AggregateSparqlView\",\n \"views\": [\n {\n \"project\": \"org/proj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myview\"\n },\n {\n \"project\": \"org2/proj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myotherview\"\n }\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/sparql-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\",\n \"@type\": [\n \"AggregateSparqlView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-04-18T17:10:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\",\n \"_uuid\": \"9c632570-cdaa-4a35-a6f9-1e95bd3a930e\",\n \"_deprecated\": false,\n \"_self\": \"http://localhost:8080/v1/views/org/proj/nxv:myview\",\n \"_incoming\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/org/proj\",\n \"_rev\": 2,\n \"_updatedAt\": \"2021-04-20T08:05:10.014Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\"\n}","title":"Update"},{"location":"/docs/delta/api/views/aggregated-sparql-view-api.html#tag","text":"Links a view’s revision to a specific name.\nTagging a view is considered to be an update as well.\nPOST /v1/views/{org_label}/{project_label}/{view_id}/tags?rev={previous_rev}\n {\n \"tag\": \"{name}\",\n \"rev\": {rev}\n }\n… where\n{previous_rev}: Number - the last known revision for the resolver. {name}: String - label given to the view at specific revision. {rev}: Number - the revision to link the provided {name}.\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/myproj/nxv:myview/tags?rev=2\" \\\n -d \\\n'{\n \"tag\": \"mytag\",\n \"rev\": 1\n}' Payload copysource{\n \"tag\": \"mytag\",\n \"rev\": 1\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/sparql-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\",\n \"@type\": [\n \"AggregateSparqlView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-04-18T17:10:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\",\n \"_uuid\": \"9c632570-cdaa-4a35-a6f9-1e95bd3a930e\",\n \"_deprecated\": false,\n \"_self\": \"http://localhost:8080/v1/views/org/proj/nxv:myview\",\n \"_incoming\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/org/proj\",\n \"_rev\": 3,\n \"_updatedAt\": \"2021-04-24T22:18:55.444Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\"\n}","title":"Tag"},{"location":"/docs/delta/api/views/aggregated-sparql-view-api.html#deprecate","text":"Locks the view, so no further operations can be performed. It also stops the indexing process and delete the associated namespace.\nDeprecating a view is considered to be an update as well.\nDELETE /v1/views/{org_label}/{project_label}/{view_id}?rev={previous_rev}\n… where {previous_rev} is the last known revision number for the view.\nExample\nRequest copysourcecurl -X DELETE \\\n \"https://nexus.example.com/v1/views/myorg/myproj/nxv:myview?rev=3\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/sparql-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\",\n \"@type\": [\n \"AggregateSparqlView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-04-18T17:10:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\",\n \"_uuid\": \"9c632570-cdaa-4a35-a6f9-1e95bd3a930e\",\n \"_deprecated\": true,\n \"_self\": \"http://localhost:8080/v1/views/org/proj/nxv:myview\",\n \"_incoming\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/org/proj\",\n \"_rev\": 4,\n \"_updatedAt\": \"2021-04-28T11:01:14.398Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\"\n}","title":"Deprecate"},{"location":"/docs/delta/api/views/aggregated-sparql-view-api.html#fetch","text":"GET /v1/views/{org_label}/{project_label}/{view_id}?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional. {rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/nxv:myview\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/sparql.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/myview\",\n \"@type\" : [\n \"AggregateSparqlView\",\n \"View\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-04-18T17:10:22.748Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\",\n \"_deprecated\": false,\n \"_self\": \"http://localhost:8080/v1/views/org/proj/nxv:myview\",\n \"_incoming\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/org/proj/nxv:myview/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/org/proj\",\n \"_rev\": 1,\n \"_updatedAt\": \"2021-04-18T17:10:22.748Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/Bob\",\n \"views\": [\n {\n \"project\": \"org/proj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myview\"\n },\n {\n \"project\": \"org2/proj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myotherview\"\n }\n ],\n \"_uuid\": \"61c74973-0f04-40f0-a694-7c8ed0fb090f\"\n}","title":"Fetch"},{"location":"/docs/delta/api/views/aggregated-sparql-view-api.html#fetch-original-payload","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/source?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional. {rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/nxv:myview/source\" Response copysource{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/aggregate-view\",\n \"@type\": \"AggregateSparqlView\",\n \"views\": [\n {\n \"project\": \"org/proj\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myview\"\n },\n {\n \"project\": \"org2/proj2\",\n \"viewId\": \"https://bluebrain.github.io/nexus/vocabulary/myotherview\"\n }\n ]\n}","title":"Fetch original payload"},{"location":"/docs/delta/api/views/aggregated-sparql-view-api.html#fetch-tags","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/tags?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0/tags?rev=2\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/tags.json\",\n \"tags\": [\n {\n \"rev\": 1,\n \"tag\": \"mytag\"\n }\n ]\n}","title":"Fetch tags"},{"location":"/docs/delta/api/views/aggregated-sparql-view-api.html#sparql-query","text":"Provides aggregated search functionality across all the SparqlViews referenced from the target view_id.\nPOST /v1/views/{org_label}/{project_label}/{view_id}/sparql\n {query}\nor\nGET /v1/views/{org_label}/{project_label}/{view_id}/sparql?query={query}\nIn both endpoints, {query} is defined by the SPARQL documentation\nThe Content-Type HTTP header for POST request is application/sparql-query.\nFrom Delta 1.5, we have added support for multiple Content Negotiation types when querying the SPARQL view, allowing clients to request different response formats. The Content Negotiation is controlled by the HTTP Accept header. The following values are supported:\napplication/ld+json: Returns an expanded JSON-LD document. This is supported for a subset of SPARQL queries. application/n-triples: Returns the n-triples representation. This is supported for a subset of SPARQL queries application/rdf+xml: Returns an XML document. application/sparql-results+xml: Returns the sparql results in XML. application/sparql-results+json: Returns the sparql results in Json (default).\nExample\nRequest copysourcecurl -XPOST \\\n -H \"Content-Type: application/sparql-query\" \\\n \"https://localhost:8080/v1/views/myorg/myproj/nxv:myview/sparql\" \\\n -d 'SELECT ?s where {?s ?p ?o} LIMIT 2' Response copysource{\n \"head\": {\n \"vars\": [\n \"s\"\n ]\n },\n \"results\": {\n \"bindings\": [\n {\n \"s\": {\n \"type\": \"uri\",\n \"value\": \"http://example.com/myview\"\n }\n },\n {\n \"s\": {\n \"type\": \"uri\",\n \"value\": \"http://example.com/other\"\n }\n }\n ]\n }\n}","title":"SPARQL query"},{"location":"/docs/delta/api/views/composite-view-api.html","text":"","title":"CompositeView"},{"location":"/docs/delta/api/views/composite-view-api.html#compositeview","text":"This view is composed by multiple sources and projections.","title":"CompositeView"},{"location":"/docs/delta/api/views/composite-view-api.html#processing-pipeline","text":"An asynchronous process gets triggered for every view. This process can be visualized as a pipeline with different stages.\nThe first stage is the input of the pipeline: a stream of sources.\nThe last stage takes the resulting output from the pipeline and index it on the configured projection.","title":"Processing pipeline"},{"location":"/docs/delta/api/views/composite-view-api.html#sources","text":"A source defines the location where to retrieve the resources. It is the input of the pipeline.\nThere are 3 types of sources available.","title":"Sources"},{"location":"/docs/delta/api/views/composite-view-api.html#projecteventstream","text":"This source reads events in a streaming fashion from the current project event log.\nThe events are offered to the projections stage.\n{\n \"sources\": [\n {\n \"@id\": \"{sourceId},\n \"@type\": \"ProjectEventStream\",\n \"resourceSchemas\": [ \"{resourceSchema}\", ...],\n \"resourceTypes\": [ \"{resourceType}\", ...],\n \"resourceTag\": \"{tag}\"\n }\n ],\n ...\n}\nwhere…\n{sourceId}: Iri - The identifier of the source. This field is optional. When missing, a randomly generated Iri will be assigned. {resourceSchema}: Iri - Selects only resources that are validated against the provided schema Iri. This field is optional. {resourceType}: Iri - Select only resources of the provided type Iri. This field is optional. {tag}: String - Selects only resources with the provided tag. This field is optional.","title":"ProjectEventStream"},{"location":"/docs/delta/api/views/composite-view-api.html#crossprojecteventstream","text":"This source reads events in a streaming fashion from the defined project event log in the current Nexus Delta deployment.\nThe specified list of identities will be used to retrieve the resources from the project. The identities must have events/read permission on the target project in order to read events.\nThe events are offered to the projections stage.\n{\n \"sources\": [\n {\n \"@id\": \"{sourceId}\",\n \"@type\": \"CrossProjectEventStream\",\n \"project\": \"{project}\",\n \"identities\": [ {_identity_}, {...} ],\n \"resourceSchemas\": [ \"{resourceSchema}\", ...],\n \"resourceTypes\": [ \"{resourceType}\", ...],\n \"resourceTag\": \"{tag}\"\n }\n ],\n ...\n}\nwhere…\n{sourceId}: Iri - The identifier of the source. This field is optional. When missing, a randomly generated Iri will be assigned. {project}: String - the target project (in the format ‘myorg/myproject’). _identity_: Json object - the identity against which to enforce ACLs during the resource retrieval process. {resourceSchema}: Iri - Selects only resources that are validated against the provided schema Iri. This field is optional. {resourceType}: Iri - Select only resources of the provided type Iri. This field is optional. {tag}: String - Selects only resources with the provided tag. This field is optional.","title":"CrossProjectEventStream"},{"location":"/docs/delta/api/views/composite-view-api.html#remoteprojecteventstream","text":"This source reads events in a streaming fashion from the defined project event log in a remote Nexus Delta deployment. The provided token must have events/read permissions on the target project in order to read events.\nThe events are offered to the projections stage.\n{\n \"sources\": [\n {\n \"@id\": \"{sourceId}\",\n \"@type\": \"RemoteProjectEventStream\",\n \"project\": \"{project}\",\n \"endpoint\": \"{endpoint}\",\n \"token\": \"{token}\",\n \"resourceSchemas\": [ \"{resourceSchema}\", ...],\n \"resourceTypes\": [ \"{resourceType}\", ...],\n \"resourceTag\": \"{tag}\"\n }\n ],\n ...\n}\nwhere…\n{sourceId}: Iri - The identifier of the source. This field is optional. When missing, a randomly generated Iri will be assigned. {project}: String - the remote project (in the format ‘myorg/myproject’). {endpoint}: Iri - the Nexus deployment endpoint. {token}: String - the Nexus deployment token. This field is optional. When missing, the Nexus endpoint will be accessed without authentication. {resourceSchema}: Iri - Selects only resources that are validated against the provided schema Iri. This field is optional. {resourceType}: Iri - Select only resources of the provided type Iri. This field is optional. {tag}: String - Selects only resources with the provided tag. This field is optional.","title":"RemoteProjectEventStream"},{"location":"/docs/delta/api/views/composite-view-api.html#intermediate-sparql-space","text":"After the events are gathered from each source, the following steps are executed:\nConvert event into a resource. Discard undesired resources (resources not matching the source resourceSchemas, resourceTypes or resourceTag). Store the RDF triple representation of a resource in an intermediate Sparql space. This space will be used by the projections in the following pipeline steps.","title":"Intermediate Sparql space"},{"location":"/docs/delta/api/views/composite-view-api.html#projections","text":"A projection defines the type of indexing and the query to transform the data. It is the output of the pipeline.\nThere are 2 types of projections available","title":"Projections"},{"location":"/docs/delta/api/views/composite-view-api.html#elasticsearchprojection","text":"This projection executes the following steps:\nDiscard undesired resources (resources not matching the projection resourceSchemas, resourceTypes or resourceTag). Transform the resource by executing an SPARQL construct query against the intermediate Sparql space. Convert the resulting RDF triples into JSON using the provided JSON-LD context. Stores the resulting JSON as a Document in an ElasticSearch index.\n{\n \"projections\": [\n {\n \"@id\": \"{projectionId}\",\n \"@type\": \"ElasticSearchProjection\",\n \"indexGroup\": {elasticsearchIndexGroup},\n \"mapping\": _elasticsearch mapping_,\n \"settings\": _elasticsearch settings_,\n \"query\": \"{query}\",\n \"context\": _context_,\n \"resourceSchemas\": [ \"{resourceSchema}\", ...],\n \"resourceTypes\": [ \"{resourceType}\", ...],\n \"includeMetadata\": {includeMetadata},\n \"includeDeprecated\": {includeDeprecated},\n \"permission\": {permission},\n \"includeContext\": {includeContext}\n }\n ],\n ...\n}\nwhere…\n{projectionId}: Iri - The identifier of the projection. This field is optional. When missing, a randomly generated Iri will be assigned. {elasticsearchIndexGroup}: String - Allow to add a prefix to the name of the created index so as to make easier to query all of the indices with a same index group by using a wildcard (ex: delta_mygroup_*). This field is optional. _elasticsearch mapping_: Json object - Defines the value types for the Json keys, as stated at the ElasticSearch mapping documentation. _elasticsearch settings_: Json object - Defines the indexing configuration, as stated at the ElasticSearch settings documentation. _context_: Json - the JSON-LD context value applied to the query results. {query}: Sparql Construct Query - Defines the Sparql query to execute against the intermediate Sparql space for each target resource. {resourceSchema}: Iri - Selects only resources that are validated against the provided schema Iri to perform the query. This field is optional. {resourceType}: Iri - Select only resources of the provided type Iri to perform the query. This field is optional. {includeMetadata}: Boolean - If true, the resource’s nexus metadata (_constrainedBy, _deprecated, …) will be included in the ElasticSearch document. The default value is false. {includeDeprecated}: Boolean - If true, deprecated resources are also indexed. The default value is false. {permission}: String - the permission necessary to query this projection. Defaults to views/query. {includeContext}: Boolean - If true, the JSON-LD context object is also added to the document indexed by ElasticSearch. The default value is false.","title":"ElasticSearchProjection"},{"location":"/docs/delta/api/views/composite-view-api.html#sparqlprojection","text":"This projection executes the following steps:\nDiscard undesired resources. Transform the resource by executing an Sparql construct query against the intermediate Sparql space. Stores the resulting RDF Triple in a Blazegraph namespace.\n{\n \"projections\": [\n {\n \"@id\": \"{projectionId}\",\n \"@type\": \"SparqlProjection\",\n \"query\": \"{query}\",\n \"resourceSchemas\": [ \"{resourceSchema}\", ...],\n \"resourceTypes\": [ \"{resourceType}\", ...],\n \"includeMetadata\": {includeMetadata},\n \"includeDeprecated\": {includeDeprecated},\n \"permission\": \"{permission}\"\n }\n ],\n ...\n}\nwhere…\n{projectionId}: Iri - The identifier of the projection. This field is optional. When missing, a randomly generated Iri will be assigned. {resourceSchema}: Iri - Selects only resources that are validated against the provided schema Iri to perform the query. This field is optional. {resourceType}: Iri - Select only resources of the provided type Iri to perform the query. This field is optional. {includeMetadata}: Boolean - If true, the resource’s nexus metadata (_constrainedBy, _deprecated, …) will be stored in the ElasticSearch document. Otherwise it won’t. The default value is false. {includeDeprecated}: Boolean - If true, deprecated resources are also indexed. The default value is false. {query}: Sparql Construct Query - Defines the Sparql query to execute against the intermediate Sparql space for each target resource. {permission}: String - the permission necessary to query this projection. Defaults to views/query.","title":"SparqlProjection"},{"location":"/docs/delta/api/views/composite-view-api.html#batching-queries-to-the-intermediate-space","text":"The queries that projections perform to the intermediate Sparql space can be either executed per individual resource, or in batches containing multiple resources. To learn more about it, please refer to the Composite Sink page.","title":"Batching queries to the intermediate space"},{"location":"/docs/delta/api/views/composite-view-api.html#payload","text":"{\n \"@id\": \"{someid}\",\n \"@type\": \"CompositeView\",\n \"sources\": [ _source_, ...],\n \"projections\": [ _projection_, ...],\n \"rebuildStrategy\": {\n \"@type\": \"Interval\",\n \"value\": \"{interval_value}\"\n }\n}\nwhere…\n_source_: Json - The source definition. _projection_: Json - The projection definition. {interval_value}: String - The maximum interval delay for a resource to be present in a projection, in a human-readable format (e.g.: 10 minutes).\nNote: The rebuildStrategy block is optional. If missing, the view won’t be automatically restarted.","title":"Payload"},{"location":"/docs/delta/api/views/composite-view-api.html#example","text":"The following example creates a Composite view containing 3 sources and 2 projections.\nThe incoming data from each of the sources is stored as RDF triples in the intermediate Sparql space .\nThe ElasticSearch projection http://music.com/es queries the Sparql intermediate namespace when the current resource in the pipeline has the type http://music.com/Band.\nThe Sparql projection http://music.com/sparql queries the Sparql intermediate namespace when the current resource in the pipeline has the type http://music.com/Album.\nThe view is restarted every 10 minutes if there are new resources in any of the sources since the last time it was restarted. This allows to deal with partial graph visibility issues.\n{\n \"@type\": \"CompositeView\",\n \"sources\": [\n {\n \"@id\": \"http://music.com/source_bands\",\n \"@type\": \"ProjectEventStream\",\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/source_albums\",\n \"@type\": \"CrossProjectEventStream\",\n \"project\": \"myorg/albums\",\n \"identities\": {\n \"@type\": \"Anonymous\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n },\n {\n \"@id\": \"http://music.com/source_songs\",\n \"@type\": \"RemoteProjectEventStream\",\n \"endpoint\": \"http://localhost:8080/v1\",\n \"project\": \"myorg/songs\",\n \"resourceTypes\": [ \"http://music.com/Song\" ]\n }\n ],\n \"projections\": [\n {\n \"@id\": \"http://music.com/es\",\n \"@type\": \"ElasticSearchProjection\",\n \"indexGroup\": \"music\",\n \"mapping\": {\n \"properties\": {\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"genre\": {\n \"type\": \"keyword\"\n },\n \"start\": {\n \"type\": \"integer\"\n },\n \"album\": {\n \"type\": \"nested\",\n \"properties\": {\n \"title\": {\n \"type\": \"text\"\n }\n }\n }\n },\n \"dynamic\": false\n },\n \"query\": \"prefix music: CONSTRUCT {{resource_id} music:name ?bandName ; music:genre ?bandGenre ; music:start ?bandStartYear ; music:album ?albumId . ?albumId music:title ?albumTitle . } WHERE {{resource_id} music:name ?bandName ; music:start ?bandStartYear; music:genre ?bandGenre . OPTIONAL {{resource_id} ^music:by ?albumId . ?albumId music:title ?albumTitle . } }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/sparql\",\n \"@type\": \"SparqlProjection\",\n \"query\": \"prefix xsd: prefix music: prefix nxv: CONSTRUCT { {resource_id} music:name ?albumTitle ; music:length ?albumLength ; music:numberOfSongs ?numberOfSongs } WHERE {SELECT ?albumReleaseDate ?albumTitle (sum(xsd:integer(?songLength)) as ?albumLength) (count(?albumReleaseDate) as ?numberOfSongs) WHERE {OPTIONAL { {resource_id} ^music:on / music:length ?songLength } {resource_id} music:released ?albumReleaseDate ; music:title ?albumTitle . } GROUP BY ?albumReleaseDate ?albumTitle }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n }\n ],\n \"rebuildStrategy\": {\n \"@type\": \"Interval\",\n \"value\": \"10 minute\"\n }\n}","title":"Example"},{"location":"/docs/delta/api/views/composite-view-api.html#create-using-post","text":"POST /v1/views/{org_label}/{project_label}\n {...}\nThe json payload:\nIf the @id value is found on the payload, this @id will be used. If the @id value is not found on the payload, an @id will be generated as follows: base:{UUID}. The base is the prefix defined on the resource’s project ({project_label}).\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/bands\" \\\n -d \\\n'{\n \"@type\": \"CompositeView\",\n \"sources\": [\n {\n \"@id\": \"http://music.com/source_bands\",\n \"@type\": \"ProjectEventStream\",\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/source_albums\",\n \"@type\": \"CrossProjectEventStream\",\n \"project\": \"myorg/albums\",\n \"identities\": {\n \"@type\": \"Anonymous\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n },\n {\n \"@id\": \"http://music.com/source_songs\",\n \"@type\": \"RemoteProjectEventStream\",\n \"endpoint\": \"http://localhost:8080/v1\",\n \"project\": \"myorg/songs\",\n \"resourceTypes\": [ \"http://music.com/Song\" ]\n }\n ],\n \"projections\": [\n {\n \"@id\": \"http://music.com/es\",\n \"@type\": \"ElasticSearchProjection\",\n \"indexGroup\": \"music\",\n \"mapping\": {\n \"properties\": {\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"genre\": {\n \"type\": \"keyword\"\n },\n \"start\": {\n \"type\": \"integer\"\n },\n \"album\": {\n \"type\": \"nested\",\n \"properties\": {\n \"title\": {\n \"type\": \"text\"\n }\n }\n }\n },\n \"dynamic\": false\n },\n \"query\": \"prefix music: CONSTRUCT {{resource_id} music:name ?bandName ; music:genre ?bandGenre ; music:start ?bandStartYear ; music:album ?albumId . ?albumId music:title ?albumTitle . } WHERE {{resource_id} music:name ?bandName ; music:start ?bandStartYear; music:genre ?bandGenre . OPTIONAL {{resource_id} ^music:by ?albumId . ?albumId music:title ?albumTitle . } }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/sparql\",\n \"@type\": \"SparqlProjection\",\n \"query\": \"prefix xsd: prefix music: prefix nxv: CONSTRUCT { {resource_id} music:name ?albumTitle ; music:length ?albumLength ; music:numberOfSongs ?numberOfSongs } WHERE {SELECT ?albumReleaseDate ?albumTitle (sum(xsd:integer(?songLength)) as ?albumLength) (count(?albumReleaseDate) as ?numberOfSongs) WHERE {OPTIONAL { {resource_id} ^music:on / music:length ?songLength } {resource_id} music:released ?albumReleaseDate ; music:title ?albumTitle . } GROUP BY ?albumReleaseDate ?albumTitle }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n }\n ],\n \"rebuildStrategy\": {\n \"@type\": \"Interval\",\n \"value\": \"10 minute\"\n }\n}' Payload copysource{\n \"@type\": \"CompositeView\",\n \"sources\": [\n {\n \"@id\": \"http://music.com/source_bands\",\n \"@type\": \"ProjectEventStream\",\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/source_albums\",\n \"@type\": \"CrossProjectEventStream\",\n \"project\": \"myorg/albums\",\n \"identities\": {\n \"@type\": \"Anonymous\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n },\n {\n \"@id\": \"http://music.com/source_songs\",\n \"@type\": \"RemoteProjectEventStream\",\n \"endpoint\": \"http://localhost:8080/v1\",\n \"project\": \"myorg/songs\",\n \"resourceTypes\": [ \"http://music.com/Song\" ]\n }\n ],\n \"projections\": [\n {\n \"@id\": \"http://music.com/es\",\n \"@type\": \"ElasticSearchProjection\",\n \"indexGroup\": \"music\",\n \"mapping\": {\n \"properties\": {\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"genre\": {\n \"type\": \"keyword\"\n },\n \"start\": {\n \"type\": \"integer\"\n },\n \"album\": {\n \"type\": \"nested\",\n \"properties\": {\n \"title\": {\n \"type\": \"text\"\n }\n }\n }\n },\n \"dynamic\": false\n },\n \"query\": \"prefix music: CONSTRUCT {{resource_id} music:name ?bandName ; music:genre ?bandGenre ; music:start ?bandStartYear ; music:album ?albumId . ?albumId music:title ?albumTitle . } WHERE {{resource_id} music:name ?bandName ; music:start ?bandStartYear; music:genre ?bandGenre . OPTIONAL {{resource_id} ^music:by ?albumId . ?albumId music:title ?albumTitle . } }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/sparql\",\n \"@type\": \"SparqlProjection\",\n \"query\": \"prefix xsd: prefix music: prefix nxv: CONSTRUCT { {resource_id} music:name ?albumTitle ; music:length ?albumLength ; music:numberOfSongs ?numberOfSongs } WHERE {SELECT ?albumReleaseDate ?albumTitle (sum(xsd:integer(?songLength)) as ?albumLength) (count(?albumReleaseDate) as ?numberOfSongs) WHERE {OPTIONAL { {resource_id} ^music:on / music:length ?songLength } {resource_id} music:released ?albumReleaseDate ; music:title ?albumTitle . } GROUP BY ?albumReleaseDate ?albumTitle }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n }\n ],\n \"rebuildStrategy\": {\n \"@type\": \"Interval\",\n \"value\": \"3 minute\"\n }\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/composite-views-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://music.com/fb935e64-58c0-4f84-85ef-c6a97d06b699\",\n \"@type\": [\n \"View\",\n \"CompositeView\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-17T14:43:41.763Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/bands/fb935e64-58c0-4f84-85ef-c6a97d06b699/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/bands/fb935e64-58c0-4f84-85ef-c6a97d06b699/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/bands\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/views/myorg/bands/fb935e64-58c0-4f84-85ef-c6a97d06b699\",\n \"_updatedAt\": \"2021-05-17T14:43:41.763Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"4b6fe5bf-675c-40bf-88ac-2b26575236c9\"\n}","title":"Create using POST"},{"location":"/docs/delta/api/views/composite-view-api.html#create-using-put","text":"This alternative endpoint to create a view is useful in case the json payload does not contain an @id but you want to specify one. The @id will be specified in the last segment of the endpoint URI.\nPUT /v1/views/{org_label}/{project_label}/{view_id}\n {...}\nNote that if the payload contains an @id different from the {view_id}, the request will fail.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/bands/composite_view\" \\\n -d \\\n'{\n \"@type\": \"CompositeView\",\n \"sources\": [\n {\n \"@id\": \"http://music.com/source_bands\",\n \"@type\": \"ProjectEventStream\",\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/source_albums\",\n \"@type\": \"CrossProjectEventStream\",\n \"project\": \"myorg/albums\",\n \"identities\": {\n \"@type\": \"Anonymous\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n },\n {\n \"@id\": \"http://music.com/source_songs\",\n \"@type\": \"RemoteProjectEventStream\",\n \"endpoint\": \"http://localhost:8080/v1\",\n \"project\": \"myorg/songs\",\n \"resourceTypes\": [ \"http://music.com/Song\" ]\n }\n ],\n \"projections\": [\n {\n \"@id\": \"http://music.com/es\",\n \"@type\": \"ElasticSearchProjection\",\n \"indexGroup\": \"music\",\n \"mapping\": {\n \"properties\": {\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"genre\": {\n \"type\": \"keyword\"\n },\n \"start\": {\n \"type\": \"integer\"\n },\n \"album\": {\n \"type\": \"nested\",\n \"properties\": {\n \"title\": {\n \"type\": \"text\"\n }\n }\n }\n },\n \"dynamic\": false\n },\n \"query\": \"prefix music: CONSTRUCT {{resource_id} music:name ?bandName ; music:genre ?bandGenre ; music:start ?bandStartYear ; music:album ?albumId . ?albumId music:title ?albumTitle . } WHERE {{resource_id} music:name ?bandName ; music:start ?bandStartYear; music:genre ?bandGenre . OPTIONAL {{resource_id} ^music:by ?albumId . ?albumId music:title ?albumTitle . } }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/sparql\",\n \"@type\": \"SparqlProjection\",\n \"query\": \"prefix xsd: prefix music: prefix nxv: CONSTRUCT { {resource_id} music:name ?albumTitle ; music:length ?albumLength ; music:numberOfSongs ?numberOfSongs } WHERE {SELECT ?albumReleaseDate ?albumTitle (sum(xsd:integer(?songLength)) as ?albumLength) (count(?albumReleaseDate) as ?numberOfSongs) WHERE {OPTIONAL { {resource_id} ^music:on / music:length ?songLength } {resource_id} music:released ?albumReleaseDate ; music:title ?albumTitle . } GROUP BY ?albumReleaseDate ?albumTitle }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n }\n ],\n \"rebuildStrategy\": {\n \"@type\": \"Interval\",\n \"value\": \"10 minute\"\n }\n}' Payload copysource{\n \"@type\": \"CompositeView\",\n \"sources\": [\n {\n \"@id\": \"http://music.com/source_bands\",\n \"@type\": \"ProjectEventStream\",\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/source_albums\",\n \"@type\": \"CrossProjectEventStream\",\n \"project\": \"myorg/albums\",\n \"identities\": {\n \"@type\": \"Anonymous\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n },\n {\n \"@id\": \"http://music.com/source_songs\",\n \"@type\": \"RemoteProjectEventStream\",\n \"endpoint\": \"http://localhost:8080/v1\",\n \"project\": \"myorg/songs\",\n \"resourceTypes\": [ \"http://music.com/Song\" ]\n }\n ],\n \"projections\": [\n {\n \"@id\": \"http://music.com/es\",\n \"@type\": \"ElasticSearchProjection\",\n \"indexGroup\": \"music\",\n \"mapping\": {\n \"properties\": {\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"genre\": {\n \"type\": \"keyword\"\n },\n \"start\": {\n \"type\": \"integer\"\n },\n \"album\": {\n \"type\": \"nested\",\n \"properties\": {\n \"title\": {\n \"type\": \"text\"\n }\n }\n }\n },\n \"dynamic\": false\n },\n \"query\": \"prefix music: CONSTRUCT {{resource_id} music:name ?bandName ; music:genre ?bandGenre ; music:start ?bandStartYear ; music:album ?albumId . ?albumId music:title ?albumTitle . } WHERE {{resource_id} music:name ?bandName ; music:start ?bandStartYear; music:genre ?bandGenre . OPTIONAL {{resource_id} ^music:by ?albumId . ?albumId music:title ?albumTitle . } }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/sparql\",\n \"@type\": \"SparqlProjection\",\n \"query\": \"prefix xsd: prefix music: prefix nxv: CONSTRUCT { {resource_id} music:name ?albumTitle ; music:length ?albumLength ; music:numberOfSongs ?numberOfSongs } WHERE {SELECT ?albumReleaseDate ?albumTitle (sum(xsd:integer(?songLength)) as ?albumLength) (count(?albumReleaseDate) as ?numberOfSongs) WHERE {OPTIONAL { {resource_id} ^music:on / music:length ?songLength } {resource_id} music:released ?albumReleaseDate ; music:title ?albumTitle . } GROUP BY ?albumReleaseDate ?albumTitle }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n }\n ],\n \"rebuildStrategy\": {\n \"@type\": \"Interval\",\n \"value\": \"3 minute\"\n }\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/composite-views-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://music.com/composite_view\",\n \"@type\": [\n \"View\",\n \"CompositeView\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-17T14:43:41.763Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/bands/composite_view/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/bands/composite_view/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/bands\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/views/myorg/bands/composite_view\",\n \"_updatedAt\": \"2021-05-17T14:43:41.763Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"4b6fe5bf-675c-40bf-88ac-2b26575236c9\"\n}","title":"Create using PUT"},{"location":"/docs/delta/api/views/composite-view-api.html#update","text":"This operation overrides the payload.\nIn order to ensure a client does not perform any changes to a resource without having had seen the previous revision of the view, the last revision needs to be passed as a query parameter.\nPUT /v1/views/{org_label}/{project_label}/{view_id}?rev={previous_rev}\n {...}\n… where {previous_rev} is the last known revision number for the view.\nNote Updating a view creates new Elasticsearch indices and Blazegraph namespaces and deletes the existing ones. The indexing process will start from the beginning.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/bands/composite_view?rev=1\" \\\n -d \\\n'{\n \"@type\": \"CompositeView\",\n \"sources\": [\n {\n \"@id\": \"http://music.com/source_bands\",\n \"@type\": \"ProjectEventStream\",\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/source_albums\",\n \"@type\": \"CrossProjectEventStream\",\n \"project\": \"myorg/albums\",\n \"identities\": {\n \"@type\": \"Anonymous\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n },\n {\n \"@id\": \"http://music.com/source_songs\",\n \"@type\": \"RemoteProjectEventStream\",\n \"endpoint\": \"http://localhost:8080/v1\",\n \"project\": \"myorg/songs\",\n \"resourceTypes\": [ \"http://music.com/Song\" ]\n }\n ],\n \"projections\": [\n {\n \"@id\": \"http://music.com/es\",\n \"@type\": \"ElasticSearchProjection\",\n \"indexGroup\": \"music\",\n \"mapping\": {\n \"properties\": {\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"genre\": {\n \"type\": \"keyword\"\n },\n \"start\": {\n \"type\": \"integer\"\n },\n \"album\": {\n \"type\": \"nested\",\n \"properties\": {\n \"title\": {\n \"type\": \"text\"\n }\n }\n }\n },\n \"dynamic\": false\n },\n \"query\": \"prefix music: CONSTRUCT {{resource_id} music:name ?bandName ; music:genre ?bandGenre ; music:start ?bandStartYear ; music:album ?albumId . ?albumId music:title ?albumTitle . } WHERE {{resource_id} music:name ?bandName ; music:start ?bandStartYear; music:genre ?bandGenre . OPTIONAL {{resource_id} ^music:by ?albumId . ?albumId music:title ?albumTitle . } }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/sparql\",\n \"@type\": \"SparqlProjection\",\n \"query\": \"prefix xsd: prefix music: prefix nxv: CONSTRUCT { {resource_id} music:name ?albumTitle ; music:length ?albumLength ; music:numberOfSongs ?numberOfSongs } WHERE {SELECT ?albumReleaseDate ?albumTitle (sum(xsd:integer(?songLength)) as ?albumLength) (count(?albumReleaseDate) as ?numberOfSongs) WHERE {OPTIONAL { {resource_id} ^music:on / music:length ?songLength } {resource_id} music:released ?albumReleaseDate ; music:title ?albumTitle . } GROUP BY ?albumReleaseDate ?albumTitle }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n }\n ],\n \"rebuildStrategy\": {\n \"@type\": \"Interval\",\n \"value\": \"10 minute\"\n }\n}' Payload copysource{\n \"@type\": \"CompositeView\",\n \"sources\": [\n {\n \"@id\": \"http://music.com/source_bands\",\n \"@type\": \"ProjectEventStream\",\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/source_albums\",\n \"@type\": \"CrossProjectEventStream\",\n \"project\": \"myorg/albums\",\n \"identities\": {\n \"@type\": \"Anonymous\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n },\n {\n \"@id\": \"http://music.com/source_songs\",\n \"@type\": \"RemoteProjectEventStream\",\n \"endpoint\": \"http://localhost:8080/v1\",\n \"project\": \"myorg/songs\",\n \"resourceTypes\": [ \"http://music.com/Song\" ]\n }\n ],\n \"projections\": [\n {\n \"@id\": \"http://music.com/es\",\n \"@type\": \"ElasticSearchProjection\",\n \"indexGroup\": \"music\",\n \"mapping\": {\n \"properties\": {\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"genre\": {\n \"type\": \"keyword\"\n },\n \"start\": {\n \"type\": \"integer\"\n },\n \"album\": {\n \"type\": \"nested\",\n \"properties\": {\n \"title\": {\n \"type\": \"text\"\n }\n }\n }\n },\n \"dynamic\": false\n },\n \"query\": \"prefix music: CONSTRUCT {{resource_id} music:name ?bandName ; music:genre ?bandGenre ; music:start ?bandStartYear ; music:album ?albumId . ?albumId music:title ?albumTitle . } WHERE {{resource_id} music:name ?bandName ; music:start ?bandStartYear; music:genre ?bandGenre . OPTIONAL {{resource_id} ^music:by ?albumId . ?albumId music:title ?albumTitle . } }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/sparql\",\n \"@type\": \"SparqlProjection\",\n \"query\": \"prefix xsd: prefix music: prefix nxv: CONSTRUCT { {resource_id} music:name ?albumTitle ; music:length ?albumLength ; music:numberOfSongs ?numberOfSongs } WHERE {SELECT ?albumReleaseDate ?albumTitle (sum(xsd:integer(?songLength)) as ?albumLength) (count(?albumReleaseDate) as ?numberOfSongs) WHERE {OPTIONAL { {resource_id} ^music:on / music:length ?songLength } {resource_id} music:released ?albumReleaseDate ; music:title ?albumTitle . } GROUP BY ?albumReleaseDate ?albumTitle }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n }\n ],\n \"rebuildStrategy\": {\n \"@type\": \"Interval\",\n \"value\": \"3 minute\"\n }\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/composite-views-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://music.com/composite_view\",\n \"@type\": [\n \"View\",\n \"CompositeView\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-17T14:43:41.763Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/bands/composite_view/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/bands/composite_view/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/bands\",\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/views/myorg/bands/composite_view\",\n \"_updatedAt\": \"2021-05-17T14:55:45.472Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"4b6fe5bf-675c-40bf-88ac-2b26575236c9\"\n}","title":"Update"},{"location":"/docs/delta/api/views/composite-view-api.html#tag","text":"Links a view revision to a specific name.\nTagging a view is considered to be an update as well.\nPOST /v1/views/{org_label}/{project_label}/{view_id}/tags?rev={previous_rev}\n {\n \"tag\": \"{name}\",\n \"rev\": {rev}\n }\n… where\n{previous_rev}: is the last known revision number for the resource. {name}: String - label given to the view at specific revision. {rev}: Number - the revision to link the provided {name}.\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/bands/composite_view/tags?rev=2\" \\\n -d \\\n'{\n \"tag\": \"mytag\",\n \"rev\": 1\n}' Payload copysource{\n \"tag\": \"mytag\",\n \"rev\": 1\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/composite-views-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://music.com/composite_view\",\n \"@type\": [\n \"View\",\n \"CompositeView\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-17T14:43:41.763Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/bands/composite_view/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/bands/composite_view/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/bands\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/views/myorg/bands/composite_view\",\n \"_updatedAt\": \"2021-05-17T14:58:28.483Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"4b6fe5bf-675c-40bf-88ac-2b26575236c9\"\n}","title":"Tag"},{"location":"/docs/delta/api/views/composite-view-api.html#deprecate","text":"Locks the view, so no further operations can be performed. It also stops indexing any more resources into it and deletes all the underlying Elasticsearch indices and Blazegraph namespaces.\nDeprecating a view is considered to be an update as well.\nNote Deprecating a view deletes all the underlying Elasticsearch indices and Blazegraph namespaces, making the view not searchable.\nDELETE /v1/views/{org_label}/{project_label}/{view_id}?rev={previous_rev}\n… where {previous_rev} is the last known revision number for the view.\nExample\nRequest copysourcecurl -X DELETE \\\n \"http://localhost:8080/v1/views/myorg/bands/composite_view?rev=3\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/composite-views-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://music.com/composite_view\",\n \"@type\": [\n \"View\",\n \"CompositeView\"\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-17T14:43:41.763Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/bands/composite_view/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/bands/composite_view/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/bands\",\n \"_rev\": 4,\n \"_self\": \"http://localhost:8080/v1/views/myorg/bands/composite_view\",\n \"_updatedAt\": \"2021-05-17T15:50:39.555Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"4b6fe5bf-675c-40bf-88ac-2b26575236c9\"\n}","title":"Deprecate"},{"location":"/docs/delta/api/views/composite-view-api.html#fetch","text":"GET /v1/views/{org_label}/{project_label}/{view_id}?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional. {rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/bands/composite_view?rev=3\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/composite-views.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://music.com/composite_view\",\n \"@type\": [\n \"View\",\n \"CompositeView\"\n ],\n \"projections\": [\n {\n \"@id\": \"http://music.com/es\",\n \"@type\": \"ElasticSearchProjection\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"includeDeprecated\": false,\n \"includeMetadata\": false,\n \"indexGroup\": \"music\",\n \"mapping\": {\n \"dynamic\": false,\n \"properties\": {\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"album\": {\n \"properties\": {\n \"title\": {\n \"type\": \"text\"\n }\n },\n \"type\": \"nested\"\n },\n \"genre\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"start\": {\n \"type\": \"integer\"\n }\n }\n },\n \"permission\": \"views/query\",\n \"query\": \"prefix music: CONSTRUCT {{resource_id} music:name ?bandName ; music:genre ?bandGenre ; music:start ?bandStartYear ; music:album ?albumId . ?albumId music:title ?albumTitle . } WHERE {{resource_id} music:name ?bandName ; music:start ?bandStartYear; music:genre ?bandGenre . OPTIONAL {{resource_id} ^music:by ?albumId . ?albumId music:title ?albumTitle . } }\",\n \"resourceSchemas\": [],\n \"resourceTypes\": [\n \"http://music.com/Band\"\n ],\n \"_uuid\": \"4af5a80c-bac1-4d81-9c00-006da383716f\"\n },\n {\n \"@id\": \"http://music.com/sparql\",\n \"@type\": \"SparqlProjection\",\n \"includeDeprecated\": false,\n \"includeMetadata\": false,\n \"permission\": \"views/query\",\n \"query\": \"prefix xsd: prefix music: prefix nxv: CONSTRUCT { {resource_id} music:name ?albumTitle ; music:length ?albumLength ; music:numberOfSongs ?numberOfSongs } WHERE {SELECT ?albumReleaseDate ?albumTitle (sum(xsd:integer(?songLength)) as ?albumLength) (count(?albumReleaseDate) as ?numberOfSongs) WHERE {OPTIONAL { {resource_id} ^music:on / music:length ?songLength } {resource_id} music:released ?albumReleaseDate ; music:title ?albumTitle . } GROUP BY ?albumReleaseDate ?albumTitle }\",\n \"resourceSchemas\": [],\n \"resourceTypes\": [\n \"http://music.com/Album\"\n ],\n \"_uuid\": \"a741d874-90d6-48b5-84c2-f87ecd689043\"\n }\n ],\n \"rebuildStrategy\": {\n \"@type\": \"Interval\",\n \"value\": \"3 minutes\"\n },\n \"sources\": [\n {\n \"@id\": \"http://music.com/source_bands\",\n \"@type\": \"ProjectEventStream\",\n \"includeDeprecated\": false,\n \"resourceSchemas\": [],\n \"resourceTypes\": [\n \"http://music.com/Band\"\n ],\n \"_uuid\": \"df5ea885-f0c8-4e8b-8dd2-9ed0bd715ec0\"\n },\n {\n \"@id\": \"http://music.com/source_albums\",\n \"@type\": \"CrossProjectEventStream\",\n \"identities\": [\n {\n \"@id\": \"http://localhost:8080/v1/anonymous\",\n \"@type\": \"Anonymous\"\n }\n ],\n \"includeDeprecated\": false,\n \"project\": \"myorg/albums\",\n \"resourceSchemas\": [],\n \"resourceTypes\": [\n \"http://music.com/Album\"\n ],\n \"_uuid\": \"eccca1d3-3044-4494-bde6-6c79f56fa649\"\n },\n {\n \"@id\": \"http://music.com/source_songs\",\n \"@type\": \"RemoteProjectEventStream\",\n \"endpoint\": \"http://localhost:8080/v1\",\n \"includeDeprecated\": false,\n \"project\": \"myorg/songs\",\n \"resourceSchemas\": [],\n \"resourceTypes\": [\n \"http://music.com/Song\"\n ],\n \"_uuid\": \"aa788720-8e0c-4504-8d54-24c597e261e5\"\n }\n ],\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/views.json\",\n \"_createdAt\": \"2021-05-17T14:43:41.763Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/views/myorg/bands/composite_view/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/views/myorg/bands/composite_view/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/bands\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/views/myorg/bands/composite_view\",\n \"_updatedAt\": \"2021-05-17T14:58:28.483Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"4b6fe5bf-675c-40bf-88ac-2b26575236c9\"\n}\nIf the redirect to Fusion feature is enabled and if the Accept header is set to text/html, a redirection to the fusion representation of the resource will be returned.","title":"Fetch"},{"location":"/docs/delta/api/views/composite-view-api.html#fetch-original-payload","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/source?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional. {rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/bands/composite_view/source\" Response copysource{\n \"@type\": \"CompositeView\",\n \"sources\": [\n {\n \"@id\": \"http://music.com/source_bands\",\n \"@type\": \"ProjectEventStream\",\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/source_albums\",\n \"@type\": \"CrossProjectEventStream\",\n \"project\": \"myorg/albums\",\n \"identities\": {\n \"@type\": \"Anonymous\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n },\n {\n \"@id\": \"http://music.com/source_songs\",\n \"@type\": \"RemoteProjectEventStream\",\n \"endpoint\": \"http://localhost:8080/v1\",\n \"project\": \"myorg/songs\",\n \"resourceTypes\": [ \"http://music.com/Song\" ]\n }\n ],\n \"projections\": [\n {\n \"@id\": \"http://music.com/es\",\n \"@type\": \"ElasticSearchProjection\",\n \"indexGroup\": \"music\",\n \"mapping\": {\n \"properties\": {\n \"@type\": {\n \"type\": \"keyword\"\n },\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"name\": {\n \"type\": \"keyword\"\n },\n \"genre\": {\n \"type\": \"keyword\"\n },\n \"start\": {\n \"type\": \"integer\"\n },\n \"album\": {\n \"type\": \"nested\",\n \"properties\": {\n \"title\": {\n \"type\": \"text\"\n }\n }\n }\n },\n \"dynamic\": false\n },\n \"query\": \"prefix music: CONSTRUCT {{resource_id} music:name ?bandName ; music:genre ?bandGenre ; music:start ?bandStartYear ; music:album ?albumId . ?albumId music:title ?albumTitle . } WHERE {{resource_id} music:name ?bandName ; music:start ?bandStartYear; music:genre ?bandGenre . OPTIONAL {{resource_id} ^music:by ?albumId . ?albumId music:title ?albumTitle . } }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Band\" ]\n },\n {\n \"@id\": \"http://music.com/sparql\",\n \"@type\": \"SparqlProjection\",\n \"query\": \"prefix xsd: prefix music: prefix nxv: CONSTRUCT { {resource_id} music:name ?albumTitle ; music:length ?albumLength ; music:numberOfSongs ?numberOfSongs } WHERE {SELECT ?albumReleaseDate ?albumTitle (sum(xsd:integer(?songLength)) as ?albumLength) (count(?albumReleaseDate) as ?numberOfSongs) WHERE {OPTIONAL { {resource_id} ^music:on / music:length ?songLength } {resource_id} music:released ?albumReleaseDate ; music:title ?albumTitle . } GROUP BY ?albumReleaseDate ?albumTitle }\",\n \"context\": {\n \"@base\": \"http://music.com/\",\n \"@vocab\": \"http://music.com/\"\n },\n \"resourceTypes\": [ \"http://music.com/Album\" ]\n }\n ],\n \"rebuildStrategy\": {\n \"@type\": \"Interval\",\n \"value\": \"3 minute\"\n }\n}","title":"Fetch original payload"},{"location":"/docs/delta/api/views/composite-view-api.html#fetch-tags","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/tags?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/bands/composite_view/tags\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/tags.json\",\n \"tags\": [\n {\n \"rev\": 1,\n \"tag\": \"mytag\"\n }\n ]\n}","title":"Fetch tags"},{"location":"/docs/delta/api/views/composite-view-api.html#search-documents-in-projection-s-","text":"POST /v1/views/{org_label}/{project_label}/{view_id}/projections/{projection_id}/_search\n {...}\nwhere {projection_id} is the @id value of the target ElasticSearch projection. The reserved value _ means “every projection”.\nThe supported payload is defined on the ElasticSearch documentation\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/views/myorg/bands/composite_view/projections/music:es/_search\" \\\n -d \\\n'{\n \"query\": {\n \"match\": {\n \"name\": \"Muse\"\n }\n }\n}' Payload copysource{\n \"query\": {\n \"match\": {\n \"name\": \"Muse\"\n }\n }\n} Response copysource{\n \"hits\": {\n \"hits\": [\n {\n \"_id\": \"http://music.com/muse\",\n \"_index\": \"tests_4b6fe5bf-675c-40bf-88ac-2b26575236c9_4af5a80c-bac1-4d81-9c00-006da383716f_3\",\n \"_score\": 0.6931471,\n \"_source\": {\n \"@id\": \"muse\",\n \"album\": [\n {\n \"@id\": \"absolution\",\n \"title\": \"Absolution\"\n },\n {\n \"@id\": \"black_holes_and_revelations\",\n \"title\": \"Black Holes & Revelations\"\n }\n ],\n \"genre\": [\n \"alternative rock\",\n \"progressive rock\",\n \"electronica\",\n \"art rock\",\n \"hard rock\",\n \"space rock\"\n ],\n \"name\": \"Muse\",\n \"start\": 1994\n }\n }\n ],\n \"max_score\": 0.6931471,\n \"total\": {\n \"relation\": \"eq\",\n \"value\": 1\n }\n },\n \"timed_out\": false,\n \"took\": 2,\n \"_shards\": {\n \"failed\": 0,\n \"skipped\": 0,\n \"successful\": 1,\n \"total\": 1\n }\n}","title":"Search Documents in projection(s)"},{"location":"/docs/delta/api/views/composite-view-api.html#sparql-query-in-projection-s-","text":"POST /v1/views/{org_label}/{project_label}/{view_id}/projections/{projection_id}/sparql\n {query}\nGET /v1/views/{org_label}/{project_label}/{view_id}/projections/{projection_id}/sparql?query={query}\nwhere {projection_id} is the @id value of the target Sparql projection. The reserved value _ means “every projection”.\nIn both endpoints, {query} is defined by the SPARQL documentation\nThe Content-Type HTTP header for POST request is application/sparql-query.\nFrom Delta 1.5, we have added support for multiple Content Negotiation types when querying the SPARQL view, allowing clients to request different response formats. The Content Negotiation is controlled by the HTTP Accept header. The following values are supported:\napplication/ld+json: Returns an expanded JSON-LD document. This is supported for a subset of SPARQL queries. application/n-triples: Returns the n-triples representation. This is supported for a subset of SPARQL queries application/rdf+xml: Returns an XML document. application/sparql-results+xml: Returns the sparql results in XML. application/sparql-results+json: Returns the sparql results in Json (default).\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/sparql-query\" \\\n -H \"Accept: application/n-triples\" \\\n \"http://localhost:8080/v1/views/myorg/bands/composite_view/projections/_/sparql\" \\\n -d \\\n'prefix music: \nCONSTRUCT {\n ?s ?p ?o\n} WHERE {\n ?s ?p ?o FILTER(?s = music:absolution)\n}' Response copysource \"Absolution\" .\n \"2\"^^ .\n \"488\"^^ .","title":"SPARQL query in projection(s)"},{"location":"/docs/delta/api/views/composite-view-api.html#sparql-query-in-the-intermediate-space","text":"POST /v1/views/{org_label}/{project_label}/{view_id}/sparql\n {query}\nGET /v1/views/{org_label}/{project_label}/{view_id}/sparql?query={query}\nIn both endpoints, {query} is defined by the SPARQL documentation\nThe Content-Type HTTP header for POST request is application/sparql-query.\nFrom Delta 1.5, we have added support for multiple Content Negotiation types when querying the SPARQL view, allowing clients to request different response formats. The Content Negotiation is controlled by the HTTP Accept header. The following values are supported:\napplication/ld+json: Returns an expanded JSON-LD document. This is supported for a subset of SPARQL queries. application/n-triples: Returns the n-triples representation. This is supported for a subset of SPARQL queries application/rdf+xml: Returns an XML document. application/sparql-results+xml: Returns the sparql results in XML. application/sparql-results+json: Returns the sparql results in Json (default).\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/sparql-query\" \\\n -H \"Accept: application/n-triples\" \\\n \"http://localhost:8080/v1/views/myorg/bands/composite_view/sparql\" \\\n -d \\\n'prefix music: \nCONSTRUCT {\n ?s ?p ?o\n} WHERE {\n ?s ?p ?o FILTER(?s = music:absolution)\n}' Response copysource .\n \"2021-05-17T14:36:44.992Z\"^^ .\n \"Warner Bros.\" .\n .\n \"2003-09-15\" .\n \"false\"^^ .\n \"Taste\" .\n \"Absolution\" .\n \"East West\" .\n .\n .\n .\n .\n \"2021-05-17T14:36:44.992Z\"^^ .\n .\n .\n .\n \"1\"^^ .\n .","title":"SPARQL query in the intermediate space"},{"location":"/docs/delta/api/views/composite-view-api.html#fetch-statistics","text":"This endpoint displays statistical information about each of the composite view projections.\nGET /v1/views/{org_label}/{project_label}/{view_id}/statistics\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/bands/composite_view/statistics\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/statistics.json\"\n ],\n \"_total\": 6,\n \"_results\": [\n {\n \"sourceId\": \"http://music.com/source_albums\",\n \"projectionId\": \"http://music.com/es\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 0,\n \"evaluatedEvents\": 10,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:37:06.893Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:37:06.893Z\",\n \"processedEvents\": 10,\n \"remainingEvents\": 0,\n \"totalEvents\": 10\n },\n {\n \"sourceId\": \"http://music.com/source_albums\",\n \"projectionId\": \"http://music.com/sparql\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 0,\n \"evaluatedEvents\": 10,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:37:06.893Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:37:06.893Z\",\n \"processedEvents\": 10,\n \"remainingEvents\": 0,\n \"totalEvents\": 10\n },\n {\n \"sourceId\": \"http://music.com/source_bands\",\n \"projectionId\": \"http://music.com/es\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 1,\n \"evaluatedEvents\": 11,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:58:28.483Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:58:28.483Z\",\n \"processedEvents\": 12,\n \"remainingEvents\": 0,\n \"totalEvents\": 12\n },\n {\n \"sourceId\": \"http://music.com/source_bands\",\n \"projectionId\": \"http://music.com/sparql\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 1,\n \"evaluatedEvents\": 11,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:58:28.483Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:58:28.483Z\",\n \"processedEvents\": 12,\n \"remainingEvents\": 0,\n \"totalEvents\": 12\n },\n {\n \"sourceId\": \"http://music.com/source_songs\",\n \"projectionId\": \"http://music.com/es\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 1,\n \"evaluatedEvents\": 13,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:37:38.397Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:37:38.397Z\",\n \"processedEvents\": 14,\n \"remainingEvents\": 0,\n \"totalEvents\": 14\n },\n {\n \"sourceId\": \"http://music.com/source_songs\",\n \"projectionId\": \"http://music.com/sparql\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 1,\n \"evaluatedEvents\": 13,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:37:38.397Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:37:38.397Z\",\n \"processedEvents\": 14,\n \"remainingEvents\": 0,\n \"totalEvents\": 14\n }\n ]\n}\nwhere:\ntotalEvents - sum of total number of events from each source processedEvents - sum of number of events that have been considered by each source remainingEvents - sum of number of events that remain to be considered by each source discardedEvents - sum of number of events that have been discarded by each source (were not evaluated due to filters, e.g. did not match schema, tag or type defined in the source) evaluatedEvents - sum of number of events that have been used to update the intermediate Sparql space of each source lastEventDateTime - timestamp of the last event in the sources lastProcessedEventDateTime - timestamp of the last event processed by the sources delayInSeconds - number of seconds between the last processed event timestamp and the last known event timestamp sourceId - the @id unique value of the source","title":"Fetch statistics"},{"location":"/docs/delta/api/views/composite-view-api.html#fetch-source-s-statistics","text":"This endpoint displays statistical information about the projections related to the {source_id} source.\nGET /v1/views/{org_label}/{project_label}/{view_id}/sources/{source_id}/statistics\nwhere {source_id} is the @id value of the source. The reserved value _ means “every source”.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/bands/composite_view/sources/_/statistics\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/statistics.json\"\n ],\n \"_total\": 6,\n \"_results\": [\n {\n \"sourceId\": \"http://music.com/source_albums\",\n \"projectionId\": \"http://music.com/es\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 0,\n \"evaluatedEvents\": 10,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:37:06.893Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:37:06.893Z\",\n \"processedEvents\": 10,\n \"remainingEvents\": 0,\n \"totalEvents\": 10\n },\n {\n \"sourceId\": \"http://music.com/source_albums\",\n \"projectionId\": \"http://music.com/sparql\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 0,\n \"evaluatedEvents\": 10,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:37:06.893Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:37:06.893Z\",\n \"processedEvents\": 10,\n \"remainingEvents\": 0,\n \"totalEvents\": 10\n },\n {\n \"sourceId\": \"http://music.com/source_bands\",\n \"projectionId\": \"http://music.com/es\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 1,\n \"evaluatedEvents\": 11,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:58:28.483Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:58:28.483Z\",\n \"processedEvents\": 12,\n \"remainingEvents\": 0,\n \"totalEvents\": 12\n },\n {\n \"sourceId\": \"http://music.com/source_bands\",\n \"projectionId\": \"http://music.com/sparql\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 1,\n \"evaluatedEvents\": 11,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:58:28.483Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:58:28.483Z\",\n \"processedEvents\": 12,\n \"remainingEvents\": 0,\n \"totalEvents\": 12\n },\n {\n \"sourceId\": \"http://music.com/source_songs\",\n \"projectionId\": \"http://music.com/es\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 1,\n \"evaluatedEvents\": 13,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:37:38.397Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:37:38.397Z\",\n \"processedEvents\": 14,\n \"remainingEvents\": 0,\n \"totalEvents\": 14\n },\n {\n \"sourceId\": \"http://music.com/source_songs\",\n \"projectionId\": \"http://music.com/sparql\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 1,\n \"evaluatedEvents\": 13,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:37:38.397Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:37:38.397Z\",\n \"processedEvents\": 14,\n \"remainingEvents\": 0,\n \"totalEvents\": 14\n }\n ]\n}\nwhere:\ntotalEvents - total number of events for the provided source processedEvents - number of events that have been considered by the provided source remainingEvents - number of events that remain to be considered by the provided source discardedEvents - number of events that have been discarded by the provided source (were not evaluated due to filters, e.g. did not match schema, tag or type defined in the source) evaluatedEvents - number of events that have been used to update the intermediate Sparql of the provided source lastEventDateTime - timestamp of the last event from the provided source lastProcessedEventDateTime - timestamp of the last event processed by the provided source delayInSeconds - number of seconds between the last processed event timestamp and the last known event timestamp","title":"Fetch source(s) statistics"},{"location":"/docs/delta/api/views/composite-view-api.html#fetch-projection-s-statistics","text":"This endpoint displays statistical information about the provided projection.\nGET /v1/views/{org_label}/{project_label}/{view_id}/projections/{projection_id}/statistics\nwhere {projection_id} is the @id value of the projection. The reserved value _ means “every projection”.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/bands/composite_view/projections/_/statistics\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/statistics.json\"\n ],\n \"_total\": 6,\n \"_results\": [\n {\n \"sourceId\": \"http://music.com/source_albums\",\n \"projectionId\": \"http://music.com/es\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 0,\n \"evaluatedEvents\": 10,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:37:06.893Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:37:06.893Z\",\n \"processedEvents\": 10,\n \"remainingEvents\": 0,\n \"totalEvents\": 10\n },\n {\n \"sourceId\": \"http://music.com/source_albums\",\n \"projectionId\": \"http://music.com/sparql\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 0,\n \"evaluatedEvents\": 10,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:37:06.893Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:37:06.893Z\",\n \"processedEvents\": 10,\n \"remainingEvents\": 0,\n \"totalEvents\": 10\n },\n {\n \"sourceId\": \"http://music.com/source_bands\",\n \"projectionId\": \"http://music.com/es\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 1,\n \"evaluatedEvents\": 11,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:58:28.483Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:58:28.483Z\",\n \"processedEvents\": 12,\n \"remainingEvents\": 0,\n \"totalEvents\": 12\n },\n {\n \"sourceId\": \"http://music.com/source_bands\",\n \"projectionId\": \"http://music.com/sparql\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 1,\n \"evaluatedEvents\": 11,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:58:28.483Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:58:28.483Z\",\n \"processedEvents\": 12,\n \"remainingEvents\": 0,\n \"totalEvents\": 12\n },\n {\n \"sourceId\": \"http://music.com/source_songs\",\n \"projectionId\": \"http://music.com/es\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 1,\n \"evaluatedEvents\": 13,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:37:38.397Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:37:38.397Z\",\n \"processedEvents\": 14,\n \"remainingEvents\": 0,\n \"totalEvents\": 14\n },\n {\n \"sourceId\": \"http://music.com/source_songs\",\n \"projectionId\": \"http://music.com/sparql\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 1,\n \"evaluatedEvents\": 13,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-05-17T14:37:38.397Z\",\n \"lastProcessedEventDateTime\": \"2021-05-17T14:37:38.397Z\",\n \"processedEvents\": 14,\n \"remainingEvents\": 0,\n \"totalEvents\": 14\n }\n ]\n}\nwhere:\nsourceId - the @id unique value of the source projectionId - the @id unique value of the projection totalEvents - total number of events for the provided source processedEvents - number of events that have been considered by the projection remainingEvents - number of events that remain to be considered by the projection discardedEvents - number of events that have been discarded (were not evaluated due to filters, e.g. did not match schema, tag or type defined in the projection) evaluatedEvents - number of events that have been used to update the projection index lastEventDateTime - timestamp of the last event in the source lastProcessedEventDateTime - timestamp of the last event processed by the projection delayInSeconds - number of seconds between the last processed event timestamp and the last known event timestamp","title":"Fetch projection(s) statistics"},{"location":"/docs/delta/api/views/composite-view-api.html#fetch-indexing","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/offset\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/bands/composite_view/offset\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/offset.json\"\n ],\n \"_total\": 6,\n \"_results\": [\n {\n \"sourceId\": \"http://music.com/source_albums\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"TimeBasedOffset\",\n \"instant\": \"2021-05-17T14:37:06.919Z\",\n \"value\": \"5abccf70-b71d-11eb-89c5-49f1ca92ec51\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_albums\",\n \"projectionId\": \"http://music.com/sparql\",\n \"offset\": {\n \"@type\": \"TimeBasedOffset\",\n \"instant\": \"2021-05-17T14:37:06.919Z\",\n \"value\": \"5abccf70-b71d-11eb-89c5-49f1ca92ec51\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_bands\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"TimeBasedOffset\",\n \"instant\": \"2021-05-17T14:58:28.484Z\",\n \"value\": \"569c1c40-b720-11eb-89c5-49f1ca92ec51\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_bands\",\n \"projectionId\": \"http://music.com/sparql\",\n \"offset\": {\n \"@type\": \"TimeBasedOffset\",\n \"instant\": \"2021-05-17T14:58:28.484Z\",\n \"value\": \"569c1c40-b720-11eb-89c5-49f1ca92ec51\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_songs\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"TimeBasedOffset\",\n \"instant\": \"2021-05-17T14:37:38.513Z\",\n \"value\": \"6d91ac10-b71d-11eb-89c5-49f1ca92ec51\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_songs\",\n \"projectionId\": \"http://music.com/sparql\",\n \"offset\": {\n \"@type\": \"TimeBasedOffset\",\n \"instant\": \"2021-05-17T14:37:38.513Z\",\n \"value\": \"6d91ac10-b71d-11eb-89c5-49f1ca92ec51\"\n }\n }\n ]\n}\nwhere…\nsourceId - @id identifying the view’s source. projectionId - @id identifying the view’s projection. instant - timestamp of the last event processed by the views’ projection. value - the value of the offset.","title":"Fetch indexing"},{"location":"/docs/delta/api/views/composite-view-api.html#fetch-projection-s-indexing","text":"GET /v1/views/{org_label}/{project_label}/{view_id}/projections/{projection_id}/offset\nwhere {projection_id} is the @id value of the projection. The reserved value _ means “every projection”.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/bands/composite_view/projections/music:es/offset\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/offset.json\"\n ],\n \"_total\": 3,\n \"_results\": [\n {\n \"sourceId\": \"http://music.com/source_albums\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"TimeBasedOffset\",\n \"instant\": \"2021-05-17T14:37:06.919Z\",\n \"value\": \"5abccf70-b71d-11eb-89c5-49f1ca92ec51\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_bands\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"TimeBasedOffset\",\n \"instant\": \"2021-05-17T14:58:28.484Z\",\n \"value\": \"569c1c40-b720-11eb-89c5-49f1ca92ec51\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_songs\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"TimeBasedOffset\",\n \"instant\": \"2021-05-17T14:37:38.513Z\",\n \"value\": \"6d91ac10-b71d-11eb-89c5-49f1ca92ec51\"\n }\n }\n ]\n}\nwhere…\nsourceId - @id identifying the view’s source. projectionId - @id identifying the view’s projection. instant - timestamp of the last event processed by the views’ projection. value - the value of the offset.","title":"Fetch projection(s) indexing"},{"location":"/docs/delta/api/views/composite-view-api.html#restart-indexing","text":"This endpoint restarts the view indexing process. It does not delete the created indices/namespaces but it overrides the graphs/documents when going through the event log.\nDELETE /v1/views/{org_label}/{project_label}/{view_id}/offset\nExample\nRequest copysourcecurl -X DELETE \\\n \"http://localhost:8080/v1/views/myorg/bands/composite_view/offset\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/offset.json\"\n ],\n \"_total\": 6,\n \"_results\": [\n {\n \"sourceId\": \"http://music.com/source_albums\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_albums\",\n \"projectionId\": \"http://music.com/sparql\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_bands\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_bands\",\n \"projectionId\": \"http://music.com/sparql\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_songs\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_songs\",\n \"projectionId\": \"http://music.com/sparql\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n }\n ]\n}","title":"Restart indexing"},{"location":"/docs/delta/api/views/composite-view-api.html#restart-projection-s-indexing","text":"This endpoint restarts indexing process for the provided projection(s) while keeping the sources (and the intermediate Sparql space) progress.\nDELETE /v1/views/{org_label}/{project_label}/{view_id}/projections/{projection_id}/offset\nExample\nRequest copysourcecurl -X DELETE \\\n \"http://localhost:8080/v1/views/myorg/bands/composite_view/offset\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/offset.json\"\n ],\n \"_total\": 6,\n \"_results\": [\n {\n \"sourceId\": \"http://music.com/source_albums\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_albums\",\n \"projectionId\": \"http://music.com/sparql\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_bands\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_bands\",\n \"projectionId\": \"http://music.com/sparql\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_songs\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_songs\",\n \"projectionId\": \"http://music.com/sparql\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n }\n ]\n}","title":"Restart projection(s) indexing"},{"location":"/docs/delta/api/views/composite-view-api.html#restart-projection","text":"This endpoint restarts indexing process for the provided projection while keeping the sources (and the intermediate Sparql space) progress.\nDELETE /v1/views/{org_label}/{project_label}/{view_id}/projections/{projection_id}/offset\nwhere {projection_id} is the @id value of the projection. The reserved value _ means “every projection”.\nExample\nRequest copysourcecurl -X DELETE \\\n \"http://localhost:8080/v1/views/myorg/bands/composite_view/projections/music:es/offset\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/offset.json\"\n ],\n \"_total\": 3,\n \"_results\": [\n {\n \"sourceId\": \"http://music.com/source_albums\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_bands\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n },\n {\n \"sourceId\": \"http://music.com/source_songs\",\n \"projectionId\": \"http://music.com/es\",\n \"offset\": {\n \"@type\": \"NoOffset\"\n }\n }\n ]\n}","title":"Restart projection"},{"location":"/docs/delta/api/views/composite-sink.html","text":"","title":"Composite Sinks"},{"location":"/docs/delta/api/views/composite-sink.html#composite-sinks","text":"A Composite Sink handles the following steps of composite view indexing\nQuerying for the graphs of resources in the Blazegraph common namespace of the view Converting the obtained graphs into a format that can be pushed to a target sink Finally, pushing the resources to the target sink\nThese steps can be implemented in different ways. In Nexus Delta, there are two kinds of Composite Sink that can be selected via configuration.\nSingle Composite Sink Batch Composite Sink","title":"Composite Sinks"},{"location":"/docs/delta/api/views/composite-sink.html#single-composite-sink","text":"By default, Nexus Delta will use the Single Composite Sink. This sink performs one query to the Blazegraph common namespace for each resource in the project. The queries are done in chronological order (by the updatedAt time of the resources).\nWe recommend reading through the search configuration example use case and the Composite View API reference to learn more about Composite Views.","title":"Single Composite Sink"},{"location":"/docs/delta/api/views/composite-sink.html#batch-composite-sink","text":"Starting with Delta 1.9, it is possible to configure Nexus Delta to use a Batch Composite Sink. This implementation of the Composite Sink can query the Blazegraph common namespace for multiple resource IDs at the same time.\nNote We recommend to start using Composite Views with the default Single Composite Sink. Once you have a good understanding of it, the Batch Composite Sink can be used to enhance the performance of your deployment.","title":"Batch Composite Sink"},{"location":"/docs/delta/api/views/composite-sink.html#configuring-the-batch-composite-sink","text":"In order to enable the Batch Composite Sink, configure the following Nexus Delta property:\nplugins.composite-views.sink-config = batch\nFurthermore, you can configure the maximum size of a batch and the maximum interval using:\nplugins.composite-views.{projection-plugin}-batch.max-elements = {max-elements}\nplugins.composite-views.{projection-plugin}-batch.max-interval = {max-interval}\nwhere:\n{projection-plugin} is either elasticsearch or blazegraph. The batching options of a Composite Sink can be set separately for each target type. {max-elements} is the maximum number of elements to batch at once (defaults to 10) {max-interval} is the maximum interval of time to wait for {max-elements} elements","title":"Configuring the Batch Composite Sink"},{"location":"/docs/delta/api/views/composite-sink.html#how-to-write-a-sparql-construct-query-for-the-batch-composite-sink","text":"In order to use the Batch Composite Sink successfully, it is necessary to rework some aspects of a regular SPARQL construct query. We explain the changes through an example.","title":"How to write a SPARQL construct query for the Batch Composite Sink"},{"location":"/docs/delta/api/views/composite-sink.html#example","text":"Suppose we are in a situation where Composite Views are using the Single Composite Sink and have the following query:\nPREFIX schema: \nPREFIX nxv: \nCONSTRUCT {\n ?id nxv:name ?name ;\n nxv:age ?age .\n nxv:parent ?parent .\n} WHERE {\n BIND({resource_id} AS ?id) .\n ?id schema:name ?name .\n \n OPTIONAL { ?id schema:age ?age }\n OPTIONAL { ?id schema:parent ?parent . }\n}\nUsing the default Single Composite Sink, Nexus Delta will query the resources Alice and Bob individually and obtain the following n-triples from Blazegraph:\n \n \n \n <42>\nIn particular, note that when looking at the graph of Alice, we do not know the age of Bob.\nThe first change to introduce in order to make this query work with batches of resources is to replace the BIND({resource_id} AS ?id) . with VALUES ?id { {resources_id} }. Nexus Delta will use this template to replace {resource_id} with multiple resource in case it receives a batch of more than one element. The query is now:\nPREFIX schema: \nPREFIX nxv: \nCONSTRUCT {\n ?id nxv:name ?name ;\n nxv:age ?age .\n nxv:parent ?parent .\n} WHERE {\n VALUES ?id { {resource_id} } .\n ?id schema:name ?name .\n \n OPTIONAL { ?id schema:age ?age }\n OPTIONAL { ?id schema:parent ?parent . }\n}\nWith the Batch Composite Sink enabled, if Alice and Bob are batched together, this query will result in the following triples:\n \n \n \n <42>\nNote how the results are the merged result of the individual queries. While we were able to query several resources simultaneously, we are now facing a framing problem. If we try to frame http://people.com/Alice, its graph now contains more information than before; it will now include the age of Bob, something that we did not request.\nIn order to solve this problem, we will introduce aliasing for the root resource IDs. The query will now become:\nPREFIX schema: \nPREFIX nxv: \nCONSTRUCT {\n ?alias nxv:name ?name ;\n nxv:age ?age .\n nxv:parent ?parent .\n} WHERE {\n VALUES ?id { {resource_id} } .\n BIND(IRI(CONCAT(STR(?id), '/alias')) AS ?alias) .\n \n ?id schema:name ?name .\n \n OPTIONAL { ?id schema:age ?age }\n OPTIONAL { ?id schema:parent ?parent }\n}\nWith this query, a batch query for both Alice and Bob will now yield:\n \n \n \n <42>\nYou can see that the root node of Bob’s graph is now http://people.com/Bob/alias, while Alice’s parent is http://people.com/Bob. This distinction ensures that we cannot get Bob’s age by looking at Alice’s graph, thus reproducing the behavior that we had with the Single Composite Sink.\nNexus Delta takes care of framing these results so that the framed documents will be the same as with the Single Composite Sink, and will not contain any alias keyword. For example, for the resource http://people.com/Alice, Nexus Delta will obtain its graph by looking at the http://people.com/Alice/alias root node, and use the resulting graph (removing the /alias part) for JSON-LD framing.","title":"Example"},{"location":"/docs/delta/api/views/composite-sink.html#summary","text":"To use the Batch Composite Sink the following changes are necessary:\nBIND({resource_id} AS ?id) must become VALUES ?id { {resource_id} } to allow for batches of resources to be queried from Blazegraph. BIND(IRI(CONCAT(STR(?id), '/alias')) AS ?alias) needs to be added, and the relevant (?id) “root nodes” replaced by ?alias in the CONSTRUCT part of the query. This is done in order to avoid any clashes between the graphs of several resources. Do note that in case you have several “root nodes” in the CONSTRUCT part of your construct query, you might need several aliases.","title":"Summary"},{"location":"/docs/delta/api/storages-api.html","text":"","title":"Storages"},{"location":"/docs/delta/api/storages-api.html#storages","text":"Storages are rooted in the /v1/storages/{org_label}/{project_label} collection and are used to describe where files are physically stored.\nEach storage belongs to a project identifier by the label {project_label} inside an organization identifier by the label {org_label}.\nAuthorization notes To read or modify storages, the caller must have respectively storages/read or storages/write permissions on the current path of the project or its ancestors. Please visit Authentication & authorization section to learn more about it.","title":"Storages"},{"location":"/docs/delta/api/storages-api.html#payload","text":"There are several types (or classes) of storages, that represent different kinds of backends.","title":"Payload"},{"location":"/docs/delta/api/storages-api.html#local-disk-storage","text":"This is the most basic storage type. It is backed by the local file-system (i.e. where the Nexus deployment is running) and rooted in an arbitrary path.\nUpon project creation, a default disk storage is initialized automatically, so that users can start uploading resource attachments right away. This resource can be accessed using the api mapping alias defaultStorage.\nWhile typically not necessary, you can manage and create additional disk storages, provided you are aware of the local file-system structure and that Nexus has read and write access to the target folder.\n{\n \"@type\": \"DiskStorage\",\n \"default\": \"{default}\",\n \"volume\": \"{volume}\",\n \"readPermission\": \"{read_permission}\",\n \"writePermission\": \"{write_permission}\",\n \"capacity\": \"{capacity}\",\n \"maxFileSize\": {max_file_size}\n}\n…where\n{default}: Boolean - the flag to decide whether this storage is going to become the default storage for the target project or not. {volume}: String - the path to the local file-system volume where files using this storage will be stored. This field is optional, defaulting to the configuration flag plugins.storage.storages.disk.default-volume (/tmp). {read_permission}: String - the permission a client must have in order to fetch files using this storage. This field is optional, defaulting to the configuration flag plugins.storage.storages.disk.default-read-permission (resources/read). {write_permission}: String - the permission a client must have in order to create files using this storage. This field is optional, defaulting to the configuration flag plugins.storage.storages.disk.default-write-permission (files/write). {capacity}: Long - the maximum allocated capacity in bytes for storing files using this storage. This field is optional, defaulting to the configuration flag plugins.storage.storages.disk.default-capacity (None). {max_file_size}: Long - the maximum allowed size in bytes for files uploaded using this storage. This field is optional, defaulting to the configuration flag plugins.storage.storages.disk.default-max-file-size (10G).","title":"Local disk storage"},{"location":"/docs/delta/api/storages-api.html#remote-disk-storage","text":"Warning The Remote disk storage and it remote service implementation are now deprecated and will be removed in an upcoming release.\nThis storage type relies on a remote HTTP service that exposes basic file operations on an underlying POSIX file-system. This is particularly handy if your organization is running some kind of distributed network storage (such as Ceph, Gluster, GPFS, Lustre, …) that you don’t want to mount directly on the system where Nexus Delta runs.\nWhile there’s no formal specification for this service, you can check out or deploy our own implementation: Nexus remote storage service.\nIn order to be able to use this storage, the configuration flag plugins.storage.storages.remote-disk.enabled should be set to true. More information about configuration\n{\n \"@type\": \"RemoteDiskStorage\",\n \"default\": \"{default}\",\n \"endpoint\": \"{endpoint}\",\n \"folder\": \"{folder}\",\n \"readPermission\": \"{read_permission}\",\n \"writePermission\": \"{write_permission}\",\n \"maxFileSize\": {max_file_size}\n}\n…where\n{default}: Boolean - the flag to decide whether this storage is going to become the default storage for the target project or not. {endpoint}: Uri - the endpoint where the storage service is listening to requests. This field is optional, defaulting to the configuration flag plugins.storage.storages.remote-disk.default-endpoint. {folder}: String - the storage service bucket where files using this storage are going to be saved. {read_permission}: String - the permission a client must have in order to fetch files using this storage. This field is optional, defaulting to the configuration flag plugins.storage.storages.remote-disk.default-read-permission (resources/read). {write_permission}: String - the permission a client must have in order to create files using this storage. This field is optional, defaulting to the configuration flag plugins.storage.storages.remote-disk.default-write-permission (files/write). {max_file_size}: Long - the maximum allowed size in bytes for files uploaded using this storage. This field is optional, defaulting to the configuration flag plugins.storage.storages.remote-disk.default-max-file-size (10G).","title":"Remote disk storage"},{"location":"/docs/delta/api/storages-api.html#amazon-s3-compatible-storage","text":"This storage type allows the use of an internal or external blob-store that is compatible with the Amazon S3 API.\nIn order to be able to use this storage, the configuration flag plugins.storage.storages.amazon.enabled should be set to true.\n{\n \"@type\": \"S3Storage\",\n \"default\": \"{default}\",\n \"endpoint\": \"{endpoint}\",\n \"region\": \"{region}\",\n \"readPermission\": \"{read_permission}\",\n \"writePermission\": \"{write_permission}\",\n \"maxFileSize\": {max_file_size}\n}\n…where\n{default}: Boolean - the flag to decide whether this storage is going to become the default storage for the target project or not. {endpoint}: Uri - the Amazon S3 compatible service endpoint. This field is optional, defaulting to the configuration flag plugins.storage.storages.amazon.default-endpoint. {region}: String - the Amazon S3 compatible region. This field is optional, defaulting to the S3 default region configuration. {read_permission}: String - the permission a client must have in order to fetch files using this storage. This field is optional, defaulting to the configuration flag plugins.storage.storages.amazon.default-read-permission (resources/read). {write_permission}: String - the permission a client must have in order to create files using this storage. This field is optional, defaulting to the configuration flag plugins.storage.storages.amazon.default-write-permission (files/write). {max_file_size}: Long - the maximum allowed size in bytes for files uploaded using this storage. This field is optional, defaulting to the configuration flag plugins.storage.storages.amazon.default-max-file-size (10G).","title":"Amazon S3 compatible storage"},{"location":"/docs/delta/api/storages-api.html#indexing","text":"All the API calls modifying a storage (creation, update, tagging, deprecation) can specify whether the storage should be indexed synchronously or in the background. This behaviour is controlled using indexing query param, which can be one of two values:\nasync - (default value) the storage will be indexed asynchronously sync - the storage will be indexed synchronously and the API call won’t return until the indexing is finished","title":"Indexing"},{"location":"/docs/delta/api/storages-api.html#create-using-post","text":"POST /v1/storages/{org_label}/{project_label}\n {...}\nJson payload:\nIf an @id value is found in the payload, it will be used. If an @id value is not found in the payload, one will be generated as follows: base:{UUID}. The base is the prefix defined on the storage’s project ({project_label}).\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/storages/myorg/myproject\" -d \\\n '{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/local\",\n \"@type\": \"DiskStorage\",\n \"default\": false\n }' Payload copysource{\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/local\",\n \"@type\": \"DiskStorage\",\n \"default\": false\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/storages-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/local\",\n \"@type\": [\n \"Storage\",\n \"DiskStorage\"\n ],\n \"_algorithm\": \"SHA-256\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_createdAt\": \"2021-05-11T12:21:19.732Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/storages/myorg/myproject/nxv:local/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/storages/myorg/myproject/nxv:local/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/storages/myorg/myproject/nxv:local\",\n \"_updatedAt\": \"2021-05-11T12:21:19.732Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Create using POST"},{"location":"/docs/delta/api/storages-api.html#create-using-put","text":"This alternative endpoint to create a storage is useful in case the json payload does not contain an @id but you want to specify one. The @id will be specified in the last segment of the endpoint URI.\nPUT /v1/storages/{org_label}/{project_label}/{storage_id}\n {...}\nNote that if the payload contains an @id different from the {storage_id}, the request will fail.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/storages/myorg/myproject/remote\" -d \\\n '{\n \"@type\": \"RemoteDiskStorage\",\n \"default\": false,\n \"folder\": \"test\"\n }' Payload copysource{\n \"@type\": \"RemoteDiskStorage\",\n \"default\": false,\n \"folder\": \"test\"\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/storages-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\n \"@type\": [\n \"Storage\",\n \"RemoteDiskStorage\"\n ],\n \"_algorithm\": \"SHA-256\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_createdAt\": \"2021-05-11T12:22:19.195Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/storages/myorg/myproject/remote/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/storages/myorg/myproject/remote/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/storages/myorg/myproject/remote\",\n \"_updatedAt\": \"2021-05-11T12:22:19.195Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Create using PUT"},{"location":"/docs/delta/api/storages-api.html#update","text":"This operation overrides the payload.\nIn order to ensure a client does not perform any changes to a storage without having had seen the previous revision of the storage, the last revision needs to be passed as a query parameter.\nPUT /v1/storages/{org_label}/{project_label}/{storage_id}?rev={previous_rev}\n {...}\n… where {previous_rev} is the last known revision number for the storage.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/storages/myorg/myproject/remote?rev=1\" -d \\\n '{\n \"@type\": \"RemoteDiskStorage\",\n \"default\": false,\n \"folder\": \"test-updated\"\n }' Payload copysource{\n \"@type\": \"RemoteDiskStorage\",\n \"default\": false,\n \"folder\": \"test-updated\"\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/storages-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\n \"@type\": [\n \"Storage\",\n \"RemoteDiskStorage\"\n ],\n \"_algorithm\": \"SHA-256\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_createdAt\": \"2021-05-11T12:22:19.195Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/storages/myorg/myproject/remote/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/storages/myorg/myproject/remote/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/storages/myorg/myproject/remote\",\n \"_updatedAt\": \"2021-05-11T12:24:24.242Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Update"},{"location":"/docs/delta/api/storages-api.html#tag","text":"Links a storage revision to a specific name.\nTagging a storage is considered to be an update as well.\nPOST /v1/storages/{org_label}/{project_label}/{storage_id}/tags?rev={previous_rev}\n {\n \"tag\": \"{name}\",\n \"rev\": {rev}\n }\n… where\n{previous_rev}: Number - the last known revision for the storage. {name}: String - label given to the storage at specific revision. {rev}: Number - the revision to link the provided {name}.\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/storages/myorg/myproject/remote/tags?rev=2\" -d \\\n '{\n \"tag\": \"mytag\",\n \"rev\": 1\n }' Payload copysource{\n \"tag\": \"mytag\",\n \"rev\": 1\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/storages-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\n \"@type\": [\n \"Storage\",\n \"RemoteDiskStorage\"\n ],\n \"_algorithm\": \"SHA-256\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_createdAt\": \"2021-05-11T12:22:19.195Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/storages/myorg/myproject/remote/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/storages/myorg/myproject/remote/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/storages/myorg/myproject/remote\",\n \"_updatedAt\": \"2021-05-11T12:28:08.479Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Tag"},{"location":"/docs/delta/api/storages-api.html#deprecate","text":"Locks the storage, so no further operations can be performed. It will also not be taken into account by the default storage selection mechanism.\nDeprecating a storage is considered to be an update as well.\nDELETE /v1/storages/{org_label}/{project_label}/{storage_id}?rev={previous_rev}\n… where {previous_rev} is the last known revision number for the storage.\nExample\nRequest copysourcecurl -X DELETE \\\n \"http://localhost:8080/v1/storages/myorg/myproject/remote?rev=3\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/storages-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\n \"@type\": [\n \"Storage\",\n \"RemoteDiskStorage\"\n ],\n \"_algorithm\": \"SHA-256\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_createdAt\": \"2021-05-11T12:22:19.195Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_incoming\": \"http://localhost:8080/v1/storages/myorg/myproject/remote/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/storages/myorg/myproject/remote/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 4,\n \"_self\": \"http://localhost:8080/v1/storages/myorg/myproject/remote\",\n \"_updatedAt\": \"2021-05-11T12:29:27.821Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}","title":"Deprecate"},{"location":"/docs/delta/api/storages-api.html#fetch","text":"GET /v1/storages/{org_label}/{project_label}/{storage_id}?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/storages/myorg/myproject/remote\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/storages.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\n \"@type\": [\n \"Storage\",\n \"RemoteDiskStorage\"\n ],\n \"default\": false,\n \"endpoint\": \"http://localhost:8084/v1\",\n \"folder\": \"test-updated\",\n \"maxFileSize\": 10737418240,\n \"readPermission\": \"resources/read\",\n \"writePermission\": \"files/write\",\n \"_algorithm\": \"SHA-256\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_createdAt\": \"2021-05-11T12:22:19.195Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_incoming\": \"http://localhost:8080/v1/storages/myorg/myproject/remote/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/storages/myorg/myproject/remote/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 4,\n \"_self\": \"http://localhost:8080/v1/storages/myorg/myproject/remote\",\n \"_updatedAt\": \"2021-05-11T12:29:27.821Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n}\nIf the redirect to Fusion feature is enabled and if the Accept header is set to text/html, a redirection to the fusion representation of the resource will be returned.","title":"Fetch"},{"location":"/docs/delta/api/storages-api.html#fetch-original-payload","text":"GET /v1/storages/{org_label}/{project_label}/{storage_id}/source?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/storages/myorg/myproject/remote/source\" Response copysource{\n \"@type\": \"RemoteDiskStorage\",\n \"default\": false,\n \"folder\": \"test-updated\"\n}","title":"Fetch original payload"},{"location":"/docs/delta/api/storages-api.html#fetch-tags","text":"Retrieves all the tags available for the {storage_id}.\nGET /v1/storages/{org_label}/{project_label}/{storage_id}/tags?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision of the tags to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag of the tags to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/storages/myorg/myproject/remote/tags\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/tags.json\",\n \"tags\": [\n {\n \"rev\": 1,\n \"tag\": \"mytag\"\n }\n ]\n}","title":"Fetch tags"},{"location":"/docs/delta/api/storages-api.html#list","text":"There are three available endpoints to list storages in different scopes.","title":"List"},{"location":"/docs/delta/api/storages-api.html#within-a-project","text":"GET /v1/storages/{org_label}/{project_label}?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within a project"},{"location":"/docs/delta/api/storages-api.html#within-an-organization","text":"This operation returns only storages from projects defined in the organisation {org_label} and where the caller has the resources/read permission.\nGET /v1/storages/{org_label}?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within an organization"},{"location":"/docs/delta/api/storages-api.html#within-all-projects","text":"This operation returns only storages from projects where the caller has the resources/read permission.\nGET /v1/storages?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within all projects"},{"location":"/docs/delta/api/storages-api.html#parameter-description","text":"{from}: Number - is the parameter that describes the offset for the current query; defaults to 0 {size}: Number - is the parameter that limits the number of results; defaults to 20 {deprecated}: Boolean - can be used to filter the resulting storages based on their deprecation status {rev}: Number - can be used to filter the resulting storages based on their revision value {type}: Iri - can be used to filter the resulting storages based on their @type value. This parameter can appear multiple times, filtering further the @type value. {createdBy}: Iri - can be used to filter the resulting storages based on their creator {updatedBy}: Iri - can be used to filter the resulting storages based on the person which performed the last update {search}: String - can be provided to select only the storages in the collection that have attribute values matching (containing) the provided string {sort}: String - can be used to sort storages based on a payloads’ field. This parameter can appear multiple times to enable sorting by multiple fields. The default is done by _createdBy and @id. {aggregations}: Boolean - if true then the response will only contain aggregations of the @type and _project fields; defaults to false. See Aggregations.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/storages/myorg/myproject\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/search-metadata.json\"\n ],\n \"_total\": 3,\n \"_results\": [\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"@type\": [\n \"Storage\",\n \"DiskStorage\"\n ],\n \"_algorithm\": \"SHA-256\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_createdAt\": \"2021-05-11T12:21:05.781Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/internal/users/delta\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/storages/myorg/myproject/defaultStorage/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/storages/myorg/myproject/defaultStorage/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/storages/myorg/myproject/defaultStorage\",\n \"_updatedAt\": \"2021-05-11T12:21:05.781Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/internal/users/delta\"\n },\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/local\",\n \"@type\": [\n \"Storage\",\n \"DiskStorage\"\n ],\n \"_algorithm\": \"SHA-256\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_createdAt\": \"2021-05-11T12:21:19.732Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_incoming\": \"http://localhost:8080/v1/storages/myorg/myproject/nxv:local/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/storages/myorg/myproject/nxv:local/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/storages/myorg/myproject/nxv:local\",\n \"_updatedAt\": \"2021-05-11T12:21:19.732Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n },\n {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\n \"@type\": [\n \"Storage\",\n \"RemoteDiskStorage\"\n ],\n \"_algorithm\": \"SHA-256\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/storages.json\",\n \"_createdAt\": \"2021-05-11T12:22:19.195Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_incoming\": \"http://localhost:8080/v1/storages/myorg/myproject/remote/incoming\",\n \"_outgoing\": \"http://localhost:8080/v1/storages/myorg/myproject/remote/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 4,\n \"_self\": \"http://localhost:8080/v1/storages/myorg/myproject/remote\",\n \"_updatedAt\": \"2021-05-11T12:29:27.821Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\"\n }\n ]\n}","title":"Parameter description"},{"location":"/docs/delta/api/storages-api.html#server-sent-events","text":"From Delta 1.5, it is possible to fetch SSEs for all storages or just storages in the scope of an organization or a project.\nGET /v1/storages/events # for all storage events in the application\nGET /v1/storages/{org_label}/events # for storage events in the given organization\nGET /v1/storages/{org_label}/{project_label}/events # for storage events in the given project\nThe caller must have respectively the events/read permission on /, {org_label} and {org_label}/{project_label}.\n{org_label}: String - the selected organization for which the events are going to be filtered {project_label}: String - the selected project for which the events are going to be filtered Last-Event-Id: String - optional HTTP Header that identifies the last consumed resource event. It can be used for cases when a client does not want to retrieve the whole event stream, but to start after a specific event.\nNote The event type for storages SSEs have been changed so that it is easier to distinguish them from other types of resources.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/storages/events\" Response copysourcedmontero:~$ curl \"http://localhost:8080/v1/storages/events\"\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/storages.json\"],\"@type\":\"StorageCreated\",\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/storages.json\",\"_instant\":\"2021-05-11T12:21:05.781Z\",\"_organizationUuid\":\"ea8c261e-b53f-45ec-8bb8-d7cbce0918cf\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"4e9d83e3-c521-46d9-83d1-f552d9a636d4\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\"_rev\":1,\"_source\":{\"@id\":\"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\"@type\":\"https://bluebrain.github.io/nexus/vocabulary/DiskStorage\",\"default\":true},\"_storageId\":\"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\"_subject\":\"http://localhost:8080/v1/realms/internal/users/delta\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/Storage\",\"https://bluebrain.github.io/nexus/vocabulary/DiskStorage\"]}\nevent:StorageCreated\nid:5c156db0-b253-11eb-b48a-9d94c78eda08\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/storages.json\"],\"@type\":\"StorageCreated\",\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/storages.json\",\"_instant\":\"2021-05-11T12:21:19.732Z\",\"_organizationUuid\":\"ea8c261e-b53f-45ec-8bb8-d7cbce0918cf\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"4e9d83e3-c521-46d9-83d1-f552d9a636d4\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/local\",\"_rev\":1,\"_source\":{\"@id\":\"https://bluebrain.github.io/nexus/vocabulary/local\",\"@type\":\"DiskStorage\",\"default\":false},\"_storageId\":\"https://bluebrain.github.io/nexus/vocabulary/local\",\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/Storage\",\"https://bluebrain.github.io/nexus/vocabulary/DiskStorage\"]}\nevent:StorageCreated\nid:642ccf20-b253-11eb-b48a-9d94c78eda08\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/storages.json\"],\"@type\":\"StorageCreated\",\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/storages.json\",\"_instant\":\"2021-05-11T12:22:19.195Z\",\"_organizationUuid\":\"ea8c261e-b53f-45ec-8bb8-d7cbce0918cf\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"4e9d83e3-c521-46d9-83d1-f552d9a636d4\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\"_rev\":1,\"_source\":{\"@type\":\"RemoteDiskStorage\",\"default\":false,\"folder\":\"test\"},\"_storageId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/Storage\",\"https://bluebrain.github.io/nexus/vocabulary/RemoteDiskStorage\"]}\nevent:StorageCreated\nid:879fab30-b253-11eb-b48a-9d94c78eda08\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/storages.json\"],\"@type\":\"StorageUpdated\",\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/storages.json\",\"_instant\":\"2021-05-11T12:24:24.242Z\",\"_organizationUuid\":\"ea8c261e-b53f-45ec-8bb8-d7cbce0918cf\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"4e9d83e3-c521-46d9-83d1-f552d9a636d4\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\"_rev\":2,\"_source\":{\"@type\":\"RemoteDiskStorage\",\"default\":false,\"folder\":\"test-updated\"},\"_storageId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/Storage\",\"https://bluebrain.github.io/nexus/vocabulary/RemoteDiskStorage\"]}\nevent:StorageUpdated\nid:d2226030-b253-11eb-b48a-9d94c78eda08\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/storages.json\"],\"@type\":\"StorageTagAdded\",\"tag\":\"mytag\",\"targetRev\":1,\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/storages.json\",\"_instant\":\"2021-05-11T12:28:08.479Z\",\"_organizationUuid\":\"ea8c261e-b53f-45ec-8bb8-d7cbce0918cf\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"4e9d83e3-c521-46d9-83d1-f552d9a636d4\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\"_rev\":3,\"_storageId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/Storage\",\"https://bluebrain.github.io/nexus/vocabulary/RemoteDiskStorage\"]}\nevent:StorageTagAdded\nid:57ca3a00-b254-11eb-b48a-9d94c78eda08\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/storages.json\"],\"@type\":\"StorageDeprecated\",\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/storages.json\",\"_instant\":\"2021-05-11T12:29:27.821Z\",\"_organizationUuid\":\"ea8c261e-b53f-45ec-8bb8-d7cbce0918cf\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"4e9d83e3-c521-46d9-83d1-f552d9a636d4\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\"_rev\":4,\"_storageId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_types\":[\"https://bluebrain.github.io/nexus/vocabulary/Storage\",\"https://bluebrain.github.io/nexus/vocabulary/RemoteDiskStorage\"]}\nevent:StorageDeprecated\nid:8714dae0-b254-11eb-b48a-9d94c78eda08","title":"Server Sent Events"},{"location":"/docs/delta/api/storages-api.html#fetch-statistics","text":"Note This endpoint is experimental and the response structure might change in the future.\nGET /v1/storages/{org_label}/{project_label}/{storage_id}/statistics\nIt returns:\nthe number of physical files stored on the storage (files). the space used by this file on the given storage (spaceUsed).\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/storages/myorg/myproject/remote/statistics\" Response copysource{\n \"@context\" : \"https://bluebrain.github.io/nexus/contexts/storages.json\",\n \"files\" : 50,\n \"spaceUsed\" : 5000\n}","title":"Fetch statistics"},{"location":"/docs/delta/api/files-api.html","text":"","title":"Files"},{"location":"/docs/delta/api/files-api.html#files","text":"Files are attachment resources rooted in the /v1/files/{org_label}/{project_label}/ collection.\nEach file belongs to a project identifier by the label {project_label} inside an organization identifier by the label {org_label}.\nAuthorization notes When creating, updating and reading files, the caller must have the permissions defined on the storage associated to the file on the current path of the project or the ancestor paths. Please visit Authentication & authorization section to learn more about it.","title":"Files"},{"location":"/docs/delta/api/files-api.html#nexus-metadata","text":"When using the endpoints described on this page, the responses will contain global metadata described on the Nexus Metadata page. In addition, the following files specific metadata can be present\n_bytes: size of the file in bytes _digest: algorithm and checksum used for file integrity _filename: name of the file _location: path where the file is stored on the underlying storage _mediaType: MIME specifying the type of the file _origin: whether the file attributes resulted from an action taken by a client or the Nexus Storage Service _storage: @id, @type, and revision of the Storage used for the file _uuid: UUID of the file _project: address of the file’s project _incoming: address to query to obtain the list of incoming links _outgoing: address to query to obtain the list of outgoing links","title":"Nexus metadata"},{"location":"/docs/delta/api/files-api.html#indexing","text":"All the API calls modifying a file (creation, update, tagging, deprecation) can specify whether the file should be indexed synchronously or in the background. This behaviour is controlled using indexing query param, which can be one of two values:\nasync - (default value) the file will be indexed asynchronously sync - the file will be indexed synchronously and the API call won’t return until the indexing is finished","title":"Indexing"},{"location":"/docs/delta/api/files-api.html#create-using-post","text":"POST /v1/files/{org_label}/{project_label}?storage={storageId}&tag={tagName}\n… where - {storageId} selects a specific storage backend where the file will be uploaded. This field is optional. When not specified, the default storage of the project is used. - {tagName} an optional label given to the file on its first revision.\nThe json payload:\nIf the @id value is found on the payload, this @id will be used. If the @id value is not found on the payload, an @id will be generated as follows: base:{UUID}. The base is the prefix defined on the resource’s project ({project_label}).\nExample\nRequest copysourcecurl -X POST \\\n -F \"file=@/path/to/myfile.jpg;type=image/jpeg\" \\\n \"http://localhost:8080/v1/files/myorg/myproject\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/files.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/c581fdd4-6151-4430-aa33-f97ab6aa0b38\",\n \"@type\": \"File\",\n \"_bytes\": 8615,\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_createdAt\": \"2021-05-12T07:28:30.472Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_digest\": {\n \"_algorithm\": \"SHA-256\",\n \"_value\": \"057a3811ecfbeb99506c538d42474d1916f1d9b66965b9e9378a00eab1bb913a\"\n },\n \"_filename\": \"myfile.jpg\",\n \"_incoming\": \"http://localhost:8080/v1/files/myorg/myproject/c581fdd4-6151-4430-aa33-f97ab6aa0b38/incoming\",\n \"_mediaType\": \"image/jpeg\",\n \"_origin\": \"Client\",\n \"_outgoing\": \"http://localhost:8080/v1/files/myorg/myproject/c581fdd4-6151-4430-aa33-f97ab6aa0b38/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/files/myorg/myproject/c581fdd4-6151-4430-aa33-f97ab6aa0b38\",\n \"_storage\": {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"@type\": \"DiskStorage\",\n \"_rev\": 1\n },\n \"_updatedAt\": \"2021-05-12T07:28:30.472Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"9af35be9-b2f2-4734-9646-c3423a62685d\"\n}","title":"Create using POST"},{"location":"/docs/delta/api/files-api.html#create-using-put","text":"This alternative endpoint to create a resource is useful in case the json payload does not contain an @id but you want to specify one. The @id will be specified in the last segment of the endpoint URI.\nPUT /v1/files/{org_label}/{project_label}/{file_id}?storage={storageId}&tag={tagName}\n… where - {storageId} selects a specific storage backend where the file will be uploaded. This field is optional. When not specified, the default storage of the project is used. - {tagName} an optional label given to the file on its first revision.\nNote that if the payload contains an @id different from the {file_id}, the request will fail.\nExample\nRequest copysourcecurl -X PUT \\\n -F \"file=@/path/to/myfile.pdf;type=application/pdf\" \\\n \"http://localhost:8080/v1/files/myorg/myproject/myfile?storage=remote&tag=mytag\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/files.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/myfile\",\n \"@type\": \"File\",\n \"_bytes\": 5963969,\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_createdAt\": \"2021-05-12T07:30:54.576Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_digest\": {\n \"_algorithm\": \"SHA-256\",\n \"_value\": \"d14a7cb4602a2c6e1e7035809aa319d07a6d3c58303ecce7804d2e481cd4965f\"\n },\n \"_filename\": \"myfile.pdf\",\n \"_incoming\": \"http://localhost:8080/v1/files/myorg/myproject/myfile/incoming\",\n \"_location\": \"file:///tmp/test/nexus/myorg/myproject/c/b/5/c/4/d/8/e/myfile.pdf\",\n \"_mediaType\": \"application/pdf\",\n \"_origin\": \"Client\",\n \"_outgoing\": \"http://localhost:8080/v1/files/myorg/myproject/myfile/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/files/myorg/myproject/myfile\",\n \"_storage\": {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\n \"@type\": \"RemoteDiskStorage\",\n \"_rev\": 1\n },\n \"_updatedAt\": \"2021-05-12T07:30:54.576Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"cb5c4d8e-0189-49ab-b761-c92b2d4f49d2\"\n}","title":"Create using PUT"},{"location":"/docs/delta/api/files-api.html#link-using-post","text":"Brings a file existing in a storage to Nexus Delta as a file resource. This operation is supported for files using S3Storage and RemoteDiskStorage.\nPOST /v1/files/{org_label}/{project_label}?storage={storageId}&tag={tagName}\n {\n \"path\": \"{path}\",\n \"filename\": \"{filename}\",\n \"mediaType\": \"{mediaType}\"\n }\n{storageId}: String - Selects a specific storage backend that supports linking existing files. This field is optional. When not specified, the default storage of the project is used. {path}: String - the relative location (from the point of view of storage folder) on the remote storage where the file exists. {filename}: String - the name that will be given to the file during linking. This field is optional. When not specified, the original filename is retained. {mediaType}: String - the MediaType fo the file. This field is optional. When not specified, Nexus Delta will attempt to detectput {tagName} an optional label given to the linked file resource on its first revision.\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/files/myorg/myproject?storage=remote\" -d \\\n '{\n \"path\": \"relative/path/to/myfile.png\",\n \"filename\": \"myfile.png\",\n \"mediaType\": \"image/png\"\n }' Payload copysource{\n \"path\": \"relative/path/to/myfile.png\",\n \"filename\": \"myfile.png\",\n \"mediaType\": \"image/png\"\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/files.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/9ca0d270-35f0-4369-9c17-296fe36fd9a5\",\n \"@type\": \"File\",\n \"_bytes\": 1658857,\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_createdAt\": \"2021-05-12T07:56:42.991Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_digest\": {\n \"_value\": \"\"\n },\n \"_filename\": \"myfile.png\",\n \"_incoming\": \"http://localhost:8080/v1/files/myorg/myproject/9ca0d270-35f0-4369-9c17-296fe36fd9a5/incoming\",\n \"_location\": \"file:///tmp/test/nexus/myorg/myproject/3/4/c/4/9/1/a/1/myfile.png\",\n \"_mediaType\": \"image/png\",\n \"_origin\": \"Storage\",\n \"_outgoing\": \"http://localhost:8080/v1/files/myorg/myproject/9ca0d270-35f0-4369-9c17-296fe36fd9a5/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/files/myorg/myproject/9ca0d270-35f0-4369-9c17-296fe36fd9a5\",\n \"_storage\": {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\n \"@type\": \"RemoteDiskStorage\",\n \"_rev\": 1\n },\n \"_updatedAt\": \"2021-05-12T07:56:42.991Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"34c491a1-17ba-4726-bdf2-3b4e1e150750\"\n}","title":"Link using POST"},{"location":"/docs/delta/api/files-api.html#link-using-put","text":"Brings a file existing in a storage to Nexus Delta as a file resource. This operation is supported for files using S3Storage and RemoteDiskStorage.\nThis alternative endpoint allows to specify the resource @id.\nPUT /v1/files/{org_label}/{project_label}/{file_id}?storage={storageId}&tag={tagName}\n {\n \"path\": \"{path}\",\n \"filename\": \"{filename}\",\n \"mediaType\": \"{mediaType}\"\n }\n… where\n{storageId}: String - Selects a specific storage backend that supports linking existing files. This field is optional. When not specified, the default storage of the project is used. {path}: String - the relative location (from the point of view of the storage folder) on the remote storage where the file exists. {filename}: String - the name that will be given to the file during linking. This field is optional. When not specified, the original filename is retained. {mediaType}: String - the MediaType fo the file. This field is optional. When not specified, Nexus Delta will attempt to detect it. {tagName} an optional label given to the linked file resource on its first revision.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/files/myorg/myproject/mylink?storage=remote&tag=mytag\" -d \\\n '{\n \"path\": \"relative/path/to/myfile2.png\"\n }' Payload copysource{\n \"path\": \"relative/path/to/myfile2.png\"\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/files.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/mylink\",\n \"@type\": \"File\",\n \"_bytes\": 1658857,\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_createdAt\": \"2021-05-12T08:00:34.563Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_digest\": {\n \"_value\": \"\"\n },\n \"_filename\": \"myfile2.png\",\n \"_incoming\": \"http://localhost:8080/v1/files/myorg/myproject/mylink/incoming\",\n \"_location\": \"file:///tmp/test/nexus/myorg/myproject/6/6/0/4/9/9/d/9/myfile2.png\",\n \"_origin\": \"Storage\",\n \"_outgoing\": \"http://localhost:8080/v1/files/myorg/myproject/mylink/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/files/myorg/myproject/mylink\",\n \"_storage\": {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\n \"@type\": \"RemoteDiskStorage\",\n \"_rev\": 1\n },\n \"_updatedAt\": \"2021-05-12T08:00:34.563Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"660499d9-c522-4f90-beda-2d79e538ffce\"\n}","title":"Link using PUT"},{"location":"/docs/delta/api/files-api.html#update","text":"This operation overrides the file content.\nIn order to ensure a client does not perform any changes to a file without having had seen the previous revision of the file, the last revision needs to be passed as a query parameter.\nPUT /v1/files/{org_label}/{project_label}/{resource_id}?rev={previous_rev}\n… where {previous_rev} is the last known revision number for the resource.\nExample\nRequest copysourcecurl -X PUT \\\n -F \"file=@/path/to/myfile2.pdf;type=application/pdf\" \\\n \"http://localhost:8080/v1/files/myorg/myproject/myfile?rev=1\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/files.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/myfile\",\n \"@type\": \"File\",\n \"_bytes\": 13896460,\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_createdAt\": \"2021-05-12T07:30:54.576Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_digest\": {\n \"_algorithm\": \"SHA-256\",\n \"_value\": \"4c9f4292e3c0c5fc23cd60722adb8a1535f1dd7f0cf9203140d61fb889eef3cf\"\n },\n \"_filename\": \"myfile2.pdf\",\n \"_incoming\": \"http://localhost:8080/v1/files/myorg/myproject/myfile/incoming\",\n \"_mediaType\": \"application/pdf\",\n \"_origin\": \"Client\",\n \"_outgoing\": \"http://localhost:8080/v1/files/myorg/myproject/myfile/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/files/myorg/myproject/myfile\",\n \"_storage\": {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"@type\": \"DiskStorage\",\n \"_rev\": 1\n },\n \"_updatedAt\": \"2021-05-12T08:04:08.440Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"3e86d93a-c196-407d-a13c-cea7168e32e3\"\n}","title":"Update"},{"location":"/docs/delta/api/files-api.html#tag","text":"Links a file revision to a specific name.\nTagging a file is considered to be an update as well.\nPOST /v1/files/{org_label}/{project_label}/{file_id}/tags?rev={previous_rev}\n {\n \"tag\": \"{name}\",\n \"rev\": {rev}\n }\n… where\n{previous_rev}: is the last known revision number for the file. {name}: String - label given to the file at specific revision. {rev}: Number - the revision to link the provided {name}.\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/files/myorg/myproject/myfile/tags?rev=2\" -d \\\n '{\n \"tag\": \"mytag\",\n \"rev\": 1\n }' Payload copysource{\n \"tag\": \"mytag\",\n \"rev\": 1\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/files.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/myfile\",\n \"@type\": \"File\",\n \"_bytes\": 13896460,\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_createdAt\": \"2021-05-12T07:30:54.576Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_digest\": {\n \"_algorithm\": \"SHA-256\",\n \"_value\": \"4c9f4292e3c0c5fc23cd60722adb8a1535f1dd7f0cf9203140d61fb889eef3cf\"\n },\n \"_filename\": \"myfile2.pdf\",\n \"_incoming\": \"http://localhost:8080/v1/files/myorg/myproject/myfile/incoming\",\n \"_mediaType\": \"application/pdf\",\n \"_origin\": \"Client\",\n \"_outgoing\": \"http://localhost:8080/v1/files/myorg/myproject/myfile/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/files/myorg/myproject/myfile\",\n \"_storage\": {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"@type\": \"DiskStorage\",\n \"_rev\": 1\n },\n \"_updatedAt\": \"2021-05-12T08:07:55.442Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"3e86d93a-c196-407d-a13c-cea7168e32e3\"\n}","title":"Tag"},{"location":"/docs/delta/api/files-api.html#remove-tag","text":"Removes a given tag.\nRemoving a tag is considered to be an update as well.\nDELETE /v1/files/{org_label}/{project_label}/{file_id}/tags/{tag_name}?rev={previous_rev}\n… where\n{previous_rev}: is the last known revision number for the resource. {tag_name}: String - label of the tag to remove.\nExample\nRequest copysourcecurl -X DELETE \\\n \"http://localhost:8080/v1/files/myorg/myproj/myfile/tags/mytag?rev=2\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/files.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/myfile\",\n \"@type\": \"File\",\n \"_bytes\": 13896460,\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_createdAt\": \"2021-05-12T07:30:54.576Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_digest\": {\n \"_algorithm\": \"SHA-256\",\n \"_value\": \"4c9f4292e3c0c5fc23cd60722adb8a1535f1dd7f0cf9203140d61fb889eef3cf\"\n },\n \"_filename\": \"myfile2.pdf\",\n \"_incoming\": \"http://localhost:8080/v1/files/myorg/myproject/myfile/incoming\",\n \"_mediaType\": \"application/pdf\",\n \"_origin\": \"Client\",\n \"_outgoing\": \"http://localhost:8080/v1/files/myorg/myproject/myfile/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 3,\n \"_self\": \"http://localhost:8080/v1/files/myorg/myproject/myfile\",\n \"_storage\": {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"@type\": \"DiskStorage\",\n \"_rev\": 1\n },\n \"_updatedAt\": \"2021-05-12T08:07:55.442Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"3e86d93a-c196-407d-a13c-cea7168e32e3\"\n}","title":"Remove tag"},{"location":"/docs/delta/api/files-api.html#deprecate","text":"Locks the file, so no further operations can be performed.\nDeprecating a file is considered to be an update as well.\nDELETE /v1/files/{org_label}/{project_label}/{file_id}?rev={previous_rev}\n… where {previous_rev} is the last known revision number for the file.\nExample\nRequest copysourcecurl -X DELETE \\\n \"http://localhost:8080/v1/files/myorg/myproject/myfile?rev=3\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/files.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/myfile\",\n \"@type\": \"File\",\n \"_bytes\": 13896460,\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_createdAt\": \"2021-05-12T07:30:54.576Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_digest\": {\n \"_algorithm\": \"SHA-256\",\n \"_value\": \"4c9f4292e3c0c5fc23cd60722adb8a1535f1dd7f0cf9203140d61fb889eef3cf\"\n },\n \"_filename\": \"myfile2.pdf\",\n \"_incoming\": \"http://localhost:8080/v1/files/myorg/myproject/myfile/incoming\",\n \"_mediaType\": \"application/pdf\",\n \"_origin\": \"Client\",\n \"_outgoing\": \"http://localhost:8080/v1/files/myorg/myproject/myfile/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 4,\n \"_self\": \"http://localhost:8080/v1/files/myorg/myproject/myfile\",\n \"_storage\": {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"@type\": \"DiskStorage\",\n \"_rev\": 1\n },\n \"_updatedAt\": \"2021-05-12T08:09:23.658Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"3e86d93a-c196-407d-a13c-cea7168e32e3\"\n}","title":"Deprecate"},{"location":"/docs/delta/api/files-api.html#undeprecate","text":"Unlocks a previously deprecated file. Further operations can then be performed. The file will again be found when listing/querying.\nUndeprecating a file is considered to be an update as well.\nPUT /v1/file/{org_label}/{project_label}/{file_id}/undeprecate?rev={previous_rev}\n… where {previous_rev} is the last known revision number for the resource.\nExample\nRequest copysourcecurl -X PUT \\\n \"http://localhost:8080/v1/files/myorg/myproject/myfile/undeprecate?rev=4\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/files.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/myfile\",\n \"@type\": \"File\",\n \"_bytes\": 13896460,\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_createdAt\": \"2021-05-12T07:30:54.576Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_digest\": {\n \"_algorithm\": \"SHA-256\",\n \"_value\": \"4c9f4292e3c0c5fc23cd60722adb8a1535f1dd7f0cf9203140d61fb889eef3cf\"\n },\n \"_filename\": \"myfile2.pdf\",\n \"_incoming\": \"http://localhost:8080/v1/files/myorg/myproject/myfile/incoming\",\n \"_mediaType\": \"application/pdf\",\n \"_origin\": \"Client\",\n \"_outgoing\": \"http://localhost:8080/v1/files/myorg/myproject/myfile/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 5,\n \"_self\": \"http://localhost:8080/v1/files/myorg/myproject/myfile\",\n \"_storage\": {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"@type\": \"DiskStorage\",\n \"_rev\": 1\n },\n \"_updatedAt\": \"2021-05-12T08:09:23.658Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"3e86d93a-c196-407d-a13c-cea7168e32e3\"\n}","title":"Undeprecate"},{"location":"/docs/delta/api/files-api.html#fetch","text":"When fetching a file, the response format can be chosen through HTTP content negotiation. In order to fetch the file metadata, the client can use any of the following MIME types. However, in order to fetch the file content, the HTTP Accept header */* (or any MIME type that matches the file MediaType) should be provided.\nGET /v1/files/{org_label}/{project_label}/{file_id}?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest (binary) copysourcecurl -o myfile2.pdf \\\n -H \"Accept: */*\" \\\n \"http://localhost:8080/v1/files/myorg/myproject/myfile\" Request (metadata) copysourcecurl -H \"Accept: application/ld+json\" \\\n \"http://localhost:8080/v1/files/myorg/myproject/myfile\" Response (metadata) copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/files.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/myfile\",\n \"@type\": \"File\",\n \"_bytes\": 13896460,\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_createdAt\": \"2021-05-12T07:30:54.576Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": true,\n \"_digest\": {\n \"_algorithm\": \"SHA-256\",\n \"_value\": \"4c9f4292e3c0c5fc23cd60722adb8a1535f1dd7f0cf9203140d61fb889eef3cf\"\n },\n \"_filename\": \"myfile2.pdf\",\n \"_incoming\": \"http://localhost:8080/v1/files/myorg/myproject/myfile/incoming\",\n \"_mediaType\": \"application/pdf\",\n \"_origin\": \"Client\",\n \"_outgoing\": \"http://localhost:8080/v1/files/myorg/myproject/myfile/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 4,\n \"_self\": \"http://localhost:8080/v1/files/myorg/myproject/myfile\",\n \"_storage\": {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"@type\": \"DiskStorage\",\n \"_rev\": 1\n },\n \"_updatedAt\": \"2021-05-12T08:09:23.658Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"3e86d93a-c196-407d-a13c-cea7168e32e3\"\n}\nIf the redirect to Fusion feature is enabled and if the Accept header is set to text/html, a redirection to the fusion representation of the resource will be returned.","title":"Fetch"},{"location":"/docs/delta/api/files-api.html#fetch-tags","text":"Retrieves all the tags available for the {file_id}.\nGET /v1/files/{org_label}/{project_label}/{file_id}/tags?rev={rev}&tag={tag}\nwhere …\n{rev}: Number - the targeted revision of the tags to be fetched. This field is optional and defaults to the latest revision. {tag}: String - the targeted tag of the tags to be fetched. This field is optional.\n{rev} and {tag} fields cannot be simultaneously present.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/files/myorg/myproject/myfile/tags\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/tags.json\",\n \"tags\": [\n {\n \"rev\": 1,\n \"tag\": \"mytag\"\n }\n ]\n}","title":"Fetch tags"},{"location":"/docs/delta/api/files-api.html#list","text":"There are three available endpoints to list files in different scopes.","title":"List"},{"location":"/docs/delta/api/files-api.html#within-a-project","text":"GET /v1/files/{org_label}/{project_label}?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within a project"},{"location":"/docs/delta/api/files-api.html#within-an-organization","text":"This operation returns only files from projects defined in the organisation {org_label} and where the caller has the resources/read permission.\nGET /v1/files/{org_label}?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within an organization"},{"location":"/docs/delta/api/files-api.html#within-all-projects","text":"This operation returns only files from projects where the caller has the resources/read permission.\nGET /v1/files?from={from}\n &size={size}\n &deprecated={deprecated}\n &rev={rev}\n &type={type}\n &createdBy={createdBy}\n &updatedBy={updatedBy}\n &q={search}\n &sort={sort}\n &aggregations={aggregations}","title":"Within all projects"},{"location":"/docs/delta/api/files-api.html#parameter-description","text":"{from}: Number - is the parameter that describes the offset for the current query; defaults to 0 {size}: Number - is the parameter that limits the number of results; defaults to 20 {deprecated}: Boolean - can be used to filter the resulting files based on their deprecation status {rev}: Number - can be used to filter the resulting files based on their revision value {type}: Iri - can be used to filter the resulting files based on their @type value. This parameter can appear multiple times, filtering further the @type value. {createdBy}: Iri - can be used to filter the resulting files based on their creator {updatedBy}: Iri - can be used to filter the resulting files based on the person which performed the last update {search}: String - can be provided to select only the files in the collection that have attribute values matching (containing) the provided string {sort}: String - can be used to sort files based on a payloads’ field. This parameter can appear multiple times to enable sorting by multiple fields. The default is done by _createdBy and @id. {aggregations}: Boolean - if true then the response will only contain aggregations of the @type and _project fields; defaults to false. See Aggregations.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/files/myorg/myproject?deprecated=false\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/search-metadata.json\"\n ],\n \"_total\": 3,\n \"_results\": [\n {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/c581fdd4-6151-4430-aa33-f97ab6aa0b38\",\n \"@type\": \"File\",\n \"_bytes\": 8615,\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_createdAt\": \"2021-05-12T07:28:30.472Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_digest\": {\n \"_algorithm\": \"SHA-256\",\n \"_value\": \"057a3811ecfbeb99506c538d42474d1916f1d9b66965b9e9378a00eab1bb913a\"\n },\n \"_filename\": \"myfile.jpg\",\n \"_incoming\": \"http://localhost:8080/v1/files/myorg/myproject/c581fdd4-6151-4430-aa33-f97ab6aa0b38/incoming\",\n \"_mediaType\": \"image/jpeg\",\n \"_outgoing\": \"http://localhost:8080/v1/files/myorg/myproject/c581fdd4-6151-4430-aa33-f97ab6aa0b38/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 1,\n \"_self\": \"http://localhost:8080/v1/files/myorg/myproject/c581fdd4-6151-4430-aa33-f97ab6aa0b38\",\n \"_storage\": {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\n \"@type\": \"DiskStorage\",\n \"_rev\": 1\n },\n \"_updatedAt\": \"2021-05-12T07:28:30.472Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"9af35be9-b2f2-4734-9646-c3423a62685d\"\n },\n {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/9ca0d270-35f0-4369-9c17-296fe36fd9a5\",\n \"@type\": \"File\",\n \"_bytes\": 1658857,\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_createdAt\": \"2021-05-12T07:56:42.991Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_digest\": {\n \"_algorithm\": \"SHA-256\",\n \"_value\": \"e88fd2d76dd7c1a144c68e89a38c972251623dacf4c898154aae4c3b03eb4a84\"\n },\n \"_filename\": \"myfile.png\",\n \"_incoming\": \"http://localhost:8080/v1/files/myorg/myproject/9ca0d270-35f0-4369-9c17-296fe36fd9a5/incoming\",\n \"_location\": \"file:///tmp/test/nexus/myorg/myproject/3/4/c/4/9/1/a/1/myfile.png\",\n \"_mediaType\": \"image/png\",\n \"_outgoing\": \"http://localhost:8080/v1/files/myorg/myproject/9ca0d270-35f0-4369-9c17-296fe36fd9a5/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/files/myorg/myproject/9ca0d270-35f0-4369-9c17-296fe36fd9a5\",\n \"_storage\": {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\n \"@type\": \"RemoteDiskStorage\",\n \"_rev\": 1\n },\n \"_updatedAt\": \"2021-05-12T07:56:48.380Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"34c491a1-17ba-4726-bdf2-3b4e1e150750\"\n },\n {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/mylink\",\n \"@type\": \"File\",\n \"_bytes\": 1658857,\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/files.json\",\n \"_createdAt\": \"2021-05-12T08:00:34.563Z\",\n \"_createdBy\": \"http://localhost:8080/v1/anonymous\",\n \"_deprecated\": false,\n \"_digest\": {\n \"_algorithm\": \"SHA-256\",\n \"_value\": \"e88fd2d76dd7c1a144c68e89a38c972251623dacf4c898154aae4c3b03eb4a84\"\n },\n \"_filename\": \"myfile2.png\",\n \"_incoming\": \"http://localhost:8080/v1/files/myorg/myproject/mylink/incoming\",\n \"_location\": \"file:///tmp/test/nexus/myorg/myproject/6/6/0/4/9/9/d/9/myfile2.png\",\n \"_mediaType\": \"image/png\",\n \"_outgoing\": \"http://localhost:8080/v1/files/myorg/myproject/mylink/outgoing\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproject\",\n \"_rev\": 2,\n \"_self\": \"http://localhost:8080/v1/files/myorg/myproject/mylink\",\n \"_storage\": {\n \"@id\": \"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\n \"@type\": \"RemoteDiskStorage\",\n \"_rev\": 1\n },\n \"_updatedAt\": \"2021-05-12T08:00:40.790Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/anonymous\",\n \"_uuid\": \"660499d9-c522-4f90-beda-2d79e538ffce\"\n }\n ]\n}","title":"Parameter description"},{"location":"/docs/delta/api/files-api.html#server-sent-events","text":"From Delta 1.5, it is possible to fetch SSEs for all files or just files in the scope of an organization or a project.\nGET /v1/files/events # for all file events in the application\nGET /v1/files/{org_label}/events # for file events in the given organization\nGET /v1/files/{org_label}/{project_label}/events # for file events in the given project\nThe caller must have respectively the events/read permission on /, {org_label} and {org_label}/{project_label}.\n{org_label}: String - the selected organization for which the events are going to be filtered {project_label}: String - the selected project for which the events are going to be filtered Last-Event-Id: String - optional HTTP Header that identifies the last consumed resource event. It can be used for cases when a client does not want to retrieve the whole event stream, but to start after a specific event.\nNote The event type for files SSEs have been changed so that it is easier to distinguish them from other types of resources.\nExample\nRequest copysourcecurl -H \"Last-Event-Id: fc6078f0-b2f3-11eb-96af-ed7fe24c2ccf\" \\\n \"http://localhost:8080/v1/files/myorg/myproject/events\" Response copysourcedata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/files.json\"],\"@type\":\"FileCreated\",\"_attributes\":{\"_bytes\":1658857,\"_digest\":{\"_value\":\"\"},\"_filename\":\"myfile.png\",\"_location\":\"file:///tmp/test/nexus/myorg/myproject/3/4/c/4/9/1/a/1/myfile.png\",\"_mediaType\":\"image/png\",\"_origin\":\"Storage\",\"_uuid\":\"34c491a1-17ba-4726-bdf2-3b4e1e150750\"},\"_fileId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/9ca0d270-35f0-4369-9c17-296fe36fd9a5\",\"_instant\":\"2021-05-12T07:56:42.991Z\",\"_organizationUuid\":\"eeeb1e5e-1773-4a87-bf24-5412918a5938\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"7422af2a-8d64-4a6f-adfc-c1b4efb89f68\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/9ca0d270-35f0-4369-9c17-296fe36fd9a5\",\"_rev\":1,\"_storage\":{\"@id\":\"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\"@type\":\"RemoteDiskStorage\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\"_rev\":1},\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:FileCreated\nid:9750c010-b2f7-11eb-96af-ed7fe24c2ccf\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/files.json\"],\"@type\":\"FileAttributesUpdated\",\"_bytes\":1658857,\"_digest\":{\"_algorithm\":\"SHA-256\",\"_value\":\"e88fd2d76dd7c1a144c68e89a38c972251623dacf4c898154aae4c3b03eb4a84\"},\"_fileId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/9ca0d270-35f0-4369-9c17-296fe36fd9a5\",\"_instant\":\"2021-05-12T07:56:48.380Z\",\"_mediaType\":\"image/png\",\"_organizationUuid\":\"eeeb1e5e-1773-4a87-bf24-5412918a5938\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"7422af2a-8d64-4a6f-adfc-c1b4efb89f68\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/9ca0d270-35f0-4369-9c17-296fe36fd9a5\",\"_rev\":2,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:FileAttributesUpdated\nid:9a8229e0-b2f7-11eb-96af-ed7fe24c2ccf\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/files.json\"],\"@type\":\"FileCreated\",\"_attributes\":{\"_bytes\":1658857,\"_digest\":{\"_value\":\"\"},\"_filename\":\"myfile2.png\",\"_location\":\"file:///tmp/test/nexus/myorg/myproject/6/6/0/4/9/9/d/9/myfile2.png\",\"_origin\":\"Storage\",\"_uuid\":\"660499d9-c522-4f90-beda-2d79e538ffce\"},\"_fileId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/mylink\",\"_instant\":\"2021-05-12T08:00:34.563Z\",\"_organizationUuid\":\"eeeb1e5e-1773-4a87-bf24-5412918a5938\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"7422af2a-8d64-4a6f-adfc-c1b4efb89f68\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/mylink\",\"_rev\":1,\"_storage\":{\"@id\":\"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\"@type\":\"RemoteDiskStorage\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/remote\",\"_rev\":1},\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:FileCreated\nid:21564eb0-b2f8-11eb-96af-ed7fe24c2ccf\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/files.json\"],\"@type\":\"FileAttributesUpdated\",\"_bytes\":1658857,\"_digest\":{\"_algorithm\":\"SHA-256\",\"_value\":\"e88fd2d76dd7c1a144c68e89a38c972251623dacf4c898154aae4c3b03eb4a84\"},\"_fileId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/mylink\",\"_instant\":\"2021-05-12T08:00:40.790Z\",\"_mediaType\":\"image/png\",\"_organizationUuid\":\"eeeb1e5e-1773-4a87-bf24-5412918a5938\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"7422af2a-8d64-4a6f-adfc-c1b4efb89f68\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/mylink\",\"_rev\":2,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:FileAttributesUpdated\nid:2508f670-b2f8-11eb-96af-ed7fe24c2ccf\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/files.json\"],\"@type\":\"FileUpdated\",\"_attributes\":{\"_bytes\":13896460,\"_digest\":{\"_algorithm\":\"SHA-256\",\"_value\":\"4c9f4292e3c0c5fc23cd60722adb8a1535f1dd7f0cf9203140d61fb889eef3cf\"},\"_filename\":\"myfile2.pdf\",\"_mediaType\":\"application/pdf\",\"_origin\":\"Client\",\"_uuid\":\"3e86d93a-c196-407d-a13c-cea7168e32e3\"},\"_fileId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/myfile\",\"_instant\":\"2021-05-12T08:04:08.440Z\",\"_organizationUuid\":\"eeeb1e5e-1773-4a87-bf24-5412918a5938\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"7422af2a-8d64-4a6f-adfc-c1b4efb89f68\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/myfile\",\"_rev\":2,\"_storage\":{\"@id\":\"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\"@type\":\"DiskStorage\",\"_resourceId\":\"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\",\"_rev\":1},\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:FileUpdated\nid:a0cdd690-b2f8-11eb-96af-ed7fe24c2ccf\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/files.json\"],\"@type\":\"FileTagAdded\",\"tag\":\"mytag\",\"targetRev\":1,\"_fileId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/myfile\",\"_instant\":\"2021-05-12T08:07:55.442Z\",\"_organizationUuid\":\"eeeb1e5e-1773-4a87-bf24-5412918a5938\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"7422af2a-8d64-4a6f-adfc-c1b4efb89f68\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/myfile\",\"_rev\":3,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:FileTagAdded\nid:281b9830-b2f9-11eb-96af-ed7fe24c2ccf\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/files.json\"],\"@type\":\"FileDeprecated\",\"_fileId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/myfile\",\"_instant\":\"2021-05-12T08:09:23.658Z\",\"_organizationUuid\":\"eeeb1e5e-1773-4a87-bf24-5412918a5938\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_projectUuid\":\"7422af2a-8d64-4a6f-adfc-c1b4efb89f68\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/myfile\",\"_rev\":4,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:FileDeprecated\nid:5cb049b0-b2f9-11eb-96af-ed7fe24c2ccf","title":"Server Sent Events"},{"location":"/docs/delta/api/archives-api.html","text":"","title":"Archives"},{"location":"/docs/delta/api/archives-api.html#archives","text":"An archive is a collection of resources stored inside an archive file. The archiving format chosen for this purpose is ZIP. Archive resources are rooted in the /v1/archives/{org_label}/{project_label}/ collection.\nEach archive…\nbelongs to a project identifier by the label {project_label} inside an organization identifier by the label {org_label}\nAuthorization notes For both reading and modifying archives, the caller must have resources/read permissions on the current path of the project or the ancestor paths. Please visit Authentication & authorization section to learn more about it.","title":"Archives"},{"location":"/docs/delta/api/archives-api.html#lifecycle","text":"Contrarily to the rest of the platform resources, archives are not persisted resources, given their nature. Therefore there are no update, tag or deprecation operations available on archive resources.\nAn archive resource will be automatically erased from the system after certain after certain time. This time is configurable (config property plugins.archive.ephemeral.ttl) and it defaults to 5 hours.","title":"Lifecycle"},{"location":"/docs/delta/api/archives-api.html#payload","text":"{\n \"resources\" : [\n {\n \"@type\": \"Resource\",\n \"resourceId\": \"{resource_id}\",\n \"project\": \"{project}\",\n \"path\": \"{path}\",\n \"originalSource\": \"{originalSource}\",\n \"format\": \"{format}\",\n \"rev\": \"{rev}\",\n \"tag\": \"{tag}\"\n },\n {\n \"@type\": \"File\",\n \"resourceId\": \"{resource_id}\",\n \"project\": \"{project}\",\n \"path\": \"{path}\",\n \"rev\": \"{rev}\",\n \"tag\": \"{tag}\"\n },\n {\n \"@type\": \"FileSelf\",\n \"value\": \"{file_self}\",\n \"path\": \"{path}\",\n },\n {...} \n ]\n}\nwhere…\n{resource_id}: Iri - the @id value of the resource to be added to the archive. {file_self}: Uri - the _self value of the file to be added to the archive. This is the same as the http location of the file in the Delta API. {project}: String - the project (in the format ‘myorg/myproject’) where the specified resource belongs. This field is optional. It defaults to the current project. {path}: Path - the relative path on the archive where this resource is going to stored Optional / defaults to {project}/{resourceId}.json for a Resource type and {project}/{filename} for File type. The provided filename should not exceed 99 characters. {originalSource}: Boolean - flag to decide the whether to fetch the original payload or its compacted form. Only allowed for Resource type Optional and defaults to false Can not be present at the same time as format field. {format}: String - the format we expect for the resource in the archive. Only allowed for Resource type Optional and defaults to compacted Accepts the following values: source (to get the original payload), annotated-source (to get the original payload with metadata), compacted, expanded, n-triples, dot Can not be present at the same time as originalSource field. {rev}: Int - the revision of the resource. This field is optional. It defaults to the latest revision. {tag}: String - the tag of the resource. This field is optional. This field cannot be present at the same time as rev field.\nIn order to decide whether we want to select a resource or a file, the @type discriminator is used with the following possibilities:\nResource: targets a resource File: targets a file using its project and id FileSelf: targets a file using its address (_self)","title":"Payload"},{"location":"/docs/delta/api/archives-api.html#create-using-post","text":"This endpoint is used to describe the archive and to subsequently consume it.\nPOST /v1/archives/{org_label}/{project_label}\nThe json payload:\nIf the @id value is found on the payload, this @id will be used. If the @id value is not found on the payload, an @id will be generated as follows: base:{UUID}. The base is the prefix defined on the resource’s project ({project_label}).\nThe response will be an HTTP 303 Location redirect, which will point to the url where to consume the archive (ZIP).\nThe following diagram can help to understand the HTTP exchange\nExample\nThe following example shows how to create an archive containing 3 files. 2 of them are resources and the other is a file. As a response, the ZIP file will be offered.\nRequest copysourcecurl -L \\\n -X POST \\\n -H \"Content-Type: application/json\" -H \"Accept: */*\" \\\n \"http://localhost:8080/v1/archives/myorg/myproject\" \\\n -d '{\n \"resources\" : [\n {\n \"@type\": \"Resource\",\n \"resourceId\": \"http://localhost:8080/resource1\",\n \"rev\": 2\n },\n {\n \"@type\": \"Resource\",\n \"resourceId\": \"http://localhost:8080/resource2\",\n \"project\": \"myorg/myproject2\",\n \"originalSource\": false\n },\n {\n \"@type\": \"File\",\n \"resourceId\": \"http://localhost:8080/resource2\",\n \"project\": \"myorg/myproject2\",\n \"path\": \"my/custom/path/resource2.json\"\n }\n ]\n}\n' Payload copysource{\n \"resources\" : [\n {\n \"@type\": \"Resource\",\n \"resourceId\": \"http://localhost:8080/resource1\",\n \"rev\": 2\n },\n {\n \"@type\": \"Resource\",\n \"resourceId\": \"http://localhost:8080/resource2\",\n \"project\": \"myorg/myproject2\",\n \"format\": \"expanded\"\n },\n {\n \"@type\": \"File\",\n \"resourceId\": \"http://localhost:8080/resource2\",\n \"project\": \"myorg/myproject2\",\n \"path\": \"my/custom/path/resource2.json\"\n }\n ]\n}","title":"Create using POST"},{"location":"/docs/delta/api/archives-api.html#create-using-put","text":"This alternative endpoint to create an archive is useful in case you want to split the creation of the archive resource and the consumption of it.\nIt can also be useful in cases where one user wants to create the definition of the archive and share the link with another user who then is going to consume it.\nPUT /v1/archives/{org_label}/{project_label}/{archive_id}\nExample\nRequest copysourcecurl -X POST \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/archives/myorg/myproject/myarchive\" \\\n -d '{\n \"resources\" : [\n {\n \"@type\": \"Resource\",\n \"resourceId\": \"http://localhost:8080/resource1\",\n \"rev\": 2\n },\n {\n \"@type\": \"Resource\",\n \"resourceId\": \"http://localhost:8080/resource2\",\n \"project\": \"myorg/myproject2\",\n \"originalSource\": false\n },\n {\n \"@type\": \"File\",\n \"resourceId\": \"http://localhost:8080/resource2\",\n \"project\": \"myorg/myproject2\",\n \"path\": \"my/custom/path/resource2.json\"\n }\n ]\n}\n' Payload copysource{\n \"resources\" : [\n {\n \"@type\": \"Resource\",\n \"resourceId\": \"http://localhost:8080/resource1\",\n \"rev\": 2\n },\n {\n \"@type\": \"Resource\",\n \"resourceId\": \"http://localhost:8080/resource2\",\n \"project\": \"myorg/myproject2\",\n \"format\": \"expanded\"\n },\n {\n \"@type\": \"File\",\n \"resourceId\": \"http://localhost:8080/resource2\",\n \"project\": \"myorg/myproject2\",\n \"path\": \"my/custom/path/resource2.json\"\n }\n ]\n} Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/archives-metadata.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/archives/myorg/myproj/myarchive\",\n \"@type\": \"Archive\",\n \"_self\": \"http://localhost:8080/v1/archives/myorg/myproj/myarchive\",\n \"_constrainedBy\" : \"https://bluebrain.github.io/nexus/schemas/archives.json\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-05-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-05-17T14:54:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\"\n}\nNote that if the payload contains an @id different from the {archive_id}, the request will fail.","title":"Create using PUT"},{"location":"/docs/delta/api/archives-api.html#fetch","text":"When fetching an archive, the response format can be chosen through HTTP content negotiation. In order to fetch the archive metadata, the client can use any of the following MIME types. However, in order to fetch the archive content, the HTTP Accept header should be provided as application/zip.\n@@@\nWhen downloading the archive, it is possible to ignore resources that does not exist by appending the query parameter ignoreNotFound=true to the fetch link.\nGET /v1/archives/{org_label}/{project_label}/{archive_id}\nGET /v1/archives/{org_label}/{project_label}/{archive_id}?ignoreNotFound=true\nExample\nRequest (ZIP) copysourcecurl \"http://localhost:8080/v1/archives/myorg/myproject/myarchive\" \\\n -H \"Accept: application/x-zip\" \\\n -o output.zip Request (metadata) copysourcecurl \"http://localhost:8080/v1/archives/myorg/myproject/myarchive\" \\\n -H \"Accept: application/json\" Response copysource{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/archives.json\",\n \"https://bluebrain.github.io/nexus/contexts/metadata.json\"\n ],\n \"@id\": \"http://localhost:8080/v1/archives/myorg/myproj/myarchive\",\n \"@type\": \"Archive\",\n \"resources\" : [\n {\n \"@type\": \"Resource\",\n \"resourceId\": \"http://localhost:8080/resource1\",\n \"rev\": 2\n },\n {\n \"@type\": \"Resource\",\n \"resourceId\": \"http://localhost:8080/resource2\",\n \"project\": \"myorg/myproject2\",\n \"format\": \"expanded\"\n },\n {\n \"@type\": \"File\",\n \"resourceId\": \"http://localhost:8080/resource2\",\n \"project\": \"myorg/myproject2\",\n \"path\": \"my/custom/path/resource2.json\"\n }\n ],\n \"_self\": \"http://localhost:8080/v1/archives/myorg/myproj/myarchive\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/archives.json\",\n \"_project\": \"http://localhost:8080/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_deprecated\": false,\n \"_createdAt\": \"2021-05-17T14:54:42.939Z\",\n \"_createdBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2021-05-17T14:54:42.939Z\",\n \"_updatedBy\": \"http://localhost:8080/v1/realms/myrealm/users/john\",\n \"_expiresInSeconds\": 17530\n}","title":"Fetch"},{"location":"/docs/delta/api/search-api.html","text":"","title":"Global search"},{"location":"/docs/delta/api/search-api.html#global-search","text":"Nexus provides global search functionality across all projects through the search plugin.\nWarning The search plugin is experimental and its functionality and API can change without notice.\nFor instructions on how to configure global search in Nexus and how it works please visit the Search configuration page.","title":"Global search"},{"location":"/docs/delta/api/search-api.html#query","text":"POST /v1/search/query\n{payload}\n… where {payload} is a Elasticsearch query and the response is forwarded from the underlying Elasticsearch indices.\nThe endpoint filters the Elasticsearch projections from the underlying composite views and only returns results from indices to which user has access to, i.e. has views/query permission.","title":"Query"},{"location":"/docs/delta/api/search-api.html#configuration","text":"GET /v1/search/config\nThis endpoint returns the search configuration. The contents of plugins.search.fields config file is the payload of this response.","title":"Configuration"},{"location":"/docs/delta/api/graph-analytics-api.html","text":"","title":"Graph analytics"},{"location":"/docs/delta/api/graph-analytics-api.html#graph-analytics","text":"Graph analytics is a feature introduced by the graph-analytics plugin and rooted in the /v1/graph-analytics/{org_label}/{project_label} collection.\nIt runs for each project and it parses and breaks down non-deprecated resources to analyse their structure. For each of these resources, it extracts the following information:\nIts properties: their path and the type of the associated value Its relationships, that is to say the other resources in the same project it points to.\nAuthorization notes When reading graph analytics, the caller must have resources/read permissions on the current path of the project or the ancestor paths. Please visit Authentication & authorization section to learn more about it.\nNote The described endpoints are experimental and the responses structure might change in the future.","title":"Graph analytics"},{"location":"/docs/delta/api/graph-analytics-api.html#fetch-relationships","text":"Obtains all the @type relationships and their counts - defined by nodes and edges - existing on a project.\nThe edges are the properties linking different nodes, and the nodes are the resources containing a certain @type.\nGET /v1/graph-analytics/{org_label}/{project_label}/relationships\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/graph-analytics/myorg/myproj/relationships\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/relationships.json\",\n \"_edges\": [\n {\n \"_count\": 2,\n \"_path\": [\n {\n \"@id\": \"http://schema.org/brother\",\n \"_name\": \"brother\"\n }\n ],\n \"_source\": \"http://schema.org/Person\",\n \"_target\": \"http://schema.org/Person\"\n }\n ],\n \"_nodes\": [\n {\n \"@id\": \"http://schema.org/Person\",\n \"_count\": 3,\n \"_name\": \"Person\"\n },\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/View\",\n \"_count\": 2,\n \"_name\": \"View\"\n },\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/DiskStorage\",\n \"_count\": 1,\n \"_name\": \"DiskStorage\"\n },\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/ElasticSearchView\",\n \"_count\": 1,\n \"_name\": \"ElasticSearchView\"\n },\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/InProject\",\n \"_count\": 1,\n \"_name\": \"InProject\"\n },\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/Project\",\n \"_count\": 1,\n \"_name\": \"Project\"\n },\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/Resolver\",\n \"_count\": 1,\n \"_name\": \"Resolver\"\n },\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/SparqlView\",\n \"_count\": 1,\n \"_name\": \"SparqlView\"\n },\n {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/Storage\",\n \"_count\": 1,\n \"_name\": \"Storage\"\n }\n ]\n}","title":"Fetch relationships"},{"location":"/docs/delta/api/graph-analytics-api.html#fetch-properties","text":"Obtains all the @type properties and their counts.\nThe different between properties and relationships is that properties are enclosed inside the same resource, while relationships are statements between different resources.\nGET /v1/graph-analytics/{org_label}/{project_label}/properties/{type}\n…where {type} is an IRI defining for which @type we want to retrieve the properties.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/graph-analytics/myorg/myproj/properties/schema:Person\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/properties.json\",\n \"@id\": \"http://schema.org/Person\",\n \"_count\": 3,\n \"_name\": \"Person\",\n \"_properties\": [\n {\n \"@id\": \"http://schema.org/givenName\",\n \"_count\": 3,\n \"_name\": \"givenName\"\n },\n {\n \"@id\": \"http://schema.org/brother\",\n \"_count\": 3,\n \"_name\": \"brother\"\n },\n {\n \"@id\": \"http://schema.org/address\",\n \"_count\": 3,\n \"_name\": \"address\",\n \"_properties\": [\n {\n \"@id\": \"http://schema.org/zipcode\",\n \"_count\": 3,\n \"_name\": \"zipcode\"\n },\n {\n \"@id\": \"http://schema.org/street\",\n \"_count\": 3,\n \"_name\": \"street\"\n }\n ]\n }\n ]\n}","title":"Fetch properties"},{"location":"/docs/delta/api/graph-analytics-api.html#fetch-progress","text":"GET /v1/graph-analytics/{org_label}/{project_label}/progress\nIt returns:\nthe dateTime of the latest consumed event (lastProcessedEventDateTime). the number of consumed events (eventsCount). the number of consumed resources (resourcesCount). A resource might be made of multiple events (create, update, deprecate), so this number will always be smaller or equal to eventsCount.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/graph-analytics/myorg/myproj/progress\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/statistics.json\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 0,\n \"evaluatedEvents\": 8,\n \"failedEvents\": 0,\n \"lastEventDateTime\": \"2021-09-21T06:44:24.530Z\",\n \"lastProcessedEventDateTime\": \"2021-09-21T06:44:24.530Z\",\n \"processedEvents\": 8,\n \"remainingEvents\": 0,\n \"totalEvents\": 8\n}","title":"Fetch progress"},{"location":"/docs/delta/api/graph-analytics-api.html#search","text":"POST /v1/graph-analytics/{org_label}/{project_label}/_search\n {...}\nSearch documents that are in a given project’s Graph Analytics view.\nThe supported payload is defined on the ElasticSearch documentation.\nExample\nRequest copysourcecurl -XPOST \\\n-H \"Content-Type: application/json\" \\\n\"http://localhost:8080/v1/graph-analytics/myorg/myproj/_search\" -d \\\n'{\n \"query\": {\n \"term\": {\n \"@id\": \"https://example.com/person\"\n }\n }\n}' Response copysource{\n \"hits\": {\n \"hits\": [\n {\n \"_id\": \"http://example.com/person\",\n \"_index\": \"delta_ga_myorg_myproj\",\n \"_score\": 1.3121864,\n \"_source\": {\n \"@id\": \"http://example.com/person\",\n \"@type\": \"http://schema.org/Person\",\n \"properties\": [\n {\n \"@id\": \"http://example.com/epfl\",\n \"dataType\": \"object\",\n \"isInArray\": false,\n \"path\": \"http://schema.org/worksFor\"\n }\n ],\n \"references\": [\n {\n \"@id\": \"http://example.com/epfl\",\n \"@type\": [\n \"http://schema.org/EducationalOrganization\"\n ],\n \"dataType\": \"object\",\n \"found\": true,\n \"isInArray\": false,\n \"path\": \"http://schema.org/worksFor\"\n }\n ],\n \"relationships\": [\n {\n \"@id\": \"http://example.com/epfl\",\n \"@type\": [\n \"http://schema.org/EducationalOrganization\"\n ],\n \"dataType\": \"object\",\n \"isInArray\": false,\n \"path\": \"http://schema.org/worksFor\"\n }\n ],\n \"remoteContexts\": [\n {\n \"@type\": \"ProjectRemoteContextRef\",\n \"iri\": \"https://bbp.epfl.ch/contexts/person\",\n \"resource\": {\n \"id\": \"https://bbp.epfl.ch/contexts/person\",\n \"project\": \"myorg/myproj\",\n \"rev\": 1\n }\n }\n ],\n \"_createdAt\": \"2023-08-08T15:49:14.081Z\",\n \"_createdBy\": {\n \"@type\": \"User\",\n \"realm\": \"internal\",\n \"subject\": \"delta\"\n },\n \"_deprecated\": false,\n \"_project\": \"myorg/myproj\",\n \"_rev\": 1,\n \"_updatedAt\": \"2023-08-08T15:49:14.081Z\",\n \"_updatedBy\": {\n \"@type\": \"User\",\n \"realm\": \"internal\",\n \"subject\": \"delta\"\n }\n }\n }\n ],\n \"max_score\": 1.3121864,\n \"total\": {\n \"relation\": \"eq\",\n \"value\": 1\n }\n },\n \"timed_out\": false,\n \"took\": 0,\n \"_shards\": {\n \"failed\": 0,\n \"skipped\": 0,\n \"successful\": 1,\n \"total\": 1\n }\n}","title":"Search"},{"location":"/docs/delta/api/graph-analytics-api.html#internals","text":"In order to implement the described endpoints we needed a way to transform our data so that it would answer the desired questions in a performant manner.\nThe proposed solution was to stream our data, transform it and push it to a dedicated ElasticSearch index (one index per project). Then at query time we can run term aggregations in order to get the desired counts.","title":"Internals"},{"location":"/docs/delta/api/graph-analytics-api.html#document-structure","text":"An example of the ElasticSearch Document looks as follows:\n{\n \"@id\": \"http://example.com/Anna\",\n \"@type\": \"http://schema.org/Person\",\n \"_project\": \"myorg/myproject\",\n \"_rev\": 4,\n \"_deprecated\": false,\n \"_createdAt\": \"2023-06-01T00:00:00Z\",\n \"_createdBy\": { \"@type\": \"User\", \"realm\": \"bbp\", \"subject\": \"Bob\" },\n \"_updatedAt\": \"2023-06-12T00:00:00Z\",\n \"_updatedBy\": { \"@type\": \"User\", \"realm\": \"bbp\", \"subject\": \"Alice\" },\n \"properties\": [\n {\n \"dataType\": \"object\",\n \"path\": \"http://schema.org/address\",\n \"isInArray\": false\n },\n {\n \"dataType\": \"string\",\n \"path\": \"http://schema.org/address / http://schema.org/street\",\n \"isInArray\": false\n },\n {\n \"dataType\": \"number\",\n \"path\": \"http://schema.org/address / http://schema.org/zipcode\",\n \"isInArray\": false\n },\n {\n \"dataType\": \"object\",\n \"@id\": \"http://example.com/Robert\",\n \"path\": \"http://schema.org/brother\",\n \"isInArray\": false\n },\n {\n \"dataType\": \"string\",\n \"path\": \"http://schema.org/givenName\",\n \"isInArray\": false\n },\n {\n \"dataType\": \"object\",\n \"path\": \"http://schema.org/studies\",\n \"isInArray\": true\n },\n {\n \"dataType\": \"string\",\n \"path\": \"http://schema.org/studies / http://schema.org/name\",\n \"isInArray\": true\n }\n ],\n \"references\": [\n {\n \"found\": true,\n \"@id\": \"http://example.com/Robert\"\n }\n ],\n \"relationships\": [\n {\n \"dataType\": \"object\",\n \"@id\": \"http://example.com/Robert\",\n \"@type\": \"http://schema.org/Person\",\n \"path\": \"http://schema.org/brother\",\n \"isInArray\": false\n }\n ],\n \"remoteContexts\": [\n {\n \"@type\": \"ProjectRemoteContextRef\",\n \"iri\": \"https://bbp.epfl.ch/contexts/person\",\n \"resource\": {\n \"id\": \"https://bbp.epfl.ch/contexts/person\",\n \"project\": \"myorg/myproject\",\n \"rev\": 1\n }\n }\n ]\n}\n… where:\nproperties - Json Object Array: A flat collection of fields present on a resource. references - Json Object Array: A flat collection of fields present on a resource that could be potential candidates for relationships (they do have an @id). relationships - Json Object Array: A flat collection of @id(s) that have been found in other resources in the same project. path - String: The flat expanded path of a field present on a resource. A path of an embedded field will be encoded as follows: parent / child. isInArray - Boolean: Flag to inform whether the current path (or its parent) is part of an array. dataType - String: The type of the value present in the current path. Possible values are: string, numeric and boolean found - Boolean: Flag to inform whether an @id inside references has been resolved as a relationship. remoteContexts - Json Object Array: A collection of remote contexts detected during the JSON-LD resolution for this resource. See the Resources - Fetch remote contexts operation to learn about the remote context types.","title":"Document structure"},{"location":"/docs/delta/api/jira.html","text":"","title":"Jira integration"},{"location":"/docs/delta/api/jira.html#jira-integration","text":"The Jira integration plugin comes from the need at BBP to have the Nexus platform and Jira to interact by linking Nexus resources and Jira issues.\nThe Jira server API only allows to authenticate clients using the OAuth 1.0a protocol. This implies some set-up on the server-side so a minimal plugin was introduced in Delta to handle the authorization flow and to expose the Jira API operations needed by Nexus fusion to link Nexus resources and Jira issues.\nA guide introducing OAuth and how to integrate with Jira using it with more details is available on the Atlassian website\nAuthorization notes Like the other endpoints in Delta, clients still have to present a valid token. To have access to the different endpoints provided by this plugin, the user must first grant Delta to access to their information and to act on their behalf as defined by the authorization workflow presented here. As Nexus impersonates the user when interacting with Jira, it will do it with the same permissions as the user. Nexus does not perform any additional permission checks, it relies fully on Jira to perform this task.","title":"Jira integration"},{"location":"/docs/delta/api/jira.html#request-token","text":"Starts the authorization process by obtaining a request token from Jira which will return a link so that the user can grant permission to Nexus to access Jira on their behalf.\nNexus passes along the link to the client.\nPOST /v1/jira/request-token\nExample\nRequest copysourcecurl -X POST \"http://localhost:8080/v1/jira/request-token\" Response copysource{\n \"value\": \"https://my-jira-instance/plugins/servlet/oauth/authorize?oauth_token=TEMP_TOKEN\"\n}","title":"Request token"},{"location":"/docs/delta/api/jira.html#access-token","text":"After granting access to Delta, the user will get an access code that must be passed to this endpoint so that Delta can finalize the authorization flow and get an access token so that it can request and receive data from Jira.\nPOST /v1/jira/access-token\nExample\nRequest copysourcecurl -X POST \"http://localhost:8080/v1/jira/request-token\" -d \\\n '{\n \"value\": \"MY_CODE\"\n }'\nAn empty resource is returned for this endpoint.","title":"Access token"},{"location":"/docs/delta/api/jira.html#create-an-issue","text":"POST /v1/jira/issue\nThe request and response are the same as those described for the create issue endpoint in the Jira Reference except for the updateHistory parameter which is not available in the Nexus endpoint.","title":"Create an issue"},{"location":"/docs/delta/api/jira.html#edit-an-issue","text":"PUT /v1/jira/issue/{issueId}\nThe request and response are the same as those described for the edit issue endpoint in the Jira Reference except for the notifyUsers parameter which is not available in the Nexus endpoint","title":"Edit an issue"},{"location":"/docs/delta/api/jira.html#list-available-projects","text":"GET /v1/jira/project?recent={number}\nThe request and response are the same as those described for the list projects endpoint in the Jira Reference except for the expand, includeArchived and browseArchive parameters which are not available in the Nexus endpoint.","title":"List available projects"},{"location":"/docs/delta/api/jira.html#search-issues","text":"POST /v1/jira/search\nThe request and response are the same as those described search endpoint in the Jira Reference.","title":"Search issues"},{"location":"/docs/delta/api/events-api.html","text":"","title":"Global events"},{"location":"/docs/delta/api/events-api.html#global-events","text":"Nexus provides a global events endpoint, which allows the users to access the stream of events for all the resources in Nexus, including ACLs, permissions, realms, etc.\nTo be able to access the endpoint, the user needs to have events/read permission on /.","title":"Global events"},{"location":"/docs/delta/api/events-api.html#check-permissions","text":"HEAD /v1/events\nThis endpoint allows checking whether the user has permission to read the events without starting the events stream. The response will be either 200 OK if the user does have events/read permission on / or 403 Forbidden otherwise.","title":"Check permissions"},{"location":"/docs/delta/api/events-api.html#server-sent-events","text":"GET /v1/events\nThe server sent events response contains a series of events, represented in the following way\ndata:{payload}\nevent:{type}\nid:{id}\nwhere…\n{payload}: Json - is the actual payload of the current event {type}: String - is a type identifier for the current event. Possible types are related to core resource types (Resouce, Schema, Resolver) and available plugin types {id}: String - is the identifier of the resource event. It can be used in the Last-Event-Id query parameter\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/events\" Response copysourcedata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/realms.json\"],\"@type\":\"RealmCreated\",\"name\":\"BlueBrain\",\"openIdConfig\":\"http://localhost:8080/auth/realms/realm1/.well-known/openid-configuration\",\"_authorizationEndpoint\":\"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/auth\",\"_endSessionEndpoint\":\"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/logout\",\"_grantTypes\":[\"password\",\"clientCredentials\",\"refreshToken\",\"authorizationCode\",\"implicit\"],\"_instant\":\"2021-05-11T09:42:41.313Z\",\"_issuer\":\"http://localhost:8080/auth/realms/realm1\",\"_label\":\"realm1\",\"_realmId\":\"http://localhost:8080/v1/realms/realm1\",\"_rev\":1,\"_subject\":\"http://localhost:8080/v1/anonymous\",\"_tokenEndpoint\":\"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/token\",\"_userInfoEndpoint\":\"http://localhost:8080/auth/realms/realm1/protocol/openid-connect/userinfo\"}\nevent:RealmCreated\nid:3abfce50-b23d-11eb-bef4-251deaef3e83\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/acls.json\"],\"@type\":\"AclReplaced\",\"acl\":[{\"identity\":{\"@id\":\"http://localhost:8080/v1/realms/myrealm/groups/a-group\",\"@type\":\"Group\",\"group\":\"a-group\",\"realm\":\"myrealm\"},\"permissions\":[\"projects/read\"]},{\"identity\":{\"@id\":\"http://localhost:8080/v1/realms/realm/groups/some-group\",\"@type\":\"Group\",\"group\":\"some-group\",\"realm\":\"realm\"},\"permissions\":[\"projects/read\",\"projects/write\"]},{\"identity\":{\"@id\":\"http://localhost:8080/v1/realms/realm/users/alice\",\"@type\":\"User\",\"realm\":\"realm\",\"subject\":\"alice\"},\"permissions\":[\"acls/read\",\"acls/write\"]}],\"_aclId\":\"http://localhost:8080/v1/acls/org1\",\"_instant\":\"2021-05-11T11:03:06.071Z\",\"_path\":\"/org1\",\"_rev\":1,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:AclReplaced\nid:76848d80-b248-11eb-a0d9-6dedbaa155f8\n\ndata:{\"@context\":\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"@type\":\"ResourceCreated\",\"_resourceId\":\"http://localhost:8080/v1/resources/myorg/myproject/_/7887416b-d501-4508-a625-2a6664dfca94\",\"_source\":{\"@type\":\"Hobbit\",\"age\":23,\"name\":\"Frodo\"},\"_types\":[\"http://localhost:8080/v1/vocabs/myorg/myproject/Hobbit\"],\"_constrainedBy\":\"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\"_project\":\"http://localhost:8080/v1/projects/myorg/myproject\",\"_schemaProject\": \"http://localhost:8080/v1/projects/myorg/myproject\",\"_instant\":\"2021-04-24T07:35:47.447631Z\",\"_projectUuid\":\"1089947c-dc76-4cbc-8b04-3f919b436828\",\"_organizationUuid\":\"ba7053ba-54ea-41b6-baab-96ec1acd7ad4\",\"_rev\": 1,\"_subject\":\"http://localhost:8080/v1/realms/github/users/myuser\"}\nevent:ResourceCreated\nid:aebbf8f4-9652-11e9-89a7-6d3c5701d287\n\ndata:{\"@context\":[\"https://bluebrain.github.io/nexus/contexts/metadata.json\",\"https://bluebrain.github.io/nexus/contexts/permissions.json\"],\"@type\":\"PermissionsReplaced\",\"permissions\":[\"custom\"],\"_instant\":\"2021-05-10T13:57:16.947Z\",\"_permissionsId\":\"http://localhost:8080/v1/permissions\",\"_rev\":1,\"_subject\":\"http://localhost:8080/v1/anonymous\"}\nevent:PermissionsReplaced\nid:a1532190-b197-11eb-a8e0-49728f9d6e6c","title":"Server Sent Events"},{"location":"/docs/delta/api/supervision-api.html","text":"","title":"Supervision"},{"location":"/docs/delta/api/supervision-api.html#supervision","text":"This endpoint returns information about the projections running on the current node.","title":"Supervision"},{"location":"/docs/delta/api/supervision-api.html#fetch-projections","text":"GET /v1/supervision/projections\nFetches the projections running on the current node.\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/supervision/projections\" Response copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/supervision.json\",\n \"projections\": [\n {\n \"executionStrategy\": \"PersistentSingleNode\",\n \"metadata\": {\n \"module\": \"module\",\n \"name\": \"name\",\n \"project\": \"myorg/myproject\"\n },\n \"progress\": {\n \"discarded\": 1,\n \"failed\": 1,\n \"instant\": \"1970-01-01T00:00:00Z\",\n \"offset\": {\n \"@type\": \"Start\"\n },\n \"processed\": 1\n },\n \"restarts\": 1,\n \"status\": \"Running\"\n },\n {\n \"executionStrategy\": \"TransientSingleNode\",\n \"metadata\": {\n \"module\": \"module\",\n \"name\": \"name\",\n \"project\": \"myorg/myproject\"\n },\n \"progress\": {\n \"discarded\": 1,\n \"failed\": 1,\n \"instant\": \"1970-01-01T00:00:00Z\",\n \"offset\": {\n \"@type\": \"Start\"\n },\n \"processed\": 1\n },\n \"restarts\": 0,\n \"status\": \"Running\"\n }\n ]\n}","title":"Fetch projections"},{"location":"/docs/delta/metadata.html","text":"","title":"Nexus Metadata"},{"location":"/docs/delta/metadata.html#nexus-metadata","text":"Nexus Delta entities fall in two categories:\nGlobal: Organizations, Realms, Permissions, ACLs Project scoped: Projects, Resources, Schemas, Resolvers, Views, Storages, Files\nUpon creation of these entities, Nexus Delta will create metadata fields which are described below.\n_self: unique address of the entity across Nexus Delta Nexus Delta follows the HATEOAS architecture, which is reflected in the _self address being discoverable in Nexus Delta’s different responses. Example: from a resources listing operation, the _self endpoints listed can be used to fetch the underlying resources","title":"Nexus Metadata"},{"location":"/docs/delta/metadata.html#auditing","text":"The following metadata can help to audit an entity.\n_rev: the revision number of the entity _deprecated: boolean indicating whether or not the entity is deprecated _createdAt: datetime at which the entity was first created _createdBy: the user that first created the entity _updatedAt: datetime at which the entity was last updated _updatedBy: the user that last updated the entity","title":"Auditing"},{"location":"/docs/delta/plugins/index.html","text":"","title":"Plugins"},{"location":"/docs/delta/plugins/index.html#plugins","text":"Starting from version 1.5, Delta introduces the ability to extend its functionality using plugins. Plugins enable developers to add new functionality to Nexus Delta without the need to modify Delta itself. Plugins can introduce various new functionalities, including new API endpoints and indexing capabilities.\nNote Plugins are still an experimental feature and Delta SDKs and dependent modules(rdf, sourcing) provide no binary compatibility guarantees.","title":"Plugins"},{"location":"/docs/delta/plugins/index.html#plugin-development","text":"Plugins used by Delta need to be packaged as a .jar file containing the plugin code with all its dependencies. Delta loads plugins from .jar files located in a directory specified by DELTA_PLUGINS environment variable.\nPlugins must define exactly one class which extends PluginDef trait.\nThe class must define following methods:\ndef info: PluginDescription\nthis method returns instance of PluginDescription which defines the plugin name and version.\ndef initialize(locator: Locator): Task[Plugin]\nthis method can be used to initialize the plugin and returns an instance of a Plugin, which can additionally define logic to stop the plugin gracefully.\ndef module: ModuleDef\nthis method must return ModuleDef from distage library. This is the only way in which plugins can use dependencies provided by core of Delta and other plugins, as well as provide dependencies which can be used by Delta and other plugins.\nExample\nTestPluginRoutes.scala copysourcepackage ch.epfl.bluebrain.nexus.delta.testplugin\n\nimport akka.http.scaladsl.server.Directives._\nimport akka.http.scaladsl.server.Route\nimport ch.epfl.bluebrain.nexus.delta.sdk.model.BaseUri\n\nclass TestPluginRoutes(baseUri: BaseUri) {\n def routes: Route =\n pathPrefix(\"test-plugin\") {\n concat(\n get {\n complete(baseUri.toString)\n }\n )\n }\n}\nTestPluginDef.scala copysourcepackage ch.epfl.bluebrain.nexus.delta.testplugin\n\nimport cats.effect.IO\nimport ch.epfl.bluebrain.nexus.delta.sdk.PriorityRoute\nimport ch.epfl.bluebrain.nexus.delta.sdk.model.ComponentDescription.PluginDescription\nimport ch.epfl.bluebrain.nexus.delta.sdk.model.{BaseUri, Name}\nimport ch.epfl.bluebrain.nexus.delta.sdk.plugin.{Plugin, PluginDef}\nimport izumi.distage.model.Locator\nimport izumi.distage.model.definition.ModuleDef\n\ncase class TestPluginDef() extends PluginDef {\n\n override def module: ModuleDef =\n new ModuleDef {\n make[TestPlugin]\n make[TestPluginRoutes].from { (baseUri: BaseUri) =>\n new TestPluginRoutes(baseUri)\n }\n many[PriorityRoute].add((routes: TestPluginRoutes) =>\n PriorityRoute(1, routes.routes, requiresStrictEntity = true)\n )\n }\n\n override val info: PluginDescription = PluginDescription(Name.unsafe(\"testplugin\"), \"0.1.0\")\n\n override def initialize(locator: Locator): IO[Plugin] = IO.pure(locator.get[TestPlugin])\n\n}","title":"Plugin development"},{"location":"/docs/delta/plugins/index.html#delta-sdk","text":"The Delta SDK can be included as following dependency:\nSDK - general Delta SDK\nAll the above dependencies should be used in provided scope and must not be bundled in the plugin.\nlibraryDependencies += \"ch.epfl.bluebrain.nexus\" %% \"delta-sdk\" % deltaVersion % Provided","title":"Delta SDK"},{"location":"/docs/delta/plugins/index.html#dependency-injection","text":"Delta uses distage library for dependency injection. Each plugin must define ModuleDef to create instances of its own classes. All the dependencies provided by ModuleDefs defined in Delta modules, as well as other plugins can be used here.\nThe plugin can also define instances of following traits/classes, which will be used in Delta:\nPriorityRoute - allows the plugin to define Akka HTTP Route with priority. The priority is used by Delta to prioritize route evaluation ScopeInitialization - allows the plugin to define hooks which will be run on organization and project creation. ScopedEntityDefinition - allows to define the required information to be able to handle a custom scoped entity Serializer - allows to define how to serialize and deserialize an event / a state to database ResourceShift - enables Delta to retrieve the different resources in a common format for tasks like indexing or resolving operations. SseEncoder - enables Delta to convert a database event to a SSE event EventMetricEncoder - enables Delta to convert a database event to an event metric MetadataContextValue - registers metadata context of this plugin into global metadata context RemoteContextResolution - enables Delta to resolve static contexts defined by the plugin ServiceDependency - allows the plugin to define dependencies which will be displayed in /version endpoint. ApiMappings - allows the plugin to define default API mappings used to shorten URLs ResourceToSchemaMappings - allows the plugin to define mapping from the resource type to schema, which can be used to interact with resources created by the plugin through /resources endpoints.","title":"Dependency injection"},{"location":"/docs/delta/plugins/index.html#class-loading","text":"In order to avoid clashes between different plugins, Delta uses custom classloader to load plugin classes, which will load classes from the plugin first, then using application classloader and other plugins after that. It is therefore recommended to not include in the plugin jar any dependencies which are also provided by SDK. Libraries can be easily excluded from dependencies in sbt:\nlibraryDependencies ++= Seq(\n \"ch.epfl.bluebrain.nexus\" %% \"my-custom-library\" % 1.0.0 excludeAll (\n ExclusionRule(organization = \"ch.epfl.bluebrain.nexus\", name = \"shared-library_2.13\")\n )","title":"Class loading"},{"location":"/docs/delta/plugins/index.html#configuration","text":"Plugins should provide their default configuration in {plugin_name}.conf file, where plugin_name is the same as the one in PluginDescription. Plugins should include their config inside plugins.{plugin_name} namespace in the config. plugins.{plugin_name}.priority configuration setting defines priority of the plugin, which is used to determine order in which routes provided by plugins are evaluated.","title":"Configuration"},{"location":"/docs/delta/plugins/index.html#adding-plugins-to-a-delta-deployment","text":"Delta loads plugins from .jar files present in a folder specified by DELTA_PLUGINS environment variable. In order to make delta discover the plugin, the .jar file of the plugin must be added(or symlinked) to that directory. In the official Delta Docker image the plugins are loaded from /opt/docker/plugins directory.","title":"Adding plugins to a Delta deployment"},{"location":"/docs/delta/plugins/index.html#enabling-disabling-plugins","text":"Additionally, plugins can be enabled/disabled using plugins.{plugin_name}.enabled property. Setting this property to false, will disable the given plugin.","title":"Enabling/disabling plugins"},{"location":"/docs/delta/plugins/index.html#existing-plugins","text":"Currently, following Delta functionality is provided by plugins:\narchives API Reference | code SPARQL views API Reference | code Elasticsearch views API Reference | code composite views API Reference | code files and storages API Reference | code global search API Reference | code graph analytics API Reference | code Jira API Reference | code\nElasticsearch plugin is required in order to provide listings in the API, other plugins can be excluded if their functionality is not needed. All the above plugins are included in the Delta Docker image.","title":"Existing plugins"},{"location":"/docs/delta/benchmarks/index.html","text":"","title":"Benchmarks"},{"location":"/docs/delta/benchmarks/index.html#benchmarks","text":"The main goal of the benchmarks is to analyze the hardware requirements for a Nexus deployment and to find potential issues and / or bottlenecks. In particular, we are most interested in the following metrics:\nthroughput - how many requests per second the system can handle latency - the time the system needed to provide response to the requests\n… and how they were affected by different factors, especially:\ndata volume - how does the volume of the data in the system affect the performance hardware configuration and scalability - does assigning more hardware increase the performance of the system and can the system scale both horizontally and vertically. clustering - what are the effects of changing from a single node to clustered deployment, as well as, what are the effects of adding more nodes to the cluster.\nThe test scenarios and scripts can be found in the nexus-benchmarks repository.\nThe latest benchmarks were run against Nexus Delta v1.4.2, see benchmarks.","title":"Benchmarks"},{"location":"/docs/delta/benchmarks/v1.4.2.html","text":"","title":"Benchmarks v1.4.2"},{"location":"/docs/delta/benchmarks/v1.4.2.html#benchmarks-v1-4-2","text":"The tests were run against version 1.4.2 in January 2021 using Gatling version 3.5.0.\nThese are the most recent benchmarks. For older benchmarks of Nexus version 1.2.1 see here.","title":"Benchmarks v1.4.2"},{"location":"/docs/delta/benchmarks/v1.4.2.html#environment","text":"The system was deployed on AWS EKS using the following configuration:\nUp to 12 compute nodes of 16 vCPU, 64 GB RAM AWS EBS storage - gp3, 10 000 IOPS, throughput 250 MB/s\nThe services were deployed as follows:\n1 to 12 Delta pods with 8 vCPU, 8GB HEAP 1 to 12 Cassandra pods each with 3.5 vCPU, 12 GB HEAP, 250 GB EBS storage 1 Elasticsearch pod with 2 vCPU, 8 GB HEAP, 50GB gp2 storage 1 Blazegraph pod with 2 vCPU, 4 GB HEAP, 50GB gp2 storage 1 Keycloak pod using its internal database H2 as storage, 5GB gp2 storage 1 Prometheus pod and 1 Grafana pod, 50GB gp2 storage 1 Nginx ingress controller","title":"Environment"},{"location":"/docs/delta/benchmarks/v1.4.2.html#data-volume","text":"Prior to the test execution a reasonable amount of data was injected into the system to ensure the system behaves well under a typical volume, specifically 120,000,000 resources were created across 27 projects using an exponential distribution. The total number of triples (22 for each resource + 11 system metadata) was approximately: 4,000,000,000.\nThe following resource template was used for both pre-created resources and the resources created during the tests:\n{\n \"@type\": [\n \"http://www.w3.org/ns/prov#Activity\",\n \"https://neuroshapes.org/StimulusExperiment\"\n ],\n \"http://www.w3.org/ns/prov#used\": {\n \"@id\": \"https://nexus-sandbox.io/neurosciencegraph/data/049b569d-98ba-4a54-a9cb-45f5c5cd3b40\",\n \"@type\": [\n \"http://www.w3.org/ns/prov#Entity\",\n \"https://neuroshapes.org/PatchedCell\"\n ],\n \"http://schema.org/name\": \"Some PatchedCell\"\n },\n \"http://www.w3.org/ns/prov#wasAssociatedWith\": {\n \"@id\": \"https://nexus-sandbox.io/v1/realms/random/users/someuser\",\n \"@type\": \"http://www.w3.org/ns/prov#Agent\"\n },\n \"https://neuroshapes.org/hadProtocol\": {\n \"@id\": \"https://nexus-sandbox.io/neurosciencegraph/data/3f189851-c3de-470d-894e-68abe116bfe4\",\n \"@type\": [\n \"https://neuroshapes.org/Protocol\",\n \"https://neuroshapes.org/ExperimentalProtocol\",\n \"http://www.w3.org/ns/prov#Entity\"\n ],\n \"http://schema.org/name\": \"Some Protocol\"\n },\n \"https://neuroshapes.org/stimulus\": {\n \"https://neuroshapes.org/stimulusType\": {\n \"@id\": \"http://stimulusont.org/H20S8\",\n \"http://www.w3.org/2000/01/rdf-schema#label\": \"H20S8\"\n }\n }\n}","title":"Data volume"},{"location":"/docs/delta/benchmarks/v1.4.2.html#scenarios","text":"The main focus of the tests is to identify the throughput and latency for the primary operations as most of the secondary operations would either have the same results or be irrelevant. For example:\ntagging or deprecating a resource is equivalent to performing a create without validation updating a resource is equivalent to creating a new one (with or without validation) accessing the incoming or outgoing link is irrelevant as the system just delegates the operation to the triple store\nThe primary operations are:\ncreate without validation create with validation using a schema that imports others as transitive dependencies create with validation using a schema with the same collection of shapes but without any dependencies fetch a resource by id while injecting the metadata in the resource RDF graph representation and returning it as json fetch a resource source json representation\nEach test has been run for 5 minutes using a concurrency level of 32 for each Delta node (e.g.: 6 Delta nodes -> 192 users), except for the single node test where a concurrency level of 16 was used.","title":"Scenarios"},{"location":"/docs/delta/benchmarks/v1.4.2.html#results","text":"","title":"Results"},{"location":"/docs/delta/benchmarks/v1.4.2.html#highlights-and-conclusions","text":"The system scales almost linearly with the number of nodes in terms of throughput and the latency remains within acceptable values.\nIn most cases the increase of latency is minimal as adding additional nodes to the cluster increases the necessary data exchange between nodes when handling requests. The chance for the required data to be handled by the node that accepts each request decreases from 100% (single node) to ~16% (6 node cluster) and if executing the request implies interaction with multiple resources (like in the case of creating a resource with validation where the schema has import definitions) the chances drop close to 1%.\nThe latency increase for creating resources with validation using a self contained (single) schema is caused by the fact that the system is CPU bound while performing heavy operations. The the values for the 95th percentiles show that there’s a higher deviation in the values for this operation. This is explained by nodes processing different number of validations depending on how requests are distributed between the members of the cluster.\nAs the benchmarks were performed using EBS (remote) storage for the Cassandra instances this may have influenced the latency during the benchmarks. However, when re-running the benchmarks the results were very similar. In addition, when studying the overall performance of the system and comparing it to the previous benchmarks which used local storage the performance still behaves as expected.\nIt can be also be observed that enabling authentication does not add any significant amount of latency to the benchmarks.","title":"Highlights and conclusions"},{"location":"/docs/delta/benchmarks/v1.4.2.html#raw-results","text":"The following sections show the exact numbers for throughput and latency of the system for each test configuration.","title":"Raw results"},{"location":"/docs/delta/benchmarks/v1.4.2.html#create-resource-no-validation","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when creating new unconstrained resources.\nNodes Concurrency Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 16 712 20 24 33 81 2 64 1328 44 54 83 110 4 128 2594 42 56 97 125 6 192 3270 52 71 110 143 9 288 4539 52 77 130 172 12 384 5578 60 86 132 174","title":"Create Resource, No Validation"},{"location":"/docs/delta/benchmarks/v1.4.2.html#create-resource-validation-inproject-resolution-modular-schema","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when creating new resources constrained by schemas hosted in the same project as the one used for creation. The schema uses transitive imports of other schemas and contexts.\nNodes Concurrency Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 8 24 329 340 365 437 2 32 58 552 596 640 709 4 64 116 548 587 654 793 6 96 164 573 614 707 915 9 144 237 598 638 724 899 12 192 288 656 702 798 1044","title":"Create Resource, Validation, InProject Resolution, Modular Schema"},{"location":"/docs/delta/benchmarks/v1.4.2.html#create-resource-validation-inproject-resolution-single-schema","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when creating new resources constrained by a schema hosted in the same project as the one used for creation. The schema has all the necessary shapes defined in the same resource and does not reference other schemas or contexts.\nNodes Concurrency Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 8 73 105 122 136 157 2 32 141 216 277 358 428 4 64 266 178 297 546 692 6 96 367 169 246 779 1159 9 144 532 175 240 919 1350 12 192 626 170 218 1379 2216","title":"Create Resource, Validation, InProject Resolution, Single Schema"},{"location":"/docs/delta/benchmarks/v1.4.2.html#fetch-resource","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when getting a resource by its id. It shows the impact of transforming the original json representation into an RDF graph, injecting the system metadata (e.g. rev, deprecated, project, org etc.) and presenting the result in a JSON-LD representation.\nNodes Concurrency Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 16 1513 10 11 12 19 2 64 2687 22 25 36 45 4 128 5386 22 24 34 45 6 192 9063 19 23 35 47 9 288 11997 22 26 40 53 12 384 17011 20 25 36 50","title":"Fetch Resource"},{"location":"/docs/delta/benchmarks/v1.4.2.html#fetch-resource-source","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when getting a resource by its id in its original representation.\nNodes Concurrency Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 16 1539 10 10 11 18 2 64 3135 19 22 32 39 4 128 5615 21 23 38 47 6 192 8726 20 22 32 45 9 288 12354 22 26 36 50 12 384 17815 20 24 34 46","title":"Fetch Resource Source"},{"location":"/docs/delta/benchmarks/v1.4.2.html#results-with-authentication","text":"","title":"Results with authentication"},{"location":"/docs/delta/benchmarks/v1.4.2.html#raw-results-with-authentication","text":"The following sections show the exact numbers for throughput and latency of the system for each test configuration when enabling authentication. It can be noted that the authentication does not add any significant performance penalty.","title":"Raw results with authentication"},{"location":"/docs/delta/benchmarks/v1.4.2.html#create-resource-no-validation-with-authentication-","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when creating new unconstrained resources.\nNodes Concurrency Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 16 683 21 25 36 67 2 64 1273 46 57 85 110 4 128 2557 44 58 94 118 6 192 3113 54 74 120 154 9 288 4232 60 85 128 169 12 384 5114 68 94 144 189","title":"Create Resource, No Validation (with authentication)"},{"location":"/docs/delta/benchmarks/v1.4.2.html#create-resource-validation-inproject-resolution-modular-schema-with-authentication-","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when creating new resources constrained by schemas hosted in the same project as the one used for creation. The schema uses transitive imports of other schemas and contexts.\nNodes Concurrency Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 8 24 327 337 357 374 2 32 58 549 592 634 707 6 96 168 565 607 680 784 9 144 230 596 646 801 1431 12 192 289 647 695 803 1124","title":"Create Resource, Validation, InProject Resolution, Modular Schema (with authentication)"},{"location":"/docs/delta/benchmarks/v1.4.2.html#create-resource-validation-inproject-resolution-single-schema-with-authentication-","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when creating new resources constrained by a schema hosted in the same project as the one used for creation. The schema has all the necessary shapes defined in the same resource and does not reference other schemas or contexts.\nNodes Concurrency Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 8 74 104 121 134 146 2 32 139 214 286 372 445 4 64 270 174 295 543 674 6 96 383 168 244 727 998 9 144 622 171 219 1393 2249 12 192 24 329 340 365 437","title":"Create Resource, Validation, InProject Resolution, Single Schema (with authentication)"},{"location":"/docs/delta/benchmarks/v1.4.2.html#fetch-resource-with-authentication-","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when getting a resource by its id. It shows the impact of transforming the original json representation into an RDF graph, injecting the system metadata (e.g. rev, deprecated, project, org etc.) and presenting the result in a JSON-LD representation.\nNodes Concurrency Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 16 1496 11 11 11 14 2 64 3016 20 24 33 37 4 128 5459 22 24 33 44 6 192 9293 19 22 34 48 9 288 12118 22 25 40 53 12 384 14268 24 30 45 61","title":"Fetch Resource (with authentication)"},{"location":"/docs/delta/benchmarks/v1.4.2.html#fetch-resource-source-with-authentication-","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when getting a resource by its id in its original representation.\nNodes Concurrency Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 16 1494 11 11 11 14 2 64 2982 20 24 34 37 4 128 5690 21 23 33 44 6 192 8971 19 23 35 49 9 288 12491 21 25 36 49 12 384 14363 25 30 42 54","title":"Fetch Resource Source (with authentication)"},{"location":"/docs/delta/benchmarks/v1.2.1.html","text":"","title":"Benchmarks v1.2.1"},{"location":"/docs/delta/benchmarks/v1.2.1.html#benchmarks-v1-2-1","text":"For the newest benchmarks of Nexus version 1.4.2 see here.\nThe tests were run against version 1.2.1 in October 2019 using Gatling version 3.2.1.","title":"Benchmarks v1.2.1"},{"location":"/docs/delta/benchmarks/v1.2.1.html#environment","text":"The system was deployed on AWS EKS using the following basic configuration:\n8 compute nodes of 16 vCPU, 64 GB RAM, 2 x 300 GB NVMe disks nginx ingress controller 1 Keycloak pod using MariaDB as its storage 6 Cassandra pods each with 4 vCPU, 6 GB HEAP, local NVMe storage, replication factor of 3 3 Elasticsearch pods each with 4 vCPU, 8 GB HEAP, local NVMe storage 1 Blazegraph pod with 8 vCPU, 16 GB HEAP, local NVMe storage 1 Prometheus pod and 1 Jaeger pod\nThe services were deployed as follows:\n3 pod IAM cluster, each node using 4 vCPU, 4 GB HEAP 3 pod Admin cluster, each node using 4 vCPU, 4 GB HEAP 1 to 6 pods KG cluster, each node with 8 vCPU, 8 GB HEAP","title":"Environment"},{"location":"/docs/delta/benchmarks/v1.2.1.html#data-volume","text":"Prior to the test execution a reasonable amount of data was injected into the system to ensure the system behaves well under a typical volume, specifically 120,000,000 resources were created across 27 projects using an exponential distribution. The total number of triples (22 for each resource + 11 system metadata) was approximately: 4,000,000,000.\nThe following resource template was used for both pre-created resources and the resources created during the tests:\n{\n \"@type\": [\n \"http://www.w3.org/ns/prov#Activity\",\n \"https://neuroshapes.org/StimulusExperiment\"\n ],\n \"http://www.w3.org/ns/prov#used\": {\n \"@id\": \"https://nexus-sandbox.io/neurosciencegraph/data/049b569d-98ba-4a54-a9cb-45f5c5cd3b40\",\n \"@type\": [\n \"http://www.w3.org/ns/prov#Entity\",\n \"https://neuroshapes.org/PatchedCell\"\n ],\n \"http://schema.org/name\": \"Some PatchedCell\"\n },\n \"http://www.w3.org/ns/prov#wasAssociatedWith\": {\n \"@id\": \"https://nexus-sandbox.io/v1/realms/random/users/someuser\",\n \"@type\": \"http://www.w3.org/ns/prov#Agent\"\n },\n \"https://neuroshapes.org/hadProtocol\": {\n \"@id\": \"https://nexus-sandbox.io/neurosciencegraph/data/3f189851-c3de-470d-894e-68abe116bfe4\",\n \"@type\": [\n \"https://neuroshapes.org/Protocol\",\n \"https://neuroshapes.org/ExperimentalProtocol\",\n \"http://www.w3.org/ns/prov#Entity\"\n ],\n \"http://schema.org/name\": \"Some Protocol\"\n },\n \"https://neuroshapes.org/stimulus\": {\n \"https://neuroshapes.org/stimulusType\": {\n \"@id\": \"http://stimulusont.org/H20S8\",\n \"http://www.w3.org/2000/01/rdf-schema#label\": \"H20S8\"\n }\n }\n}","title":"Data volume"},{"location":"/docs/delta/benchmarks/v1.2.1.html#scenarios","text":"The main focus of the tests is to identify the throughput and latency for the primary operations as most of the secondary operations would either have the same results or be irrelevant. For example:\ntagging or deprecating a resource is equivalent to performing a create without validation updating a resource is equivalent to creating a new one (with or without validation) accessing the incoming or outgoing link is irrelevant as the system just delegates the operation to the triple store\nThe primary operations are:\ncreate without validation create with validation using a schema that imports others as transitive dependencies create with validation using a schema with the same collection of shapes but without any dependencies fetch a resource by id while injecting the metadata in the resource RDF graph representation and returning it as json fetch a resource source json representation\nEach test has been run for 5 minutes using a concurrency level (users) of 16 for each KG node (e.g.: 6 KG nodes -> 96 users).","title":"Scenarios"},{"location":"/docs/delta/benchmarks/v1.2.1.html#results","text":"","title":"Results"},{"location":"/docs/delta/benchmarks/v1.2.1.html#highlights-and-conclusions","text":"The system scales almost linearly with the number of nodes in terms of throughput and the latency remains within acceptable values.\nIn most cases the increase of latency is minimal as adding additional nodes to the cluster increases the necessary data exchange between nodes when handling requests. The chance for the required data to be handled by the node that accepts each request decreases from 100% (single node) to ~16% (6 node cluster) and if executing the request implies interaction with multiple resources (like in the case of creating a resource with validation where the schema has import definitions) the chances drop close to 1%.\nThe latency increase for creating resources with validation using a self contained (single) schema is caused by the fact that the system is CPU bound while performing heavy operations. The the values for the 50 and 95 percentiles show that there’s a higher deviation in the values for this operation. This is explained by nodes processing different number of validations depending on how requests are distributed between the members of the cluster.","title":"Highlights and conclusions"},{"location":"/docs/delta/benchmarks/v1.2.1.html#raw-results","text":"The following sections show the exact numbers for throughput and latency of the system for each test configuration.","title":"Raw results"},{"location":"/docs/delta/benchmarks/v1.2.1.html#create-resource-no-validation","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when creating new unconstrained resources.\nNodes Users Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 16 781 16 21 42 57 2 32 1281 20 29 50 66 4 64 2044 25 37 65 89 6 96 2730 40 62 96 130","title":"Create Resource, No Validation"},{"location":"/docs/delta/benchmarks/v1.2.1.html#create-resource-validation-crossproject-resolution-modular-schema","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when creating new resources constrained by schemas hosted in a separate project than the one used for creation. The schema uses transitive imports of other schemas and contexts.\nNodes Users Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 16 26 618 638 666 699 2 32 46 682 712 768 977 4 64 88 719 753 822 1067 6 96 127 743 806 898 1051","title":"Create Resource, Validation, CrossProject Resolution, Modular Schema"},{"location":"/docs/delta/benchmarks/v1.2.1.html#create-resource-validation-inproject-resolution-modular-schema","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when creating new resources constrained by schemas hosted in the same project as the one used for creation. The schema uses transitive imports of other schemas and contexts.\nNodes Users Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 16 28 569 590 620 650 2 32 48 655 685 736 926 4 64 97 658 687 739 867 6 96 125 758 799 879 977","title":"Create Resource, Validation, InProject Resolution, Modular Schema"},{"location":"/docs/delta/benchmarks/v1.2.1.html#create-resource-validation-inproject-resolution-single-schema","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when creating new resources constrained by a schema hosted in the same project as the one used for creation. The schema has all the necessary shapes defined in the same resource and does not reference other schemas or contexts.\nNodes Users Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 16 82 201 228 272 316 2 32 138 211 301 410 504 4 64 258 153 317 668 838 6 96 364 147 273 879 1198","title":"Create Resource, Validation, InProject Resolution, Single Schema"},{"location":"/docs/delta/benchmarks/v1.2.1.html#fetch-resource","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when getting a resource by its id. It shows the impact of transforming the original json representation into an RDF graph, injecting the system metadata (e.g. rev, deprecated, project, org etc.) and presenting the result in a JSON-LD representation.\nNodes Users Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 16 777 20 21 28 33 2 32 1518 20 22 28 45 4 64 3000 20 22 30 47 6 96 4393 19 25 40 61","title":"Fetch Resource"},{"location":"/docs/delta/benchmarks/v1.2.1.html#fetch-resource-source","text":"The test evaluates the throughput and latency at 50, 75, 95 and 99 percentiles when getting a resource by its id in its original representation.\nNodes Users Throughput (req/s) p50 (ms) p75 (ms) p95 (ms) p99 (ms) 1 16 1050 15 16 17 26 2 32 2103 15 16 18 30 4 64 3821 16 17 19 37 6 96 5648 16 17 21 37","title":"Fetch Resource Source"},{"location":"/docs/utilities/index.html","text":"","title":"Utilities"},{"location":"/docs/utilities/index.html#utilities","text":"","title":"Utilities"},{"location":"/docs/utilities/index.html#domains-schemas-vocabularies-","text":"Nexus provides some schemas which make building provenance based knowledge graphs easier.","title":"Domains (Schemas, Vocabularies)"},{"location":"/docs/utilities/index.html#nexus-core-schemas","text":"","title":"Nexus Core Schemas"},{"location":"/docs/utilities/index.html#nexus-schemaorg","text":"SHACL version of a subset of schemas defined by schema.org that are commonly used in Blue Brain Nexus.\nSource Code","title":"nexus-schemaorg"},{"location":"/docs/utilities/index.html#nexus-prov","text":"Data management oriented SHACL version of W3C PROV-O.\nSource Code","title":"nexus-prov"},{"location":"/docs/utilities/index.html#nexus-domain-specific-components","text":"","title":"Nexus domain specific components"},{"location":"/docs/utilities/index.html#nexus-bbp-data-models","text":"Data models that Blue Brain has developed in order to facilitate the integration of specific neuroscience data.\nSource Code","title":"Nexus BBP Data models"},{"location":"/docs/utilities/index.html#neuroshapes","text":"A community effort to develop open SHACL schemas for FAIR (Findable, Accessible, Interoperable, Reproducible) neuroscience data.\nSource Code","title":"Neuroshapes"},{"location":"/docs/utilities/index.html#nexus-tools","text":"","title":"Nexus Tools"},{"location":"/docs/utilities/index.html#nexus-python-sdk","text":"A Python wrapper for the Blue Brain Nexus REST API.","title":"Nexus Python SDK"},{"location":"/docs/utilities/index.html#how-to-install-the-nexus-python-sdk","text":"pip install nexus-sdk","title":"How to install the Nexus Python SDK"},{"location":"/docs/utilities/index.html#usage","text":"import nexussdk as nexus\n\nnexus.config.set_environment(DEPLOYMENT)\nnexus.config.set_token(TOKEN)\n\nnexus.permissions.fetch()\nSource Code | Documentation","title":"Usage"},{"location":"/docs/utilities/index.html#nexus-js","text":"The Javascript SDK provides many features to help you build web applications that integrate with Blue Brain Nexus.","title":"Nexus.js"},{"location":"/docs/utilities/index.html#how-to-install-nexus-js","text":"npm install @bbp/nexus-sdk","title":"How to install Nexus.js"},{"location":"/docs/utilities/index.html#typescript-declarations","text":"The SDK is written in Typescript, so type declarations for all operations are included in the package.\nYou can generate documentation using npm run documentation or with docker by running make documentation. More information can be found here.\nSource Code\nDocumentation:\nnexus-sdk","title":"Typescript declarations"},{"location":"/docs/utilities/index.html#other-javascript-packages","text":"","title":"Other JavaScript Packages"},{"location":"/docs/utilities/index.html#react-nexus","text":"This package contains some utility components to easily integrate the Nexus SDK as React hooks or contexts.\nreact-nexus","title":"React-Nexus"},{"location":"/docs/utilities/index.html#nexus-link","text":"Another utility packages was written to facilitate chained calling behavior, which can be used independently of Nexus.js for other projects.\nnexus-link","title":"Nexus-Link"},{"location":"/docs/faq.html","text":"","title":"FAQ"},{"location":"/docs/faq.html#faq","text":"","title":"FAQ"},{"location":"/docs/faq.html#general-faq","text":"","title":"General FAQ"},{"location":"/docs/faq.html#what-is-blue-brain-nexus-","text":"Blue Brain Nexus is an ecosystem that allows you to organize and better leverage your data through the use of a Knowledge Graph. You can find out more information on our product home page.","title":"What is Blue Brain Nexus?"},{"location":"/docs/faq.html#is-blue-brain-nexus-free-to-use-","text":"Yes, Nexus is a free, Open Source platform released under Apache Licence 2.0","title":"Is Blue Brain Nexus free to use?"},{"location":"/docs/faq.html#how-do-i-run-blue-brain-nexus-","text":"There are many ways to run Nexus. Our public Sandbox is running here and you can use it to test Nexus on small, non-sensitive data. Our tutorial can help you to run Nexus step by step.\nMeanwhile if you want to run it locally you can do so using Docker. You can also deploy Nexus “on premise”, as a single instance or as a cluster. Blue Brain Nexus has also been deployed and tested on AWS using Kubernetes.","title":"How do I run Blue Brain Nexus?"},{"location":"/docs/faq.html#how-can-i-try-blue-brain-nexus-without-installing-it-","text":"The Sandbox provides a public instance that can serve as a testbed. Be aware that the content of the Sandbox is regularly purged.","title":"How can I try Blue Brain Nexus without installing it?"},{"location":"/docs/faq.html#what-is-the-difference-with-a-relational-database-like-postgresql-","text":"Although Blue Brain Nexus can be used as a regular database, it’s flexibility and feature set are well beyond that. Just to mention some of the Nexus features:\nAllows the user to define different constraints to different set of data at runtime Provides automatic indexing into several indexers (currently ElasticSearch and Sparql), dealing with reindexing strategies, retries and progress Provides authentication Comes with a flexible and granular authorization mechanism Guarantees resources immutability, keeping track of a history of changes.","title":"What is the difference with a relational database like PostgreSQL?"},{"location":"/docs/faq.html#is-there-a-limit-on-the-number-of-resources-blue-brain-nexus-can-store-","text":"Blue Brain Nexus leverages scalable open source technologies, therefore limitations and performance depends heavily on the deployment setup where Nexus is running.\nTo get an idea about the ingestion capabilities, we have run Benchmarks where we were able to ingest over 3.5 billion triples representing 120 million resources.","title":"Is there a limit on the number of resources Blue Brain Nexus can store?"},{"location":"/docs/faq.html#what-is-a-knowledge-graph-","text":"A Knowledge Graph is a modern approach to enabling the interlinked representations of entities (real-world objects, activities or concepts). In order to find more information about Knowledge Graphs, please visit the section “Understanding the Knowledge Graph”\nBlue Brain Nexus employs a Knowledge Graph to enable validation, search, analysis and integration of data.","title":"What is a Knowledge Graph?"},{"location":"/docs/faq.html#how-do-i-report-a-bug-which-support-blue-brain-nexus-team-provide-","text":"There are several channels provided to address different issues:\nBug report: If you have found a bug while using the Nexus ecosystem, please create an issue here. Questions: if you need support, we will be reachable through the Github Discussions Documentation: Technical documentation and ‘Quick Start’ to Nexus related concepts can be found here Feature request: If there is a feature you would like to see in Blue Brain Nexus, please first consult the list of open feature requests. In case there isn’t already one, please open a feature request describing your feature with as much detail as possible.","title":"How do I report a bug? Which support Blue Brain Nexus team provide?"},{"location":"/docs/faq.html#technical-faq","text":"","title":"Technical FAQ"},{"location":"/docs/faq.html#what-are-the-clients-i-can-use-with-blue-brain-nexus-what-are-the-requirements-to-run-blue-brain-nexus-locally-","text":"On macOS and Windows, Docker effectively runs containers inside a VM created by the system hypervisor. Nexus requires at least 2 CPUs and 8 GB of memory in total. You can increase the limits in Docker settings in the menu Preferences > Advanced. More details are in the dedicated page.","title":"What are the clients I can use with Blue Brain Nexus? What are the requirements to run Blue Brain Nexus locally?"},{"location":"/docs/faq.html#what-is-json-ld-","text":"JSON-LD is a JavaScript Object Notation for Linked Data. A JSON-LD payload is then converted to an RDF Graph for validation purposes and for ingestion in the Knowledge Graph. In order to find more information about JSON-LD, please visit this page, please visit the section this page","title":"What is JSON-LD?"},{"location":"/docs/faq.html#how-can-i-represent-lists-on-json-ld-","text":"Using JSON-LD, arrays are interpreted as Sets by default. If you want an array to be interpreted as a list, you will have to add the proper context for it. For example, if the field containing the array is called myfield, then the context to be added would be:\n{\n \"@context\": {\n \"myfield\": {\n \"@container\": \"@list\"\n }\n }\n}\nYou can find more information about Sets and Lists in JSON-LD on the Json-LD 1.0 specification","title":"How can I represent lists on JSON-LD?"},{"location":"/docs/faq.html#what-is-rdf-","text":"The Resource Description Framework (RDF) is a graph-based data model used for representing information in the Web. The basic structure of any expression in RDF is in triples, an extremely easy segmentation of any kind of knowledge in subject-predicate-object. It is a family of W3C specifications, and was originally designed as a metadata model. In order to find more information about RDF and JSON-LD, please visit this page, please visit the section this page","title":"What is RDF?"},{"location":"/docs/faq.html#what-is-elasticsearch-","text":"Elasticsearch is a document oriented search engine with an HTTP endpoint and schema-free JSON document. It is able to aggregate data based on specific queries enabling the exploration of trends and patterns.","title":"What is Elasticsearch?"},{"location":"/docs/faq.html#what-is-a-shacl-schema-","text":"SHACL (Shapes Constraint Language) is a language for validating RDF graphs against a set of conditions. These conditions are provided as shapes and other constructs expressed in the form of an RDF graph. SHACL is used in Blue Brain Nexus to constrain and control the payload that can be pushed into Nexus. You can use the SHACL Playground to test your schemas.","title":"What is a SHACL schema?"},{"location":"/docs/faq.html#do-i-need-to-define-shacl-schemas-to-bring-data-in-","text":"No. SHACL schemas provide an extra layer of quality control for the data that is ingested into Nexus. However, we acknowledge the complexity of defining schemas. That’s why clients can decide whether to use schemas to constrain their data or not, depending on their use case and their available resources.","title":"Do I need to define SHACL schemas to bring data in?"},{"location":"/docs/faq.html#where-can-i-find-shacl-shapes-i-can-reuse-point-to-resources-like-schema-org-","text":"Datashapes.org provides an automated conversion of schema.org as SHACL entities. A neuroscience community effort and INCF Special Interest Group - Neuroshapes, provides open schemas for neuroscience data based on common use cases.","title":"Where can I find SHACL shapes I can reuse (point to resources, like schema.org)?"},{"location":"/docs/faq.html#why-are-rdf-and-json-ld-important-for-blue-brain-nexus-","text":"RDF is the data model used to ingest data into the Knowledge Graph and it is also used for SHACL schema data validation. JSON-LD is an RDF concrete syntax, and it is the main format we use for messages exchange. The choice of JSON-LD is due to the fact that is plain JSON but with some special keywords and JSON is a broadly adopted API exchange format.","title":"Why are RDF and JSON-LD important for Blue Brain Nexus?"},{"location":"/docs/faq.html#can-i-connect-any-sparql-client-to-nexus-sparql-endpoint-","text":"Yes. As long as the client supports the ability to provide a Authentication HTTP Header (for authentication purposes) on the HTTP request, any SPARQL client should work.","title":"Can I connect any SPARQL client to Nexus’ SPARQL endpoint?"},{"location":"/docs/faq.html#how-can-i-create-an-organization-as-an-anonymous-user-in-the-docker-compose-file-what-needs-to-be-done-to-switch-to-mode-","text":"By default, the permissions used - for an authenticated user - when running Nexus Delta are the ones defined on the JVM property app.permissions.minimum. In order to change that behaviour, please create some ACLs for the path /. For more details about ACLs creation, visit the ACLs page.","title":"How can I create an organization as an anonymous user in the docker-compose file? What needs to be done to switch to “authenticated” mode?"},{"location":"/docs/faq.html#can-i-use-blue-brain-nexus-from-jupyter-notebooks-","text":"Blue Brain Nexus can be used from Jupyter Notebooks using Nexus Forge or Nexus Python SDK. Alternatively, you can also use any Python HTTP client and use Nexus REST API directly from the Jupyter Notebook. Please consider looking at our tutorial to learn how to user Nexus Forge on the Sandbox. Other examples are provided in the folder Notebooks.","title":"Can I use Blue Brain Nexus from Jupyter Notebooks?"}]} \ No newline at end of file +{"docs":[{"location":"/paradox.json","text":"","title":""},{"location":"/docs/index.html","text":"","title":"Blue Brain Nexus"},{"location":"/docs/index.html#blue-brain-nexus","text":"Blue Brain Nexus is an ecosystem that allows you to organize and better leverage your data through the use of a Knowledge Graph. In addition to the products listed here, you’ll find a rich ecosystem of libraries and tools.","title":"Blue Brain Nexus"},{"location":"/docs/index.html#products","text":"The Blue Brain Nexus ecosystem encompasses a broad range of capabilities that are brought to you across three complementary products and a suite of utilities.","title":"Products"},{"location":"/docs/index.html#nexus-fusion","text":"Enabling Collaborative Data and Knowledge Discovery\nFusion is our extensible web application. It hosts different apps to accommodate various use cases. It comes by default with Studios (where you work with data), Admin (for managing the Nexus instance), and will soon support to organise your data activities. It runs on top of the Delta web services, and integrates neatly with our Forge python framework.\nRead more about Fusion","title":"Nexus Fusion"},{"location":"/docs/index.html#nexus-forge","text":"Building and Using Knowledge Graphs Made Easy\nNexus Forge is a domain-agnostic, generic and extensible Python framework enabling non-expert users to create and manage knowledge graphs.\nRead more about Forge","title":"Nexus Forge"},{"location":"/docs/index.html#nexus-delta","text":"Managing the Data and Knowledge Graph Lifecycle\nA scalable and secure service to store and leverage all your data, neatly organised in a Knowledge Graph. It offers an API to perform all your data management operations, this way it can easily integrate with your software stack. Its advanced indexing capabilities automatically build views from your metadata.\nRead more about Delta","title":"Nexus Delta"},{"location":"/docs/index.html#utilities","text":"The Nexus ecosystem leverages a set of smaller open-source utilities.\nDiscover the utilities","title":"Utilities"},{"location":"/docs/index.html#quick-start-guide","text":"Do you know know what a knowledge graph is? Or want to deepen your understanding? Follow our introduction.\nWant to get started with Nexus right away? We provide a tutorial that uses our sandbox environment to let you try the functionalities.\nReady to deploy your own instance of Nexus? Follow our guide.","title":"Quick Start Guide"},{"location":"/docs/index.html#versions","text":"Looking for docs for another release of Nexus ?\nList of versions","title":"Versions"},{"location":"/docs/index.html#roadmap","text":"Curious about our upcoming features? Read our open Roadmap to find out more.","title":"Roadmap"},{"location":"/docs/versions.html","text":"","title":"Versions"},{"location":"/docs/versions.html#versions","text":"","title":"Versions"},{"location":"/docs/versions.html#current-v1-9-x-","text":"Documentation Github Release notes","title":"Current (v1.9.x)"},{"location":"/docs/versions.html#snapshot","text":"Documentation Github","title":"Snapshot"},{"location":"/docs/versions.html#previous-releases","text":"","title":"Previous releases"},{"location":"/docs/versions.html#v1-8-x","text":"Documentation Github Release notes","title":"v1.8.x"},{"location":"/docs/versions.html#v1-7-x","text":"Documentation Github Release notes","title":"v1.7.x"},{"location":"/docs/versions.html#v1-6-x","text":"Documentation Github Release notes","title":"v1.6.x"},{"location":"/docs/versions.html#v1-5-x","text":"Documentation Github Release notes","title":"v1.5.x"},{"location":"/docs/getting-started/index.html","text":"","title":"Getting Started"},{"location":"/docs/getting-started/index.html#getting-started","text":"The Nexus ecosystem is a data catalog with several technologies and techniques used to get insight and explore the data within the ecosystem.\nOne of the powerful ways to query data is through the Knowledge Graph built in Nexus. For that reason we encourage you to get familiar with these concepts reading Understanding Knowledge Graphs.\nThe next steps would be to either try Nexus using the Sandbox deployment or run Nexus locally.","title":"Getting Started"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html","text":"","title":"Understanding Knowledge Graphs"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#understanding-knowledge-graphs","text":"This section will help you understand knowledge graphs and related standards and technologies.","title":"Understanding Knowledge Graphs"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#what-is-a-knowledge-graph-","text":"A knowledge graph is a graph structure that links entities together. The links between the entities contain knowledge, based on how they connect to each other. For example, an apple can be connected to a tree (to show that it grows on trees) or in another case connected to a pie recipe (to show that it is part of a recipe). It is a formalized knowledge that enables programmatical reasoning about concepts in the world around us.\nIn this introduction to knowledge graphs the authors conclude that there is no clear definition of what a knowledge graph is. The term itself was coined in 2012 by Google as they introduced their Knowledge Graph as a mean of finding more relevant related search results by linking connected data on the web. As an idea, knowledge graphs are similar to semantic networks which date back to the 60’s and 70’s. The difference mainly lies in the size of the network, with knowledge graphs being larger. Knowledge graphs are also often generated in a rather manual way (data ingestion, data cleaning) instead of being generated and governed by a set of strict logical rules.\nFor a further introduction to knowledge graphs the “What is a knowledge graph” video from the CS520 Stanford course is a good resource.","title":"What is a knowledge graph?"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#the-graph-structure","text":"A knowledge graph consists of entities (nodes) that are connected to each other with relations (edges).\nThe entity is an object with properties that describe it. For example, a person, a company, an event, a thing… These properties can be called the entity’s “metadata”.\nThe relation describes how entities are connected. For example, being member of, visiting a place, belonging to a country…\nIt’s worth noting that having this graph data structure makes it easy to add new data into an existing graph by connecting new entities and new relations.","title":"The graph structure"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#describing-knowledge-in-a-graph","text":"After deciding what concept or idea that we wish to model in a knowledge graph, we need to collect the metadata that describes our entities. In order to make our data interoperable with other data and to allow us to import data from existing sources we should use a shared language when describing entities and relations. This is achieved using an ontology.\nThe ontology is a kind of dictionary containing types that can be used to describe entities. The metadata is created by picking a type from the ontology that matches what you wish to describe and defining the properties of the chosen type. E.g. a person can be described by a Person type. The name of the person can be encoded in a givenName property. This results in a set of data that can be processed both by humans and computers (as it is structured).\nFor example, in the image below, you can see that the entity Toy Story with a property Release date that has the value March 29th, 1995 and the Director property with the value John Lasseter.","title":"Describing knowledge in a graph"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#inferring-new-data-from-existing-relationships","text":"Since the entities are encoded using well-defined ontologies it allows us to draw conclusions based on the data we have and create new inferred data. This is done by giving the knowledge graph to an inference engine that can apply a set of logical rules to the data to derive new information. For example, if we have a knowledge graph containing persons and their birth year we could create an inference engine with rules that determine whether a person is a child or a retired person.\nIn the second example below, we have Toy Story, it has characters (using the relation called Character) and we have asserted the cast of characters. Having defined this, we can now define a rule that instructs the inference engine to create new relations Voice Cast whenever we find the Cast of a Character. This enables us to query the graph and directly get Toy Story’s voices cast without having to navigate through its Cast first.\nIn reality inferring knowledge is a complex topic. This video lecture shows some real-world examples of algorithms and rules for inference engines. E.g. reasoning about a persons creditworthiness based on what their home address is or trying to spot fake papers that have been submitted to a journal.","title":"Inferring new data from existing relationships"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#growing-a-knowledge-graph","text":"A graph is a flexible data structure, and an ontology can evolve as new data comes in. As a result, data can continually be added to help serve new use cases.\nThe illustration below shows how the initial graph representing Toy Story can be augmented to capture many other related domains such as:\nToy Story’s similar movies (e.g. Cars) Cities and associations related to motion picture production (e.g. Motion Picture Association of America) Places and people connected to animation movies (e.g. Steve Jobs)","title":"Growing a knowledge graph"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#encoding-knowledge-graphs-rdf-json-ld-and-other-standards","text":"","title":"Encoding knowledge graphs: RDF, JSON-LD, and other standards"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#rdf","text":"How do you encode knowledge graphs in a way that is interoperable with other applications and can be integrated with other data sources? You use some common formalism, a language, to describe your entities and relationships. For knowledge graphs this format is RDF. RDF (Resource Description Framework) is a data format where every piece of knowledge can be broken down into a structure (subject, predicate and object) called triple.\nRDF-formatted data can be queried using a query language such as SPARQL. This allows us to create applications that can process knowledge graphs, for example, to infer new data or get answers to questions we may have for the data that is stored in the knowledge graph.","title":"RDF"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#json-ld","text":"RDF is however only a part of what we need in order to encode a graph. We also need an implementation, a “concrete RDF syntax” that shows how to write down an RDF-formatted graph in a format that can be shared e.g. between applications. One syntax that can be used is JSON-LD. It stands for JSON for Linking Data.\nWe start by looking at a simple JSON example:\n[\n \t{\n \"title\":\"Floating island\",\n \"author\":\"Unknown\"\n \t},\n \t{\n \"title\":\"Apple balloon\",\n \"author\":\"Grant Achatz\"\n \t},\n \t{\n \"title\":\"Opera\",\n \"author\":\"Cyriaque Gavillon\"\n \t}\n\n ]\nAfter reading the above JSON we can ask ourselves what this data describes? If we don’t recognise the names we may think these perhaps are titles of books or movies. There is clearly a lack of context resulting in an ambiguity. JSON-LD allows to solve the ambiguity problem by enabling a semantic-preserving data encoding. This is achieved by adding an @context object where every key is associated with an identifier.\nIf we extend the JSON example with the payload below, then both a machine and a human can look up the context to find out that the JSON refers to recipes. I.e. Floating island, Apple balloon and Opera.\n[\n \t{\n \"@context\":\"https://json-ld.org/contexts/recipe.jsonld\",\n \"title\":\"Floating island\",\n \"author\":\"Unknown\"\n \t},\n \t{\n \"@context\":\"https://json-ld.org/contexts/recipe.jsonld\",\n \"title\":\"Apple balloon\",\n \"author\":\"Grant Achatz\"\n \t},\n \t{\n \"@context\":\"https://json-ld.org/contexts/recipe.jsonld\",\n \"title\":\"Opera\",\n \"author\":\"Cyriaque Gavillon\"\n \t }\n\n ]\nIn the JSON-LD playground you can try examples of JSON-LD.","title":"JSON-LD"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#using-schema-org-as-a-common-vocabulary","text":"Having defined a grammar (RDF) and a concrete syntax (JSON-LD) to encode knowledge graphs, there is one more thing to add in order to achieve interoperability with other knowledge graphs. We need a common vocabulary that defines which properties an entity should have - an ontology.\nOne such ontology that is commonly used is the Schema.org vocabulary. You can look up how different concepts are described by searching for them on the schema.org web page. For example, a video game entity is described by properties such as cheatCode or gamePlatform.","title":"Using Schema.org as a common vocabulary"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#reasoning-with-owl","text":"If you wish to reason about knowledge that is stored in a knowledge graph it is useful to have a language that can express properties and relations for the entities in the ontology (the dictionary) that your knowledge graph consists of. OWL (Web Ontology Language) is such a language. It is built on top of RDF (which can be seen as the grammar for OWL) and it is different from JSON-LD, since JSON-LD merely describes the syntax we use to encode our knowledge graph.\nWith OWL you can form axioms and expressions for the entities in your ontology. For example, expressing that a woman is a subclass of a person:\nSubClassOf( :Woman :Person )","title":"Reasoning with OWL"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#references-and-resources-","text":"The sections below contain references and resources that can be used to learn more about knowledge graphs.\nIntroduction: What Is a Knowledge Graph? in Knowledge Graphs: Methodology, Tools and Selected Use Cases Author: Fensel, Dieter et al Published: Springer International Publishing, 2020 DOI: 10.1007/978-3-030-37439-6_1 What are some knowledge graph inference algorithms? Published: 23.04.2020, Youtube.com What is the role of knowledge graphs in machine learning? - Challenges for explainable AI Published: 20.05.2020, Youtube.com Programming the Semantic Web Author: Segaran, Toby et al Published: O’Reilly Media, Inc., 2009 ISBN: 9780596153816 What is a knowledge graph? Published: 23.04.2020, Youtube.com RDF 1.1 primer Author: W3C Working Group Editors: Schreiber, G., Raimond, Y Published: 24.06.2014 JSON-LD 1.1 Editors: Kellogg G., Champin P-A., Longley D. Published: 16.07.2020 JSON LD - curated resources This is probably one of the best resources to start with if you are interested in JSON-LD. OWL 2 Web Ontology Language Document Overview (Second Edition) Author: W3C Working Group Published: 11.12.2012 Linked Data Patterns Authors: Leigh Dodds, Ian Davis Published: 31.05.2012 Validating RDF Data Authors: Jose Emilio labra Gayo, Eric Prud’hommeaux, Iovka Boneva, Dimitris Kontokostas Published: 2018","title":"References and resources:"},{"location":"/docs/getting-started/try-nexus.html","text":"","title":"Try Nexus with Neuroscience Datasets"},{"location":"/docs/getting-started/try-nexus.html#try-nexus-with-neuroscience-datasets","text":"Welcome to our Nexus tutorial! Nexus is an open-source data and metadata management suite. With Nexus, your data is catalogued and indexed as a knowledge graph, all interconnected.\nNexus consists of different products, such as:\nNexus Delta: our core data management platform Nexus Fusion: your web interface to access the metadata and data stored in the knowledge graph Nexus Forge: a Python library to work with knowledge graphs, and in particular Nexus Delta\nIn this tutorial, you’ll learn to interact with the knowledge graph through these different tools. Nexus can be used for any kind of data although this tutorial focuses on neuroscience data.\nThis tutorial is also part of the edX EPFL Simulation Neuroscience MOOC.\nIn Step 0, you’ll learn to setup your Python environment if you want to run the Jupyter notebooks locally. You can skip this step if you use Binder or Google Colaboratory (preferred).\nIn Step 1, you’ll learn about the Nexus Sandbox deployment, a dedicated environment for this tutorial. You’ll use Nexus Fusion to login and access your dedicated project instantiated in Nexus Delta.\nIn Step 2, you’ll learn to download and register data from the Allen Institute for Brain Science (AIBS). You’ll use Nexus Forge in a Jupyter notebook to interact with Nexus Delta.\nIn Step 3, you’ll learn to download and register data from multiple sources (AIBS and MouseLight). You’ll use Nexus Forge in a Jupyter notebook to interact with Nexus Delta.\nIn Step 4, you’ll learn to organize your data on the web for easier sharing and publishing. You’ll use Nexus Fusion on the Sandbox deployment.\nIn Step 5, you’ll learn to prepare your data in order to search for similar datasets across the data you have integrated in Blue Brain Nexus.\nLet’s go!\nYou can use the side menu to navigate between the page’s sections.","title":"Try Nexus with Neuroscience Datasets"},{"location":"/docs/getting-started/try-nexus.html#step-0-python-setup","text":"In this tutorial, you are encouraged to run Nexus Forge to interact with Nexus. Nexus Forge is a python library. We provide Jupyter Notebooks with examples.\nYou can either run the notebooks in Binder or Google Colaboratory, or run them locally.","title":"Step 0: Python Setup"},{"location":"/docs/getting-started/try-nexus.html#running-python-and-jupyter-locally","text":"Here is a step-by-step guide to setup your Python environment to work with Nexus Forge, Jupyter, and the Allen SDK.\nThis is not mandatory, feel free to use your preferred method. If you are using Binder or Google Colaboratory, you can skip this section.","title":"Running Python and Jupyter Locally"},{"location":"/docs/getting-started/try-nexus.html#install-miniconda","text":"Go to Miniconda and download and install the latest for your operating system.","title":"Install Miniconda"},{"location":"/docs/getting-started/try-nexus.html#create-an-environment","text":"Open the terminal and type:\nconda create -yn kgforge python=3.7","title":"Create an environment"},{"location":"/docs/getting-started/try-nexus.html#switch-to-the-environment","text":"In the terminal, type:\nconda activate kgforge","title":"Switch to the environment"},{"location":"/docs/getting-started/try-nexus.html#install-additional-packages","text":"To avoid any issues, install Jupyter in your environment.\npip install jupyter","title":"Install Additional Packages"},{"location":"/docs/getting-started/try-nexus.html#clone-the-nexus-repository","text":"The notebooks used for this tutorial are maintained in the Nexus GitHub repository under /docs/src/main/paradox/docs/getting-started/notebooks.\nTo clone the repository, you will need to install Git (if not already present on your system), then open the terminal, navigate to your preferred location, and type:\ngit clone https://github.com/BlueBrain/nexus.git","title":"Clone the Nexus Repository"},{"location":"/docs/getting-started/try-nexus.html#running-notebooks-in-binder-or-google-colaboratory","text":"","title":"Running Notebooks in Binder or Google Colaboratory"},{"location":"/docs/getting-started/try-nexus.html#step-1-nexus-setup","text":"We run the latest version of Nexus publicly for education. You can also use the instance in your organization (if any), or setup Nexus from scratch.","title":"Step 1: Nexus Setup"},{"location":"/docs/getting-started/try-nexus.html#1-1-using-the-sandbox","text":"The Sandbox is a deployment of Nexus for educational purposes.\nOnce on the Sandbox homepage, click on the “Connect” button. It will open a dropdown.\nAt the moment we only provide one identity provider (idP) in the sandbox environment - GitHub. Choose this option from the dropdown of the “Connect” button.\nYou will need an account on GitHub to be able to continue this tutorial.\nOnce logged in, you can get your token. The token is your secure, private, code that you will use in the rest of this tutorial to interact with Nexus.\nThe Sandbox environment automatically provisions a project for you so you don’t have to. Navigate to the Organizations page or click on the “Organizations” tab in the homepage, and you will see the list of organisations in Nexus. A project is contained in an organisation. The organisation where your project is created depends on your identity provider. If you logged in with GitHub for example, your project was created under the github-users organisation.\nNavigate to the correct organisation then search or scroll down to find your project (i.e. your username). You will need the names of the organisation and project for the next parts of the tutorial.","title":"1.1. Using the Sandbox"},{"location":"/docs/getting-started/try-nexus.html#1-2-running-your-own-instance-of-nexus","text":"We do not recommend to setup your own instance for this tutorial. If you are interested to install your own instance, check our guide.","title":"1.2. Running your Own Instance of Nexus"},{"location":"/docs/getting-started/try-nexus.html#step-2-download-and-register-data-from-a-single-source","text":"In this section, you will learn about metadata (and MINDS), provenance, and integrate data from the Allen Institute for Brain Science in Nexus.","title":"Step 2: Download and Register Data from a Single Source"},{"location":"/docs/getting-started/try-nexus.html#2-1-data-vs-metadata","text":"When we talk about data, we’re mostly talking about binary or text files. When we hear metadata, it means “data about the data”.\nIn neuroscience, you will have images of brain slices. You will have images of stained cells. You will find files of 3D-morphologies or electrophysiology recordings of the cell or neuron.\nThe brain is big, and the amount of data collected grows every second.\nAs a result, it quickly becomes extremely difficult for groups of scientists to manage, track, share, and work with this data.\nTo solve this growing pain, we can add metadata, or context, to the data collected. Specifically for neuroscience, we designed MINDS. MINDS is the Minimal Information about a Neuroscience DataSet.\nIn the diagram above, you can see that your data (which we will call Dataset from now on) has now additional properties:\nSubject: Species, age etc. of subject from which dataset was generated Brain Location: Brain region or 3D coordinates within a brain atlas Data Types: Type of the data stored in the dataset Contributions: The agent (scientists, organizations) to whom the dataset is attributed to Distribution: Direct link to the dataset binaries (downloadURL) or web page describing how to download them (accessURL) License: Dataset license (e.g. CC BY 4.0)\nYou can check the details of MINDS by visiting Neuroshapes. Neuroshapes provide open schemas for F.A.I.R. neuroscience data.","title":"2.1. Data vs Metadata"},{"location":"/docs/getting-started/try-nexus.html#2-2-provenance","text":"You have just seen how we can add metadata to our datasets to give more context. This allows scientists to find their data as well as their peers’ more easily.\nAnother important factor to consider is where the data comes from, i.e. what experiment generated it, who conducted the experiment, and what data was used to derive the new data.\nLuckily for us, some good folks have defined a provenance data model that we can use.\nThe diagram above is the basic representation of provenance. Our Dataset is an extension of the Entity. The Entity itself was generated by an Activity, which itself used (or not) another Entity. Finally, the Activity is associated with an Agent (e.g. a Person or Institution).\nThere are ways to add more details, for example with “qualified” relations. You can read more about it in the W3C PROV specification.","title":"2.2. Provenance"},{"location":"/docs/getting-started/try-nexus.html#2-3-allen-institute-for-brain-science-data","text":"The goal of the Allen Institute for Brain Science (AIBS) is to accelerate the understanding of how the brain works.\nThe AIBS has its data (mouse and human brains) available online for free. For the purpose of this tutorial, we’re mostly interested in Cells. Check out their data portal.\nYou can for example access a cell’s morphology page and browse and download the morphology data. Or you can head to the cell’s electrophysiology page to do the same.\nYou can either download and get the required information directly from their portal, or use the Allen SDK (Software Development Kit) to do so from your Python script (as shown in the example notebooks).","title":"2.3. Allen Institute for Brain Science Data"},{"location":"/docs/getting-started/try-nexus.html#2-5-mappers","text":"In Nexus Forge, a mapper will map, transform, and format fields from one source into another. In the case of Nexus, it will map the fields from a data source such as the AIBS to the formats supported by Nexus (the JSON payloads or resources).\nMore specifically, let’s imagine that we have a data source x that contains the following fields:\n{\n \"id\": 123,\n \"givenName\": \"john\",\n \"familyName\": \"doe\",\n \"gender\": \"male\"\n}\nWe want to map these to the fields id, name, and gender. This is how it could look like:\n{\n \"id\" : forge.format(\"identifier\", x.id)\n \"name\" : f\"{x.givenName}/{x.familyName}\",\n \"sex\" : forge.resolve(text=x.gender, scope=\"ontologies\", target=\"terms\")\n}\nWe see that the original id will be formatted to a type identifier, that the givenName and familyName were concatenated, and finally that for the gender, we will check to see if the value exists in an ontology (and is thus already standardized).\nRead more about mapping with Forge.\nIn the code available, we will integrate data from two sources: the AIBS and MouseLight (see Step 3). We will provide mappers for both data sources. You can check the mappers directly on GitHub. There are two mappers for the AIBS, one for neuron morphologies and another for electrophysiology data. For MouseLight, there’s only one mapper, as both morphologies and traces are in the same data source.","title":"2.5. Mappers"},{"location":"/docs/getting-started/try-nexus.html#2-6-running-the-notebook","text":"Github Google Colab Binder\nTo run the notebook locally, open your terminal, clone the Nexus repository, go to the notebook directory, and run Jupyter:\ngit clone https://github.com/BlueBrain/nexus.git\ncd nexus\ncd docs/src/main/paradox/docs/getting-started/notebooks\njupyter notebook one_cell_minds.ipynb","title":"2.6. Running the Notebook"},{"location":"/docs/getting-started/try-nexus.html#2-7-check-resources-in-the-sandbox","text":"Once you have registered resources through Nexus Forge (in the notebook), you can check that they are effectively present in Nexus. You now have two options to do so.","title":"2.7. Check Resources in the Sandbox"},{"location":"/docs/getting-started/try-nexus.html#2-7-1-viewing-resources-across-all-projects","text":"Navigate to the Sandbox landing page. Make sure you are logged in. You should be able to see all the data that was created through the Jupyter notebook under the My data section. Here you can see all the data that has been indexed across all projects you have the right to read from. In the case of this tutorial, you are likely to have access to your own project only.\nYou can also check resources of a particular type by clicking on the corresponding card for that type on the landing page. These cards allow you to search by different datasets. For example if you click on the card labeled “MINDS” on the screen shown in the screenshot above, you should see the following results\nPlease note that each instance of Nexus will have its own Search configuration, the BBP Sandbox has been configured to show NeuronMorphology and Trace datasets for the purpose of this tutorial.\nEach of the rows of this table represent Knowledge Graph entities that we have decided to expose, including some specific metadata describing them (the columns). You can now click on any row in this table to open the corresponding dataset and look into its details.\nYou can find more documentation on how to use Search here.","title":"2.7.1 Viewing resources across all projects"},{"location":"/docs/getting-started/try-nexus.html#2-7-2-by-browsing-your-personal-project","text":"Navigate to the Sandbox then to the correct organisation and project. In the project page, you will have the list of all resources present in your project (Default Query), including the ones that you just integrated. Depending on how you ran the notebook, you should find at least one NeuronMorphology and one Trace resource.","title":"2.7.2 By browsing your personal Project"},{"location":"/docs/getting-started/try-nexus.html#step-3-download-and-register-data-from-multiple-sources","text":"In this section, you will integrate additional data from MouseLight and the Allen Institute for Brain Science.","title":"Step 3: Download and Register Data from Multiple Sources"},{"location":"/docs/getting-started/try-nexus.html#3-1-mouselight-data","text":"The Janelia Research Campus makes MouseLight available to the scientific community. MouseLight generates complete morphological reconstructions of individual neurons from datasets of whole mouse brains imaged at sub-micron resolution.\nYou can access the MouseLight data directly in the browser. You can also access it programmatically through different endpoints, such as GraphQL: http://ml-neuronbrowser.janelia.org/graphql/.\nThe example notebooks will use these endpoints to collect and download the datasets and their metadata.","title":"3.1. MouseLight Data"},{"location":"/docs/getting-started/try-nexus.html#3-2-running-the-notebook","text":"Github Google Colab Binder\nTo run the notebook locally, open your terminal, clone the Nexus repository, go to the notebook directory, and run Jupyter:\ngit clone https://github.com/BlueBrain/nexus.git\ncd nexus\ncd docs/src/main/paradox/docs/getting-started/notebooks\njupyter notebook dataset_from_different_sources.ipynb","title":"3.2. Running the Notebook"},{"location":"/docs/getting-started/try-nexus.html#3-3-check-resources-in-the-sandbox","text":"Go back to section 2.7to learn how to check resources in the Sandbox.","title":"3.3. Check Resources in the Sandbox"},{"location":"/docs/getting-started/try-nexus.html#step-4-organize-and-visualize-cells-in-nexus-fusion","text":"Nexus Fusion allows you to browse the data stored in Nexus. Our extensible architecture also enables the development of visualization plugins.","title":"Step 4: Organize and Visualize Cells in Nexus Fusion"},{"location":"/docs/getting-started/try-nexus.html#4-1-sparql-and-rdf","text":"SPARQL is an RDF query language. In other words, it’s a way to request a subset of data from a database that conforms to the RDF (Resource Description Framework) model.\nWhen writing data to Nexus, the different payloads are stored in a long table, each row representing a resource. The data is then synced to our RDF database and thus converted to a graph. When reading the data, you can query this graph with SPARQL.\nLet us take a JSON-LD example payload:\n{\n \"@type\": [\"http://schema.org/Dataset\", \"http://www.w3.org/ns/prov#Entity\"],\n \"http://schema.org/description\": \"My first dataset\",\n \"http://schema.org/name\": \"Dataset\",\n \"http://schema.org/distribution\": [\n {\n \"@type\": \"http://schema.org/DataDownload\",\n \"http://schema.org/contentUrl\": {\n \"@id\": \"http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"http://schema.org/name\": \"mesh-gradient.png\"\n }\n ]\n}\nYou can copy and paste this JSON-LD payload in the JSON-LD Playground and see the expanded results.\nHere’s what it would look like as an RDF graph:\nThe graph is composed of triples of the form Subject - predicate -> Object. In the example above, _:b0 would be a subject (in our case _:b0 is just an arbitrary ID for the payload), is a predicate, and Dataset an object.\nIf we want to query this graph and return only the name and description of Dataset data types, we can write a simple SPARQL query:\nSELECT ?name ?description\nWHERE {\n ?resource ;\n ?name ;\n ?description .\n}\nThis would result in the following table:\nname description Dataset My first dataset\nLet’s decompose this query. The SELECT statement lists all the fields (i.e. variables) that we want to display. The WHERE clause shows how to get to these fields: which graph paths (or traversals) do we need to do to get to that field. In the WHERE clause, semi-colons ; indicate that we are still talking about the same Subject but with different predicates. A full stop . indicates that the statement is finished, i.e. that we have finished talking about a specific Subject. A WHERE clause can have multiple statements. If an Object in the statement has a value, it has to match, otherwise it won’t give any results. If the Object is prefixed by a question mark ? it becomes a variable. Variables can have any names.\nIf not using semi-colons, we could have written the query as three separate statements:\nSELECT ?name ?description\nWHERE {\n ?resource .\n ?resource ?name .\n ?resource ?description .\n}\nLet’s imagine that we now want to also get the contentUrl, the query can be adapted to:\nSELECT ?name ?description ?contentUrl\nWHERE {\n ?resource ;\n ?name ;\n ?description ;\n ?distribution .\n ?distribution ?contentUrl .\n}\nThis would result in the following table:\nname description contentURL Dataset My first dataset http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\nIf there were more resources that matched the same graph patterns, the query would have returned them as well.","title":"4.1. SPARQL and RDF"},{"location":"/docs/getting-started/try-nexus.html#4-1-1-optional-improving-json-ld-id-context-and-more","text":"The JSON-LD payload above is quite verbose. Let’s have a look at the different ways to improve it.\nThe first thing to notice is that if I want to reference my dataset, I don’t have an identifier. The node in the graph is a blank node _:b0. I can easily add an ID like this:\n{\n \"@id\": \"http://example.com/my_gradient_dataset\",\n \"@type\": [\"http://schema.org/Dataset\", \"http://www.w3.org/ns/prov#Entity\"],\n \"http://schema.org/description\": \"My first dataset\",\n \"http://schema.org/name\": \"Dataset\",\n \"http://schema.org/distribution\": [\n {\n \"@type\": \"http://schema.org/DataDownload\",\n \"http://schema.org/contentUrl\": {\n \"@id\": \"http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"http://schema.org/name\": \"mesh-gradient.png\"\n }\n ]\n}\nInstead of _:b0, the node will be identified by http://example.com/my_gradient_dataset. The @id uniquely identifies node objects.\nCan we now make the JSON-LD less verbose and easier to read? Yes, by defining a context. A context defines the short-hand names used in the JSON-LD payload. In particular, a context can contain a vocab.\n{\n \"@context\": {\n \"@vocab\": \"http://schema.org/\"\n },\n \"@id\": \"http://example.com/my_gradient_dataset\",\n \"@type\": [\"Dataset\", \"http://www.w3.org/ns/prov#Entity\"],\n \"description\": \"My first dataset\",\n \"name\": \"Dataset\",\n \"distribution\": [\n {\n \"@type\": \"DataDownload\",\n \"contentUrl\": {\n \"@id\": \"http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"name\": \"mesh-gradient.png\"\n }\n ]\n}\nIf you copy the above snippet to the JSON-LD Playground and look at the expanded form, you will notice that the properties all expand with the http://schema.org/ prefix. Don’t hesitate to do the same for the ones below. Play a little with the payload to see what happens to the expanded form.\nBut what if we want to shorten specific values? We can add them in the context as well.\n{\n \"@context\": {\n \"@vocab\": \"http://schema.org/\",\n \"Entity\": \"http://www.w3.org/ns/prov#Entity\"\n },\n \"@id\": \"http://example.com/my_gradient_dataset\",\n \"@type\": [\"Dataset\", \"Entity\"],\n \"description\": \"My first dataset\",\n \"name\": \"Dataset\",\n \"distribution\": [\n {\n \"@type\": \"DataDownload\",\n \"contentUrl\": {\n \"@id\": \"http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"name\": \"mesh-gradient.png\"\n }\n ]\n}\nFinally, the last improvement would be to shorten our IDs. For this we can use a base.\n{\n \"@context\": {\n \"@base\": \"http://example.com/\",\n \"@vocab\": \"http://schema.org/\",\n \"Entity\": \"http://www.w3.org/ns/prov#Entity\"\n },\n \"@id\": \"my_gradient_dataset\",\n \"@type\": [\"Dataset\", \"Entity\"],\n \"description\": \"My first dataset\",\n \"name\": \"Dataset\",\n \"distribution\": [\n {\n \"@type\": \"DataDownload\",\n \"contentUrl\": {\n \"@id\": \"cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"name\": \"mesh-gradient.png\"\n }\n ]\n}\nBy default, in Nexus, the base (resp. vocab) defaults to your project, e.g. https://bbp.epfl.ch/nexus/v1/resources/github-users/adulbrich/_/ (resp. https://bbp.epfl.ch/nexus/v1/vocabs/github-users/adulbrich/).\nThe context can also point to another resource so that it is defined once and can be re-used in multiple resources. In Nexus, a default context for the Nexus-specific metadata is defined.\nThere’s much more to the JSON-LD syntax. Don’t hesitate to have a look for a more detailed explanation.","title":"4.1.1. (Optional) Improving JSON-LD: ID, Context and More"},{"location":"/docs/getting-started/try-nexus.html#4-1-2-optional-improving-sparql-prefixes","text":"The SPARQL query above was quite verbose in the sense that we had to write the full URI for predicates, similarly to the full properties URIs in the JSON payload.\nThere is a way to shorten these with PREFIX statements. Prefixes are similar to the base and vocabs for JSON-LD in their use.\nPREFIX rdf: \nPREFIX schema: \nSELECT ?name ?description ?contentUrl\nWHERE {\n ?resource rdf:type schema:Dataset ;\n schema:name ?name ;\n schema:description ?description ;\n schema:distribution ?distribution .\n ?distribution schema:contentUrl ?contentUrl .\n}\nThe new query will yield the exact same results as the one defined earlier, but is much more readable. By defining prefixes, we can replace long URIs by the prefix and the actual property. This means that for example becomes schema:distribution.\nYou will often see that instead of rdf:type (the shortened version of ), people use a. This is an RDF specific keyword to point to types. In the example above, the line would then be ?resource a schema:Dataset.\nYou can learn more about SPARQL in the official documentation.","title":"4.1.2. (Optional) Improving SPARQL: Prefixes"},{"location":"/docs/getting-started/try-nexus.html#4-2-project-and-resource-views","text":"As you saw in the example above, we can use SPARQL to query the cells in our Nexus project.\nLet’s start by accessing your Nexus instance or the Sandbox. Go to your project by clicking on the “Projects” card and searching for your project.\nIn the Sandbox, the organization corresponds to the identity provider used, and the project to your username. For example, if you used GitHub, the organization will be github-users and your project will be your GitHub username.\nIn the Project view, you will have the list of all resources that you’ve registered within your project. You can filter by type or search for a specific term in the name, label, or description.\nClick on a resource to open the Resource view.\nDepending on the resource data type, you might see one or more “plugins”. Plugins are components that will show up for specific resources or properties. For example, if you registered a neuron morphology and the data is properly attached through the distribution, you will be able to see a 3D morphology browser plugin.\nMore importantly, you will find the Advanced view plugin at the bottom of the view. Expand it and you will see the actual resource payload stored by Nexus, and navigate the graph through links, or visualize the surrounding graph in the graph tab.\nHere’s an example of the JSON payload of the neuron morphology resource previously registered (context left out for clarity):\n{\n \"@context\": {...},\n \"@id\": \"https://bbp.epfl.ch/neurosciencegraph/data/neuronmorphologies/491ea474-34f1-4143-8e1d-9f077602d36e\",\n \"@type\": [\n \"Dataset\",\n \"NeuronMorphology\"\n ],\n \"apicalDendrite\": \"spiny\",\n \"brainLocation\": {\n \"@type\": \"BrainLocation\",\n \"brainRegion\": {\n \"@id\": \"mba:778\",\n \"label\": \"VISp5\"\n },\n \"coordinatesInBrainAtlas\": {\n \"valueX\": 8881,\n \"valueY\": 953.839501299405,\n \"valueZ\": 7768.22695782726\n },\n \"hemisphere\": \"right\",\n \"layer\": \"5\"\n },\n \"cell_reporter_status\": \"positive\",\n \"contribution\": {\n \"@type\": \"Contribution\",\n \"agent\": {\n \"@id\": \"https://www.grid.ac/institutes/grid.417881.3\",\n \"@type\": \"Organization\",\n \"label\": \"Allen Institute for Brain Science\"\n }\n },\n \"csl__normalized_depth\": 0.478343598387418,\n \"distribution\": {\n \"@type\": \"DataDownload\",\n \"atLocation\": {\n \"@type\": \"Location\",\n \"store\": {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\"\n }\n },\n \"contentSize\": {\n \"unitCode\": \"bytes\",\n \"value\": 83865\n },\n \"contentUrl\": \"https://sandbox.bluebrainnexus.io/v1/files/github-users/adulbrich/30704eaf-7c87-4d74-8d41-50f673961580\",\n \"digest\": {\n \"algorithm\": \"SHA-256\",\n \"value\": \"833a94e1b6de4b4bc5beef4ccc75f84cfec9d5e5f40752d7cefb0ed1f545bbda\"\n },\n \"encodingFormat\": \"application/swc\",\n \"name\": \"reconstruction.swc\"\n },\n \"generation\": {\n \"@type\": \"Generation\",\n \"activity\": {\n \"@type\": \"NeuronMorphologyReconstruction\",\n \"hadProtocol\": {}\n }\n },\n \"identifier\": 485909730,\n \"license\": {\n \"@id\": \"https://alleninstitute.org/legal/terms-use/\",\n \"@type\": \"License\"\n },\n \"name\": \"Cux2-CreERT2;Ai14-205530.03.02.01\",\n \"nr__average_contraction\": 0.891127894162828,\n \"nr__average_parent_daughter_ratio\": 0.844376941289302,\n \"nr__max_euclidean_distance\": 446.97383394351,\n \"nr__number_bifurcations\": 18,\n \"nr__number_stems\": 7,\n \"nr__reconstruction_type\": \"dendrite-only\",\n \"objectOfStudy\": {\n \"@id\": \"http://bbp.epfl.ch/neurosciencegraph/taxonomies/objectsofstudy/singlecells\",\n \"@type\": \"ObjectOfStudy\",\n \"label\": \"Single Cell\"\n },\n \"subject\": {\n \"@type\": \"Subject\",\n \"age\": {\n \"period\": \"Post-natal\"\n },\n \"identifier\": 485250100,\n \"name\": \"Cux2-CreERT2;Ai14-205530\",\n \"sex\": {},\n \"species\": {\n \"label\": \"Mus musculus\"\n },\n \"strain\": {\n \"label\": \"Cux2-CreERT2\"\n }\n },\n \"tag__apical\": \"intact\"\n}","title":"4.2. Project and Resource Views"},{"location":"/docs/getting-started/try-nexus.html#4-3-query-neuroscience-data","text":"Going back to the project view, you will notice a tab named ‘Query’. Let’s click on it and start experimenting. On clicking on the ‘Query tab’, you will see a sparql query editor.\nWe want to list the morphologies that we previously registered in our project. Let’s write some SPARQL to retrieve it.\nPREFIX nxv: \nPREFIX nsg: \nPREFIX schema: \nPREFIX prov: \nPREFIX rdf: \nPREFIX rdfs: \nPREFIX skos: \nSELECT DISTINCT ?self ?name ?brainRegion ?brainRegionLayer ?subjectSpecies ?subjectStrain ?registered_by ?registeredAt\nWHERE {\n?entity nxv:self ?self ;\n a nsg:NeuronMorphology ;\n schema:name ?name ;\n nxv:createdBy ?registered_by ;\n nxv:createdAt ?registeredAt ;\n nxv:deprecated false ;\n nsg:brainLocation / nsg:brainRegion / rdfs:label ?brainRegion ;\n nsg:brainLocation / nsg:layer ?brainRegionLayer ;\n nsg:subject / nsg:species / rdfs:label ?subjectSpecies ;\n nsg:subject / nsg:strain / rdfs:label ?subjectStrain.\n}\nLIMIT 1000\nWe list a couple more prefixes in this query. Even though we don’t use most of them, they are common ones.\nWe introduce a new notation to traverse the graph: slashes /. This helps us writing more succinct queries by not referencing a temporary variable every time we want to traverse a node.\nFinally, you will notice the self. This is an internal Nexus property (in addition to createdBy and createdAt, as illustrated by the use of the nxv prefix) that points to the actual source of the resource. We will need the self to open the resource view from a Studio (see next section).\nNote that we have have a LIMIT 1000 clause at the end. This will limit the number of returned results in case there are more than 1000.\nHere’s the result of the above query:\nself name brainRegion brainRegionLayer subjectSpecies subjectStrain registered_by registeredAt https://sandbox.bluebrainnexus.io/v1/resources/github-users/adulbrich/_/... Cux2-CreERT2;Ai14-205530.03.02.01 VISp5 5 Mus musculus Cux2-CreERT2 https://sandbox.bluebrainnexus.io/v1/realms/github/users/adulbrich 2021-07-27T18:58:45.238Z","title":"4.3. Query Neuroscience Data"},{"location":"/docs/getting-started/try-nexus.html#4-4-create-a-studio","text":"Go back to your project view. Click on the ‘Studios’ tab. It will open in a new window.\nYou will land on:\nOn this page you can create a new studio. A Studio is a dedicated web page in your project that you can organise into pages (workspaces, as horizontal tabs at the top) and sections (dashboards, as vertical tabs on the left side) and list your data in a logical way. The tables are powered by SPARQL queries and the data present in your project.\nStart by creating a Workspace. To create a workspace, click the Workspace button and in the menu that appears click Add Workspace. You will be presented with a dialog requesting the label of the workspace and optionally a description. Enter a label of your choosing and click Save.\nNext, create a Dashboard. Click the Dashboard button and choose Add from the pop-up menu. In the Dashboard creation dialog, specify the default Sparql Index view and specify the SPARQL query above. The ‘Configure Columns’ button will list the columns to be returned by the query and support specifying options on the columns such as enabling searching or sorting.\nBecause we are using the self, clicking on a row of the newly created table will open the resource view.\nIt’s your turn now to add a dashboard to list your Neuron Electrophysiology data. Create the dashboard and modify the SPARQL query above.\nCongratulations! You’ve created your very first studio, which completes this tutorial step.","title":"4.4. Create a Studio"},{"location":"/docs/getting-started/try-nexus.html#step-5-finding-similar-datasets-using-recommendations","text":"In this section, you will first learn about recommendation systems, then reuse the data you have integrated in Nexus in previous steps and build a recommendation system to find datasets that are similar to a chosen neuron morphology or electrophysiology recording.","title":"Step 5: Finding Similar Datasets using Recommendations"},{"location":"/docs/getting-started/try-nexus.html#5-1-introduction-to-recommendations","text":"Recommendation systems are widely used in many domains, for example, streaming services provide recommendations for movies or songs, online stores generate product recommendations, etc. Such systems allow selecting the most relevant entities from the vast space of all the available choices. This selection can be based on different criteria, for example, various features of target entities (movie genre, country, cast), user profiles, and interactions with the entities of interest (for example, previously watched movies).\nIn a similar way, there is a need for recommendation systems that help us to explore our Knowledge Graphs when they become overwhelmingly large. Given a node in a Knowledge Graph (corresponding to, for example, a neuron morphology dataset), we may want to recommend a set of most similar nodes according to some complex criteria.\nOne of the most common techniques for building a recommendation system is based on entity embedding that represents each entity with a numerical vector. Given a starting entity (a neuron morphology dataset), the task of finding similar entities can be reduced to a simple search for the nearest neighbors in the vector space of our embedding.\nOne of the first modern approaches to entity embedding reflecting their semantic similarity was developed by the Natural Language Processing (NLP) community and is called word2vec. To generate vector representations of words, it trains a neural network on a large text corpus from which word contexts are extracted. The resulting vector representation is able to capture the semantic similarity between different words.\nSimilarity to word2vec, node2vec builds vector representations of graph nodes. To generate ‘context’ for different nodes, this approach performs random walks and explores the neighborhood of a given node.\nFinally, another derivative of word2vec, adapted specifically for building node embedding on Knowledge Graphs, is called rdf2vec.\nIn this tutorial, we use rdf2vec in order to build a toy recommendation system for exploring similar neuron morphologies and electrophysiology recordings.\nFurther reads on graph embedding:\nGraph embedding techniques, applications, and performance: A survey Knowledge Graph Embedding: A Survey of Approaches and Applications","title":"5.1. Introduction to Recommendations"},{"location":"/docs/getting-started/try-nexus.html#5-2-running-the-notebook","text":"Github Google Colab Binder\nTo run the notebook locally, open your terminal, clone the Nexus repository, go to the notebook directory, and run Jupyter:\ngit clone https://github.com/BlueBrain/nexus.git\ncd nexus\ncd docs/src/main/paradox/docs/getting-started/notebooks\nNote: You will need gcc installed locally to run the following notebook.\njupyter notebook MOOC_Content_based_Recommender_System_using_Blue_Brain_Nexus.ipynb\nWell done! You have now completed the last part of this tutorial. To learn more, scroll down or navigate to our documentation, or start contributing to our Github repositories.\nIf you have reached this tutorial via the Simulation Neuroscience MOOC, you can now head back to the edX platform and complete this week assignment.","title":"5.2. Running the Notebook"},{"location":"/docs/getting-started/try-nexus.html#learn-more","text":"","title":"Learn More"},{"location":"/docs/getting-started/try-nexus.html#another-tutorial-with-the-movielens-dataset","text":"Nexus can be used to manage more than neuroscience data. If you want to try it, head over to our MovieLens Tutorial!","title":"Another Tutorial with the MovieLens Dataset"},{"location":"/docs/getting-started/try-nexus-movielens.html","text":"","title":"Try Nexus with the MovieLens Dataset"},{"location":"/docs/getting-started/try-nexus-movielens.html#try-nexus-with-the-movielens-dataset","text":"In this tutorial, you will use the core features of the Nexus ecosystem through our sandbox. This requires minimal technical knowledge but the ability to install a Python library and run a jupyter notebook.\nIn the first step, you’ll learn:\nto login into our Nexus Sandbox, create an organization and project, get your personal token.\nIn the second step, you’ll learn:\ninstall Nexus Forge, configure a Knowledge Graph forge, transform data, load the transformed data into the project, search for data using a SPARQL query.\nIn the third step, you’ll learn:\ncreate a Studio in Nexus Fusion, visualize and filter loaded data.\nFinally, check our Learn More section for more advanced tutorials based on the same datasets.","title":"Try Nexus with the MovieLens Dataset"},{"location":"/docs/getting-started/try-nexus-movielens.html#configuring-your-project-in-nexus-fusion","text":"The Nexus Sandbox is a deployment of Nexus Delta and Fusion publicly available to anybody. Please note that you should not store any sensitive data in this environment. Also, we do not offer guaranty as to how long the data will be kept, this is only for learning and testing purposes.\nNexus Fusion is the web interface that you will use in order to interact with Nexus Delta (the web services that manages the underlying knowledge graph).\nPlease bear in mind that the data stored in the Nexus Sandbox is being purged at regular intervals. We recommend you do not store any sensitive data in this environment since it is accessible to many other users.\nThe first step is to login, by clicking in the upper right corner of the screen. You can login with your Github credentials.\nThe Sandbox environment automatically provisions a project for you so you don’t have to. From the landing page, click on the “Organizations” card and you will see the list of organisations in Nexus. A project is contained in an organisation. The organisation where your project is created depends on your identity provider. If you logged in with GitHub for example, your project was created under the github-users organisation.\nNow open the github-users organisation and find your own project, which is named after your login. Once the project is created, you’ll land on the project view. There is no resources at first. Wait for it. You will quickly see that the project has finished indexing (top right corner).\nWhich means that the system has created default indices and storage for you.\nWe’re all set! We now have a project to host our resources and datasets. Let’s move on to the second part of this tutorial.","title":"Configuring your Project in Nexus Fusion"},{"location":"/docs/getting-started/try-nexus-movielens.html#working-with-data-in-nexus-forge","text":"We’ll load the MovieLens dataset into the created project within Nexus Delta using the python framework Nexus Forge.\nA jupyter notebook is available for this part of the tutorial and can be spawn easily using Google Colab, binder, or locally:\nGoogle Colab binder Github\nFor local execution, Nexus Forge can be installed using these instructions. Make sure that the jupyter notebook|lab is launched in the same virtual environment where Nexus Forge is installed. Alternatively, set up a specialized kernel.\nIf you want to try some other examples of Nexus Forge, you can use these notebooks.\nThe next step is to use this query to create a Studio view in Nexus Fusion.","title":"Working with Data in Nexus Forge"},{"location":"/docs/getting-started/try-nexus-movielens.html#exploring-the-graph-in-nexus-fusion","text":"Login the Sandbox and navigate your previously created project.\nClick on the studio tab.\nIn a new browser tab, you will see a list of all studios you have access to. Click on Create Studio.\nGive a name to your Studio and click Save.\nHere’s your empty Studio. Click the + icon to Add Workspace.\nGive a name to your Workspace and click Save.\nYou now have one Workspace configured. Click the + icon to Add Dashboard..\nIn order to query the graph in a Studio Dashboard, a small modification of the previous query is necessary. You can find more information about it in the Studio docs.\nPREFIX vocab: \nPREFIX nxv: \nSELECT DISTINCT ?self ?title\nWHERE {\n?id nxv:self ?self ;\n nxv:deprecated false ;\n vocab:title ?title ;\n ^vocab:movieId / vocab:tag \"thought-provoking\" .\n}\nLIMIT 20\nChoose a name for your Dashboard, copy the query. For the “View” select https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex from the dropdown. Click on Configure Columns button to see a preview of all the columns the dashboard will have. Now click Save.\nAnd there are the results:\nGood job! You just finished this introductory course to Nexus using our Sandbox. You can now install Nexus locally or continue with the tutorials below.","title":"Exploring the Graph in Nexus Fusion"},{"location":"/docs/getting-started/try-nexus-movielens.html#learn-more","text":"","title":"Learn More"},{"location":"/docs/getting-started/try-nexus-movielens.html#querying-knowledge-graph-using-sparql","text":"This tutorial introduces the basics of SPARQL, a query language for querying RDF based knowledge graph. It also demonstrates how to query a Nexus SparqlView.\nYou will build queries to explore and navigate a knowledge graph using SPARQL and Nexus.\nYou will learn:\nthe basics of the SPARQL query language, how to connect to and query a SparqlView in Nexus.\nYou will need Python 3.5 or higher with support for Jupyter notebook.\nThis tutorial code is available on:\nGithub Google Colab","title":"Querying knowledge graph using SPARQL"},{"location":"/docs/getting-started/try-nexus-movielens.html#querying-a-knowledge-graph-using-elasticsearch","text":"The goal of this notebook is to learn how to connect to an Elasticsearch view and run queries against it.\nIt is not a tutorial about the Elasticsearch DSL language for which many well written learning resources are available.\nYou will build a simple python client to connect to a Nexus ElasticSearchView and query a knowledge graph using Elasticsearch DSL.\nYou will learn how to connect to and query a ElasticSearchView in Nexus.\nYou will need Python 3.5 or higher with support for Jupyter notebook.\nThe tutorial code is available on:\nGithub Google Colab","title":"Querying a Knowledge Graph using Elasticsearch"},{"location":"/docs/getting-started/try-nexus-movielens.html#linking-data-on-the-web","text":"In this tutorial, we demonstrate how to consume structured data published on the web according to the Linked data principles to extend and enrich a knowledge graph.\nYou will build a simple pipeline to query entities managed within Blue Brain Nexus, connect them with entities available on the web as structured data and extend and enrich their metadata.\nYou will learn:\nan understanding of linked data principles, how to query data stored in a Nexus SparqlView, how to query structured data on the web, how to extend the metadata of entities managed within Blue Brain Nexus with external structured data on the web: we target Wikidata as an example, how to update entities within Blue Brain Nexus using the SDK and enrich their metadata.\nYou will need Python 3.6 or higher with support for Jupyter notebook.\nThis tutorial code is available on:\nGithub Google Colab","title":"Linking data on the web"},{"location":"/docs/getting-started/running-nexus/index.html","text":"","title":"Running Nexus"},{"location":"/docs/getting-started/running-nexus/index.html#running-nexus","text":"If you wish to quickly try out Nexus, we provide a public sandbox. For a more in-depth test-drive of Nexus on your machine, we recommend the Docker Compose approach. For a production deployment on your in-house or cloud infrastructure, please refer to our deployment guide.","title":"Running Nexus"},{"location":"/docs/getting-started/running-nexus/index.html#using-the-public-sandbox","text":"A public instance of Nexus is running at https://sandbox.bluebrainnexus.io. You can log in with a GitHub account. It’s provided for evaluation purposes only, without any guarantees.\nThe API root is https://sandbox.bluebrainnexus.io/v1.\nNote Do not ingest any proprietary or sensitive data. The environment will be wiped regularly, your data and credentials can disappear anytime.","title":"Using the public sandbox"},{"location":"/docs/getting-started/running-nexus/index.html#run-nexus-locally-with-docker","text":"","title":"Run Nexus locally with Docker"},{"location":"/docs/getting-started/running-nexus/index.html#requirements","text":"","title":"Requirements"},{"location":"/docs/getting-started/running-nexus/index.html#docker","text":"Regardless of your OS, make sure to run a recent version of the Docker Engine. This was tested with version 20.10.23. The Docker Engine, along the Docker CLI, come with an installation of Docker Desktop. Visit the official Docker Desktop documentation for detailed installation steps.\nCommand :\ndocker --version\nExample :\n$ docker --version\nDocker version 20.10.23, build 7155243","title":"Docker"},{"location":"/docs/getting-started/running-nexus/index.html#memory-and-cpu-limits","text":"On macOS and Windows, Docker effectively runs containers inside a VM created by the system hypervisor. Nexus requires at least 2 CPUs and 8 GiB of memory in total. You can increase the limits in Docker settings in the menu Settings > Resources.\nFor a proper evaluation using Docker, we recommend allocating at least 16GiB of RAM to run the provided templates. Feel free to tweak memory limits in order to fit your hardware constraints. At the cost of a slower startup and a decreased overall performance, you should be able to go as low as:\nService Memory [MiB] PostgreSQL 512 Elasticsearch 512 Blazegraph 1024 Delta 1024","title":"Memory and CPU limits"},{"location":"/docs/getting-started/running-nexus/index.html#docker-compose","text":"","title":"Docker Compose"},{"location":"/docs/getting-started/running-nexus/index.html#set-up","text":"Download the Docker Compose template into a directory of your choice, for instance ~/docker/nexus/. Download the Delta configuration to the same directory. Download the http proxy configuration to the same directory.","title":"Set-up"},{"location":"/docs/getting-started/running-nexus/index.html#starting-nexus","text":"From within the directory that contains the docker-compose.yaml you downloaded, run the containers using Docker Compose:\nCommand :\ndocker compose --project-name nexus --file=docker-compose.yaml up --detach\nExample :\n$ cd ~/docker/nexus\n$ docker compose --project-name nexus --file=docker-compose.yaml up --detach\n...\n⠿ Network nexus_default Created 0.0s\n⠿ Container nexus-elasticsearch-1 Started 1.2s\n⠿ Container nexus-postgres-1 Started 1.2s\n⠿ Container nexus-blazegraph-1 Started 1.1s\n⠿ Container nexus-delta-1 Started 1.6s\n⠿ Container nexus-web-1 Started 1.8s\n⠿ Container nexus-router-1 Started 2.1s\nWhen running the command for the first time, Docker will pull all necessary images from Dockerhub if they are not available locally. Once all containers are running, wait one or two minutes and you should be able to access Nexus locally, on the port 80:\nCommand :\ncurl http://localhost/v1/version\nExample :\n$ curl http://localhost/v1/version | jq\n{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/version.json\",\n \"delta\": \"1.9.0\",\n \"dependencies\": {\n \"blazegraph\": \"2.1.6-SNAPSHOT\",\n \"elasticsearch\": \"8.11.1\",\n \"postgres\": \"15.5\"\n },\n \"environment\": \"dev\",\n \"plugins\": {\n \"archive\": \"1.9.0\",\n \"blazegraph\": \"1.9.0\",\n \"composite-views\": \"1.9.0\",\n \"elasticsearch\": \"1.9.0\",\n \"storage\": \"1.9.0\"\n }\n}","title":"Starting Nexus"},{"location":"/docs/getting-started/running-nexus/index.html#using-fusion","text":"Fusion can be accessed by opening http://localhost in your web browser. You can start by creating an organization from the http://localhost/admin page.\nNote This setup runs the Nexus ecosystem without an identity provider, and the anonymous user is given all default permissions; do not publicly expose the endpoints of such a deployment.","title":"Using Fusion"},{"location":"/docs/getting-started/running-nexus/index.html#administration","text":"To list running services or access logs, please refer to the official Docker documentation.","title":"Administration"},{"location":"/docs/getting-started/running-nexus/index.html#stopping-nexus","text":"You can stop and delete the entire deployment with:\nCommand :\ndocker compose --project-name nexus down --volumes\nExample :\n$ docker compose --project-name nexus down --volumes\n[+] Running 7/7\n⠿ Container nexus-router-1 Removed 0.2s\n⠿ Container nexus-web-1 Removed 0.3s\n⠿ Container nexus-delta-1 Removed 0.5s\n⠿ Container nexus-postgres-1 Removed 0.3s\n⠿ Container nexus-blazegraph-1 Removed 10.3s\n⠿ Container nexus-elasticsearch-1 Removed 1.0s\n⠿ Network nexus_default Removed 0.1s\nNote As no data is persisted outside the containers, everything will be lost once you shut down the Nexus deployment. If you’d like help with creating persistent volumes, feel free to contact us on Github Discussions.","title":"Stopping Nexus"},{"location":"/docs/getting-started/running-nexus/index.html#endpoints","text":"The provided reverse proxy (the nginx image) exposes several endpoints:\nroot: Nexus Fusion v1: Nexus Delta elasticsearch: Elasticsearch endpoint blazegraph: Blazegraph web interface\nIf you’d like to customize the listening port or remove unnecessary endpoints, you can simply modify the nginx.conf file.","title":"Endpoints"},{"location":"/docs/getting-started/running-nexus/index.html#postgresql-partitioning","text":"Nexus Delta takes advantage of PostgreSQL’s Table Partitioning feature. This allows for improved query performance, and facilitates loading, deleting, or transferring data.\nThe public.scoped_events and public.scoped_states are partitioned by organization, which is itself partitioned by the projects it contains; this follows the natural hierarchy that can be found in Nexus Delta.\nNexus Delta takes care of handling the creation and deletion of the partitions.\nIf the created project is the first one of a given organization, both the organization partition and the project subpartition will be created. If the organization partition already exist, then only the project subpartition will be created upon project creation.\nThe naming scheme of the (sub)partitions is as follows:\n{table_name}_{MD5_org_hash} for organization partitions\n{table_name}_{MD5_project_hash} for project partition\nwhere\n{table_name} is either scoped_events or scoped_states {MD5_org_hash} is the MD5 hash of the organization name {MD5_project_has} is the MD5 hash of the project reference (i.e. has the form {org_name}/{project_name})\nMD5 hashing is used in order to guarantee a constant partition name length (PostgreSQL table names are limited to 63 character by default), as well as to avoid any special characters that might be allowed in project names but not in PostgreSQL table names (such as -).\nExample:\nYou create the organization called myorg, inside of which you create the myproject project. When the project is created, Nexus Delta will have created the following partitions:\nscoped_events_B665280652D01C4679777AFD9861170C, the partition of events from the myorg organization scoped_events_7922DA7049D5E38C83053EE145B27596, the subpartition of the events from the myorg/myproject project scoped_states_B665280652D01C4679777AFD9861170C, the partition of states from the myorg organization scoped_states_7922DA7049D5E38C83053EE145B27596, the subpartition of the states from the myorg/myproject project","title":"PostgreSQL partitioning"},{"location":"/docs/getting-started/running-nexus/index.html#advanced-subpartitioning","text":"While Nexus Delta provides table partitioning out-of-the-box, it is primarily addressing the case where the data is more or less uniformly spread out across multiple projects. If however there is one or more project that are very large, it is possible to add further subpartitions according to a custom rule. This custom subpartitioning must be decided on a case-by-case basis using your knowledge of the given project; the idea is to create uniform partitions of your project. Please refer to the PostgreSQL Table Partitioning documentation.","title":"Advanced subpartitioning"},{"location":"/docs/getting-started/running-nexus/index.html#on-premise-cloud-deployment","text":"There are several things to consider when preparing to deploy Nexus “on premise” because the setup depends a lot on the various usage profiles, but the most important categories would be:\nAvailability Latency & throughput Capacity Efficient use of hardware resources Backup and restore Monitoring & alerting\nEach of the Nexus services and “off the shelf” products can be deployed as a single instance or as a cluster (with one exception at this point being Blazegraph which doesn’t come with a clustering option). The advantages for deploying clusters are generally higher availability, capacity and throughput at the cost of higher latency, consistency and having to potentially deal with network instability.\nThe decision to go with single node deployments or clustered deployments can be revisited later on and mixed setups (some services single node while others clustered) are also possible.\nThe Nexus distribution is made up of Docker images which can be run on any host operating system and each of the “off the shelf” products that also offer Docker as a deployment option. We would generally recommend using a container orchestration solution like Kubernetes as it offers good management capabilities, discovery, load balancing and self-healing. They also accommodate changes in hardware allocations for the deployments, changes that can occur due to evolving usage patterns, software updates etc. Currently, the largest Nexus deployment is at EPFL and runs on Kubernetes.","title":"On premise / cloud deployment"},{"location":"/docs/getting-started/running-nexus/index.html#choice-of-hardware","text":"Depending on the target throughput, usage profiles and data volume the hardware specification can vary greatly; please take a look at the benchmarks section to get an idea of what you should expect in terms of throughput with various hardware configurations. When the usage profiles are unknown a couple of rules of thumb should narrow the scope:\nNexus uses a collection of data stores (PostgreSQL, Elasticsearch, Blazegraph) which depend performance wise to the underlying disk access, so: prefer local storage over network storage for lower latency when doing IO, prefer SSD over HDDs because random access speed is more important than sequential access, one exception is the file storage (file resources which are stored as binary blobs on the filesystem) where the network disks should not be a cause for concern, nor random access speed; this assumes that accessing attachments is not the at the top in the usage profile All of Nexus services and most of the “off the shelf” products are built to run on top of the JVM which usually require more memory over computing power. A rough ratio of 2 CPU cores per 8GB of RAM is probably a good one (this of course depends on the CPU specification). Due to the design for scalability of Nexus services and “off the shelf” products the network is a very important characteristic of the deployment as frequent dropped packets or network partitions can seriously affect the availability of the system. Clustered / distributed systems generally use some form of consensus){ open=new } which is significantly affected by the reliability of the network. If the reliability of the network is a concern within the target deployment then vertical scalability is desirable over horizontal scalability: fewer host nodes with better specifications is better over more commodity hardware host nodes.","title":"Choice of hardware"},{"location":"/docs/getting-started/running-nexus/index.html#postgresql","text":"Nexus uses PostgreSQL as its primary store as for its strong reputation for performance, reliability and flexibility. It can also be run in different contexts from integration to\nSince this is the primary store it is the most important system to be backed up. All of the data that Nexus uses in other stores can be recomputed from the one stored in PostgreSQL as the other stores are used as mere indexing systems.\n// TODO capacity planning + recommendations\nAs described in the architecture section the generally adopted persistence model is an EventSourced model in which the data store is used as an append only store. This has implications to the total amount of disk used by the primary store.\n// TODO formula computing disk space","title":"PostgreSQL"},{"location":"/docs/getting-started/running-nexus/index.html#elasticsearch","text":"Nexus uses Elasticsearch to host several system indices and user defined ones. It offers sharding and replication out of the box. Deciding whether this system requires backup depends on the tolerated time for a restore. Nexus can be instructed to rebuild all indices using the data from the primary store, but being an incremental indexing process it can take longer than restoring from a backup. Since it can be configured to host a number of replicas for each shard it can tolerate a number of node failures.\nThe Elasticsearch setup documentation contains the necessary information on how to install and configure it, but recommendations on sizing the nodes and cluster are scarce because it depends on usage.\nA formula for computing the required disk space:\ntotal = (resource_size * count * documents + lucene_index) * replication_factor\n… where the lucene_index while it can vary should be less than twice the size of the original documents.\nAn example, assuming:\n10KB per resource 1.000.000 distinct resources 3 documents per resource (the number of documents depends on the configured views in the system) 2 additional shard replicas (replication factor of 3)\n… the total required disk size would be:\n(10KB * 1.000.000 * 3 + 2 * (10KB * 1.000.000 * 3)) * 3 = 270.000.000KB ~= 260GB\nThe resulting size represents the total disk space of the data nodes in the cluster; a 5 data node cluster with the data volume in the example above would have to be configured with 60GB disks per node.","title":"Elasticsearch"},{"location":"/docs/getting-started/running-nexus/index.html#blazegraph","text":"Nexus uses Blazegraph as an RDF (triple) store to provide a advanced querying capabilities on the hosted data. This store is treated as a specialized index on the data so as with Kafka and Elasticsearch in case of failures, the system can be fully restored from the primary store. While the technology is advertised to support High Availability and Scaleout deployment configurations, we have yet to be able to setup a deployment in this fashion.\nWe currently recommend deploying Blazegraph using the prepackaged tar.gz distribution available to download from GitHub.\nNote We’re looking at alternative technologies and possible application level (within Nexus) sharding and replicas.\nThe Hardware Configuration section in the documentation gives a couple of hints about the requirements to operate Blazegraph and there are additional sections for optimizations in terms of Performance, IO and Query.\nBlazegraph stores data in an append only journal which means updates will use additional disk space.\nA formula for computing the required disk space:\ntotal = (resource_triples + nexus_triples) * count * number_updates * triple_size + lucene_index\n… where the lucene_index while it can vary should be less than twice the size of the original documents.\nAn example, assuming:\n100 triples (rough estimate for a 10KB json-ld resource representation) 20 additional nexus triples on average 1.000.000 distinct resources 10 updates per resource 200 bytes triple size (using quads mode)\n… the total required disk size would be:\n(100 + 20) * 1.000.000 * 10 * 200 / 1024 * 3 ~= 700.000.000KB ~= 670GB\nCompactions can be applied to the journal using the CompactJournalUtility to reduce the disk usage, but it takes quite a bit a time and requires taking the software offline during the process.","title":"Blazegraph"},{"location":"/docs/getting-started/running-nexus/configuration/index.html","text":"","title":"Nexus configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#nexus-configuration","text":"Nexus Delta service can be highly customized using configuration file(s). Many things can be adapted to your deployment needs: port where the service is running, timeouts, pagination defaults, etc.\nThere are 3 ways to modify the default configuration:\nSetting the env variable DELTA_EXTERNAL_CONF which defines the path to a HOCON file. The configuration keys that are defined here can be overridden by the other methods. Using JVM properties as arguments when running the service: -D{property}. For example: -Dapp.http.interface=\"127.0.0.1\". Using FORCE_CONFIG_{property} environment variables. In order to enable this style of configuration, the JVM property -Dconfig.override_with_env_vars=true needs to be set. Once set, a configuration flag can be overridden. For example: CONFIG_FORCE_app_http_interface=\"127.0.0.1\".\nIn terms of JVM pool memory allocation, we recommend setting the following values to the JAVA_OPTS environment variable: -Xms4g -Xmx4g. The recommended values should be changed accordingly with the usage of Nexus Delta, the number of projects and the resources/schemas size.\nIn order to successfully run Nexus Delta there is a minimum set of configuration flags that need to be specified","title":"Nexus configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#http-configuration","text":"The http section of the configuration defines the binding address and port where the service will be listening.\nThe configuration flag akka.http.server.parsing.max-content-length can be used to control the maximum payload size allowed for Nexus Delta resources. This value applies to all posted resources except for files.","title":"Http configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#postgres-configuration","text":"The database section of the configuration defines the postgres specific configuration. As Nexus Delta uses three separate pools (‘read’, ‘write’, ‘streaming’), it is recommended to set the host, port, database name, username, and password via the app.defaults.database field, as it will apply to all pools. It is however possible to accommodate more advanced setups by configuring each pool separately by changing its respective app.database.{read|write|streaming} fields.\nThe pool size can be set using the app.defaults.database.access.pool-size setting for all pools, or individually for each pool (app.database.{read|write|streaming}.access.pool-size).\nNote A default Postgres deployment will limit the number of connections to 100, unless configured otherwise. See the Postgres Connection and Authentication documentation.\nBefore running Nexus Delta, the init scripts should be run in the lexicographical order.\nIt is possible to let Nexus Delta automatically create them using the following configuration parameters: app.database.tables-autocreate=true.\nNote Auto creation of tables is included as a development convenience and should be avoided in production.","title":"Postgres configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#rdf-parser","text":"The underlying Apache Jena parser used to validate incoming data is configurable using the json-ld-api field to enable different levels of strictness.","title":"RDF parser"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#service-account-configuration","text":"Nexus Delta uses a service account to perform automatic tasks under the hood. Examples of it are:\nGranting default ACLs to the user creating a project. Creating default views on project creation.\nThe service-account section of the configuration defines the service account configuration.","title":"Service account configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#automatic-project-provisioning","text":"Automatic project provisioning allows to create a dedicated project for users the first time they connect to Delta that is to say the first time, they query the project listing endpoints.\nThe generated project label will be:\nThe current username where only non-diacritic alphabetic characters ([a-zA-Z]), numbers, dashes and underscores will be preserved. This resulting string is then truncated to 64 characters if needed.\nThis feature can be turned on via the flag app.automatic-provisioning.enabled.\nThe automatic-provisioning section of the configuration defines the project provisioning configuration.","title":"Automatic project provisioning"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#fusion-configuration","text":"When fetching a resource, Nexus Delta allows to return a redirection to its representation in Fusion by providing text/html in the Accept header.\nThe fusion section of the configuration defines the fusion configuration.","title":"Fusion configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#projections-configuration","text":"Projections in Nexus Delta are asynchronous processes that can replay the event log and process this information. For more information on projections, please refer to the Architecture page.\nThe projections section of the configuration allows to configure the projections.\nIn case of failure in a projection, Nexus Delta records the failure information inside the public.failed_elem_logs PostgreSQL table, which can be used for analysis, and ultimately resolution of the failures. The configuration allows to set how long the failure information is stored for (app.projections.failed-elem-ttl), and how often the projection deleting the expired failures is awoken (app.projections.delete-expired-every).","title":"Projections configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#plugins-configuration","text":"Since 1.5.0, Nexus Delta supports plugins. Jar files present inside the local directory defined by the DELTA_PLUGINS environment variable are loaded as plugins into the Delta service.\nEach plugin configuration is rooted under plugins.{plugin_name}. All plugins have a plugins.{plugin_name}.priority configuration flag used to determine the order in which the routes are handled in case of collisions.\nFor more information about plugins, please refer to the Plugins page.","title":"Plugins configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#elasticsearch-views-plugin-configuration","text":"The elasticsearch plugin configuration can be found here.\nThe most important flags are: * plugins.elasticsearch.base which defines the endpoint where the Elasticsearch service is running. * plugins.elasticsearch.credentials.username and plugins.elasticsearch.credentials.password to allow to access to a secured Elasticsearch cluster. The user provided should have the privileges to create/delete indices and read/index from them.\nPlease refer to the Elasticsearch configuration which describes the different steps to achieve this.","title":"Elasticsearch views plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#blazegraph-views-plugin-configuration","text":"The blazegraph plugin configuration can be found here.\nThe most important flag is plugins.blazegraph.base which defines the endpoint where the Blazegraph service is running.\nThe plugins.blazegraph.slow-queries section of the Blazegraph configuration defines what is considered a slow Blazegraph query, which will get logged in the public.blazegraph_queries PostgreSQL table. This can be used to understand which Blazegraph queries can be improved.","title":"Blazegraph views plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#composite-views-plugin-configuration","text":"The composite views plugin configuration can be found here.\nThere are several configuration flags related to tweaking the range of values allowed for sources, projections and rebuild interval.\nAuthentication for remote sources can be specified in three different ways. The value of plugins.composite-views.remote-source-credentials should be speficied in the same way as remote storages, as shown here","title":"Composite views plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#storage-plugin-configuration","text":"The storage plugin configuration can be found here.\nNexus Delta supports 3 types of storages: ‘disk’, ‘amazon’ (s3 compatible) and ‘remote’.\nFor disk storages the most relevant configuration flag is plugins.storage.storages.disk.default-volume, which defines the default location in the Nexus Delta filesystem where the files using that storage are going to be saved. For S3 compatible storages the most relevant configuration flags are the ones related to the S3 settings: plugins.storage.storages.amazon.default-endpoint, plugins.storage.storages.amazon.default-access-key and plugins.storage.storages.amazon.default-secret-key. For remote disk storages the most relevant configuration flags are plugins.storage.storages.remote-disk.default-endpoint (the endpoint where the remote storage service is running) and plugins.storage.storages.remote-disk.credentials (the method to authenticate to the remote storage service).","title":"Storage plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#file-configuration","text":"When the media type is not provided by the user, Delta relies on automatic detection based on the file extension in order to provide one.\nFrom 1.9, it is possible to provide a list of extensions with an associated media type to compute the media type.\nThis list can be defined at files.media-type-detector.extensions:\nfiles {\n # Allows to define default media types for the given file extensions\n media-type-detector {\n extensions {\n custom = \"application/custom\"\n ntriples = \"application/n-triples\"\n }\n }\n}\nThe media type resolution process follow this order stopping at the first successful step:\nSelect the Content-Type header from the file creation/update request Compare the extension to the custom list provided in the configuratio Fallback on akka automatic detection Fallback to the default value application/octet-stream","title":"File configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#remote-storage-configuration","text":"Authentication for remote storage can be specified in three different ways. The value of plugins.storage.storages.remote-disk.credentials can be:","title":"Remote storage configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#recommended-client-credentials-openid-authentication-","text":"{\n type: \"client-credentials\"\n user: \"username\"\n password: \"password\"\n realm: \"internal\"\n}\nThis configuration tells Delta to log into the internal realm (which should have already been defined) with the user and password credentials, which will give Delta an access token to use when making requests to remote storage","title":"Recommended: client credentials (OpenId authentication)"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#anonymous","text":"{\n type: \"anonymous\"\n}","title":"Anonymous"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#long-living-auth-token-legacy-","text":"{\n type: \"jwt-token\"\n token: \"long-living-auth-token\"\n}","title":"Long-living auth token (legacy)"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#archive-plugin-configuration","text":"The archive plugin configuration can be found here.","title":"Archive plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#jira-plugin-configuration","text":"The Jira plugin configuration can be found here.\nSetting up the Jira plugin needs to set up the endpoint of the Jira instance but also the consumer key, the consumer secret and the private key required to interact with Jira (more details including the configuration steps in Jira here).","title":"Jira plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#monitoring","text":"For monitoring, Nexus Delta relies on Kamon.\nKamon can be disabled by passing the environment variable KAMON_ENABLED set to false.\nDelta configuration for Kamon is provided in the monitoring section. For a more complete description on the different options available, please look at the Kamon website.","title":"Monitoring"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#instrumentation","text":"Delta provides the Kamon instrumentation for:\nExecutors Scala futures Logback System metrics","title":"Instrumentation"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#reporters","text":"Kamon reporters are also available for:\nJaeger Prometheus","title":"Reporters"},{"location":"/docs/getting-started/running-nexus/search-configuration.html","text":"","title":"Search configuration"},{"location":"/docs/getting-started/running-nexus/search-configuration.html#search-configuration","text":"Nexus provides global search functionality across all projects through the search plugin.\nWarning The search plugin is experimental and its functionality and API can change without notice.\nThere are several aspects that have been taken into consideration when adding global search capabilities in Nexus:\nglobal search requires a common (index) data model for correct analysis, indexing and querying it must obey the configured access control (search results should include only entries that the client has access to) clients must be able to discover the data model in order to be able to build appropriate queries projects administrators should be able to control, reconfigure or opt out of presenting information in global search","title":"Search configuration"},{"location":"/docs/getting-started/running-nexus/search-configuration.html#how-global-search-works","text":"Considering the requirements listed above, the implementation relies on existing Nexus features, namely:\nComposite Views as control resources for partitioning of indices, how data is indexed, what information to collect, what permissions are required for querying Automatic provisioning of project resources after creation Plugins for orchestrating the behaviour and exposing specific endpoints\nWhen the search plugin is enabled and configured it will automatically create within each project a CompositeView that controls what resources are indexed and what information is collected for each resource. The reasons for using one CompositeView per project are that resources shapes may differ between projects but also the indices must be partitioned such that when consuming the query interface, the query must be dispatched only to the indices that the client has access to. The CompositeView id is identical for each project: https://bluebrain.github.io/nexus/vocabulary/searchView.\nOnce the CompositeView is created by the plugin, it can be updated by each project administrator (specifically any client that demonstrates views/write permission on the target project) to adjust the configuration based on the specifics of the project (different access control, different resource shapes, custom selection of resources etc.).\nCompositeViews have been chosen because they are quite versatile, support a wide range of configuration options:\nmultiple sources multiple projections (indices) project graph traversal for collecting the necessary fields simple transformations\nMore information about CompositeViews can be found in the API Reference.\nThe search plugin introduces a new namespace (/v1/search) with two sub-resources (query and config).\nThe query endpoint accepts submitting an Elasticsearch query via POST, similar to other views based on Elasticsearch, like ElasticSearchView, AggregateElasticSearchView or CompositeView with configured Elasticsearch projections. The query will be dispatched to all ElasticSearch indices managed by the CompositeViews created by the search plugin (the ones that share the id mentioned above) for which the client has access to. This ensures that access to information is restricted based on each project’s access control.\nThe config endpoint allows clients to discover the underlying index data model such that it can present users (like in the case of Fusion) an appropriate interface for querying, filtering, sorting, aggregations etc. A minimal response for the config endpoint is like the following example:\n{\n \"fields\": [\n {\n \"name\": \"project\",\n \"label\": \"Project\",\n \"array\": false,\n \"optional\": false,\n \"fields\": [\n {\n \"name\": \"identifier\",\n \"format\": [\n \"uri\"\n ],\n \"optional\": false\n },\n {\n \"name\": \"label\",\n \"format\": [\n \"keyword\",\n \"text\"\n ],\n \"optional\": false\n }\n ]\n },\n {\n \"name\": \"@type\",\n \"label\": \"Types\",\n \"array\": true,\n \"optional\": false,\n \"format\": [\n \"uri\"\n ]\n }\n ]\n}\n… where the returned document describes a set of fields to be expected in the indices:\nname: String - the name of the field in the Elasticsearch document label: String - a human-readable label to be presented to users array: Boolean - true if the field can have multiple values, false otherwise optional: Boolean - true if the field may not exist in certain documents, false otherwise format: Array(String) - the expected formats of the field (e.g. uri, keyword, text, boolean, number etc.); format and fields cannot be present at the same time fields: Array(Object) - enumeration of nested fields; there are situations where a field value can (should) be handled differently depending on the intent, like for example ontological values that are represented by a Uri but also a String (name or label). Clients should be aware of such case to understand what to present to their users but also how to properly compute queries. format and fields cannot be present at the same time fields.name: String - the name of the sub-field in the Elasticsearch document fields.format: Array(String) - the expected formats of the field (e.g. uri, keyword, text, boolean, number etc.) fields.optional: Boolean - true if the field may not exist in certain documents, false otherwise\nThe config endpoint was created to allow clients to discover how resources are indexed and can be queried. It is currently loaded as a static file (plugins.search.fields={pathToFile}) during Delta’s bootstrapping, and it must match the rest of the search configuration:\nplugins.search.indexing.resource-types={pathToFile} - the list of types which will be used to filter resources to be indexed in the ElasticSearch projection plugins.search.indexing.query={pathToFile} - SPARQL construct query that will be used to create triples which will be then compacted using the provided context and indexed in the ElasticSearch projection plugins.search.indexing.context={pathToFile} - the context which is used to transform the results of the SPARQL construct query into compacted JSON-LD which will be indexed in the ElasticSearch projection plugins.search.indexing.mapping={pathToFile} - the Elasticsearch mappings that will be used in the ElasticSearch projection plugins.search.indexing.settings={pathToFile}- additional Elasticsearch settings that will be used in the ElasticSearch projection\nThe search plugin must also be enabled using the plugins.search.enabled=true setting.\nThese additional settings pertain to the configuration of the CompositeViews that are automatically provisioned by the search plugin. The CompositeView API Reference provides a detailed explanation on how CompositeViews work and how these options affect the generation of the indices.","title":"How Global Search works"},{"location":"/docs/getting-started/running-nexus/search-configuration.html#example-use-case","text":"This section describes a search configuration for a hypothetical data model presented in the diagram below. The example uses four related data types (Dataset, DataDownload, Person and License) and the intent is to provide the ability to query resources of type Dataset along with information registered in related resources (of type DataDownload, Person or License).\nThere are a couple of things to notice in the data model diagram:\nschema:name and rdfs:label are both optional but mostly used for the same purpose; the information should be collected from one with a fallback on the other schema:license is also optional, not all datasets may have a license when some fields are marked as optional it means that the resource of type Dataset may not include those fields, but this doesn’t mean that all related resources exist (a Dataset may refer to a Person that does not exist in the project)\nThe goal is that indexing will produce Elasticsearch documents that has the following structure:\n{\n \"@id\": \"...\",\n \"@type\": [\"http://schema.org/Dataset\", \"http://other...\"],\n \"name\": \"\",\n \"description\": \"...\",\n \"author\": \" if exists\",\n \"license\": \"
  • Releases
      +
    • v1.10 Release Notes
    • v1.9 Release Notes
    • v1.8 To v1.9 Migration
    • v1.8 Release Notes
    • @@ -609,7 +610,7 @@

      sourcecurl -X DELETE \ - "https://nexus.example.com/v1/views/myorg/myproj/nxv:myview?rev=3" + "http://localhost:8080/v1/views/myorg/myproj/nxv:myview?rev=3"
      Response
      source{
      diff --git a/snapshot/docs/delta/api/views/composite-sink.html b/snapshot/docs/delta/api/views/composite-sink.html
      index 3a4d4669bb..7d533c74aa 100644
      --- a/snapshot/docs/delta/api/views/composite-sink.html
      +++ b/snapshot/docs/delta/api/views/composite-sink.html
      @@ -154,6 +154,7 @@
         

  • Releases
  • Releases
      +
    • v1.10 Release Notes
    • v1.9 Release Notes
    • v1.8 To v1.9 Migration
    • v1.8 Release Notes
    • @@ -264,6 +265,7 @@
    • Update
    • Tag
    • Deprecate
    • +
    • Undeprecate
    • Fetch
    • Fetch original payload
    • Fetch tags
    • @@ -324,6 +326,7 @@
    • Update
    • Tag
    • Deprecate
    • +
    • Undeprecate
    • Fetch
    • Fetch original payload
    • Fetch tags
    • @@ -1356,6 +1359,44 @@

      Undeprecate

      +

      Unlocks the view, so further operations can be performed. It also starts indexing resources into it again.

      +

      Undeprecating a view is considered to be an update as well.

      +
      PUT /v1/views/{org_label}/{project_label}/{view_id}/undeprecate?rev={previous_rev}
      +
      +

      … where {previous_rev} is the last known revision number for the view.

      +

      Example

      +
      +
      Request
      +
      +
      sourcecurl -X PUT \
      +     "http://localhost:8080/v1/views/myorg/bands/composite_view/undeprecate?rev=4"
      +
      Response
      +
      +
      source{
      +  "@context": [
      +    "https://bluebrain.github.io/nexus/contexts/composite-views-metadata.json",
      +    "https://bluebrain.github.io/nexus/contexts/metadata.json"
      +  ],
      +  "@id": "http://music.com/composite_view",
      +  "@type": [
      +    "View",
      +    "CompositeView"
      +  ],
      +  "_constrainedBy": "https://bluebrain.github.io/nexus/schemas/views.json",
      +  "_createdAt": "2021-05-17T14:43:41.763Z",
      +  "_createdBy": "http://localhost:8080/v1/anonymous",
      +  "_deprecated": false,
      +  "_incoming": "http://localhost:8080/v1/views/myorg/bands/composite_view/incoming",
      +  "_outgoing": "http://localhost:8080/v1/views/myorg/bands/composite_view/outgoing",
      +  "_project": "http://localhost:8080/v1/projects/myorg/bands",
      +  "_rev": 5,
      +  "_self": "http://localhost:8080/v1/views/myorg/bands/composite_view",
      +  "_updatedAt": "2021-05-17T15:50:39.555Z",
      +  "_updatedBy": "http://localhost:8080/v1/anonymous",
      +  "_uuid": "4b6fe5bf-675c-40bf-88ac-2b26575236c9"
      +}
      +

      Fetch

      GET /v1/views/{org_label}/{project_label}/{view_id}?rev={rev}&tag={tag}
       
      diff --git a/snapshot/docs/delta/api/views/elasticsearch-view-api.html b/snapshot/docs/delta/api/views/elasticsearch-view-api.html index 67bc0a29a5..22579b6ea3 100644 --- a/snapshot/docs/delta/api/views/elasticsearch-view-api.html +++ b/snapshot/docs/delta/api/views/elasticsearch-view-api.html @@ -154,6 +154,7 @@
  • Releases
      +
    • v1.10 Release Notes
    • v1.9 Release Notes
    • v1.8 To v1.9 Migration
    • v1.8 Release Notes
    • @@ -255,6 +256,7 @@
    • Update
    • Tag
    • Deprecate
    • +
    • Undeprecate
    • Fetch
    • Fetch original payload
    • Search
    • @@ -300,6 +302,7 @@
    • Update
    • Tag
    • Deprecate
    • +
    • Undeprecate
    • Fetch
    • Fetch original payload
    • Search
    • @@ -816,6 +819,44 @@

      Undeprecate

      +

      Unlocks the view, so further operations can be performed. It also restarts indexing resources into it.

      +

      Undeprecating a view is considered to be an update as well.

      +
      PUT /v1/views/{org_label}/{project_label}/{view_id}/undeprecate?rev={previous_rev}
      +
      +

      … where {previous_rev} is the last known revision number for the view.

      +

      Example

      +
      +
      Request
      +
      +
      sourcecurl -XPUT \
      +  "http://localhost:8080/v1/views/myorg/myproj/myview/undeprecate?rev=4"
      +
      Response
      +
      +
      source{
      +  "@context": [
      +    "https://bluebrain.github.io/nexus/contexts/elasticsearch-metadata.json",
      +    "https://bluebrain.github.io/nexus/contexts/metadata.json"
      +  ],
      +  "@id": "http://localhost:8080/v1/resources/myorg/myproj/_/myview",
      +  "@type": [
      +    "ElasticSearchView",
      +    "View"
      +  ],
      +  "_constrainedBy": "https://bluebrain.github.io/nexus/schemas/views.json",
      +  "_createdAt": "2021-05-12T12:56:09.676Z",
      +  "_createdBy": "http://localhost:8080/v1/anonymous",
      +  "_deprecated": false,
      +  "_incoming": "http://localhost:8080/v1/views/myorg/myproj/myview/incoming",
      +  "_outgoing": "http://localhost:8080/v1/views/myorg/myproj/myview/outgoing",
      +  "_project": "http://localhost:8080/v1/projects/myorg/myproj",
      +  "_rev": 5,
      +  "_self": "http://localhost:8080/v1/views/myorg/myproj/myview",
      +  "_updatedAt": "2021-05-12T13:01:01.232Z",
      +  "_updatedBy": "http://localhost:8080/v1/anonymous",
      +  "_uuid": "7e737b83-30a0-4ea3-b6c9-cd1ed481d743"
      +}
      +

      Fetch

      GET /v1/views/{org_label}/{project_label}/{view_id}?rev={rev}&tag={tag}
       
      diff --git a/snapshot/docs/delta/api/views/index.html b/snapshot/docs/delta/api/views/index.html index a70d56bf01..a15d7190a2 100644 --- a/snapshot/docs/delta/api/views/index.html +++ b/snapshot/docs/delta/api/views/index.html @@ -154,6 +154,7 @@
  • Releases
  • Releases
  • Releases
      +
    • v1.10 Release Notes
    • v1.9 Release Notes
    • v1.8 To v1.9 Migration
    • v1.8 Release Notes
    • @@ -251,6 +252,7 @@
    • Update
    • Tag
    • Deprecate
    • +
    • Undeprecate
    • Fetch
    • Fetch original payload
    • Fetch tags
    • @@ -291,6 +293,7 @@
    • Update
    • Tag
    • Deprecate
    • +
    • Undeprecate
    • Fetch
    • Fetch original payload
    • Fetch tags
    • @@ -632,7 +635,7 @@

      sourcecurl -X DELETE \ - "https://nexus.example.com/v1/views/myorg/myproj/nxv:myview?rev=3" + "http://localhost:8080/v1/views/myorg/myproj/nxv:myview?rev=3"
      Response
      source{
      @@ -654,6 +657,44 @@ 

      Undeprecate

      +

      Unlocks the view, so further operations can be performed. It also restarts the indexing process.

      +

      Undeprecating a view is considered to be an update as well.

      +
      PUT /v1/views/{org_label}/{project_label}/{view_id}/undeprecate?rev={previous_rev}
      +
      +

      … where {previous_rev} is the last known revision number for the view.

      +

      Example

      +
      +
      Request
      +
      +
      sourcecurl -X DELETE \
      +     "http://localhost:8080/v1/views/myorg/myproj/nxv:myview/undeprecate?rev=4"
      +
      Response
      +
      +
      source{
      +  "@context": [
      +    "https://bluebrain.github.io/nexus/contexts/sparql-metadata.json",
      +    "https://bluebrain.github.io/nexus/contexts/metadata.json"
      +  ],
      +  "@id": "https://bluebrain.github.io/nexus/vocabulary/myview",
      +  "@type": [
      +    "SparqlView",
      +    "View"
      +  ],
      +  "_constrainedBy": "https://bluebrain.github.io/nexus/schemas/views.json",
      +  "_createdAt": "2021-04-18T17:10:22.748Z",
      +  "_createdBy": "http://localhost:8080/v1/realms/myrealm/users/Bob",
      +  "_uuid": "9c632570-cdaa-4a35-a6f9-1e95bd3a930e",
      +  "_deprecated": false,
      +  "_self": "http://localhost:8080/v1/views/org/proj/nxv:myview",
      +  "_incoming": "http://localhost:8080/v1/views/org/proj/nxv:myview/incoming",
      +  "_outgoing": "http://localhost:8080/v1/views/org/proj/nxv:myview/outgoing",
      +  "_project": "http://localhost:8080/v1/projects/org/proj",
         "_rev": 5,
         "_updatedAt": "2021-04-24T17:28:01.321Z",
         "_updatedBy": "http://localhost:8080/v1/realms/myrealm/users/Bob"
      diff --git a/snapshot/docs/delta/architecture.html b/snapshot/docs/delta/architecture.html
      index 152df195e2..c4f426df2d 100644
      --- a/snapshot/docs/delta/architecture.html
      +++ b/snapshot/docs/delta/architecture.html
      @@ -154,6 +154,7 @@
         

  • Releases
  • Releases
  • Releases
  • Releases
  • Releases
  • Releases
  • Releases
  • Releases
  • Releases
  • Releases
      +
    • v1.10 Release Notes
    • v1.9 Release Notes
    • v1.8 To v1.9 Migration
    • v1.8 Release Notes
    • @@ -326,9 +327,9 @@

      Landing Page Customization

      • LOGO_IMG: HTTPS URL for the application logo. Recommended: SVG format with transparent background. Ideal size: ~35 px height, max 250 px width. Click here for an example SVG.
      • -
      • LOGO_LINK: HTTPS URL redirecting from the logo. Example: https://www.epfl.ch
      • +
      • LOGO_LINK: HTTPS URL redirecting from the logo. Example: https://www.epfl.ch/en/
      • LANDING_VIDEO: HTTPS URL for a landing page video. Requirements: MP4 format, H.264 codec, ~10MB, 1920×1080 resolution. Click here for an example video. Ensure that the video’s main color is not too bright, as the text on top of it will be white.
      • -
      • LANDING_POSTER_IMG: HTTPS URL for a loading image on the landing page, displayed while the video loads. Click here for an example poster image. Please use a PNG or JPG image that matches the size and color of the video. Aim for the image to have the same dimensions as the video. Ensure that the image size is kept under 200 KB to improve loading time and user experience.
      • +
      • LANDING_POSTER_IMG: HTTPS URL for a loading image on the landing page, displayed while the video loads. Click here for an example poster image. Please use a PNG or JPG image that matches the size and color of the video. Aim for the image to have the same dimensions as the video. Ensure that the image size is kept under 200 KB to improve loading time and user experience.
      • MAIN_COLOR: Main background color in hex code. Example color: #062d68

      Page Specific Customization

      diff --git a/snapshot/docs/fusion/index.html b/snapshot/docs/fusion/index.html index ba774a0532..2b746ae2e8 100644 --- a/snapshot/docs/fusion/index.html +++ b/snapshot/docs/fusion/index.html @@ -154,6 +154,7 @@
  • Releases
  • Releases
  • Releases
  • Releases
  • Releases
  • Releases
  • Releases
  • Releases
  • Releases
  • Releases
      +
    • v1.10 Release Notes
    • v1.9 Release Notes
    • v1.8 To v1.9 Migration
    • v1.8 Release Notes
    • diff --git a/snapshot/docs/getting-started/running-nexus/configuration/index.html b/snapshot/docs/getting-started/running-nexus/configuration/index.html index decb042e61..0fb0b5eeea 100644 --- a/snapshot/docs/getting-started/running-nexus/configuration/index.html +++ b/snapshot/docs/getting-started/running-nexus/configuration/index.html @@ -154,6 +154,7 @@
  • Releases
      +
    • v1.10 Release Notes
    • v1.9 Release Notes
    • v1.8 To v1.9 Migration
    • v1.8 Release Notes
    • diff --git a/snapshot/docs/getting-started/running-nexus/index.html b/snapshot/docs/getting-started/running-nexus/index.html index 9f44c10aa7..1684f0ff1e 100644 --- a/snapshot/docs/getting-started/running-nexus/index.html +++ b/snapshot/docs/getting-started/running-nexus/index.html @@ -154,6 +154,7 @@
  • Releases
      +
    • v1.10 Release Notes
    • v1.9 Release Notes
    • v1.8 To v1.9 Migration
    • v1.8 Release Notes
    • diff --git a/snapshot/docs/getting-started/running-nexus/search-configuration.html b/snapshot/docs/getting-started/running-nexus/search-configuration.html index 49980cd815..9b9f347523 100644 --- a/snapshot/docs/getting-started/running-nexus/search-configuration.html +++ b/snapshot/docs/getting-started/running-nexus/search-configuration.html @@ -154,6 +154,7 @@
  • Releases
      +
    • v1.10 Release Notes
    • v1.9 Release Notes
    • v1.8 To v1.9 Migration
    • v1.8 Release Notes
    • diff --git a/snapshot/docs/getting-started/try-nexus-movielens.html b/snapshot/docs/getting-started/try-nexus-movielens.html index 7ad5d7d9aa..16bd6f82e9 100644 --- a/snapshot/docs/getting-started/try-nexus-movielens.html +++ b/snapshot/docs/getting-started/try-nexus-movielens.html @@ -154,6 +154,7 @@
  • Releases
  • Releases
      +
    • v1.10 Release Notes
    • v1.9 Release Notes
    • v1.8 To v1.9 Migration
    • v1.8 Release Notes
    • diff --git a/snapshot/docs/getting-started/understanding-knowledge-graphs.html b/snapshot/docs/getting-started/understanding-knowledge-graphs.html index ea58ff1add..e8de9e9122 100644 --- a/snapshot/docs/getting-started/understanding-knowledge-graphs.html +++ b/snapshot/docs/getting-started/understanding-knowledge-graphs.html @@ -154,6 +154,7 @@
  • Releases
  • Releases
  • Releases
  • Releases
  • Releases
  • Releases