-
Notifications
You must be signed in to change notification settings - Fork 73
/
search_index.json
1 lines (1 loc) · 938 KB
/
search_index.json
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), <http://schema.org/name> 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 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Dataset> ;\n <http://schema.org/name> ?name ;\n <http://schema.org/description> ?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 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Dataset> .\n ?resource <http://schema.org/name> ?name .\n ?resource <http://schema.org/description> ?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 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Dataset> ;\n <http://schema.org/name> ?name ;\n <http://schema.org/description> ?description ;\n <http://schema.org/distribution> ?distribution .\n ?distribution <http://schema.org/contentUrl> ?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: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\nPREFIX schema: <http://schema.org/>\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 <http://schema.org/distribution> becomes schema:distribution.\nYou will often see that instead of rdf:type (the shortened version of <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>), 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: <https://bluebrain.github.io/nexus/vocabulary/>\nPREFIX nsg: <https://neuroshapes.org/>\nPREFIX schema: <http://schema.org/>\nPREFIX prov: <http://www.w3.org/ns/prov#>\nPREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\nPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\nPREFIX skos: <http://www.w3.org/2004/02/skos/core#>\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: <https://sandbox.bluebrainnexus.io/v1/vocabs/>\nPREFIX nxv: <https://bluebrain.github.io/nexus/vocabulary/>\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.8.0\",\n \"dependencies\": {\n \"blazegraph\": \"2.1.6-SNAPSHOT\",\n \"elasticsearch\": \"8.8.0\",\n \"postgres\": \"15.3\"\n },\n \"environment\": \"dev\",\n \"plugins\": {\n \"archive\": \"1.8.0\",\n \"blazegraph\": \"1.8.0\",\n \"composite-views\": \"1.8.0\",\n \"elasticsearch\": \"1.8.0\",\n \"storage\": \"1.8.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 expected tables should be created.\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#encryption-configuration","text":"Nexus Delta uses symmetric encryption to secure sensitive data information (tokens and passwords).\nThe encryption section of the configuration defines the encryption configuration.","title":"Encryption configuration"},{"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.","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.default-credentials (the Bearer token to authenticate to the remote storage service).","title":"Storage plugin configuration"},{"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\": \"<name or label>\",\n \"description\": \"...\",\n \"author\": \"<givenName> <familyName> if exists\",\n \"license\": \"<label> if exists\",\n \"distributionContentUrl\": \"...\",\n \"distributionEncodingFormat\": \"...\",\n \"distributionSize\": \"<value> <unitCode>\",\n \"self\": \"...\",\n \"createdAt\": \"...\"\n}\nThe first step is to define which types of resources should be considered for indexing as a JSON document (provided via the plugins.search.indexing.resource-types={pathToFile} setting). In this example the intent is to index only resources of type Dataset, but there are situations where a more specific list of types should be considered.\n[\n \"http://schema.org/Dataset\"\n]\nThe next step is to write the appropriate SPARQL query that collects the required information by traversing the RDF graph maintained by the CompositeView. The type of query that is required is a CONSTRUCT query, where one can create a new RDF graph based on the information collected from the original graph. The CONSTRUCT query is provided to Delta using the plugins.search.indexing.query={pathToFile} setting.\nprefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>\nprefix schema: <http://schema.org/>\nprefix nxv: <https://bluebrain.github.io/nexus/vocabulary/>\nprefix f: <http://localhost/field/> # this is the new namespace to be used for\n # all fields; using a separate namespace\n # simplifies the transformation of the new\n # RDF graph to JSON.\n\nCONSTRUCT {\n {resource_id} a ?type ;\n f:name ?nameOrLabel ;\n f:description ?description ;\n f:author ?author ;\n f:license ?license ;\n f:self ?self ;\n f:createdAt ?createdAt ;\n f:distributionContentUrl ?contentUrl ;\n f:distributionEncodingFormat ?encodingFormat ;\n f:distributionSize ?size .\n}\nWHERE {\n # bind first all values that must exist for the document to be produced\n {resource_id} a ?type ;\n schema:description ?description ;\n nxv:self ?self ;\n nxv:createdAt ?createdAt ;\n schema:distribution / schema:contentUrl ?contentUrl ;\n schema:distribution / schema:encodingFormat ?encodingFormat ;\n schema:distribution / schema:size / schema:unitCode ?unitCode ;\n schema:distribution / schema:size / schema:value ?value .\n\n # create the size value by concatenating the distribution size value and unitCode\n BIND (CONCAT(STR(?value), STR(\" \"), STR(?unitCode)) as ?size) .\n\n # bind shema:name or rdfs:label\n OPTIONAL { {resource_id} schema:name ?name } .\n OPTIONAL { {resource_id} rdfs:label ?label } .\n BIND (IF(BOUND(?name), ?name, ?label) as ?nameOrLabel).\n\n # bind optional author\n OPTIONAL {\n {resource_id} schema:author ?personId .\n ?personId a schema:Person ;\n schema:givenName ?givenName ;\n schema:familyName ?familyName .\n BIND (CONCAT(?givenName, STR(\" \"), ?familyName) as ?author) .\n }\n\n # bind optional license\n OPTIONAL {\n {resource_id} schema:license ?licenceId .\n ?licenceId a schema:License ;\n rdfs:label ?license .\n }\n}\nThe CONSTRUCT query example above may seem intimidating, but the gist of it is the following:\nit is generating a new RDF graph (the one described in the CONSTRUCT block) using values collected (bound) by following the original RDF graph relationships (the ones described in the WHERE block) the entrypoint for the query is always the current resource id (for which the query is being run) which is filled in by the system by replacing {resouce_id} with the actual value. Note: this query is executed to produce the new graph each type a resource identified by {resource_id} is created, updated or deprecated such that the corresponding Elasticsearch document is created, updated or deleted the BIND statements merely assigns a value to a variable, sometimes using a conditional statement or by concatenating the values of two existing variables the OPTIONAL blocks instruct the generation of the new RDF graph to ignore the cases where the variables described within cannot be bound (usually because they are not found); so, for example: the statement ?licenceId a schema:License may not match because the referred license ({resource_id} schema:license ?licenceId) does not have the type schema:License; in this case the ?license variable will not be bound and the field will be ignored in the new RDF graph; if these statements would not have been encased in an OPTIONAL block, a new RDF graph would not be generated resulting in a missing document in the index\nThe next step is to define the context that when applied to the resulting RDF graph (the one created by executing the CONSTRUCT query) it will produce the Elasticsearch document. Because all the predicates in the query used the f prefix (the http://localhost/field/ namespace) the context document (provided via the plugins.search.indexing.context={pathToFile} setting) becomes quite simple:\n{\n \"@vocab\": \"http://localhost/field/\",\n \"createdAt\": {\n \"@type\": \"http://www.w3.org/2001/XMLSchema#dateTime\"\n }\n}\nThe next step is to define the Elasticsearch index setting (provided via the plugins.search.indexing.settings={pathToFile} setting) that will configure how fields are analysed, number of shards etc. The following example would work for most cases where values are word split, trimmed and set to lowercase. The number of shards depends on the volume of data that will be indexed (see the Elasticsearch recommendation).\n{\n \"analysis\": {\n \"analyzer\": {\n \"nexus\": {\n \"type\": \"custom\",\n \"tokenizer\": \"classic\",\n \"filter\": [\n \"trim\",\n \"word_delimiter_nexus\",\n \"lowercase\"\n ]\n }\n },\n \"filter\": {\n \"word_delimiter_nexus\": {\n \"type\": \"word_delimiter_graph\",\n \"split_on_numerics\": false,\n \"preserve_original\": true\n }\n }\n },\n \"index\": {\n \"number_of_shards\": 1\n }\n}\nThe next step is to define the Elasticsearch mapping (provided via the plugins.search.indexing.mapping={pathToFile} setting) that will instruct Elasticsearch how to interpret the values in the documents. A lot of customisations can be defined, but the following example shows the use of dynamic_templates to handle all text fields except for @id and self which should be handled as keywords only.\n{\n \"dynamic_templates\": [\n {\n \"strings\": {\n \"match_mapping_type\": \"string\",\n \"mapping\": {\n \"type\": \"text\",\n \"analyzer\": \"nexus\",\n \"fields\": {\n \"keyword\": {\n \"type\": \"keyword\"\n }\n }\n }\n }\n }\n ],\n \"properties\": {\n \"@id\": {\n \"type\": \"keyword\"\n },\n \"self\": {\n \"type\": \"keyword\"\n }\n }\n}\nThe final step is to define the config JSON document (provided via the plugins.search.fields={pathToFile} setting) that the /v1/search/config endpoint will return as means of data model discovery:\n{\n \"fields\": [\n {\n \"array\": true,\n \"format\": [\n \"uri\"\n ],\n \"label\": \"Types\",\n \"name\": \"@type\",\n \"optional\": false\n },\n {\n \"array\": false,\n \"format\": [\n \"text\"\n ],\n \"label\": \"Name\",\n \"name\": \"name\",\n \"optional\": false\n },\n {\n \"array\": false,\n \"format\": [\n \"text\"\n ],\n \"label\": \"Description\",\n \"name\": \"description\",\n \"optional\": false\n },\n {\n \"array\": false,\n \"format\": [\n \"uri\"\n ],\n \"label\": \"Download\",\n \"name\": \"distributionContentUrl\",\n \"optional\": false\n },\n {\n \"array\": false,\n \"format\": [\n \"keyword\"\n ],\n \"label\": \"Media Type\",\n \"name\": \"distributionEncodingFormat\",\n \"optional\": false\n },\n {\n \"array\": false,\n \"format\": [\n \"text\"\n ],\n \"label\": \"Content Size\",\n \"name\": \"distributionSize\",\n \"optional\": false\n },\n {\n \"array\": false,\n \"format\": [\n \"text\"\n ],\n \"label\": \"Author\",\n \"name\": \"author\",\n \"optional\": true\n },\n {\n \"array\": false,\n \"format\": [\n \"text\"\n ],\n \"label\": \"License\",\n \"name\": \"license\",\n \"optional\": true\n },\n {\n \"array\": false,\n \"format\": [\n \"text\"\n ],\n \"label\": \"Created\",\n \"name\": \"createdAt\",\n \"optional\": false\n },\n {\n \"array\": false,\n \"format\": [\n \"uri\"\n ],\n \"label\": \"Resource Address\",\n \"name\": \"self\",\n \"optional\": false\n }\n ]\n}\nThis completes the configuration required to enable Global Search capabilities into Nexus. It may seem quite cumbersome, but all the configuration options presented are required for a good end-user experience. A different, more complex configuration example can be found in the test project.","title":"Example use case"},{"location":"/docs/releases/index.html","text":"","title":"Releases"},{"location":"/docs/releases/index.html#releases","text":"This section of the documentation lists the significant BlueBrain Nexus releases across all services and web applications.\nThe latest stable release is v1.8.0 released on 14.06.2023.","title":"Releases"},{"location":"/docs/releases/index.html#1-8-0-14-06-2023-","text":"","title":"1.8.0 (14.06.2023)"},{"location":"/docs/releases/index.html#breaking-changes","text":"The support for Cassandra has been removed and PostgreSQL is now the only supported primary store for Nexus Delta","title":"Breaking changes"},{"location":"/docs/releases/index.html#deprecations","text":"In the upcoming version, the support of the tar format to download archives will be removed, only the zip format will remain.","title":"Deprecations"},{"location":"/docs/releases/index.html#new-features-enhancements","text":"New sourcing and streaming library New clustering deployment Better reporting of indexing errors for views Name and description for resolvers, storages and views Only trigger reindexing when indexing is impacted Project deletion has been rewritten A refresh operation is now available for resources A validate operation is now available for resources Archives can now be downloaded as a zip\nA detailed list of changes included in the release can be found in the release notes.","title":"New features / enhancements"},{"location":"/docs/releases/index.html#1-7-2-16-06-2022-","text":"This is a patch release that addresses a series of Nexus Fusion issues:","title":"1.7.2 (16.06.2022)"},{"location":"/docs/releases/index.html#whats-changed","text":"Prevent search table header controls from overflowing onto new line by @nicwells in https://github.com/BlueBrain/nexus-web/pull/987 2709 redesign resource view by @nicwells in https://github.com/BlueBrain/nexus-web/pull/986 2932 Prevent Resource side drawer from closing when it shouldn’t by @nicwells in https://github.com/BlueBrain/nexus-web/pull/988 2807 admin layout tab update by @smitfire in https://github.com/BlueBrain/nexus-web/pull/985 1315 open links by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/989 2890 align styling in fusion by @nicwells in https://github.com/BlueBrain/nexus-web/pull/991 Switch logic - multi-value field has and, single-valued not by @nicwells in https://github.com/BlueBrain/nexus-web/pull/993 2611 enable jump to studio from search bar by @nicwells in https://github.com/BlueBrain/nexus-web/pull/992 2943 reinstate create resource in admin by @nicwells in https://github.com/BlueBrain/nexus-web/pull/994 2944 custom views to be listed in query tab by @nicwells in https://github.com/BlueBrain/nexus-web/pull/995 Changing filter value triggers on finish automatically vs apply button by @smitfire in https://github.com/BlueBrain/nexus-web/pull/990 Fixed filter bug check by @smitfire in https://github.com/BlueBrain/nexus-web/pull/996 Remove fuzziness from search by @nicwells in https://github.com/BlueBrain/nexus-web/pull/998 Use Resource end point for studio listing by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/999 PDF Viewer not loading fix by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1000 Search filter bug condition by @smitfire in https://github.com/BlueBrain/nexus-web/pull/1003 2941 styling improvements fixes and improvements by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1002 Support removing tags from resources by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1001 Disable data cart download button when no perms by @nicwells in https://github.com/BlueBrain/nexus-web/pull/997 Persist open/close state of plugins by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1004 2922 support dates by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1005 Handle objects in search by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1007 remove double quotes from display by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1008 1673 better error when try recreate deprecated org or project by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1009 Support composite views in data tables by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1006 Fix array values by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1010 Fix creation of resources list from “copy resource list” shortcut link by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1012 2644 allow user to select search config by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1011 Add redirect params to login call back by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1014 2986 fix styles by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1015 Always keep tooltip visible in viewport by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1017 2902 move sidebar to header by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1016 added numerics and conditions to call numerics component to search by @smitfire in https://github.com/BlueBrain/nexus-web/pull/1013 Fix behaviour of copy button by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1019 2835 Search bar text and searching for things with same value as project or studio by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1020 More specific css rules and fix at same time by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1021 Graph Analytics by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1022 2082 admin plugin link support navigation versioned identifiers by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1023 2999 scale large pdfs down to size and support zoom/pan by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1026 Fix to allow user to scroll all the way to bottom of gallery drawer by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1027 Only show graph analytics tab when plugin enabled in Delta by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1028 3020 consistent datetime throughout app by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1029 Fix style by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1032 Move hook call to top-level of function component by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1033 Add edges to GraphAnalytics by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1031 Copy notification for button dropdowns by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1034 Histogram and stats by @smitfire in https://github.com/BlueBrain/nexus-web/pull/1030 graph analytics info blurbs by @smitfire in https://github.com/BlueBrain/nexus-web/pull/1037 Add AntD Statistics component to display Statistics by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1038 Add edge arrow for target to show directionality by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1040 3084 app crash when adding to cart from data table by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1039 3094 3095 search numeric column chart type and style by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1041 Minor fixes for Graph Analytics by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1042 Fix number formatting for GraphAnalytics Panel by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1043 Clear resource list filter by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1044 fix row count, row selection, select-row width for pagination by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1045 Set padding on percentage, to accoint for view resizing by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1046 Remove bidirectional arrows by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1047 3113 search reset bug fix by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1048 Load from ENV the name of service account realm to be hidden for Login by @bogdanromanx in https://github.com/BlueBrain/nexus-web/pull/1050 3106 numeric missing bug by @smitfire in https://github.com/BlueBrain/nexus-web/pull/1049 Clear Search text by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1051 Fix bug where deselecting filter value does not remove it by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1054 Handle case where there are multiple label values by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1052 Fixed data cart search bug by @smitfire in https://github.com/BlueBrain/nexus-web/pull/1055 Set average value and precesion value by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1065 Statistics tab by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1066 Correct the behaviour of ‘missing’ filter by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1068 set Infinity as the default limit for slider by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1067 2974 handle missing metadata in plugins by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1064 Refactor edit table by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1069 Sorting based on filter by @smitfire in https://github.com/BlueBrain/nexus-web/pull/1070 Add an additional spinner for data results in table. by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1071 3114 scroll bug by @smitfire in https://github.com/BlueBrain/nexus-web/pull/1075 Fix when missing permissions tooltip is displayed by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1077 3174 3176 small studio UI fixes by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1076 Correct url with destination by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1073 Clicking icon in search config opens select by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1081 Provide a friendlier error message when unable to access authentication provider by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1079 Fix studio scroll issue by @smitfire in https://github.com/BlueBrain/nexus-web/pull/1074 3184 honour filterable flag by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1080 Project query aggregate in list too by @smitfire in https://github.com/BlueBrain/nexus-web/pull/1083 3039 jira discussions by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1085 Jira - switch to using self url for project and resource, better error handling and only show plugin when enabled by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1095 Preview download plugins - keep original filenames and fix error by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1107 3190 copy url 2 by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1108 1.8.0 m3 by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1105 3191 deprecated false included in query by @smitfire in https://github.com/BlueBrain/nexus-web/pull/1109 1.7.1 fix by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1110 set a default view for workspaces by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1112 Check for case where Jira oauth token rejected by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1111 Fix plugins studio issues by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1113 Save any plugin config on initial studio creation by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1115 Update menu after updating dashboard by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1116 Rename Preview button and Disable Save by @dhaneshnm in https://github.com/BlueBrain/nexus-web/pull/1117 Fix jira error checking condition by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1118 Hide the JIRA plugin if user is not authenticated with a configurable realm by @nicwells in https://github.com/BlueBrain/nexus-web/pull/1119\nFull Changelog: Fusion: v1.7.1…v1.7.2\nThe corresponding Fusion release notes can be found here.","title":"What’s Changed"},{"location":"/docs/releases/index.html#1-7-1-01-06-2022-","text":"This is a bug-fix release that addresses a series of Delta and Fusion issues:\nFetch original payload is not retrieving null values #3112 Unable to upload empty files using the RemoteDiskStorage #2921 Improve error message on remote storage errors #3254 ElasticSearchView resourceTag config is not taken in consideration for synchronous indexing #3266 New layout for studios Ability to control plugins at studio level Style improvements of search filter panel We have added a script to migrate studios using pre-v1.7.0 format to v1.7.1+","title":"1.7.1 (01.06.2022)"},{"location":"/docs/releases/index.html#fixes","text":"A series of bugs have been fixed.\nThe corresponding Fusion release notes can be found here. The corresponding Delta release notes can be found here.\nFull Changelogs: Delta: v1.7.0…v1.7.1 Fusion: v1.7.0…v1.7.1","title":"Fixes"},{"location":"/docs/releases/index.html#1-7-0-14-03-2022-","text":"","title":"1.7.0 (14.03.2022)"},{"location":"/docs/releases/index.html#breaking-changes","text":"Removal of the Nexus cli Removal of the docker based client","title":"Breaking changes"},{"location":"/docs/releases/index.html#deprecations","text":"In the upcoming version, the support of Cassandra as a primary store for Nexus Delta will be removed in favour of PostgreSQL to focus development efforts on features rather than supporting multiple databases. For very large deployments there are commercial options that are wire compatible to PostgreSQL.\nTools will be provided to enable migration from Cassandra to PostgreSQL for existing Delta deployments.","title":"Deprecations"},{"location":"/docs/releases/index.html#new-features-enhancements","text":"New features and better user experience for search in Nexus Fusion Introduced a new extensible model to define Elasticsearch views based on pipes Allow the use of an external configuration file for Delta Allow deleting tags on resources Allow tagging deprecated storages and views Refactor the graph-analytics plugin to make indexing faster Add a group identifier in Elasticsearch projections of composite views\nA detailed list of changes included in the release can be found in the release notes.","title":"New features / enhancements"},{"location":"/docs/releases/index.html#v1-6-1-29-10-2021-","text":"This release contains bugfixes and minor improvements:\nGraph-analytics returns edges for non-existing nodes #2871 Graph analytics is trying to resolve every link to all types of resources #2852 Composite key values cache is not distributed across nodes #2909 Shortcut Acl permission check (project -> org -> root) when address matches early #2916 Resource-view opens up as a side panel #2617 User can see all data, when the search query is empty #2875 A loading spinner shows up when there is a delay in fetching search results #2880 Label ‘none of’ in filter was previously mis labelled as ‘any of’ #2872 The behaviour of ‘none of’ filter has been fixed to avoid confusion with other filters #2898 Preview plugin big fix to prevent it from crashing for certain file paths #2884 Search bar matches query content #2874\nFull Changelogs:\nDelta: v1.6.0…v1.6.1 Fusion: v1.6.0…v1.6.1","title":"v1.6.1 (29.10.2021)"},{"location":"/docs/releases/index.html#v1-6-0-13-10-2021-","text":"","title":"v1.6.0 (13.10.2021)"},{"location":"/docs/releases/index.html#deprecations","text":"Nexus client Indexing data in other systems RemoteDiskStorage","title":"Deprecations"},{"location":"/docs/releases/index.html#new-features-enhancements","text":"Introduced a plugin to search among different projects Introduced PDF, CSV, TSV and Youtube Viewer Fusion Plugins Add basic authentication to access a secured Elasticsearch cluster Handle user-defined queries to Blazegraph with a dedicated client Introduced a plugin to analyze properties and relationships of resources within a project Synchronous indexing Listing of resources outside the project scope The RDF parser to validate resources is now configurable Automatic project provisioning Introduced quotas on projects Project deletion (on demand and automatic) Tagging resources after deprecation View passivation\nA detailed list of changes included in the release can be found in the release notes.","title":"New features / enhancements"},{"location":"/docs/releases/index.html#v1-5-1-04-06-2021-","text":"This release contains bugfixes and minor improvements:\nFile paths now respect tar spec, added n-quads format option to archives #2459 Use service account to unset previous default storage #2465 Support type query exclusion on listings #2468 Added organization events to SSEs #2477 Allow the deletion of some persistence ids at startup #2480 Prevent creating schemas starting with schemas.base #2481 Updated the default number of shards value to 50 (prev => 1000) #2490 Expose indexing metrics #2485 Clean up error messages #2497 Allow plugins to be disabled via configuration #2498 Consume the entire base URI path in the routes #2502 Update progress cache on stream start. #2505 Fetch org/project events from their creation time if none is provided #2500 Count view statistics deterministically. #2509 Add SHACL context to resource/schemas errors including SHACL report #2508","title":"v1.5.1 (04.06.2021)"},{"location":"/docs/releases/index.html#v1-5-0-19-05-2021-","text":"The release is backwards compatible with v1.x.y releases in terms of API (except for some issues that were corrected - please see the release notes for the exact changes). If you’re upgrading from v1.4.x please visit the migration instructions.\nSummary of the significant changes:\nIntroduced the ability to define workflows in Fusion; Introduced support for plugins in Delta; Remote context and owl:imports resolution is executed during creation and update providing full resource immutability; Consistent JSON-LD support across all endpoints and resource types; Support for named graphs; Specific SSE endpoints for Delta managed resource types (schemas, resolvers, storages, files and views); Views can be configured with the required permission for querying; CrossProject resolvers can be configured with useCurrentCaller that enables resource resolution with the caller identities instead of a fixed identity set; ElasticSearch views can be configured with settings (this allows the customization of ElasticSearch index with number of shards and replicas, tokenizers, filters etc.).\nA detailed list of changes included in the release can be found in the release notes.","title":"v1.5.0 (19.05.2021)"},{"location":"/docs/releases/index.html#v1-4-2-20-10-2020-","text":"This is a bugfix release, addressing the following issues related to views lifecycle:\nPersist project statistics to avoid starting from NoOffset when service restarts or view collapses. Prevent a deprecated organization/project from starting its views.","title":"v1.4.2 (20.10.2020)"},{"location":"/docs/releases/index.html#v1-4-1-24-08-2020-","text":"This is a bugfix release, addressing the following issues:\nProject tag reported as a metric with Kamon is inconsistent File Attribute computation is no longer exposed as a metric The path prefix read from the app.http.public-uri is applied twice for KG specific routes Parallelize the v1.3.x to v1.4.x migration script Support a retry mechanism for the v1.3.x to v1.4.x migration Add email address in footer Add CONP and SWITCH logos on product page Add SEO metadata to product pages Add SEO headers","title":"v1.4.1 (24.08.2020)"},{"location":"/docs/releases/index.html#v1-4-0-14-08-2020-","text":"The release is backwards compatible with v1.x.y releases in terms of API. If you’re upgrading from v1.3.x please visit the migration instructions.\nSummary of the significant changes:\nMerged iam, admin and kg services into a single service, called delta; Listings API now shows - besides resources metadata - the following predicates, when present: sko:prefLabel, schema: name, rdfs:label; Nexus Web has evolved into Nexus Fusion, supporting multiple subapps and making the different sections clear for our users; Greatly improved design for the way Nexus Fusion manages plugins; Introduction of Nexus Forge in the ecosystem. Nexus Forge is currently at version 0.3.3.\nA detailed list of changes included in the release can be found in the release notes.","title":"v1.4.0 (14.08.2020)"},{"location":"/docs/releases/index.html#v1-3-0-25-02-2020-","text":"The release is backwards compatible with v1.x.y releases in terms of API. If you’re upgrading from v1.2.x please visit the migration instructions.\nSummary of the significant changes:\nIntroduced a new type of view (_CompositeView_, currently as a Beta feature) that expands on the indexing capabilities of the system through the ability to consume multiple sources (multiple projects in the same Nexus deployment and projects in different Nexus deployments); Added the ability to generate tabular views on the data available to a specific project (using any SparqlView defined in the project - default SparqlView or AggregateSparqlViews) by means of Studios and Dashboards in Nexus Web; Allow querying SparqlViews using the GET http method; Exposed a new view subresource .../offset that presents the current view offset, or collection of offsets in case of CompositeViews. The offset has the same value used with Server Sent Events as means of keeping track of the current event replay progress. Deleting this resource with instruct the system to rebuild the indices of the selected view; Ordering results when doing listings can now be controlled with the repeated sort query param that accepts ElasticSearch document field names (...?sort=_createdAt&sort=-_createdBy). The ordering defaults to ascending, but can be switched for descending by prefixing the - character to the field name. New ElasticSearch indices are automatically configured to perform word split and properly handle UUIDs. The new configuration yields better full text search results. Nexus Web - Adds the ability to have persistent customisable queries and data visualizations for your data via the new Studios feature\nA detailed list of changes included in the release can be found in the release notes.","title":"v1.3.0 (25.02.2020)"},{"location":"/docs/releases/index.html#v1-2-1-07-10-2019-","text":"This is a bugfix release, addressing two specific issues:\nFix FileAttributesUpdated event deserialization which was causing indexing problems for situations where the deployment included a remote storage service to handle files. Removed kamon-akka-remote dependency which was causing problems in clustered deployments due to binary compatibility issues.","title":"v1.2.1 (07.10.2019)"},{"location":"/docs/releases/index.html#v1-2-0-04-10-2019-","text":"The release adds two major features:\nendpoint to fetch the original payload of a resource. ability to retrieve multiple resources in one request as an archive.\nThe API is backwards compatible with v1.1.\nSummary of the significant changes:\nStorage service related updates:\nUpdated async computation of to return not only the digest information but all the attributes (bytes, digest, mediaType and location).\nKG updates:\nAdded archives resources. Added /source sub-resource. Fixed issue with resource retrieval when linked context changes. Updated DigestViewCoordinator to AttributesViewCoordinator. This async process now updates all the FileAttributes.\nDependency updates:\nSHACL validator, akka-http, cats, cats-effects amongst others","title":"v1.2.0 (04.10.2019)"},{"location":"/docs/releases/index.html#v1-1-2-24-09-2019-","text":"The release addresses bug fixing and is backwards compatible with v1.0 in terms of API. If you’re upgrading from v1.0 please visit the migration instructions.\nSummary of the significant changes:\nStorage service related updates:\nAdded async computation of the file digest. Before an action gets executed against the storage, checks that the resource created is valid (is not deprecated, has the correct revision, etc…)\nKG Fixes:\nWhen project is not present in the cache but it is present in the underlying admin service, adds it directly to the cache (before the cache was populated from the SSE, which can be very slow). ProjectViewCoordinator and DigestViewCoordinator actors now create child actors (better management of actors lifecycle). Prevented from creating unnecessary indices/namespaces.\nFixed library dependency issues:\nCorrected Iri to Akka.Uri conversion Corrected pct encoding (Iri.asString and Iri.asUri) Bumped akka and kamon dependencies, amongst others","title":"v1.1.2 (24.09.2019)"},{"location":"/docs/releases/index.html#v1-1-1-24-07-2019-","text":"The release addresses bug fixing and is backwards compatible with v1.0 in terms of API. If you’re upgrading from v1.0 please visit the migration instructions.\nSummary of the significant changes:\nMigration script correctly updates views with the expected defaults Migration script jumps over event deserialization errors Metric tag value fix for elasticsearch indexer Kamon disabled by default Kamon agent is loaded as a JVM argument Updated library dependencies","title":"v1.1.1 (24.07.2019)"},{"location":"/docs/releases/index.html#v1-1-19-07-2019-","text":"The release is backwards compatible with v1.0 in terms of API. If you’re upgrading from v1.0 please visit the migration instructions.\nSummary of the significant changes:\nExposed the service event logs over a stable API via Server Sent Events. Introduced configurable storage backends for files with local, remote and S3 implementations. ElasticSearchView | AggregateElasticSearchView have been promoted to stable. Introduced a new SPARQL view, AggregateSparqlView, that dispatches SPARQL queries to the appropriate namespaces and aggregates the results. ElasticSearchView and SparqlView support additional configuration options: resourceSchemas, resourceTypes, resourceTag, includeDeprecated, includeMetadata. API improvements: Support for additional filtering criteria when listing resources via query params: rev, deprecated, createdBy, updatedBy. The organization and project segments when exercising the API now accept their unique ids (UUID). Content negotiation for resources, supporting: dot, ntriples, json-ld expanded and compacted formats. Ability to resolve resource ids via configured project resolvers. Pagination of resources over 10,000 using the ’‘_next’’ link in the listing response. Resource metadata includes ’‘_incoming’‘ and ’‘_outgoing’’ links and the API now includes their respective endpoints. View indexing progress as a ‘‘statistics’’ sub-resource of each view. Nexus Web improvements: Better OpenIdConnect integration, ability to authenticate to multiple configured realms. Ability to discriminate between Nexus specific resources and user managed resources. Display the current ACLs and their source for the logged in user. Ability to query user defined views. Display the indexing progress for the active view. Exposed view indexing progress metrics for Prometheus. Bumped ElasticSearch compatibility to 7.x.\nA detailed list of changes included in the release can be found in the release notes.","title":"v1.1 (19.07.2019)"},{"location":"/docs/releases/index.html#v1-0-25-01-2019-","text":"This is the first major release of Blue Brain Nexus after almost two years of development.\nAlso referred to as “Nexus V1”, this initial release is our first big milestone in our quest to build a Knowledge Graph platform uniquely combining flexible graph database, powerful search engine and scalable data store to enable:\nEasy unification and integration of fragmented and disparate data from heterogeneous domains to break data and metadata silos Better data governance with the ability to specify and enforce organization’s best practices for data collection, storage and description through high quality metadata Data lineage and provenance recording and description FAIR (Findable, Accessible, Interoperable, Re-usable) data and metadata management\nA detailed list of changes included in the release can be found in the release notes.","title":"v1.0 (25.01.2019)"},{"location":"/docs/releases/v1.8-release-notes.html","text":"","title":"v1.8 Release Notes"},{"location":"/docs/releases/v1.8-release-notes.html#v1-8-release-notes","text":"This release marks a turn in the Nexus Ecosystem with different important changes: The support for Cassandra as a primary store is removed and PostgreSQL 15+ is now the only supported primary store. The sourcing and indexing engine have been completely reworked to improve flexibility, scalability and performance.\nFor the detailed list of updates in this release, see the list of addressed issues since v1.7.\nIf you are currently using Nexus Delta from 1.7.x, please visit the migration instructions for the necessary steps to successfully upgrade.","title":"v1.8 Release Notes"},{"location":"/docs/releases/v1.8-release-notes.html#nexus-delta","text":"The goal of this release is to improve performance, flexibility, observability and developer productivity. This is an incremental software release that also brings several improvements.\nThe API is mostly backwards compatible to v1.7 with two breaking changes due to changes in the sourcing and indexing engine:\nThe offset is not a time-based uuid anymore but a sequence which consists of a bigint, As the indexing engine do not rely on events on anymore, the statistics for the different views returns the number of records that have been processed/remains to be processed.","title":"Nexus Delta"},{"location":"/docs/releases/v1.8-release-notes.html#new-primary-store","text":"Until Nexus 1.7, Nexus Delta was relying on Apache Cassandra as a primary store that is to say the source of truth on which the Nexus ecosystem depends.\nHowever, Cassandra became a growing problem for Nexus both in development and production contexts:\nThe learning curve is steep both for using it in a developer context and running it in production, The tooling that allow to run it in a daily basis can be insufficient, time-consuming to properly set it up, The data modeling it imposes did not allow to accommodate the growing variety of present and future usages of Nexus, The eventual consistency was another hurdle for the Nexus usages The akka-persistence library we relied on which is part of the akka stack changed its license in September 2022, so we could not get new updates from it, This library also did not fit anymore our needs in terms of indexing to external systems as performance is degrading over time but also for data deletion.\nSo this pushed us to look for alternatives that would better address our needs.\nPostgreSQL is a database system with a strong reputation for performance, reliability and flexibility. It allows to solve the pain points we were facing with Cassandra:\nEasier to learn, to operate in a daily basis, Can be run in different contexts from integration to large-scale production deployments, Widely used, a lot of resources and tools to use/deploy/monitor it, Flexible about data modeling, Transaction support, data integrity, Json support.\nThese reasons make PostgreSQL a better solution to be the primary store from Nexus 1.8 and to create a new sourcing and indexing library on top of it.","title":"New primary store"},{"location":"/docs/releases/v1.8-release-notes.html#new-sourcing-and-streaming-library","text":"This change of primary store in Nexus also comes with a new sourcing and streaming library. It relies on a custom schema and is designed to:\nEmbed directly the key concepts of project and entity type in the data model Be extensible by allowing to introduce new entities both global and related to a project Keep the history of changes by storing the log of events of the different entities Keep snapshots of entity states to allow: Faster responses from the API as latest and tagged states don’t need to be recomputed read and write actions Faster indexing by allowing to fetch directly states before processing them Allow to delete undesirable projects in an efficient way","title":"New sourcing and streaming library"},{"location":"/docs/releases/v1.8-release-notes.html#new-clustering-deployment","text":"If you were running Nexus in a cluster configuration, Nexus 1.8 doesn’t rely anymore on Akka Cluster and moved to a new model described in the Architecture page.\nWe moved away from akka-cluster for the same reasons as for akka-persistence (the license change and it did not fit anymore Nexus needs).","title":"New clustering deployment"},{"location":"/docs/releases/v1.8-release-notes.html#name-and-description-for-resolvers-storages-and-views","text":"It could be difficult for users to identify these different entities (for example in Fusion). These two additional fields fills this gap by allowing users to add extra information.","title":"Name and description for resolvers, storages and views"},{"location":"/docs/releases/v1.8-release-notes.html#views","text":"","title":"Views"},{"location":"/docs/releases/v1.8-release-notes.html#better-reporting-of-indexing-errors","text":"Indexing errors for the different views are now available as Server Sent Events via the API making it easier to identify and fix them by either updating the resource or updating the view.\nMore information\nErrors related to indexing into Elasticsearch have also been improved to give more precise and relevant feedback.","title":"Better reporting of indexing errors"},{"location":"/docs/releases/v1.8-release-notes.html#only-trigger-reindexing-when-indexing-is-impacted","text":"Indexing views will now only restart if its new configuration changes the way, data is impacted. For example, updating the name, the description or the permission of the view won’t trigger reindexing anymore.","title":"Only trigger reindexing when indexing is impacted"},{"location":"/docs/releases/v1.8-release-notes.html#indexing-id-for-custom-elasticsearch-views","text":"When a resource does not include an id in its original payload, the id of the resource (for example in the case, the @id is generated) will be injected in the Elasticsearch payload.","title":"Indexing @id for custom Elasticsearch views"},{"location":"/docs/releases/v1.8-release-notes.html#projects","text":"","title":"Projects"},{"location":"/docs/releases/v1.8-release-notes.html#project-deletion","text":"Before Nexus 1.8, akka-persistence and Apache Cassandra made it very hard to delete entities in a performant and reliable way.\nPostgreSQL and the new sourcing library are now much more adapted to this special use-case and the feature has been completely refactored.\nMore information","title":"Project deletion"},{"location":"/docs/releases/v1.8-release-notes.html#resources-and-schemas","text":"","title":"Resources and schemas"},{"location":"/docs/releases/v1.8-release-notes.html#search-by-id-and-","text":"A new parameter locate has been introduced in the listing API that enables searching a resource within a project, an org or within all projects by providing its @id or its _self\nMore information","title":"Search by @id and _self"},{"location":"/docs/releases/v1.8-release-notes.html#refresh-resources-and-schemas","text":"A new refresh operation is available for resources and schemas. It allows to update a resource/schema when one of its upstream dependencies has changed without having to provide again its original payload. More information for resources More information for schemas","title":"Refresh resources and schemas"},{"location":"/docs/releases/v1.8-release-notes.html#validate","text":"This new validate operation allows to check a resource against a provided schema. This operation is read-only and allows to test a schema against different resources\nMore information","title":"Validate"},{"location":"/docs/releases/v1.8-release-notes.html#annotated-original-payload","text":"It is now possible to fetch in a single the original payload of a resource alongside its metadata: More information","title":"Annotated original payload"},{"location":"/docs/releases/v1.8-release-notes.html#supervision-api","text":"A supervision API has been added to get information about the running projections on the current node:\nMore information","title":"Supervision API"},{"location":"/docs/releases/v1.8-release-notes.html#archives","text":"Archives can now be downloaded in a zip format.\nMore information","title":"Archives"},{"location":"/docs/releases/v1.8-release-notes.html#deprecations","text":"In the next version, the support of tarballs as a format for archives is going to be removed because its limitations make it difficult to work properly with Nexus as resource and project identifiers tend to be long and the tar format is very restrictive on that. Only the zip format will remain as an option to download archives.","title":"Deprecations"},{"location":"/docs/releases/v1.8-release-notes.html#nexus-fusion","text":"The goal of this release was to improve the user experience and functionality of the product. Specifically, redesigning and enhancing key pages, including Login, Home, , Organization listing, Projects listing, Studios listing, Project, Studio, Data Panel, and About Modal. Additionally, it introduced improvements to plugins and app configuration. These enhancements aim to provide users with better navigation, easier access to resources, improved data management capabilities, and an overall more user-friendly interface.\nThe Home page was redesigned and includes : An improved top header navigation menu A global search page types navigation cards. A top level entity navigation cards. A “my data” section to facilitate users to find recently created resources. Rebuilt the Login page and shortcuts to documentation and public studios. Improved Organization listing page: List all the organisations with count of projects Added a “Create New organization” action button Improved Projects listing page: Ability to show the overall projects in Nexus deployment or a specific organization’s projects, Show each project’s creation/update dates and count of datasets, Create New Project action button. Improved Studios listing page: Ability to show the overall studios in Nexus deployment or a specific project’s studios, Added “Create New Studio” action button. Improved Project page: Enhanced Browse tab (filtering and searching) Enhanced Setting tab Enable the user to create new View, Storage, Resolver, Run ID resolution by Resolvers. Enhanced Query tab Present errors to the user when running a SPARQL Query against a View Danger zone ability to deprecate a project with security checks. Improved Studio page: Enhance the Error Display in Studio. Enable sorting and filtering for columns. Show total results count. Allow users to select rows for downloading. Improved Resource Panel: Allow the user to select resource data from different places in the application (My data page, Global Search Types Pages, Studio page). Improved ability to download all the data, or some specific data based on file type extension and bundle the data in a .tar file. Plugins: Improved image plugin: The user can display the images of a resources as a gallery mode, with the ability to download them. Improved Preview plugin Preview csv files. Improved About Modal: Show the Nexus ecosystem versions (delta and fusion). Show the current deployment location. Allow user to copy environment information. App Configuration: The Application manager has the ability to select his favourites images for different top-level pages and the video in the Login page.","title":"Nexus Fusion"},{"location":"/docs/releases/v1.8-release-notes.html#nexus-forge","text":"TODO","title":"Nexus forge"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html","text":"","title":"v1.7 To v1.8 Migration"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#v1-7-to-v1-8-migration","text":"The v1.8 release of Delta introduces PostgreSQL as sole option for the Delta primary event store.\n(To have a complete list of improvements, see here).\nThese improvements require to replay all existing events, moving them from Cassandra to PostgreSQL, and to reindex all data to Elasticsearch/Blazegraph.\nThe following steps describe how to perform the migration. At the end, Delta v1.8 will be running using PostgreSQL as primary store.\nDepending on the number and the complexity of existing resources and schemas in the system, the migration may take several hours to complete.\nThe migration itself can be run in three ways:\nSwitching off your Delta 1.7-base Nexus deployment, and re-starting it with Delta 1.8. Then re-uploading all the data in the new instance. This only requires setting up the PostgreSQL instance, and upgrading the Delta image. Switching off Delta 1.7, and starting Delta 1.8 by following the steps described in this document. Starting a Delta 1.8 in parallel to Delta 1.7 by following the steps described in this document. When ready, the 1.7 can be switched off and be replaced by Delta 1.8. This step also requires to run a second instance of Blazegraph.\nThe choice of migration will depend on your current setup, needs, and uptime requirements that you want to uphold for your users. At Blue Brain, we have opted to run two instances in parallel. This allows for an online migration from Cassandra to PostgreSQL that does not disrupt the users using Delta 1.7. While both instances are running, any actions taken by the users in the 1.7 instance will be migrated and reflected in the Delta 1.8 instance.\nThe third option can be summarized as follows:\nEvents from Cassandra are read (in order) by the Delta 1.8 instance These events are pushed to the PostgreSQL instance Only when the data migration is complete and indexing enabled, data is reindexed in Elasticsearch and Blazegraph using new indices","title":"v1.7 To v1.8 Migration"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#requirements","text":"Running an instance of Delta 1.7 PostgreSQL Version: ^15.1 Storage: minimum 80% of the storage dedicated to Cassandra in Delta 1.7 CPU: minimum 50% of the CPU allocated to Cassandra in Delta 1.7 RAM: minimum 50% of the RAM allocated to Cassandra in Delta 1.7\nNote The values stated above are indicative and should be adapted in function of your actual Delta usage.","title":"Requirements"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#prepare-cassandra","text":"","title":"Prepare Cassandra"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#perform-a-backup","text":"Perform a backup of the original keyspace delta_1_7 and perform a repair of the Cassandra nodes:\nnodetool repair\nNote We will assume from hereon that the existing Cassandra keyspace is delta_1_7.","title":"Perform a backup"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#create-a-materialized-view-on-the-messages-table-on-the-original-keyspace","text":"Check the total space used (in bytes) by the original delta_1_7.messages table:\nnodetool tablestats delta_1_7.messages | grep \"Space used (total)\"\nIt is safe to assume that the materialized view will take the same amount of space as the original table, and sufficient storage space should be ensured.\nWhen ready, create a materialized view on the messages table on the keyspace delta_1_7:\nCREATE MATERIALIZED VIEW IF NOT EXISTS delta_1_7.ordered_messages AS\n SELECT ser_manifest, ser_id, event\n FROM delta_1_7.messages\n WHERE timebucket is not null\n AND persistence_id is not null\n AND partition_nr is not null\n AND sequence_nr is not null\n AND timestamp is not null\n PRIMARY KEY(timebucket, timestamp, persistence_id, partition_nr, sequence_nr)\n WITH CLUSTERING ORDER BY (timestamp asc);\nThe materialized view will take some time to build depending on the number of events.","title":"Create a materialized view on the messages table on the original keyspace"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#check-the-materialized-view","text":"These operations may take a while to complete depending on the number of rows in the messages table.\nOn the messages table:\ncqlsh -e 'select timebucket from delta_1_7.messages' | grep rows\nOn the materialized view:\ncqlsh -e 'select timebucket from delta_1_7.ordered_messages' | grep rows\nWhen the materialized view has the same number of rows as the table then it is ready for migration.","title":"Check the materialized view"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#prepare-postgresql","text":"","title":"Prepare PostgreSQL"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#create-migration-tables","text":"Run the following command in the PostgreSQL instance to create the temporary tables needed for the migration:\nCREATE TABLE IF NOT EXISTS public.migration_offset(\n name text NOT NULL,\n akka_offset text NOT NULL,\n processed bigint NOT NULL,\n discarded bigint NOT NULL,\n failed bigint NOT NULL,\n instant timestamptz NOT NULL,\n PRIMARY KEY(name)\n);\n\nCREATE TABLE IF NOT EXISTS public.ignored_events(\n type text NOT NULL,\n persistence_id text NOT NULL,\n sequence_nr bigint NOT NULL,\n payload JSONB NOT NULL,\n instant timestamptz NOT NULL,\n akka_offset text NOT NULL\n);","title":"Create migration tables"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#create-the-postgresql-tables","text":"Run the commands from the Delta 1.8.x schema.ddl file to create the tables necessary for Delta operations.","title":"Create the PostgreSQL tables"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#elasticsearch-and-blazegraph-indices","text":"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):\nDelete all existing indices 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.\nNote 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.\nBlazegraph 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.","title":"Elasticsearch and Blazegraph indices"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#migration-configuration","text":"","title":"Migration configuration"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#pull-the-docker-image-for-delta-1-8","text":"Pull the docker image for Delta 1.8 from Docker Hub\ndocker pull bluebrain/nexus-delta:1.8.x","title":"Pull the docker image for Delta 1.8"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#configure-delta-in-migration-mode","text":"This section defines the mandatory configuration to run Delta in migration mode.","title":"Configure Delta in migration mode"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#configuration-file","text":"A migration configuration file needs to be made available at a path accessible by Delta 1.8, which will be references by an environment variable. Important fields are:\nmigration.batch.max-elements: maximum number of events to push to PostgreSQL at once migration.replay.max-buffer-size: maximum number of events to read from Cassandra at once migration.replay.keyspace: name of the existing Cassandra keyspace migration.first-time-bucket: the time bucket from which to start the migration migration.ignored.blacklisted: a list of projects to ignore during the migration","title":"Configuration file"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#environment-variables","text":"The following environment variables need to be set when launching Delta v1.8 in migration mode:\nKAMON_ENABLED: false (not mandatory but recommended) MIGRATE_DATA: true DISABLE_INDEXING: true MIGRATION_CONF: /path/to/migration.conf (cf. configuration file) DELTA_PLUGINS: /opt/docker/plugins/","title":"Environment variables"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#jvm-parameters","text":"Adopt the same values as the one for your current deployment","title":"JVM parameters"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#java-properties","text":"Description Property Example value PostgreSQL host app.defaults.database.access.host PostgreSQL port app.defaults.database.access.port PostgreSQL pool size app.defaults.database.access.pool-size PostgreSQL username app.defaults.database.username PostgreSQL password app.defaults.database.password PostgreSQL database name app.defaults.database.name Service binding interface app.http.interface 0.0.0.0 Service Uri Path prefix app.http.base-uri {delta-url}:8080/v1 Cassandra username datastax-java-driver.advanced.auth-provider.username Cassandra password datastax-java-driver.advanced.auth-provider.password Cassandra auth class datastax-java-driver.advanced.auth-provider.class PlainTextAuthProvider Cassandra contact point (1) datastax-java-driver.basic.contact-points.0 cassandra-1:9042 Cassandra contact point (2) datastax-java-driver.basic.contact-points.1 cassandra-2:9042 Cassandra timeout datastax-java-driver.basic.request.timeout 10 seconds Cassandra pagination datastax-java-driver.basic.page-size 500 Cassandra compression lib datastax-java-driver.advanced.protocol.compression lz4 Cassandra reconnect datastax-java-driver.advanced.reconnect-on-init true Secrets encryption password app.encryption.password Secrets encryption salt app.encryption.salt Remote storage enabling plugins.storage.storages.remote-disk.enabled true/false S3 storage enabling plugins.storage.storages.amazon.enabled true/false\nFor more information on the configuration of Delta, please refer to the Nexus configuration page.","title":"Java properties"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#migrating-events-from-cassandra-to-postgresql","text":"","title":"Migrating events from Cassandra to PostgreSQL"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#starting-the-data-migration","text":"Start Delta v1.8 with the configuration described in the configuration section. As the application starts, the Delta log should contain the following lines:\n2023-02-08 13:02:26 INFO c.e.b.n.d.sourcing.stream.Supervisor - Starting Delta supervisor\n2023-02-08 13:02:26 INFO c.e.b.n.d.sourcing.stream.Supervisor - Delta supervisor is up\n2023-02-08 13:02:27 INFO c.e.b.n.d.sourcing.stream.Supervisor - Starting 'migration/migrate-from-cassandra' with strategy 'TransientSingleNode'.","title":"Starting the data migration"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#monitor-the-health-of-the-platform","text":"Please check the general health of the platform.","title":"Monitor the health of the platform"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#check-the-migration-progress-","text":"Run the following query on table migration_progress in your PostgreSQL instance:\nSELECT name, akka_offset, processed, discarded, failed, instant FROM public.migration_offset;\nThis will return a similar response:\nname | akka_offset | processed | discarded | failed | instant\n-----------+--------------------------------------+-----------+-----------+--------+----------------------------\n migration | c64c3630-a3a8-11ed-9b31-b3b1660f61b0 | 267972 | 0 | 0 | 2023-02-03 10:54:39.507+01\nThe table contains the following information:\nprocessed: total number of processed events that have been processed discarded: total number of events that have been discarded failed: number of failures risen during the migration instant: timestamp of the last event processed by migration when migration last saved progress\nOnce the migration terminates, the sum of the processed, discarded, and failed columns should be equal to the number of events in your Delta 1.7 deployment.\nWhen looking at the logs, these lines should be also repeated (the timestamp should match the current date/hour):\n2023-02-08 12:56:26 INFO c.e.b.n.m.replay.ReplayEvents - We got 0 rows\n2023-02-08 12:56:26 INFO c.e.b.n.m.replay.ReplayEvents - Next offset is 1ced2000-a7a8-11ed-8080-808080808080 (2023-02-08 12:00:00:000)\n2023-02-08 12:56:26 INFO c.e.b.n.m.replay.ReplayEvents - No results for current bucket, waiting for 3000 milliseconds\nKeep looking regularly in the logs to look if the migration is still ongoing without problems. If the migration crashes, a restart should allow it to start back from where it stopped.","title":"Check the migration progress:"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#post-data-migration-checks","text":"","title":"Post data migration checks"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#internal-postgresql-consistency-check","text":"Once the migration has reached the current date/time, check that the sum of global and scoped events is equal to the number of processed events. Running the following query, the two columns should be equal:\nSELECT\n (SELECT COUNT(*) FROM scoped_events) +\n (SELECT COUNT(*) FROM global_events) sum_events,\n (SELECT processed FROM migration_offset);","title":"Internal PostgreSQL consistency check"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#high-revision-entities-check","text":"Find entities that have a high number of revisions:\nSELECT id, max_rev FROM\n (SELECT \n id, MAX(rev) max_rev \n FROM scoped_events \n GROUP BY id\n ) AS idToRev \n ORDER BY max_rev DESC LIMIT 5;\nand check that their revision counts match the number of revisions in Cassandra:\nSELECT COUNT(*) FROM delta_1_7.messages WHERE persistence_id = '{persistence_id}' and partition_nr = 0;\nwhere the persistence_id is of the form {entity_type}-{org_name}%2F{project_name}_{id}. Make sure {id} has URL encoded characters.","title":"High revision entities check"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#automated-migration-checks","text":"If you are running Delta 1.8 in parallel to Delta 1.7, it is possible to perform automated checks by making POST requests to the following Delta 1.8 endpoints once the reindexing is completed.\nTo run the checks add and complete the following to your migration.conf:\ncheck {\n # Previous prefix used for indexing\n previous-prefix = \"{old_indexing_prefix}\"\n # The endpoint of the blazegraph instance used for Delta 1.7\n blazegraph-base = \"http://blazegraph:9999/blazegraph\"\n # The endpoint of the Delta 1.7 instance\n delta-base = \"http://delta:8080/v1\"\n # The endpoint of the Delta 1.7 instance\n new-delta-base = \"http://delta-new:8080/v1\"\n # Save interval for long running checks\n save-interval = 20 seconds\n # Max concurrent checks for resources\n max-concurrent = 2\n}\nand start Delta 1.8 with the MIGRATE_CHECK environment variable set to true. You will then be able to call the following migration check HTTP endpoints on your Delta 1.8 instance.\n/migration/project-stats Count the number of resources in projects across the two instances Results are written in public.migration_project_count /migration/elasticsearch Count the indexed documents in Elasticsearch views across the two instances Results are written in public.migration_elasticsearch_count /migration/blazegraph Count the indexed documents in Blazegraph views across the two instances Results are written in public.migration_blazegraph_count /migration/composite Count the indexed documents in composite views across the two instances Results are written in public.migration_composite_count /migration/resources Results are written in public.migration_resources_diff\nNote 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.\nThe calls must be authenticated using the same service account as the one defined in Delta.\nBefore running the tests, the following command needs to be run in your PostgreSQL instance:\nCREATE TABLE IF NOT EXISTS public.migration_resources_diff_offset(\n project text NOT NULL,\n ordering bigint,\n PRIMARY KEY(project)\n);\n\nCREATE TABLE IF NOT EXISTS public.migration_resources_diff(\n type text NOT NULL,\n project text NOT NULL,\n id text NOT NULL,\n value_1_7 JSONB,\n value_1_8 JSONB,\n error text,\n PRIMARY KEY(type, project, id)\n);\n\nCREATE TABLE IF NOT EXISTS public.migration_project_count(\n project text NOT NULL,\n event_count_1_7 bigint,\n event_count_1_8 bigint,\n resource_count_1_7 bigint,\n resource_count_1_8 bigint,\n error text,\n PRIMARY KEY(project)\n);\n\nCREATE TABLE IF NOT EXISTS public.migration_blazegraph_count(\n project text NOT NULL,\n id text NOT NULL,\n count_1_7 bigint,\n count_1_8 bigint,\n PRIMARY KEY(project, id)\n);\n\nCREATE TABLE IF NOT EXISTS public.migration_elasticsearch_count(\n project text NOT NULL,\n id text NOT NULL,\n count_1_7 bigint,\n count_1_8 bigint,\n PRIMARY KEY(project, id)\n);\n\nCREATE TABLE IF NOT EXISTS public.migration_composite_count(\n project text NOT NULL,\n id text NOT NULL,\n space_id text NOT NULL,\n count_1_7 bigint,\n count_1_8 bigint,\n PRIMARY KEY(project, id, space_id)\n);","title":"Automated migration checks"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#example","text":"export TOKEN=<service-account-bearer-token>\ncurl --request POST -H \"Authorization: Bearer $TOKEN\" http://localhost:80/v1/migration/elasticsearch\nIn the logs, you should observe\n2023-02-27 09:11:37 INFO c.e.b.n.d.p.c.m.ElasticSearchViewsCheck - Starting checking elasticsearch views counts\n...\n2023-02-27 09:11:39 INFO c.e.b.n.d.p.c.m.ElasticSearchViewsCheck - Checking elasticsearch views counts completed in 1 seconds.\n2023-02-27 09:11:39 INFO c.e.b.n.d.p.c.m.MigrationCheckRoutes - Stopping stream 'elasticsearch' after completion.\nAfter which it is possible to inspect the results in the public.migration_elasticsearch_count PostgreSQL table.","title":"Example"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#indexing","text":"Once migration is completed and the previous checks have been performed, Delta can be restarted in normal mode.\nShut down Delta v1.8 running in migration mode. Remove the MIGRATE_DATA, DISABLE_INDEXING environment variables. While DISABLE_INDEXING disables all indexing, it is possible to have more granular control over what is being indexed by using combinations of the following environment variables: DISABLE_ES_INDEXING, DISABLE_BG_INDEXING, DISABLE_COMPOSITE_INDEXING which disable the indexing of Elasticsearch views, Blazegraph/Sparql views, and composite views, respectively. Restart Delta v1.8, which will now run in normal mode. Check the Delta logs after restart. It should contain the following lines:\n2023-02-08 13:34:13 INFO c.e.b.n.d.sourcing.stream.Supervisor - Starting 'system/elasticsearch-coordinator' with strategy 'EveryNode'.\n2023-02-08 13:34:13 INFO c.e.b.n.d.sourcing.stream.Supervisor - Starting 'system/blazegraph-coordinator' with strategy 'EveryNode'.\n2023-02-08 13:34:13 INFO c.e.b.n.d.sourcing.stream.Supervisor - Starting 'system/composite-views-coordinator' with strategy 'EveryNode'.\nAnd for each view:\n2023-02-08 13:37:09 INFO c.e.b.n.d.sourcing.stream.Supervisor - Starting 'elasticsearch/elasticsearch-{org}/{project}-{viewId}-{revision}' with strategy 'PersistentSingleNode'.\n2023-02-08 13:37:09 INFO c.e.b.n.d.sourcing.stream.Supervisor - Starting 'blazegraph/blazegraph-{org}/{project}-{viewId}-{revision}' with strategy 'PersistentSingleNode'.\n2023-02-08 13:34:16 INFO c.e.b.n.d.sourcing.stream.Supervisor - Starting 'compositeviews/composite-views-{org}/{project}-{viewId}-{revision}' with strategy 'TransientSingleNode'.\nFollowing these steps, Delta v1.8 will do a complete reindexing of the views that were migrated.","title":"Indexing"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#notes","text":"As the entire indexing will take place, some timeouts may occur. Leaving Kamon disabled (environment variable KAMON_ENABLED set to false) during this indexing is recommended. Allocating temporarily more resources to Delta/PostgreSQL/Elasticsearch/Blazegraph may help as this part is greedy in resources. When indexing is finished, the CPU/memory used by the platform should decrease.","title":"Notes"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#post-indexing-checks","text":"For a given {org}/{project} check that the number of indexed resources is correct in the default views.\nWITH vars (myorg, myproj, view_type) AS (\n VALUES ('{org}', '{project}', '{elasticsearch|blazegraph}')\n)\nSELECT\n (SELECT COUNT(DISTINCT id) FROM scoped_events, vars WHERE org = myorg AND project = myproj) project_resources,\n (SELECT processed-discarded FROM projection_offsets, vars WHERE name LIKE view_type || '-' || myorg || '/' || myproj || '-%default%') indexed_resources;","title":"Post indexing checks"},{"location":"/docs/releases/v1.7-to-v1.8-migration.html#clean-up","text":"If you kept the old Elasticsearch indices for the time of the migration, delete all old indices:\ncurl -XDELETE 'http://{elasticsearch_host}/{old_indexing_prefix}_*'\nIf you kept the old Blazegraph indices for the time Delete Blazegraph namespaces:\nfor i in `curl -s 'http://{blazegraph_host}/blazegraph/namespace?describe-each-named-graph=false' | grep sparqlEndpoint | grep -o --color \"rdf:resource=\\\"[^\\\"]*\" | sed 's/rdf:resource=\"//' | sed 's#/sparql$##' | grep -v kb | grep -v LBS | grep {old_indexing_prefix}`\n do curl -X DELETE \"$i\"\ndone\nIf running Delta v1.8 as a separate instance from Delta v1.7, the latter can be turned off. Once Delta v1.8 is up and running and has finished indexing, Cassandra can be turned off. Reverse the temporary resources / configuration changes. Remove all migration java options Remove all datastax java options","title":"Clean-up"},{"location":"/docs/releases/v1.7-release-notes.html","text":"","title":"v1.7 Release Notes"},{"location":"/docs/releases/v1.7-release-notes.html#v1-7-release-notes","text":"This is an incremental software release that adds several improvements across the board. The API is backwards compatible with v1.6.\nFor the detailed list of updates in this release, see the list of addressed issues since v1.6.\nIf you are currently using Nexus Delta from 1.6.x, please visit the migration instructions for the necessary steps to successfully upgrade.","title":"v1.7 Release Notes"},{"location":"/docs/releases/v1.7-release-notes.html#highlights","text":"As you grow your Knowledge Graph every day, it is becoming more and more challenging to find relevant data to fuel your data driven activities. In October 2021, we introduced a powerful new feature: Global Search. It allows you to make all Nexus Projects searchable and the data within discoverable. We have received a lot of feedback and recently focused on improving further its usability. We are delighted to announce the public release of Nexus 1.7 and here are the highlights.","title":"Highlights"},{"location":"/docs/releases/v1.7-release-notes.html#preconfigured-searches","text":"In order to allow you to jump quickly and easily to the relevant data, you can now use the preconfigured searches. More can be added and relevant columns preselected.","title":"Preconfigured Searches"},{"location":"/docs/releases/v1.7-release-notes.html#specialised-filters","text":"We now support filtering for additional columns types. With the new Numeric column support, you can plot an overview of your selection and easily narrow it down to what is really useful to you. Similarly, you can now filter using Date columns.","title":"Specialised Filters"},{"location":"/docs/releases/v1.7-release-notes.html#resource-panel","text":"When clicking on search results, you can view more details. The resource panel was improved to highlight important information and actions at the top. Plugins are continuously improved using your feedback.","title":"Resource Panel"},{"location":"/docs/releases/v1.7-release-notes.html#search-bar","text":"The search bar now allows you to find and open Studios or Projects from anywhere in Fusion.","title":"Search Bar"},{"location":"/docs/releases/v1.7-release-notes.html#for-power-users-and-admins","text":"As you add more of your scientific data into Nexus, you can review the structure of your Knowledge Graph. You can see how resources are connected together and what properties are used to describe them.\nAnd now, let’s take a look at the details of this release across Delta and Fusion.","title":"For Power Users and Admins"},{"location":"/docs/releases/v1.7-release-notes.html#nexus-delta","text":"The main goal of this release is to provide support for an enhanced search experience in Fusion as well as to introduce a new extensible model to define Elasticsearch views based on pipes.\nSecondary goals include:\nAllow the use of an external configuration file for Delta. Allow deleting tags on resources. Allow tagging deprecated storages and views. Refactor graph-analytics plugin to make indexing faster. Add a group identifier in Elasticsearch projections of composite views. Terminate support of the Nexus CLI. At this stage, no replacement is provided but due to the backward compatibility of the Delta API, the CLI should still work. We will announce when a new CLI is made available. Removal of the docker based client.\nA series of bugs have also been fixed with this new release.","title":"Nexus Delta"},{"location":"/docs/releases/v1.7-release-notes.html#elasticsearch-pipes","text":"With 1.7, Elasticsearch views now rely on pipes to filter and transform data before indexing. This feature was primarily motivated by user requests of our partners at SWITCH, some usage examples of Elasticsearch pipes are detailed here.\nRead More about Elasticsearch pipes\nThis change implies a migration when updating Nexus Delta to 1.7.","title":"Elasticsearch pipes"},{"location":"/docs/releases/v1.7-release-notes.html#allow-the-use-of-an-external-configuration-file-for-delta","text":"Besides JVM properties and environment variables, Delta configuration can now be defined via a external file.\nRead More about Delta configuration","title":"Allow the use of an external configuration file for Delta"},{"location":"/docs/releases/v1.7-release-notes.html#deleting-tags-on-resources","text":"From 1.7, it is now possible to delete tags on resources, files and schemas.","title":"Deleting tags on resources"},{"location":"/docs/releases/v1.7-release-notes.html#tagging-deprecated-storages-and-views","text":"Storages and views can now be tagged even after they have been deprecated.","title":"Tagging deprecated storages and views"},{"location":"/docs/releases/v1.7-release-notes.html#graph-analytics","text":"Graph analytics indexing is now faster.\nIf you enabled this plugin in your 1.6 deployment, there are migration steps to follow.","title":"Graph analytics"},{"location":"/docs/releases/v1.7-release-notes.html#kg-dashboard-update","text":"In order to reduce the dependencies to third party systems (InfluxDB and Grafana) and further invest in those we already support (ElasticSearch), we have redesigned our Knowledge Graph Dashboard to support the usecase of monitoring the data ingested into Nexus.\nA default configuration for this dashboard will soon be provided so that everyone can give it a try with minimal efforts.","title":"KG Dashboard update"},{"location":"/docs/releases/v1.7-release-notes.html#deprecations","text":"In the upcoming version, the support of Cassandra as a primary store for Nexus Delta will be removed in favour of PostgreSQL to focus development efforts on features rather than supporting multiple databases. For very large deployments there are commercial options that are wire compatible to PostgreSQL.\nTools will be provided to enable migration from Cassandra to PostgreSQL for existing Delta deployments.","title":"Deprecations"},{"location":"/docs/releases/v1.7-release-notes.html#nexus-fusion","text":"","title":"Nexus Fusion"},{"location":"/docs/releases/v1.7-release-notes.html#graph-analytics-plugin","text":"Fusion now enables users to inspect properties and relationships of resources in a given project via the new Graph Analytics plugin.","title":"Graph Analytics Plugin"},{"location":"/docs/releases/v1.7-release-notes.html#studios-elasticsearch-support","text":"Support Elasticsearch and Composite views has been added to Studios. Studios targeting an Elasticsearch view provide the option for more performant Studios compared to those targeting a Sparql view. The Studio data model has changed to support this, see migration notes for migrating existing Studios.","title":"Studios Elasticsearch Support"},{"location":"/docs/releases/v1.7-release-notes.html#search-enhancements","text":"","title":"Search Enhancements"},{"location":"/docs/releases/v1.7-release-notes.html#search-configurations","text":"Search configurations have been introduced to provide convenient access to apply common search criteria.","title":"Search configurations"},{"location":"/docs/releases/v1.7-release-notes.html#support-for-numerical-and-date-columns","text":"Numerical and date type column support has been added providing the ability to filter search results appropriately for these data types.","title":"Support for Numerical and Date columns"},{"location":"/docs/releases/v1.7-release-notes.html#better-preview-support-for-pdfs","text":"Enhanced support for previewing PDFs in the resource preview plugin provides the ability to zoom in and pan large PDFs.","title":"Better Preview support for PDFs"},{"location":"/docs/releases/v1.7-release-notes.html#versioned-links","text":"Resource links to other resources can now be version-specific.","title":"Versioned Links"},{"location":"/docs/releases/v1.7-release-notes.html#remove-tag-from-resource","text":"Tags can now be removed from a resource directly in Fusion.","title":"Remove Tag from Resource"},{"location":"/docs/releases/v1.7-release-notes.html#ui-enhancements","text":"The following UI enhancements have been made in this version:\nRedesigned Resource Panel with quick access to high-level details of resource. Plugin opened/closed status is also persisted improving the UX when wanting to view the same plugin(s) for several resources. Colour scheme has been updated to better align with our style guide. Navigation has moved from the sidebar to the header giving more screen real-estate.","title":"UI Enhancements"},{"location":"/docs/releases/v1.7-release-notes.html#bug-fixes","text":"A series of bugs have also been fixed.","title":"Bug fixes"},{"location":"/docs/releases/v1.6-to-v1.7-migration.html","text":"","title":"v1.6 To v1.7 Migration"},{"location":"/docs/releases/v1.6-to-v1.7-migration.html#v1-6-to-v1-7-migration","text":"","title":"v1.6 To v1.7 Migration"},{"location":"/docs/releases/v1.6-to-v1.7-migration.html#delta","text":"Migration is executed automatically by Delta by setting the environment variable MIGRATION_1_7=true.\nAdditionally, if graph-analytics plugin was enabled, its indices need to be rebuilt. The removal of previous indices and reset of their progress is triggered by setting the environment variable GRAPH_ANALYTICS_CLEANUP=true.\nCheck the logs to make sure the migration is doing ok and restart Delta after the migration and the tag repair operation are completed without forgetting to remove the environment variables.","title":"Delta"},{"location":"/docs/releases/v1.6-to-v1.7-migration.html#fusion","text":"The data model for Studios has changed in 1.7.\n//TODO Add Studio migration instructions here","title":"Fusion"},{"location":"/docs/releases/v1.6-release-notes.html","text":"","title":"v1.6 Release Notes"},{"location":"/docs/releases/v1.6-release-notes.html#v1-6-release-notes","text":"This is an incremental software release that adds several improvements across the board. The API is backwards compatible to v1.5.\nFor the detailed list of updates in this release, see the list of addressed issues since v1.5.\nIf you are currently using Nexus Delta from 1.5.x, please visit the migration instructions for the necessary steps to successfully upgrade.","title":"v1.6 Release Notes"},{"location":"/docs/releases/v1.6-release-notes.html#nexus-delta","text":"The main goal of this release is to allow users to search across multiple projects through global search\nSecondary goals include:\nThe possibility for Delta to query a secured Elasticsearch cluster The introduction of a dedicated Blazegraph client for user-defined queries with the possibility to define a timeout to improve Blazegraph stability Synchronous indexing The analysis of properties and relationships of resources within a project through the graph analytics plugin The listing of resources within an organization and within all projects The configuration of the RDF parser The deletion of projects and all its resources Automatic project provisioning The introduction of quotas Tagging resources after deprecation\nA series of bugs have also been fixed with this new release.","title":"Nexus Delta"},{"location":"/docs/releases/v1.6-release-notes.html#deprecations","text":"These two features are now marked as deprecated and will be removed in an upcoming release:\nNexus client Indexing data in other systems RemoteDiskStorage","title":"Deprecations"},{"location":"/docs/releases/v1.6-release-notes.html#global-search","text":"Before 1.6, searching across several projects was not available in Nexus. The first version of Global search included in this release aims to fill this blank.\nGlobal search is composed of 2 parts:\nA Delta plugin which allows to index and query resources according to a given configuration A matching plugin in Fusion allows to query the endpoints provided by Delta to filter/sort results and customize how these results are displayed to the users\nMore details about search and how to configure it is provided here\nPlease note that this first version is experimental in both Delta and Fusion and that improvements and possibly breaking changes may be introduced in the upcoming releases.","title":"Global search"},{"location":"/docs/releases/v1.6-release-notes.html#secure-the-delta-elasticsearch-client","text":"With 1.6, it is now possible to define credentials to query a secured Elasticsearch cluster: Elasticsearch configuration.","title":"Secure the Delta Elasticsearch client"},{"location":"/docs/releases/v1.6-release-notes.html#dedicated-blazegraph-client-for-user-defined-queries","text":"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.","title":"Dedicated Blazegraph client for user-defined queries"},{"location":"/docs/releases/v1.6-release-notes.html#synchronous-indexing","text":"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.","title":"Synchronous indexing"},{"location":"/docs/releases/v1.6-release-notes.html#graph-analytics","text":"This new plugin helps users to inspect the properties and relationships of the different resources in a given project.\nOnly the Delta endpoints are available in this release but a Nexus Fusion plugin will be released soon to make use of it.","title":"Graph analytics"},{"location":"/docs/releases/v1.6-release-notes.html#listings","text":"The different types of resources can now be listed at the organization level and within all the projects the current user has access to.","title":"Listings"},{"location":"/docs/releases/v1.6-release-notes.html#configurable-rdf-parser","text":"The RDF parser allowing to validate incoming data can now be configured in order to be more or less strict.","title":"Configurable RDF parser"},{"location":"/docs/releases/v1.6-release-notes.html#automatic-project-provisioning","text":"When enabled, a dedicated project is created for the current user on its first access to the Nexus platform.\nHow to enable and configure it is detailed here","title":"Automatic project provisioning"},{"location":"/docs/releases/v1.6-release-notes.html#deletion-of-projects","text":"The deletion of projects and all its enclosed resources is now possible by enabling a configuration flag via a dedicated endpoint.","title":"Deletion of projects"},{"location":"/docs/releases/v1.6-release-notes.html#quotas","text":"It is now possible to define via static configurations quotas on projects.","title":"Quotas"},{"location":"/docs/releases/v1.6-release-notes.html#tagging-resources-after-deprecation","text":"The different types of resources can now be tagged after their deprecation.","title":"Tagging resources after deprecation"},{"location":"/docs/releases/v1.6-release-notes.html#view-passivation","text":"Views are now stopped if no new event has been processed after a configured period.","title":"View passivation"},{"location":"/docs/releases/v1.6-release-notes.html#nexus-fusion","text":"","title":"Nexus Fusion"},{"location":"/docs/releases/v1.6-release-notes.html#features","text":"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.","title":"Features"},{"location":"/docs/releases/v1.6-release-notes.html#fixes","text":"Fixes on video player plugin.","title":"Fixes"},{"location":"/docs/releases/v1.6-release-notes.html#nexus-forge","text":"See Nexus Forge documentation for release notes.","title":"Nexus Forge"},{"location":"/docs/releases/v1.5-to-v1.6-migration.html","text":"","title":"v1.5 To v1.6 Migration"},{"location":"/docs/releases/v1.5-to-v1.6-migration.html#v1-5-to-v1-6-migration","text":"The v1.6 release of Delta includes a change on how project statistics are computed which requires to run a query against the Cassandra primary store.","title":"v1.5 To v1.6 Migration"},{"location":"/docs/releases/v1.5-to-v1.6-migration.html#delete-the-project-statistics-row-in-the-projections-progress-table","text":"This command has to be run after stopping Delta 1.5 and before starting Delta 1.6\nDELETE FROM {delta_1_5}.projections_progress where projection_id = 'ProjectsCounts';\nNote that as project statistics will be recomputed according to all events in the system, it may take some time for the statistics computation to reach back to the most recent events.","title":"Delete the project statistics row in the projections_progress table"},{"location":"/docs/releases/v1.5-release-notes.html","text":"","title":"v1.5 Release Notes"},{"location":"/docs/releases/v1.5-release-notes.html#v1-5-release-notes","text":"This is an incremental software release that adds several improvements across the board. Nexus Delta architecture has changed substantially, becoming more modular thanks to the introduction of plugins. However, the API remains backwards compatible to v1.4 (except for very specific endpoints documented below).\nFor the detailed list of updates in this release, see the list of addressed issues since v1.4.\nIf you are currently using Nexus Delta from 1.4.x, please visit the migration instructions for the necessary steps to successfully upgrade.","title":"v1.5 Release Notes"},{"location":"/docs/releases/v1.5-release-notes.html#nexus-delta","text":"The main goal of this release is to allow parts of the service to evolve quickly while keeping a stable core functionality. The solution we have come up with makes use of plugins to achieve the desired degree of modularity.\nA secondary goal of this release is to improve JSON-LD support, fully aligning our service with the JSON-LD specification.\nLastly, we have stabilized and aligned our API while addressing some bug fixes.\nPlease visit the migration instructions for the exact steps necessary to upgrade from the previous release.","title":"Nexus Delta"},{"location":"/docs/releases/v1.5-release-notes.html#plugins","text":"After working on Nexus Delta for 4 years we have learned that there are different parts of the API evolving at different pace with different degrees of stability. At the same time, we acknowledge the diversity of requirements for the various teams using Nexus Delta.\nGiving some thought about how to improve these two aspects, we have realized that a plugin architecture, for part of our API, could be the solution.\nPlugins support painless extensibility and evolution of different features of the Nexus Delta API while keeping isolation and stability to the rest of the feature set.\nIn order to adopt and validate this new design, we have identified a set features that have been implemented as 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\nIf you’re interested into building your own plugin, please visit the plugins section.","title":"Plugins"},{"location":"/docs/releases/v1.5-release-notes.html#json-ld","text":"Note Please read carefully this section. Some changes introduced might have breaking consequences on clients consuming the Nexus Delta API if, and only if, your client does not already use a JSON-LD aware library\nJSON-LD has been our primary representation format since the beginnings of Nexus Delta. It is a powerful format that allows clients to use simple JSON while it adds support for Linked Data, opening the door to work with knowledge graphs.\nOur previous JSON-LD support was, in some cases, inconsistent with the specification. We have fixed that, introducing the following changes:\nAn @base defined on a remote context (a context that is specified as a link) does not have any effect on the resource payload. When an @base is not present in the @context section of the payload, the base field defined on resources’ project is used. When having an array of remote contexts, resolution is performed sequentially, overriding definitions when necessary. A default @context gets added to the payload only when the client didn’t provide it and the payload doesn’t contain any JSON-LD aware content (the payload is not able to produce some triples). When fetching a resource using the query parameter ?format=expanded, a fully expanded JSON-LD document is returned, instead of the hybrid JSON-LD response used in the previous versions.\nIn terms of new features related to JSON-LD, we are happy to announce that we now support:\nThe use of @graph in order to produce named graphs. The response format N-QUADS using the HTTP Accept header application/n-quads.","title":"JSON-LD"},{"location":"/docs/releases/v1.5-release-notes.html#sparql","text":"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).","title":"Sparql"},{"location":"/docs/releases/v1.5-release-notes.html#views","text":"ElasticSearchView/SparqlView/CompositeView have a new field permission that allows clients to customize the permission needed in order to perform queries. ElasticSearchView has a new field settings, allowing clients to specify the Elasticsearch index settings. ElasticSearchViews no longer expand the value of @type field if sourceAsText is set to false. The value used will be the one provided by the client. ElasticSearchViews no longer inject and expand the value of @id field if sourceAsText is set to false. If @id is missing in the payload provided by the client, it will not be present in the Elasticsearch document _source. The identifier of the resource can be retrieved from Elasticsearch _id field . AggregateElasticSearchView can point to a viewId which is another AggregateElasticSearchView. AggregateSparqlView can point to a viewId which is another AggregateSparqlView. CompositeView statistics endpoints return a list of projection statistics. This is a breaking change introduced to align the API with other statistics endpoints. Project information is indexed into Blazegraph and Elasticsearch","title":"Views"},{"location":"/docs/releases/v1.5-release-notes.html#resolvers","text":"CrossProject has a new field useCurrentCaller that supports performing resource resolution with the caller identities, instead a fix set of identities provided in the identities field of the resolver. Prevent from having multiple resolvers with the same priority, enforcing deterministic resolution of resources. When debugging resolver resolution, clients can use the query parameter ?showReport=true in order to get full insight about which project was used up to resolve a resource.","title":"Resolvers"},{"location":"/docs/releases/v1.5-release-notes.html#sses","text":"Introduced own SSEs endpoints for schemas, resolvers, storages, files and views. All SSEs are now guarded by the permission events/read. The top @type field on SSEs have changed to convey more precise information. SSEs response from API endpoint v1/resources/{org}/{project}/events contains project events as well as other resource types events.","title":"SSEs"},{"location":"/docs/releases/v1.5-release-notes.html#miscellaneous","text":"Resolution of remote context and owl:imports for resources/schemas is done at creation and update time. This means that further changes to the remote context or owl:imports link won’t affect the already existing resources. This fixes a bug which caused inconsistencies on our data. When an organization is deprecated no changes can be introduced to the project or resources belonging to that organization. Listings response from API endpoint v1/resources/{org}/{project} contains project resources as well as other resource types resources.","title":"Miscellaneous"},{"location":"/docs/releases/v1.5-release-notes.html#nexus-fusion","text":"In this minor release, we have added two new sub-applications to fusion. We have also updated the Admin app to match the v1.5.0 release of Nexus Delta.","title":"Nexus Fusion"},{"location":"/docs/releases/v1.5-release-notes.html#search-sub-app-beta-","text":"Choose an Elasticsearch index to search on. Configure facets and attributes.","title":"Search sub-app (Beta)"},{"location":"/docs/releases/v1.5-release-notes.html#workflow-sub-app-alpha-","text":"Create workflows. Create steps and sub-steps to describe the workflows. In each step, link activities and add inputs. Visualize data by adding data tables, activity tables, or input tables.","title":"Workflow sub-app (Alpha)"},{"location":"/docs/releases/v1.5-release-notes.html#data-cart","text":"Save resources locally in your data cart, either from the resource view or from a data table. Download and copy IDs from the cart resources in bulk.","title":"Data Cart"},{"location":"/docs/releases/v1.5-release-notes.html#studio-sub-app","text":"Support for Elasticsearch queries in Studios. Brand your deployment of Nexus Fusion for your needs. Configure sub-apps visibility for anonymous users. More under the hood improvements.","title":"Studio sub-app"},{"location":"/docs/releases/v1.5-release-notes.html#nexus-forge","text":"See Nexus Forge documentation for release notes.","title":"Nexus Forge"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html","text":"","title":"v1.4 To v1.5 Migration"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#v1-4-to-v1-5-migration","text":"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.\n(To have a complete list of improvements, see here).\nThese improvements require to replay all existing events to a new keyspace and to reindex all data to elasticsearch/Blazegraph in order to:\nAdopt the new event model for every event Detect and report broken resources in the system.\nDepending on the number and the complexity of existing resources and schemas in the system, the migration may last several days (about 25,000 events per hour) to complete.\nNonetheless, migration does not require an interruption of service of Delta 1.4 to be performed, so a double-run of delta instances is recommended during this period.\nNote Please do not perform any write operations on the Delta v1.5 instance as they may have an impact on the ongoing migration.","title":"v1.4 To v1.5 Migration"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#requirements","text":"As migration requires having two coexisting keyspaces, the following allocations are recommended:\nDisk space for Cassandra: 4x more disk space than the amount 1.4 is using (as we now store the compacted/expanded form of the resources) The same amount of CPU/RAM to run the instance performing migration as the one running 1.4.\nThe migration steps are as follows:","title":"Requirements"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#prepare-cassandra","text":"","title":"Prepare Cassandra"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#perform-a-backup","text":"Perform a backup of the original keyspace delta_1_4 and perform a repair of the Cassandra nodes:\nnodetool repair","title":"Perform a backup"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#create-a-materialized-view-on-the-messages-table-on-the-original-keyspace","text":"Create a materialized view on the messages table on the original keyspace delta_1_4:\nCREATE MATERIALIZED VIEW {delta_1_4}.ordered_messages AS\n SELECT ser_manifest, ser_id, event\n FROM delta.messages\n WHERE timebucket is not null\n AND persistence_id is not null\n AND partition_nr is not null\n AND sequence_nr is not null\n AND timestamp is not null\n PRIMARY KEY(timebucket, timestamp, persistence_id, partition_nr, sequence_nr)\n WITH CLUSTERING ORDER BY (timestamp asc);\nThe materialized view will take some time to build depending on the number of events, we will come back to it later.","title":"Create a materialized view on the messages table on the original keyspace"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#create-the-new-keyspace-for-delta-v1-5","text":"Run the following command in the new keyspace for delta 1_5:\nCREATE KEYSPACE IF NOT EXISTS delta_1_5\n WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': '3'} AND durable_writes = true;\n\n CREATE KEYSPACE IF NOT EXISTS delta_1_5_snapshot\n WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': '3'} AND durable_writes = true;\n\n CREATE TABLE IF NOT EXISTS delta_1_5.messages(\n persistence_id text,\n partition_nr bigint,\n sequence_nr bigint,\n timestamp timeuuid,\n timebucket text,\n writer_uuid text,\n ser_id int,\n ser_manifest text,\n event_manifest text,\n event blob,\n meta_ser_id int,\n meta_ser_manifest text,\n meta blob,\n tags set<text>,\n PRIMARY KEY ((persistence_id, partition_nr), sequence_nr, timestamp))\n WITH gc_grace_seconds =864000\n AND compression = {'class': 'LZ4Compressor'}\n AND compaction = {\n 'class' : 'SizeTieredCompactionStrategy',\n 'enabled' : true,\n 'tombstone_compaction_interval' : 86400,\n 'tombstone_threshold' : 0.2,\n 'unchecked_tombstone_compaction' : false,\n 'bucket_high' : 1.5,\n 'bucket_low' : 0.5,\n 'max_threshold' : 32,\n 'min_threshold' : 4,\n 'min_sstable_size' : 50\n };\n\n CREATE TABLE IF NOT EXISTS delta_1_5.tag_views(\n tag_name text,\n persistence_id text,\n sequence_nr bigint,\n timebucket bigint,\n timestamp timeuuid,\n tag_pid_sequence_nr bigint,\n writer_uuid text,\n ser_id int,\n ser_manifest text,\n event_manifest text,\n event blob,\n meta_ser_id int,\n meta_ser_manifest text,\n meta blob,\n PRIMARY KEY ((tag_name, timebucket), timestamp, persistence_id, tag_pid_sequence_nr))\n WITH gc_grace_seconds =864000\n AND compression = {'class': 'LZ4Compressor'}\n AND compaction = {\n 'class' : 'SizeTieredCompactionStrategy',\n 'enabled' : true,\n 'tombstone_compaction_interval' : 86400,\n 'tombstone_threshold' : 0.2,\n 'unchecked_tombstone_compaction' : false,\n 'bucket_high' : 1.5,\n 'bucket_low' : 0.5,\n 'max_threshold' : 32,\n 'min_threshold' : 4,\n 'min_sstable_size' : 50\n };\n\n CREATE TABLE IF NOT EXISTS delta_1_5.tag_write_progress(\n persistence_id text,\n tag text,\n sequence_nr bigint,\n tag_pid_sequence_nr bigint,\n offset timeuuid,\n PRIMARY KEY (persistence_id, tag)\n );\n\n CREATE TABLE IF NOT EXISTS delta_1_5.tag_scanning(\n persistence_id text,\n sequence_nr bigint,\n PRIMARY KEY (persistence_id)\n );\n\n CREATE TABLE IF NOT EXISTS delta_1_5.metadata(\n persistence_id text PRIMARY KEY,\n deleted_to bigint,\n properties map<text,text>\n );\n\n CREATE TABLE IF NOT EXISTS delta_1_5.all_persistence_ids(\n persistence_id text PRIMARY KEY\n );\n\n CREATE TABLE IF NOT EXISTS delta_1_5_snapshot.snapshots(\n persistence_id text,\n sequence_nr bigint,\n timestamp bigint,\n ser_id int,\n ser_manifest text,\n snapshot_data blob,\n snapshot blob,\n meta_ser_id int,\n meta_ser_manifest text,\n meta blob,\n PRIMARY KEY (persistence_id, sequence_nr))\n WITH CLUSTERING ORDER BY (sequence_nr DESC) AND gc_grace_seconds =864000\n AND compression = {'class': 'LZ4Compressor'}\n AND compaction = {\n 'class' : 'SizeTieredCompactionStrategy',\n 'enabled' : true,\n 'tombstone_compaction_interval' : 86400,\n 'tombstone_threshold' : 0.2,\n 'unchecked_tombstone_compaction' : false,\n 'bucket_high' : 1.5,\n 'bucket_low' : 0.5,\n 'max_threshold' : 32,\n 'min_threshold' : 4,\n 'min_sstable_size' : 50\n };\n\n CREATE TABLE IF NOT EXISTS delta_1_5.projections_progress(\n projection_id text primary key,\n offset timeuuid,\n timestamp bigint,\n processed bigint,\n discarded bigint,\n warnings bigint,\n failed bigint,\n value text,\n value_timestamp bigint,\n );\n\n CREATE TABLE IF NOT EXISTS delta_1_5.projections_errors(\n projection_id text,\n offset timeuuid,\n timestamp bigint,\n persistence_id text,\n sequence_nr bigint,\n value text,\n value_timestamp bigint,\n severity text,\n error_type text,\n message text,\n PRIMARY KEY ((projection_id), timestamp, persistence_id, sequence_nr))\n WITH CLUSTERING ORDER BY (timestamp ASC, persistence_id ASC, sequence_nr ASC)\n AND compression = {'class': 'LZ4Compressor'};\nNote that compression has been added in v1.5.","title":"Create the new keyspace for Delta v1.5"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#check-the-materialized-view","text":"These operations may take a while to complete depending on the number of rows in the messages table.\nOn the messages table: cqlsh -e 'select timebucket from delta.messages' | grep rows\n On the materialized view: cqlsh -e 'select timebucket from delta.ordered_messages' | grep rows\nWhen the materialized view has the same number of rows as the table then it is ready for migration.","title":"Check the materialized view"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#run-delta-in-migration-mode","text":"","title":"Run Delta in migration mode"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#pull-the-docker-image-for-delta-1-5","text":"Pull the docker image for Delta 1.5 from Docker Hub\ndocker pull bluebrain/nexus-delta:1.5.x","title":"Pull the docker image for Delta 1.5"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#configure-delta-in-migration-mode","text":"This section defines the mandatory configuration to run Delta in migration mode.","title":"Configure Delta in migration mode"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#environment-variables-","text":"KAMON_ENABLED: false (not mandatory but recommended) MIGRATE_DATA: true SCHEMA_VALIDATION_DISABLED: “true” DISABLE_INDEXING: “true” DELTA_PLUGINS: /opt/docker/plugins/","title":"Environment variables:"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#jvm-parameters-","text":"Adopt the same values as the one for your current deployment","title":"JVM Parameters:"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#java-properties-","text":"Description Property Example value Service binding interface app.http.interface 0.0.0.0 Service Uri Path prefix app.http.base-uri {delta-url}:8080/v1 Cassandra contact point (1) app.database.cassandra.contact-points.1 cassandra-1:9042 Cassandra contact point (2) app.database.cassandra.contact-points.2 cassandra-2:9042 Cassandra contact point (3) app.database.cassandra.contact-points.3 cassandra-3:9042 Cassandra username app.database.cassandra.username Cassandra password app.database.cassandra.password Cassandra timeout datastax-java-driver.basic.request.timeout 10 seconds Secrets encryption password app.encryption.password Secrets encryption salt app.encryption.salt Remote storage enabling plugins.storage.storages.remote-disk.enabled true/false S3 storage enabling plugins.storage.storages.amazon.enabled true/false Delta 1.4 keyspace migration.replay.keyspace delta Bucket of the first event migration.replay.first-time-bucket YYYYMMDDTHH:MM (Same as the one on your Delta 1.4 deployment)\nStart Delta 1.5 with this configuration.","title":"Java Properties:"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#check-the-delta-logs","text":"The following messages indicating migration should appear at startup: 2021-05-05 14:34:42 INFO ch.epfl.bluebrain.nexus.delta.Main - Plugins discovered: blazegraph-1.5.xxx, elasticsearch-1.5.xxx, storage-1.5.xxx, composite-views-1.5.xxx, archive-1.5.xxx\n2021-05-05 14:34:46 INFO ch.epfl.bluebrain.nexus.delta.Main - Starting Delta in migration mode\nIf remote/S3 storage are enabled, these lines should appear too:\n2021-05-05 14:35:00 INFO c.e.b.n.d.p.s.StoragePluginConfig - Remote-disk storage is enabled\nKeep looking regularly in the logs to look if the migration is still ongoing without problems. If the migration crashes, a restart should allow it to start back from where it stopped.","title":"Check the delta logs"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#monitor-the-health-of-the-platform","text":"Please check the general health of the platform (especially Cassandra available disk space).","title":"Monitor the health of the platform"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#check-the-migration-progress-","text":"Run the following query on table projections_progress in cqlsh (or your favorite cql client):\nselect projection_id, processed, failed, warnings, toTimestamp(offset) as migratedUpTo, timestamp from delta_1_5.projections_progress;\nThis will return a similar response:\nprojection_id | processed | failed | warnings | migratedupto\n -----------+--------+----------+--------------------------------------------------\n migration-v1.5 | 38499 | 10000 | 12 | 2019-04-10 08:53:01.482000+0000\nThe table contains the following information:\nprocessed: total number of processed events failed: number of failures risen during the migration warnings: number of warnings risen during the migration migratedUpTo: timestamp of the last event processed by migration when migration last saved progress\nOnce Migration terminates, the sum of the processed and failed columns should be equal to the number of events in your Delta 1.4 deployment.\nWhen looking at the logs, these lines should be also repeated (the timestamp should match the current date/hour):\n2021-05-06 04:00:20 INFO c.e.b.n.m.replay.ReplayMessageEvents - Next offset is 25683800-ae17-11eb-8080-808080808080 (2021-05-06 03:00:00:000)\n 2021-05-06 04:00:20 INFO c.e.b.n.m.replay.ReplayMessageEvents - We got 0 rows","title":"Check the migration progress:"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#check-the-number-of-messages-in-the-delta-1-5","text":"These operations may take a while to complete but they should give the same result (minus the errors that may have happened)\nOn the Delta messages table: cqlsh -e 'select timebucket from delta.messages' | grep rows\n On the Delta 1.5 message table: cqlsh -e 'select timebucket from delta_1_5.messages' | grep rows","title":"Check the number of messages in the Delta 1.5"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#check-the-migration-errors-warnings-","text":"The errors/warnings are reported in the projections_errors table.\nThere are two types of errors:","title":"Check the migration errors/warnings:"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#failures","text":"The event could not be migrated for the given reason:\nInvalid data due to previous bugs in Delta (invalid iris, acl paths, …) Revision error as a previous revision has been rejected\nThere should be very few of them, and their resolution should be addressed in a process that is beyond the scope of migration.","title":"Failures"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#warnings","text":"The event could be migrated, but a fix had to be performed on the event source (original payload posted by the user). Example:\nWhen an id in the source can’t be resolved to match the one computed in v1.4, it is overwritten by this id\nThe errors table contains the following information:\nprojection_id: the id of the projection (migration-v1.5) timestamp: when the error was risen persistence_id: the internal id of the event in v1.4 sequence_nr: the sequence number of the event in v1.4 offset: the offset of the event in v1.4 error_type: the type of error message: the message and the context of the error severity: the level of error (Failure or Warning as explaining above)\nTo get the errors:\nselect * from delta_1_5.projections_errors;\nNote that Cassandra allows you to export table as a CSV file which could be useful if you want to share, process or filter them.\ncopy delta_1_5.projections_errors to '/path/file.csv'\nTo get a better clue at the error, check the resource in your running v1.4 deployment and or read the event in the delta v1.4 table:\nselect blobAsText(event) from {delta_1_4}.messages where persistence_id = '{persistence_id}' and sequence_nr={sequence_nr} and partition_nr =0;","title":"Warnings"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#restart-in-normal-mode","text":"Once migration is completed and the previous checks have been performed, Delta can be restarted in normal mode.\nThe previous Delta instance can be stopped. After the restart, a complete reindexing of the data in elasticsearch/blazegraph will take place.\nStop the Delta 1.4 instance ; Delete all ElasticSearch indices: curl -XDELETE 'http://{elasticsearch_host}/delta_*'\n Delete all BlazeGraph namespaces: for i in `curl -s 'http://{blazegraph_host}/blazegraph/namespace?describe-each-named-graph=false' | grep sparqlEndpoint | grep -o --color \"rdf:resource=\\\"[^\\\"]*\" | sed 's/rdf:resource=\"//' | sed 's#/sparql$##' | grep -v kb | grep -v LBS`\n do curl -X DELETE \"$i\"\ndone\n Restart the Delta v1.5 instance in normal mode according to the Delta v1.5 deployment documentation and by removing the environment variables MIGRATE_DATA, SCHEMA_VALIDATION_DISABLED and DISABLE_INDEXING. Check the delta logs after restart As the entire indexing will take place, some timeouts may occur Leaving kamon disabled (environment variable KAMON_ENABLED set to false) during this indexing is recommended Allocating temporarily more resources to Cassandra/Delta/elasticsearch/Blazegraph may help as this part is greedy in resources 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. When indexing is finished, the CPU/memory used by the platform should decrease.","title":"Restart in normal mode"},{"location":"/docs/releases/v1.4-to-v1.5-migration.html#clean-up","text":"Once Delta v1.5 is up and running, you can delete the old keyspace: DROP KEYSPACE {delta_1_4};\n The old Delta v1.4 instance can also be removed. Reverse the temporary resources / configuration changes that were needed for global reindexing.","title":"Clean-up"},{"location":"/docs/releases/v1.4-release-notes.html","text":"","title":"v1.4 Release Notes"},{"location":"/docs/releases/v1.4-release-notes.html#v1-4-release-notes","text":"This release marks an expansion to the Nexus Ecosystem which now comprises 3 key products:\nNexus Fusion (v1.4) to enable collaborative data and knowledge discovery, Nexus Forge (v0.3.3) to ease building and using Knowledge Graphs, Nexus Delta (v1.4) to manage the data and Knowledge Graph lifecycle.\nFor the detailed list of updates in this release, see the list of pull requests since 1.3.0.","title":"v1.4 Release Notes"},{"location":"/docs/releases/v1.4-release-notes.html#nexus-forge","text":"The latest release of Nexus Forge (v0.3.3), the python framework to make building and using knowledge graphs easier, adds incremental features across its core and specializations modules.\nThe detailed release note of Nexus Forge 0.3.3 is available here.","title":"Nexus Forge"},{"location":"/docs/releases/v1.4-release-notes.html#nexus-delta","text":"The goal of this release is to improve performance and shrink the service footprint when deploying the Nexus ecosystem. This is an incremental software release that adds several improvements across the board. The API is backwards compatible to v1.3 (and the rest of the v1.x releases, i.e. v1.2, v1.1 and v1.0) but requires rebuilding all indices and performing schema migrations. Please visit the migration instructions for the exact steps necessary to upgrade from the previous release.","title":"Nexus Delta"},{"location":"/docs/releases/v1.4-release-notes.html#services-merge","text":"Up until 1.3, Nexus backend was splitted into 3 services:\niam: dealing with identity and access management. admin: dealing with organizations and project management. kg: dealing with resources and their lifecycle.\nIn 1.4 we have merged the 3 services together. Combining the 3 services into one has the following benefits:\nEasier to deploy, test and monitor. Decrease latency since the services do not have to interact with each other. The degree to which this aspect improves depends on the quality of the network where the service are running.","title":"Services merge"},{"location":"/docs/releases/v1.4-release-notes.html#listing-results","text":"Listing API responses return, along with the resource metadata, the following predicates: sko:prefLabel, schema:name and rdfs:label when they are present in the resource payload.\nGET /v1/resources/{org_label}/{project_label}\nAn example response:\n{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/resource.json\"\n ],\n \"_total\": 1,\n \"_results\": [\n {\n \"@id\": \"https://nexus.example.com/v1/resources/myorg/myproj/fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"@type\": \"http://example.com/Custom\",\n \"prefLabel\": \"my prefered label\",\n \"name\": \"my schema name\",\n \"label\": \"my schema label\",\n \"_incoming\": \"https://nexus.example.com/v1/resources/myorg/myproj/myschema/base:fd8a2b32-170e-44e8-808f-44a8cbbc49b0/incoming\",\n \"_outgoing\": \"https://nexus.example.com/v1/resources/myorg/myproj/myschema/base:fd8a2b32-170e-44e8-808f-44a8cbbc49b0/outgoing\",\n \"_self\": \"https://nexus.example.com/v1/resources/myorg/myproj/myschema/base:fd8a2b32-170e-44e8-808f-44a8cbbc49b0\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/resource\",\n \"_project\": \"https://nexus.example.com/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_deprecated\": true,\n \"_createdAt\": \"2018-09-17T14:54:42.939Z\",\n \"_createdBy\": \"https://nexus.example.com/v1/realms/myrealm/users/john\",\n \"_updatedAt\": \"2018-09-17T15:02:42.939Z\",\n \"_updatedBy\": \"https://nexus.example.com/v1/realms/myrealm/users/john\"\n }\n ]\n}","title":"Listing results"},{"location":"/docs/releases/v1.4-release-notes.html#nexus-fusion","text":"With the addition of new features in our Nexus Web application, and in anticipation of some exciting future developments, we evolved Nexus Web into Nexus Fusion.\nNexus Fusion now supports multiple subapps and clearly defined spaces for different uses:\nAdmin: the place where you can manage organizations, projects, and resources, visualize permissions, and access the different query editor. You can also manage create new studios in your project. Studios: access studios available to you and create new and configure existing studios. Studios let you organize resources present in your knowledges graphs (or projects) into tables, and navigate individual resources.\nWe’ve made big improvements to the way Plugins work accross all resources:\nConfigure your resource-plugin mappings for your instance, so that users get a consistent experience visualizing resources; Some default plugins are available out-of-the-box, such as the Admin plugin.","title":"Nexus Fusion"},{"location":"/docs/releases/v1.3-to-v1.4-migration.html","text":"","title":"v1.3 To v1.4 Migration"},{"location":"/docs/releases/v1.3-to-v1.4-migration.html#v1-3-to-v1-4-migration","text":"As part of the v1.4 release, cassandra schema has changed due to a dependency update. Additionally, the 3 existing keyspaces (iam, admin and kg) must be merged into a single keyspace (delta).","title":"v1.3 To v1.4 Migration"},{"location":"/docs/releases/v1.3-to-v1.4-migration.html#steps","text":"The migration steps are as follows:\nStop the 3 services: iam, admin and kg. Backup the cassandra store. Delete all ElasticSearch indices: curl -XDELETE 'http://{elasticsearch_host}/kg_*'\n Delete all BlazeGraph namespaces: for i in `curl -s 'http://{blazegraph_host}/blazegraph/namespace?describe-each-named-graph=false' | grep sparqlEndpoint | grep -o --color \"rdf:resource=\\\"[^\\\"]*\" | sed 's/rdf:resource=\"//' | sed 's#/sparql$##' | grep -v kb | grep -v LBS`\n do curl -X DELETE \"$i\"\ndone\n Make sure to allocate enough space to Cassandra, at least twice the space used by the keyspaces iam, admin and kg. The data migration involves copying the messages tables. Create the delta keyspace and tables: CREATE KEYSPACE IF NOT EXISTS delta WITH replication = {'class': 'NetworkTopologyStrategy', '<your_dc_name>' : 3 };\n\nCREATE KEYSPACE IF NOT EXISTS delta_snapshot WITH replication = {'class': 'NetworkTopologyStrategy', '<your_dc_name>' : 3 }; \n\nCREATE TABLE IF NOT EXISTS delta.messages (\n persistence_id text,\n partition_nr bigint,\n sequence_nr bigint,\n timestamp timeuuid,\n timebucket text,\n writer_uuid text,\n ser_id int,\n ser_manifest text,\n event_manifest text,\n event blob,\n meta_ser_id int,\n meta_ser_manifest text,\n meta blob,\n tags set<text>,\n PRIMARY KEY ((persistence_id, partition_nr), sequence_nr, timestamp))\n WITH gc_grace_seconds =864000\n AND compaction = {\n 'class' : 'SizeTieredCompactionStrategy',\n 'enabled' : true,\n 'tombstone_compaction_interval' : 86400,\n 'tombstone_threshold' : 0.2,\n 'unchecked_tombstone_compaction' : false,\n 'bucket_high' : 1.5,\n 'bucket_low' : 0.5,\n 'max_threshold' : 32,\n 'min_threshold' : 4,\n 'min_sstable_size' : 50\n };\n\nCREATE TABLE IF NOT EXISTS delta.tag_views (\n tag_name text,\n persistence_id text,\n sequence_nr bigint,\n timebucket bigint,\n timestamp timeuuid,\n tag_pid_sequence_nr bigint,\n writer_uuid text,\n ser_id int,\n ser_manifest text,\n event_manifest text,\n event blob,\n meta_ser_id int,\n meta_ser_manifest text,\n meta blob,\n PRIMARY KEY ((tag_name, timebucket), timestamp, persistence_id, tag_pid_sequence_nr))\n WITH gc_grace_seconds =864000\n AND compaction = {\n 'class' : 'SizeTieredCompactionStrategy',\n 'enabled' : true,\n 'tombstone_compaction_interval' : 86400,\n 'tombstone_threshold' : 0.2,\n 'unchecked_tombstone_compaction' : false,\n 'bucket_high' : 1.5,\n 'bucket_low' : 0.5,\n 'max_threshold' : 32,\n 'min_threshold' : 4,\n 'min_sstable_size' : 50\n };\n\nCREATE TABLE IF NOT EXISTS delta.tag_write_progress(\n persistence_id text,\n tag text,\n sequence_nr bigint,\n tag_pid_sequence_nr bigint,\n offset timeuuid,\n PRIMARY KEY (persistence_id, tag));\n\nCREATE TABLE IF NOT EXISTS delta.tag_scanning(\n persistence_id text,\n sequence_nr bigint,\n PRIMARY KEY (persistence_id));\n\nCREATE TABLE IF NOT EXISTS delta.metadata(\n persistence_id text PRIMARY KEY,\n deleted_to bigint,\n properties map<text,text>);\n\nCREATE TABLE IF NOT EXISTS delta.all_persistence_ids(\n persistence_id text PRIMARY KEY);\n\nCREATE TABLE IF NOT EXISTS delta.projections_progress (\n projection_id text PRIMARY KEY,\n progress text\n) WITH bloom_filter_fp_chance = 0.01\n AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}\n AND comment = ''\n AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}\n AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}\n AND crc_check_chance = 1.0\n AND dclocal_read_repair_chance = 0.1\n AND default_time_to_live = 0\n AND gc_grace_seconds = 864000\n AND max_index_interval = 2048\n AND memtable_flush_period_in_ms = 0\n AND min_index_interval = 128\n AND read_repair_chance = 0.0\n AND speculative_retry = '99PERCENTILE';\n\nCREATE TABLE IF NOT EXISTS delta.projections_failures (\n projection_id text,\n offset text,\n persistence_id text,\n sequence_nr bigint,\n value text,\n PRIMARY KEY (projection_id, offset, persistence_id, sequence_nr)\n) WITH CLUSTERING ORDER BY (offset ASC, persistence_id ASC, sequence_nr ASC)\n AND bloom_filter_fp_chance = 0.01\n AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}\n AND comment = ''\n AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}\n AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}\n AND crc_check_chance = 1.0\n AND dclocal_read_repair_chance = 0.1\n AND default_time_to_live = 0\n AND gc_grace_seconds = 864000\n AND max_index_interval = 2048\n AND memtable_flush_period_in_ms = 0\n AND min_index_interval = 128\n AND read_repair_chance = 0.0\n AND speculative_retry = '99PERCENTILE';\n\nCREATE TABLE IF NOT EXISTS delta_snapshot.snapshots (\n persistence_id text,\n sequence_nr bigint,\n timestamp bigint,\n ser_id int,\n ser_manifest text,\n snapshot_data blob,\n snapshot blob,\n meta_ser_id int,\n meta_ser_manifest text,\n meta blob,\n PRIMARY KEY (persistence_id, sequence_nr))\n WITH CLUSTERING ORDER BY (sequence_nr DESC) AND gc_grace_seconds =864000\n AND compaction = {\n 'class' : 'SizeTieredCompactionStrategy',\n 'enabled' : true,\n 'tombstone_compaction_interval' : 86400,\n 'tombstone_threshold' : 0.2,\n 'unchecked_tombstone_compaction' : false,\n 'bucket_high' : 1.5,\n 'bucket_low' : 0.5,\n 'max_threshold' : 32,\n 'min_threshold' : 4,\n 'min_sstable_size' : 50\n };\n Check and update the necessary configuration environment variables/JVM properties according to configuration migration guide Deploy the new service images (tag 1.4) for delta and run it with the MIGRATE_V13_TO_V14=true and REPAIR_FROM_MESSAGES=true environment variables. This will instruct the service to copy all the messages table from iam, admin and kg into the delta keyspace. Afterwards the tag_views table and their related tables will be properly initialized. When populating the tag_views table consider increasing the batch_size_fail_threshold_in_kb in your cassandra.yaml configuration file if you see TagWriter error messages. Decreasing the value of the JVM property akka.persistence.cassandra.events-by-tag.max-message-batch-size and akka.persistence.cassandra.journal.max-message-batch-size to 1 can also help mitigate the issue. Once the service is up and running, and you have verified the resources are accessible, you can proceed to delete the previous keyspaces: DROP KEYSPACE iam;\nDROP KEYSPACE admin;\nDROP KEYSPACE kg;","title":"Steps"},{"location":"/docs/releases/v1.3-to-v1.4-migration.html#configuration","text":"This section provides a table with the equivalences in terms of configuration environment variables from 1.3 (and older versions) to 1.4. Only the most relevant environment configuration properties are described\nThere are 2 ways to modify the default configuration values:\nUsing JVM properties as arguments when running the service: -D{property}. For example: -Dapp.instance.interface=\"127.0.0.1\". Setting FORCE_CONFIG_ style environment variables. In order to enable this style of configuration the JVM property -Dconfig.override_with_env_vars=true needs to be set. For example: CONFIG_FORCE_app_instance_interface=\"127.0.0.1\".\nNote that there has been one important change which cannot be mapped using the following table: the service account token.\nIn 1.4 release, the IAM_SA_TOKEN is not used. Instead, the JVM properties app.service-account-caller.realm, app.service-account-caller.subject and app.service-account-caller.groups should be set matching the identity of the service account. If these properties are not present, the service account identity will be set to anonymous.\nDescription Env. variable 1.3 property 1.4 Env. variable override 1.4 Default timeout for Actors interaction DEFAULT_ASK_TIMEOUT app.default-ask-timeout CONFIG_FORCE_app_default__ask__timeout The service binding interface BIND_INTERFACE app.instance.interface CONFIG_FORCE_app_instance_interface The service binding port BIND_PORT app.http.port CONFIG_FORCE_app_http_port The service Uri Path prefix HTTP_PREFIX app.http.prefix CONFIG_FORCE_app_http_prefix The service publicly exposed Uri PUBLIC_URI app.http.public-uri CONFIG_FORCE_app_http_public__uri The service account realm (when different than anonymous) app.service-account-caller.realm CONFIG_FORCE_app_service__account__caller_realm The service account subject (when different than anonymous) app.service-account-caller.subject CONFIG_FORCE_app_service__account__caller_subject The service account groups (when desired). Array field app.service-account-caller.groups CONFIG_FORCE_app_service__account__caller_groups The cassandra contact point (1) CASSANDRA_CONTACT_POINT1 datastax-java-driver.basic.contact-points.1 The cassandra contact point (2) CASSANDRA_CONTACT_POINT2 datastax-java-driver.basic.contact-points.2 The cassandra contact point (3) CASSANDRA_CONTACT_POINT3 datastax-java-driver.basic.contact-points.3 The cassandra username CASSANDRA_USERNAME datastax-java-driver.advanced.auth-provider.username CONFIG_FORCE_datastax__java__driver_advanced_auth__provider_username The cassandra password CASSANDRA_PASSWORD datastax-java-driver.advanced.auth-provider.password CONFIG_FORCE_datastax__java__driver_advanced_auth__provider_password The time after which actors without interaction are shutdown PASSIVATION_TIMEOUT app.cluster.passivation-timeout CONFIG_FORCE_app_cluster_passivation__timeout The Caches (Akka Distributed Data) request timeout REPLICATION_TIMEOUT app.cluster.replication-timeout CONFIG_FORCE_app_cluster_replication__timeout The number of cluster shards SHARDS app.cluster.shards CONFIG_FORCE_app_cluster_shards The seeds to use for joining a cluster SEED_NODES app.cluster.seeds CONFIG_FORCE_app_cluster_seeds The default page size when paginating on listings PAGINATION_DEFAULT_SIZE app.pagination.default-size CONFIG_FORCE_app_pagination_default__size The maximum page size allowed when paginating on listings PAGINATION_MAX_SIZE app.pagination.size-limit CONFIG_FORCE_app_pagination_size__limit The default indexing number of events taken per batch INDEXING_BATCH app.indexing.batch CONFIG_FORCE_app_indexing_batch The default indexing amount of time to wait for the bach events INDEXING_BATCH_TIMEOUT app.indexing.batch-timeout CONFIG_FORCE_app_indexing_batch__timeout The default indexing retry strategy INDEXING_RETRY_STRATEGY app.indexing.retry.strategy CONFIG_FORCE_app_indexing_retry_strategy The default indexing first retry delay INDEXING_RETRY_INITIAL_DELAY app.indexing.retry.initial-delay CONFIG_FORCE_app_indexing_retry_initial__delay The default indexing maximum retry delay INDEXING_RETRY_MAX_DELAY app.indexing.retry.max-delay CONFIG_FORCE_app_indexing_retry_max__delay The default indexing maximum number of retries INDEXING_RETRY_MAX_RETRIES app.indexing.retry.max-retries CONFIG_FORCE_app_indexing_retry_max__retries The default number of events after which the indexing progress is persisted INDEXING_PROGRESS_EVENTS app.indexing.progress.persist-after-processed CONFIG_FORCE_app_indexing_progress_persist__after__processed The default amount of time after which the indexing progress is persisted INDEXING_PROGRESS_TIME app.indexing.progress.max-time-window CONFIG_FORCE_app_indexing_progress_max__time__window Default number of shards for aggregates AGGREGATE_SHARDS app.aggregate.shards CONFIG_FORCE_app_aggregate_shards The amount of time ACLs are kept in memory after being accessed ACLS_AGGREGATE_LAST_INTERACTION_PASSIVATION_TIMEOUT app.acls.aggregate.passivation.lapsed-since-last-interaction CONFIG_FORCE_app_acls_aggregate_passivation_lapsed__since__last__interaction The amount of time permissions are kept in memory after being accessed PERMISSIONS_AGGREGATE_LAST_INTERACTION_PASSIVATION_TIMEOUT app.permissions.aggregate.passivation.lapsed-since-last-interaction CONFIG_FORCE_app_permissions_aggregate_passivation_lapsed__since__last__interaction The amount of time Realms are kept in memory after being accessed REALMS_AGGREGATE_LAST_INTERACTION_PASSIVATION_TIMEOUT app.realms.aggregate.passivation.lapsed-since-last-interaction CONFIG_FORCE_app_realms_aggregate_passivation_lapsed__since__last__interaction The amount of time Groups are kept in memory after being accessed GROUPS_CACHE_LAST_INTERACTION_STOP_TIMEOUT app.groups.invalidation.lapsed-since-last-interaction CONFIG_FORCE_app_groups_invalidation_lapsed__since__last__interaction The amount of time Organizations are kept in memory after being accessed AGGREGATE_LAST_INTERACTION_PASSIVATION_TIMEOUT app.organizations.aggregate.passivation.lapsed-since-last-interaction CONFIG_FORCE_app_organizations_aggregate_passivation_lapsed__since__last__interaction The amount of time Projects are kept in memory after being accessed AGGREGATE_LAST_INTERACTION_PASSIVATION_TIMEOUT app.projects.aggregate.passivation.lapsed-since-last-interaction CONFIG_FORCE_app_organizations_aggregate_passivation_lapsed__since__last__interaction The path where the DiskStorage reads/writes files VOLUME_PATH app.storage.disk.volume CONFIG_FORCE_app_storage_disk_volume The maximum allowed upload size (in bytes) for DiskStorage DISK_MAX_FILE_SIZE app.storage.disk.max-file-size CONFIG_FORCE_app_storage_disk_max__file__size The default RemoteDiskStorage endpoint REMOTE_DISK_DEFAULT_ENDPOINT app.storage.remote-disk.default-endpoint CONFIG_FORCE_app_storage_remote__disk_default__endpoint The default RemoteDiskStorage Uri Path prefix REMOTE_DISK_DEFAULT_ENDPOINT_PREFIX app.storage.remote-disk.default-endpoint-prefix CONFIG_FORCE_app_storage_remote__disk_default__endpoint__prefix The default RemoteDiskStorage Bearer Token REMOTE_DISK_DEFAULT_CREDENTIALS app.storage.remote-disk.default-credentials CONFIG_FORCE_app_storage_remote__disk_default__credentials The maximum allowed upload size (in bytes) for RemoteDiskStorage REMOTE_DISK_MAX_FILE_SIZE app.storage.remote-disk.max-file-size CONFIG_FORCE_app_storage_remote__disk_max__file__size The maximum allowed upload size (in bytes) for S3Storage S3_MAX_FILE_SIZE app.storage.amazon.max-file-size CONFIG_FORCE_app_storage_amazon_max__file__size The Blazegraph endpoint SPARQL_BASE_URI app.sparql.base CONFIG_FORCE_app_sparql_base The Blazegraph query retry strategy QUERYING_SPARQL_RETRY_STRATEGY app.sparql.query.retry.strategy CONFIG_FORCE_app_sparql_query_retry_strategy The Blazegraph query first retry delay QUERYING_SPARQL_RETRY_INITIAL_DELAY app.sparql.query.retry.initial-delay CONFIG_FORCE_app_sparql_query_retry_initial__delay The Blazegraph query maximum retry delay QUERYING_SPARQL_RETRY_MAX_DELAY app.sparql.query.retry.max-delay CONFIG_FORCE_app_sparql_query_retry_max__delay The Blazegraph query maximum number of retries QUERYING_SPARQL_RETRY_MAX_RETRIES app.sparql.query.retry.max-retries CONFIG_FORCE_app_sparql_query_retry_max__retries The ElasticSearch endpoint ELASTIC_SEARCH_BASE_URI app.elastic-search.base CONFIG_FORCE_app_elastic__search_base The ElasticSearch query retry strategy QUERYING_ELASTIC_SEARCH_RETRY_STRATEGY app.elastic-search.query.retry.strategy CONFIG_FORCE_app_elastic__search_query_retry_strategy The ElasticSearch query first retry delay QUERYING_ELASTIC_SEARCH_RETRY_INITIAL_DELAY app.elastic-search.query.retry.initial-delay CONFIG_FORCE_app_elastic__search_query_retry_initial__delay The ElasticSearch query maximum retry delay QUERYING_ELASTIC_SEARCH_RETRY_MAX_DELAY app.elastic-search.query.retry.max-delay CONFIG_FORCE_app_elastic__search_query_retry_max__delay The ElasticSearch query maximum number of retries QUERYING_ELASTIC_SEARCH_RETRY_MAX_RETRIES app.elastic-search.query.retry.max-retries CONFIG_FORCE_app_elastic__search_query_retry_max__retries The CompositeView allowed maximum number of sources COMPOSITE_MAX_SOURCES app.composite.max-sources CONFIG_FORCE_app_composite_max__sources The CompositeView allowed maximum number of projections COMPOSITE_MAX_PROJECTIONS app.composite.max-projections CONFIG_FORCE_app_composite_max__projections The CompositeView allowed minimum rebuild interval time COMPOSITE_MIN_REBUILD_INTERVAL app.composite.min-interval-rebuild CONFIG_FORCE_app_composite_min__interval__rebuild The CompositeView password used to encrypt token COMPOSITE_TOKEN_PASSWORD app.composite.password CONFIG_FORCE_app_composite_password The CompositeView salt used to encrypt token COMPOSITE_TOKEN_SALT app.composite.salt CONFIG_FORCE_app_composite_salt The amount of time Archives are kept in memory after being accessed ARCHIVES_CACHE_INVALIDATE_AFTER app.archives.cache-invalidate-after CONFIG_FORCE_app_archives_cache__invalidate__after The maximum number of resources allowed on an Archive ARCHIVES_MAX_RESOURCES app.archives.max-resources CONFIG_FORCE_app_archives_max__resources The maximum allowed service payload size (except for files) AKKA_HTTP_SERVER_MAX_CONTENT_LENGTH akka.http.server.parsing.max-content-length CONFIG_FORCE_akka_http_server_parsing_max__content__length The maximum allowed client payload size (used for storages) AKKA_HTTP_CLIENT_MAX_CONTENT_LENGTH akka.http.client.parsing.max-content-length CONFIG_FORCE_akka_http_client_parsing_max__content__length The maximum allowed number of connections AKKA_HTTP_MAX_CONNECTIONS akka.http.host-connection-pool.max-connections CONFIG_FORCE_akka_http_host__connection__pool_max__connections The maximum allowed concurrently opened requests AKKA_HTTP_MAX_OPEN_REQUESTS akka.http.host-connection-pool.max-open-requests CONFIG_FORCE_akka_http_host__connection__pool_max__open__requests The log level for Akka logs AKKA_LOG_LEVEL akka.loglevel CONFIG_FORCE_akka_loglevel","title":"Configuration"},{"location":"/docs/releases/v1.3-release-notes.html","text":"","title":"v1.3 Release Notes"},{"location":"/docs/releases/v1.3-release-notes.html#v1-3-release-notes","text":"This is an incremental software release that adds several improvements across the board. The API is backwards compatible to v1.2 (and the rest of the v1.x releases, i.e. v1.1 and v1.0) but requires rebuilding all indices. Please visit the migration instructions for the exact steps necessary to upgrade from the previous release.","title":"v1.3 Release Notes"},{"location":"/docs/releases/v1.3-release-notes.html#highlights","text":"The goal of this release is to expand on the benefits of using a fully managed data and knowledge graph system with new capabilities around data search, transformation and exchange.","title":"Highlights"},{"location":"/docs/releases/v1.3-release-notes.html#studio","text":"TODO: Fix the links to the appropriate section inside the studio page.\nStudio (a new feature in Nexus Web) allows users to define a user interface to browse and view the data in Nexus’ knowledge graph. Multiple Workspaces can be created within a Studio allowing for arbitrary grouping of datasets to be shown. A Workspace can be configured with multiple Dashboards, each presenting data of possibly different types (and shapes within the graph).\nEach row in a Dashboard corresponds to a resource in the system, but the values shown can be collected from related resources. A very simple example of that would be showing a listing of Person names and the name of the Organizations that they are affiliated to (following schema:affiliation) where each Person and Organization are managed as independent resources in the system:\n+--------+ +--------------+\n | Person +-------------->+ Organization |\n +--------+ affiliation +--------------+\n | |\n +->name +->name\nSelecting an entry in a Dashboard will open a detailed view of the corresponding resource that can be fully customized by means of plugins.\nPlease head over to the Studio section of the documentation for more information.","title":"Studio"},{"location":"/docs/releases/v1.3-release-notes.html#graph-view","text":"In order to improve the user understanding of the linked entities of the knowledge graph, we have added Graph View. It presents the outgoing entities linked and enable users to graphically navigate to them.","title":"Graph View"},{"location":"/docs/releases/v1.3-release-notes.html#data-aggregation-transformation-and-projection","text":"One of the most important features of Nexus is to bridge the gap between the management of data and its consumption while not sacrificing on security. It does that by supporting customizable managed indices of the data (represented by View resources).\nPrior to this release, two main type of indices were made available ( ElasticSearchView and SparqlView) and their Aggregated* variants (for querying multiple indices at the same time). They enable fantastic search capabilities on the managed data. But while these types of indices are very powerful on their own, we found that bringing them closer together can raise the bar even further by taking advantage of their best use: an RDF graph is very powerful for data integration and exploration, while ElasticSearch is very powerful for full text and faceted search.\nThis release introduces a new type of managed index (represented by CompositeView resources) that allows the use of these indices together at their best. It allows integrating data from multiple sources (projects) in a single RDF graph to perform queries that generate documents to be stored in one or many ElasticSearch indices. The approach is extremely flexible as it allows the use of semantic web technologies to integrate, transform and filter data (via queries) to produce arbitrary document structures in ElasticSearch. (Sparql CONSTRUCT) queries can span across graphs of multiple resources removing the coupling on the data shapes for management vs search.\nAdditionally, the new views support sources of different (remote) Nexus projects introducing the first of many federation features. This first iteration allows collecting data from different Nexus deployments to produce local indices that enable fast local searches. For the best search user experience, data needs to be pre-indexed such that responses are delivered with minimal latency (distributed joins are significantly slower that local ones). The incremental indexing approach promoted by the system allows for near instant data synchronization between the sources and the local indices.\nFor more details on CompositeViews, please read below.","title":"Data Aggregation, Transformation and Projection"},{"location":"/docs/releases/v1.3-release-notes.html#details","text":"","title":"Details"},{"location":"/docs/releases/v1.3-release-notes.html#compositeviews","text":"CompositeViews are yet another type of view introduced (currently in Beta) to enable new indexing capabilities:\nability to collect data to be indexed from multiple sources (current project, other projects, remote Nexus deployments); ability to apply transformations to the indexed data by means of SPARQL CONSTRUCT queries that are executed on the entire RDF graph generated from all data sources; ability to project data to multiple indices; ability to query multiple projections of the same type; ability to query the entire RDF graph generated from all data sources.\nThe name stems from its unique characteristic of aggregating data from multiple sources and managing multiple projections.\nA CompositeView can define several sources of data of different types:\nProjectEventStream: the event log of the project where the CompositeView is defined CrossProjectEventStream: the event log of an arbitrary project within the same Nexus deployment RemoteProjectEventStream: the event log of an arbitrary project within a different Nexus deployment\nThe sources are consumed as a collection of event streams, either from the primary store or via Server Sent Events in the case of the RemoteProjectEventStream. Each event is either exchanged with the resource for which it was emitted or dropped (if the filters defined in the originating source exclude it). The resource is then transformed into an RDF graph and stored in a temporary namespace of BlazeGraph.\nProjections are then executed by querying the temporary namespace via the SPARQL CONSTRUCT queries defined as part of their configuration. These queries allow constructing an arbitrary RDF graph by traversing the temporary one starting from the IRI node representing the originating resource id (the system recognizes the {resource_id} token in the provided query and replaces it with the corresponding value).\nCompositeViews allow defining multiple projections; the current supported types are:\nElasticSearchProjection: data is projected as documents in an ElasticSearch index SparqlProjection: data is projected as an RDF named graph in a BlazeGraph namespace\nProjections include filtering configuration to allow resources of different types or constrained by different schemas to be indexed separately. An obvious use case is to index resources of different shapes in different ElasticSearch indices with appropriate mapping definitions for each variation.\nThe complete configuration options can be found in the api reference.","title":"CompositeViews"},{"location":"/docs/releases/v1.3-release-notes.html#view-offsets","text":"Views now expose offset as a sub-resource allowing the retrieval of the last consumed event id. The event id values are the same as the ones presented via Server Sent Events.\nGET /v1/views/{org_label}/{project_label}/{view_id}/offset\nAn example response:\n{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/offset.json\",\n \"@type\": \"TimeBasedOffset\",\n \"instant\": \"2020-02-14T09:31:41.400Z\",\n \"value\": \"ceaf0580-4f0c-11ea-98d9-dff6b2cf55b4\"\n}\nDeleting the offset sub-resource instructs the system to rebuild the corresponding index by restarting the event replay and indexing process.\nDELETE /v1/views/{org_label}/{project_label}/{view_id}/offset\nThe system acknowledges the command by providing a NoOffset response:\n{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/offset.json\",\n \"@type\": \"NoOffset\"\n}\nIn the case of CompositeViews where the entire process handles multiple offsets at the same time (a product of sources and projections) dedicated endpoints have been added to select a specific offset or perform a listing:\n/v1/views/{org_label}/{project_label}/{view_id}/sources/{source_id}/offset\n/v1/views/{org_label}/{project_label}/{view_id}/sources/_/offset\n/v1/views/{org_label}/{project_label}/{view_id}/projections/{projection_id}/offset\n/v1/views/{org_label}/{project_label}/{view_id}/projections/_/offset\nThese endpoints also accept deletion instructing the system to restart only a part of the process. For example, executing a deletion on the following endpoint will cause the system to only rebuild the projections without having to restart the collection of resources in the temporary RDF graph:\nDELETE /v1/views/{org_label}/{project_label}/{view_id}/projections/_/offset","title":"View Offsets"},{"location":"/docs/releases/v1.3-release-notes.html#javascript-python-sdks-and-the-cli","text":"The JavaScript SDK has been updated to support the new APIs exposed in this release, maintaining feature parity.\nThe Python SDK and Nexus CLI have not yet been updated, as we’re working on redesigning these components to provide a better user experience. Since the release is fully backwards compatible with the previous releases, the Python SDK and Nexus CLI can be used just as before, but they don’t support the newly added APIs.\nWe will announce their release at a later date.","title":"JavaScript, Python SDKs and the CLI"},{"location":"/docs/releases/v1.3-release-notes.html#other-changes","text":"The SparqlViews can now also be queried using the GET HTTP method by providing the query string in the query parameter:\nGET /v1/views/{org_label}/{project_label}/{view_id}/sparql?query={query}\nSorting of results can be controlled now via the repeatable sort query parameter. The parameter accepts an ElasticSearch document field name to be used for sorting the result set ascending. The order can be reversed by prefixing the field name with a - character. The sort parameter can be repeated multiple times to specify multiple fields to be used for sorting. For example, the following call will return all resources in the specified project ordered by the user that made the last change in each resource and then by last updated time descending (more recent updates first).\nGET /v1/resources/{org_label}/{project_label}?sort=_updatedBy&sort=-_updatedAt\nNew ElasticSearch indices are automatically configured to perform word split and properly handle UUIDs. The new index configuration yields better full text search results.\nAdditional reported issues were fixed.","title":"Other Changes"},{"location":"/docs/releases/v1.2-to-v1.3-migration.html","text":"","title":"v1.2 To v1.3 Migration"},{"location":"/docs/releases/v1.2-to-v1.3-migration.html#v1-2-to-v1-3-migration","text":"As part of the v1.3 release CompositeViews were introduced requiring a change in the data model used to record the indexing progress of a View. The change is not backwards compatible, it requires dropping two Cassandra tables and a rebuilding all indices. Additionally, in order to benefit from the new ElasticSearch index configuration, a migration of the default ElasticSearchView of each project is required.\nThe migration steps are as follows:\nStop the 3 services: iam, admin and kg. Backup the cassandra store. Delete all ElasticSearch indices: curl -XDELETE 'http://{elasticsearch_host}/kg_*'\n Delete all BlazeGraph namespaces: for i in `curl -s 'http://{blazegraph_host}/blazegraph/namespace?describe-each-named-graph=false' | grep sparqlEndpoint | grep -o --color \"rdf:resource=\\\"[^\\\"]*\" | sed 's/rdf:resource=\"//' | sed 's#/sparql$##' | grep -v kb | grep -v LBS`\n do curl -X DELETE \"$i\"\ndone\n Drop the kg.projections_progress and the kg.projections_failures tables: drop table kg.projections_progress;\ndrop table kg.projections_failures;\n Deploy the new service images (tag 1.3) for iam and admin. Deploy the new kg (tag 1.3) image with the MIGRATE_V12_TO_V13=true environment variable. This will instruct the service to automatically migrate the default views. The service can be restarted without the migration environment variable after the following message is presented in the log: Finished migrating views mappings.\nOnce the services are restarted with the new images all ElasticSearch and BlazeGraph indices will be rebuilt automatically. The progress for each view can be tracked either in Nexus Web or using the statistics endpoint for each view:\nGET /v1/views/{org_label}/{project_label}/{view_id}/statistics","title":"v1.2 To v1.3 Migration"},{"location":"/docs/releases/v1.2-release-notes.html","text":"","title":"v1.2 Release Notes"},{"location":"/docs/releases/v1.2-release-notes.html#v1-2-release-notes","text":"This is an incremental software release that adds several improvements across the board. The API is backwards compatible to v1.1 and no migrations are required.","title":"v1.2 Release Notes"},{"location":"/docs/releases/v1.2-release-notes.html#highlights","text":"The goal of this release is to extend the way in which resources can be fetched, allowing multiple resources to be downloaded at once.","title":"Highlights"},{"location":"/docs/releases/v1.2-release-notes.html#source","text":"Previously a resource could be retrieved as Json-LD (compacted or expanded), DOT and n-triples format. In this release the sub-resource /source is introduced.\nThis endpoint allows clients to retrieve the original payload posted for that resource. The following resource types support this feature:\nresources: /v1/resources/{org}/{project}/_/{id}/source schemas: /v1/schemas/{org}/{project}/{id}/source views: /v1/views/{org}/{project}/{id}/source resolvers: /v1/resolvers/{org}/{project}/{id}/source storages: /v1/storages/{org}/{project}/{id}/source","title":"Source"},{"location":"/docs/releases/v1.2-release-notes.html#archives","text":"A new resource type has been introduced on the top level API (archives).\nAn archive is a collection of resources stored inside an archive file. The archiving format chosen for this purpose is tar (or tarball).\nIn other words, an archive resource allows a client to select multiple resources and download them all at once in a tar file.\nExample:\nThis example selects the resource with id https://nexus.example.com/myid1 and https://nexus.example.com/myid2 from the current project (myorg/myproj). It also selects the file with id https://nexus.example.com/file1 from the project myorg/my-other-project. For the file, the location in the resulting tar file it is explicitly specified (as other/path/file.png). As a result, a file output.tar will be created on the current directory. This file, once unpacked, contains the 3 selected resources.\ncurl -L -s -H \"Authorization: Bearer $TOKEN\" \"http://localhost/v1/archives/myorg/myproj\" \\\n -H \"Content-Type: application/json\" -H \"Accept: */*\" \\\n -d '{\n \"resources\" : [\n {\n \"@type\": \"Resource\",\n \"resourceId\": \"https://nexus.example.com/myid1\"\n },\n {\n \"@type\": \"Resource\",\n \"resourceId\": \"https://nexus.example.com/myid2\",\n \"originalSource\": false\n },\n {\n \"@type\": \"File\",\n \"resourceId\": \"https://nexus.example.com/file1\",\n \"project\": \"myorg/my-other-project\",\n \"path\": \"other/path/file.png\"\n } \n ]\n }' -o output.tar\nFurther information related to archives can be found here","title":"Archives"},{"location":"/docs/releases/v1.2-release-notes.html#async-file-attributes","text":"The previous release added an asynchronous process that checks for un-computed digests on file resources and performs the computation asynchronously.\nIn this release we extend that computation to not only update the digest but also the size (bytes) of the file. This process fixes some edge cases, where the size of an archive file was not accurate when linking resources using a RemoteDiskStorage.","title":"Async. file attributes"},{"location":"/docs/releases/v1.2-release-notes.html#other-changes","text":"The underlying SHACL validator has been updated to 1.3.0. This version contains some performance optimizations. Other Bug Fixes.","title":"Other changes"},{"location":"/docs/releases/v1.1-release-notes.html","text":"","title":"v1.1 Release Notes"},{"location":"/docs/releases/v1.1-release-notes.html#v1-1-release-notes","text":"This is an incremental software release that adds several improvements across the board. The API is backwards compatible to v1.0 but the cassandra store and indices require a migration due to changes in the underlying event model and resource representation. If you are updating from v1.0 please follow the migration instructions.","title":"v1.1 Release Notes"},{"location":"/docs/releases/v1.1-release-notes.html#highlights","text":"The goal of this release is to expose the event log through an API and to provide a configurable storage where to save files. These two key features enables users to\nBuild custom applications based on Nexus event log . Save files in different storage backends (S3, POSIX compatible, local File System).","title":"Highlights"},{"location":"/docs/releases/v1.1-release-notes.html#service-event-logs","text":"Services now expose new API endpoints to replay their global event log or the virtual event logs specific to certain resource types or scope (organization, project). This new API allows building applications that integrate with Nexus to provide custom functionality for the data stored in the system. It allows applications to listen to events as they are emitted and react accordingly.\nAn example application would be a custom index for data within a project where as new resources or updates are recorded in Nexus, the application is notified and updates the appropriate index.\nThe implementation follows the Server Sent Events specification and gives clients the responsibility of maintaining a cursor while replaying an event log. The event log is exposed over HTTP in a JSON-LD event representation.\nThe new endpoints require proof of identity by passing within the Authorization header a ‘‘Bearer’’ token. An Anonymous identity is assumed if the client does not pass a token.\nExample:\ncurl -s -H \"Authorization: Bearer $TOKEN\" \"http://localhost/v1/resources/myorg/myproj/events\"\n\ndata:{\"@context\":\"https://bluebrain.github.io/nexus/contexts/resource.json\",\"@type\":\"Updated\",\"_resourceId\":\"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\",\"_source\":{\"@context\":{\"@base\":\"http://localhost/v1/resources/myorg/myproj/_/\",\"@vocab\":\"http://schema.org/\"},\"@id\":\"7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\",\"@type\":\"Person\",\"age\":34,\"name\":\"John Doe\"},\"_types\":[\"http://schema.org/Person\"],\"_projectUuid\":\"fadc3e6c-fca0-45d8-b65c-a984a012c689\",\"_organizationUuid\":\"d363ee88-5426-420a-8078-f8e9d9652fe9\",\"_rev\":2,\"_instant\":\"2019-07-24T10:58:03.830114Z\",\"_subject\":\"http://localhost/v1/anonymous\"}\nevent:Updated\nid:e8fac660-ae01-11e9-b31a-71e2858070d7\n\ndata:\n\n^C","title":"Service event logs"},{"location":"/docs/releases/v1.1-release-notes.html#full-service-event-logs","text":"Designed primarily for applications that aim to be extensions to Nexus, the following service specific endpoints have been added. It is assumed that these endpoints would not be consumed by browsers or command line clients, but rather stateful applications that run within the same network. If that not the case, the deployment requires a proxy that does URL rewriting to avoid the path collision.\nhttp(s)://{kg_service_address}/v1/events; exposes the entire event log of the KG service; requires events/read permission on /. http(s)://{admin_service_address}/v1/events; exposes the entire event log of the Admin service; requires events/read permission on /. http(s)://{iam_service_address}/v1/events; exposes the entire event log of the KG service; requires events/read permission on /. http(s)://{nexus_address}/v1/events; exposes the entire event log of the KG service; requires events/read permission on /.","title":"Full service event logs"},{"location":"/docs/releases/v1.1-release-notes.html#resource-specific-event-logs","text":"Designed primarily for applications that target a single resource type or a specific scope, the following endpoints have been added:\nhttp(s)://{nexus_address}/v1/permissions/events; exposes the event log for permissions; requires permissions/read permission on /. http(s)://{nexus_address}/v1/realms/events; exposes the event log for realms; requires realms/read permission on /. http(s)://{nexus_address}/v1/acls/events; exposes the event log for access control lists; requires acls/read permission on /. http(s)://{nexus_address}/v1/orgs/events; exposes the event log for organizations; requires organizations/read permission on /. http(s)://{nexus_address}/v1/projects/events; exposes the event log for projects; requires projects/read permission on /. http(s)://{nexus_address}/v1/resources/{org}/events; exposes the event log for all resources in the selected organization; requires resources/read permission on /{org}. http(s)://{nexus_address}/v1/resources/{org}/{project}/events; exposes the event log for all resources in the selected project; requires resources/read permission on /{org}/{project}.","title":"Resource specific event logs"},{"location":"/docs/releases/v1.1-release-notes.html#configurable-storage-backends","text":"Prior to this release the KG service used an implicit storage medium, a filesystem directory (either local or mounted) accessible by the service. We’ve noticed, however, both internally and through questions raised by organizations using Nexus that certain usecases require a higher degree of control on how data is stored and managed by the system.\nAn example of that is registering fairly large files into Nexus; performing a file upload just for the purpose of recording the file location and checksum is not efficient, especially in cases where the existing files are present on the same storage medium as the one mounted for use by Nexus.\nTo address this issue the new release introduces a new resource type specific to KG that controls the configuration of storage mediums in Nexus on a project basis. The new resource type is called Storage with three sub-types: DiskStorage, RemoteDiskStorage, S3Storage and uses the /v1/storage resource type specific endpoint.\nEach project can be configured with multiple storage resources. Creating a storage resource requires storages/write permission on the target project or inherited from the parent organization or /.\nSee the storages API for more information.\nAdditionally, a new file operation has been introduced that allows registering an existing file (already present on that storage) into the system just by specifying its name, path, mediaType and optionally a storage identifier to be used:\ncurl -s -XPUT \"http://localhost/v1/files/myorg/myproj/myfile.png?storage=mystorage\" -d \\\n'{\n \"filename\": \"myfile.png\",\n \"path\": \"relative/path/to/myfile.png\",\n \"mediaType\": \"image/png\"\n}'","title":"Configurable storage backends"},{"location":"/docs/releases/v1.1-release-notes.html#diskstorage","text":"When new projects are being created, a new DiskStorage resource is automatically created for that project and set as default, thus preserving the previous behaviour. Additionally new configuration options have been implemented:\ndefault: boolean, mandatory, whether the storage resource is the default one for a project volume: string, mandatory, the root filesystem directory where Nexus can store files for this project maxFileSize: int, optional, the maximum file size (in bytes) allowed for clients to upload readPermission: string, optional, defaults to resources/read, the permission required for downloading files from this storage medium writePermission: string, optional, defaults to files/write, the permission required for uploading files to this storage medium\nArbitrary permissions can be used as values for readPermission and writePermission as long as they are defined in the global permission collection (/v1/permissions).","title":"DiskStorage"},{"location":"/docs/releases/v1.1-release-notes.html#remotediskstorage","text":"This storage type relies on a remote HTTP service that exposes basic file operations of an underlying POSIX file-system. In terms of deployment configuration it allows separating the Nexus and the storage mediums in different networks and possibly physical locations. An example usecase is running a distributed network storage (such as Ceph, Gluster, GPFS, Lustre, …) that can’t or shouldn’t be mounted directly on the system where Nexus runs.\nThe following configuration options are available for this storage type:\ndefault: boolean, mandatory, whether the storage resource is the default one for a project endpoint: string, optional, the base address of the remote disk storage integration service, defaults to the value set in the environment variables of KG credentials: string, optional, the oauth2 bearer token to be used for authenticating to the remote disk storage integration service, defaults to the value set in the environment variables of KG folder: string, mandatory, the name of the folder where files are to be stored for this project maxFileSize: int, optional, the maximum file size (in bytes) allowed for clients to upload readPermission: string, optional, defaults to resources/read, the permission required for downloading files from this storage medium writePermission: string, optional, defaults to files/write, the permission required for uploading files to this storage medium","title":"RemoteDiskStorage"},{"location":"/docs/releases/v1.1-release-notes.html#s3storage","text":"This storage type (S3Storage) allows the use S3 compatible object storage as a backend.\nThe following configuration options are available for this storage type:\ndefault: boolean, mandatory, whether the storage resource is the default one for a project bucket: string, mandatory, the name of the s3 bucket where files are to be stored endpoint: string, optional, the s3 storage endpoint, defaulting to s3.amazonaws.com accessKey: string, optional, the access key to be used for authenticating to the service secretKey: string, optional, the secret key to be used for authenticating to the service, defaults to the value set in the environment variables of KG maxFileSize: int, optional, the maximum file size (in bytes) allowed for clients to upload readPermission: string, optional, defaults to resources/read, the permission required for downloading files from this storage medium writePermission: string, optional, defaults to files/write, the permission required for uploading files to this storage medium","title":"S3Storage"},{"location":"/docs/releases/v1.1-release-notes.html#stable-elasticsearch-views","text":"Both ElasticSearchView and AggregateElasticSearchView have been promoted from alpha to stable. Creation or update no longer require the use of the Alpha type to be provided.\nNew configuration options have been introduced for ElasticSearchView: resourceTypes and includeDeprecated. These options allow a finer grain filtering of the resources considered for indexing by the view.","title":"Stable ElasticSearch views"},{"location":"/docs/releases/v1.1-release-notes.html#configurable-sparqlview","text":"The SparqlView has been promoted from alpha to stable. Creation or update no longer require the use of the Alpha type to be provided.\nConfiguration options have been introduced such that it is consistent with the ElasticSearchView:\nresourceSchemas: array of ids, optional, defaults to empty, configures the view to consider for indexing only the resources constrained by any of the specified schemas; an empty array implies all resources. resourceTypes: array of ids, optional, defaults to empty, configures the view to consider for indexing only the the resources that have at least one of the specified types at the revision selected by the tag option; if a tag is not specified, the latest revision is assumed. tag: string, optional, selects only the resources that are tagged with the provided value; the tagged revision is considered for indexing. includeMetadata: boolean, optional, defaults to false, configures the view to index resources without injecting the resource metadata in the resource graph. includeDeprecated: boolean, optional, defaults to true, configures the view to include or exclude the deprecated resources.","title":"Configurable SparqlView"},{"location":"/docs/releases/v1.1-release-notes.html#aggregatesparqlview","text":"A new view type has been introduced (AggregateSparqlView), the dual of AggregateElasticSearchView that allows for query time aggregation of results. The configuration is mostly identical to the AggregateElasticSearchView which is merely a set of SparqlView references:\n{\n \"@id\": \"{someid}\",\n \"@type\": [ \"View\", \"AggregateSparqlView\"],\n \"views\": [\n {\n \"project\": \"{project}\",\n \"viewId\": \"{viewId}\"\n },\n ...\n ]\n}\nNote: this is not implemented in terms of SPARQL Federation but just simple result aggregation. The query sent to this view is dispatched to all BlazeGraph namespaces and the results are aggregated without preserving the view order. The implication is that triples in one namespace cannot be filtered using predicates from another namespace, furthermore, path traversals cannot be performed between the selected namespaces.\nAs with the AggregateElasticSearchView since the subject that creates an aggregate view may be different than the subject that queries the view, before dispatching the query the target namespaces are filtered based on the permissions of the caller for each individual view. This behaviour is completely transparent to the client.","title":"AggregateSparqlView"},{"location":"/docs/releases/v1.1-release-notes.html#index-progress","text":"Indexing in Nexus is asynchronous, meaning once a resource is created or modified the change is not immediately visible in the respective indices (maintained by the views). The reason for this asynchrony is to break the coupling between the stores (Cassandra, ElasticSearch, BlazeGraph) during a client request. This provides many benefits:\nreduces the latency of write operations requests succeed regardless of the availability of the secondary stores transient failures while indexing can be retried indices can be rebuilt at will (through project, view updates or by resetting the indexing progress and restarting the service) no synchronization is needed between view management and resource write operations\nUnfortunately the index progress for each view was not made available to clients which meant users had no way of knowing if their queries hit an index while it was rebuilt or stale.\nAll views have now been updated to expose a statistics sub-resource that provides information on the state of indexing:\ncurl -s -H \"Authorization: Bearer $TOKEN\" \"http://localhost/v1/views/myorg/myproj/nxv:defaultElasticSearchIndex/statistics\" | jq\n{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/view.json\",\n \"delayInSeconds\": 0,\n \"discardedEvents\": 0,\n \"evaluatedEvents\": 585721,\n \"lastEventDateTime\": \"2019-08-06T08:47:20.958Z\",\n \"lastProcessedEventDateTime\": \"2019-08-06T08:47:20.545Z\",\n \"processedEvents\": 585721,\n \"remainingEvents\": 1,\n \"totalEvents\": 585722\n}\n… where:\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\nAdditionally the service maintains and exposes counters and gauges for monitoring with Prometheus such that data ingestion and indexing velocity and global event counts can be monitored.\nFor example, the query:\nkg_indexer_gauge{project=\"myorg/myproj\"}\n… yields:\nElement\tValue\nkg_indexer_gauge{instance=\"localhost:9095\",job=\"kg\",organization=\"myorg\",project=\"myorg/myproj\",type=\"elasticsearch\",viewId=\"https://bluebrain.github.io/nexus/vocabulary/defaultElasticSearchIndex\"}\t585721\nkg_indexer_gauge{instance=\"localhost:9095\",job=\"kg\",organization=\"myorg\",project=\"myorg/myproj\",type=\"eventCount\"}\t585722\nkg_indexer_gauge{instance=\"localhost:9095\",job=\"kg\",organization=\"myorg\",project=\"myorg/myproj\",type=\"sparql\",viewId=\"https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex\"}\t585617","title":"Index progress"},{"location":"/docs/releases/v1.1-release-notes.html#other-api-improvements","text":"The release contains numerous improvements to the API, the most significant being the following.","title":"Other API Improvements"},{"location":"/docs/releases/v1.1-release-notes.html#resource-content-negotiation","text":"Added DOT, n-triples formats and compacted/expanded variants for json-ld. The selection of the format is done via the Accept header value and in case of application/ld+json the query param format with compacted or expanded values.\nDOT representation is requested using the text/vnd.graphviz value for the Accept header:\ncurl -s -H \"Authorization: Bearer $TOKEN\" \\\n-H \"Accept: text/vnd.graphviz\" \\\n\"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\"\n\ndigraph {\n \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" -> \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3/outgoing\" [label = \"https://bluebrain.github.io/nexus/vocabulary/outgoing\"]\n \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" -> \"2019-07-24T10:58:03.830114Z\" [label = \"https://bluebrain.github.io/nexus/vocabulary/updatedAt\"]\n \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" -> \"John Doe\" [label = \"http://schema.org/name\"]\n \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" -> \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3/incoming\" [label = \"https://bluebrain.github.io/nexus/vocabulary/incoming\"]\n \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" -> \"2019-02-05T12:52:05.510Z\" [label = \"https://bluebrain.github.io/nexus/vocabulary/createdAt\"]\n \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" -> \"http://localhost/v1/anonymous\" [label = \"https://bluebrain.github.io/nexus/vocabulary/updatedBy\"]\n \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" -> \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" [label = \"https://bluebrain.github.io/nexus/vocabulary/self\"]\n \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" -> 34 [label = \"http://schema.org/age\"]\n \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" -> 2 [label = \"https://bluebrain.github.io/nexus/vocabulary/rev\"]\n \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" -> false [label = \"https://bluebrain.github.io/nexus/vocabulary/deprecated\"]\n \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" -> \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\" [label = \"https://bluebrain.github.io/nexus/vocabulary/constrainedBy\"]\n \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" -> \"http://localhost/v1/anonymous\" [label = \"https://bluebrain.github.io/nexus/vocabulary/createdBy\"]\n \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" -> \"http://localhost/v1/projects/myorg/myproj\" [label = \"https://bluebrain.github.io/nexus/vocabulary/project\"]\n \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" -> \"http://schema.org/Person\" [label = \"http://www.w3.org/1999/02/22-rdf-syntax-ns#type\"]\n}\nN-triples representation is requested using the application/n-triples value for the Accept header:\ncurl -s -H \"Authorization: Bearer $TOKEN\" \\\n-H \"Accept: application/n-triples\" \\\n\"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\"\n\n<http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3> <https://bluebrain.github.io/nexus/vocabulary/updatedAt> \"2019-07-24T10:58:03.830114Z\"^^<http://www.w3.org/2001/XMLSchema#dateTime> .\n<http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3> <https://bluebrain.github.io/nexus/vocabulary/createdAt> \"2019-02-05T12:52:05.510Z\"^^<http://www.w3.org/2001/XMLSchema#dateTime> .\n<http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3> <https://bluebrain.github.io/nexus/vocabulary/createdBy> \"http://localhost/v1/anonymous\" .\n<http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3> <https://bluebrain.github.io/nexus/vocabulary/constrainedBy> <https://bluebrain.github.io/nexus/schemas/unconstrained.json> .\n<http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3> <https://bluebrain.github.io/nexus/vocabulary/outgoing> \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3/outgoing\" .\n<http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person> .\n<http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3> <https://bluebrain.github.io/nexus/vocabulary/updatedBy> \"http://localhost/v1/anonymous\" .\n<http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3> <https://bluebrain.github.io/nexus/vocabulary/deprecated> \"false\"^^<http://www.w3.org/2001/XMLSchema#boolean> .\n<http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3> <https://bluebrain.github.io/nexus/vocabulary/project> <http://localhost/v1/projects/myorg/myproj> .\n<http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3> <http://schema.org/age> \"34\"^^<http://www.w3.org/2001/XMLSchema#integer> .\n<http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3> <https://bluebrain.github.io/nexus/vocabulary/incoming> \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3/incoming\" .\n<http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3> <https://bluebrain.github.io/nexus/vocabulary/self> \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" .\n<http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3> <https://bluebrain.github.io/nexus/vocabulary/rev> \"2\"^^<http://www.w3.org/2001/XMLSchema#long> .\n<http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3> <http://schema.org/name> \"John Doe\" .\nThe default representation for application/ld+json is compacted. Passing along the ?format=expanded removes the context from the resource:\ncurl -s -H \"Authorization: Bearer $TOKEN\" \\\n-H \"Accept: application/ld+json\" \\\n\"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3?format=expanded\" | jq\n\n{\n \"@id\": \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\",\n \"@type\": \"http://schema.org/Person\",\n \"http://schema.org/age\": 34,\n \"http://schema.org/name\": \"John Doe\",\n \"https://bluebrain.github.io/nexus/vocabulary/constrainedBy\": {\n \"@id\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\"\n },\n \"https://bluebrain.github.io/nexus/vocabulary/createdAt\": \"2019-02-05T12:52:05.510Z\",\n \"https://bluebrain.github.io/nexus/vocabulary/createdBy\": \"http://localhost/v1/anonymous\",\n \"https://bluebrain.github.io/nexus/vocabulary/deprecated\": false,\n \"https://bluebrain.github.io/nexus/vocabulary/incoming\": \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3/incoming\",\n \"https://bluebrain.github.io/nexus/vocabulary/outgoing\": \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3/outgoing\",\n \"https://bluebrain.github.io/nexus/vocabulary/project\": {\n \"@id\": \"http://localhost/v1/projects/myorg/myproj\"\n },\n \"https://bluebrain.github.io/nexus/vocabulary/rev\": 2,\n \"https://bluebrain.github.io/nexus/vocabulary/self\": \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\",\n \"https://bluebrain.github.io/nexus/vocabulary/updatedAt\": \"2019-07-24T10:58:03.830114Z\",\n \"https://bluebrain.github.io/nexus/vocabulary/updatedBy\": \"http://localhost/v1/anonymous\"\n}","title":"Resource content negotiation"},{"location":"/docs/releases/v1.1-release-notes.html#additional-query-params-in-listings","text":"Listing resources now support additional query parameters, namely: type, rev, deprecated, createdBy and updatedBy. This is applies for any resource types (files, schemas, resolvers, storages, views or plain resources).\nThe general form is:\nGET /v1/resources/{org_label}/{project_label}?from={from}&size={size}&deprecated={deprecated}&rev={rev}&type={type}&createdBy={createdBy}&updatedBy={updatedBy}&schema={schema}&q={q}\n… where:\n{from}: number, the parameter that describes the offset for the current query; defaults to 0 {size}: number, 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 {schema}: iri, can be used to filter the resulting resources based on the conformant schema {q}: string, can be provided to select only the resources in the collection that have attribute values matching (containing) the provided string","title":"Additional query params in listings"},{"location":"/docs/releases/v1.1-release-notes.html#incoming-and-outgoing-links","text":"The incoming and outgoing sub-resources have been added to all resources in KG such that the provide a listing of known relationships of the current resource.\nThe general forms are:\nGET /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}/incoming?from={from}&size={size}\nGET /v1/resources/{org_label}/{project_label}/{schema_id}/{resource_id}/outgoing?from={from}&size={size}&includeExternalLinks={includeExternalLinks}\n… where:\n{from}: number, the parameter that describes the offset for the current query; defaults to 0 {size}: number, 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\nAdditionally, the resource metadata now includes links (_incoming and _outgoing) for these endpoints.\nFor example, considering the following resource:\n{\n \"@context\": [\n {\n \"@base\": \"http://localhost/v1/resources/myorg/myproj/_/\",\n \"@vocab\": \"http://schema.org/\",\n \"logo\": {\n \"@id\": \"http://schema.org/logo\",\n \"@type\": \"@id\"\n }\n },\n \"https://bluebrain.github.io/nexus/contexts/resource.json\"\n ],\n \"@id\": \"7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\",\n \"@type\": \"Person\",\n \"age\": 34,\n \"logo\": \"a713b0e4-c745-4a89-a2ad-84b19c244bd5\",\n \"name\": \"John Doe\",\n \"_self\": \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_project\": \"http://localhost/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_deprecated\": false,\n \"_createdAt\": \"2019-02-05T12:52:05.510Z\",\n \"_createdBy\": \"http://localhost/v1/anonymous\",\n \"_updatedAt\": \"2019-08-06T09:53:02.151413Z\",\n \"_updatedBy\": \"http://localhost/v1/anonymous\",\n \"_incoming\": \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3/incoming\",\n \"_outgoing\": \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3/outgoing\"\n}\n… the outgoing link will return the logo relationship along with the paths, @type and resource metadata:\ncurl -s -H \"Authorization: Bearer $TOKEN\" \\\n\"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3/outgoing\" | jq\n\n{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/resource.json\"\n ],\n \"_total\": 1,\n \"_results\": [\n {\n \"@id\": \"http://localhost/v1/resources/myorg/myproj/_/a713b0e4-c745-4a89-a2ad-84b19c244bd5\",\n \"@type\": \"https://bluebrain.github.io/nexus/vocabulary/File\",\n \"paths\": \"http://schema.org/logo\",\n \"_self\": \"http://localhost/v1/files/myorg/myproj/http://localhost/v1/resources/myorg/myproj/_/a713b0e4-c745-4a89-a2ad-84b19c244bd5\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/file.json\",\n \"_project\": \"http://localhost/v1/projects/myorg/myproj\",\n \"_rev\": 1,\n \"_deprecated\": false,\n \"_createdAt\": \"2019-07-24T10:57:32.707Z\",\n \"_createdBy\": \"http://localhost/v1/anonymous\",\n \"_updatedAt\": \"2019-07-24T10:57:32.707Z\",\n \"_updatedBy\": \"http://localhost/v1/anonymous\"\n }\n ]\n}","title":"Incoming and Outgoing links"},{"location":"/docs/releases/v1.1-release-notes.html#resource-id-resolution","text":"Resolvers provide means of retrieving dependent resources, but until now they offered no means to see these resources or their origin (i.e. through their metadata).\nThe release adds the ability to query resolvers or the entire collection of resolvers (respecting their priority) for resource ids such that resolved resources can be viewed.\nThe general query form is:\nGET /v1/resolvers/{org_label}/{project_label}/{resolver_id}/{resource_id}\nAdditionally, the resolver_id can be omitted (replaced with _) such that the entire collection of non-deprecated resolvers in the project is used to resolve the resource id:\nGET /v1/resolvers/{org_label}/{project_label}/_/{resource_id}\nThe desired tag or revision can be requested via the tag or rev query params. These params are mutually exclusive.\nExample, using the default InProject resolver to fetch a specific resource:\ncurl -s -H \"Authorization: Bearer $TOKEN\" \\\n\"http://localhost/v1/resolvers/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\" | jq\n\n{\n \"@context\": [\n {\n \"@base\": \"http://localhost/v1/resources/myorg/myproj/_/\",\n \"@vocab\": \"http://schema.org/\",\n \"logo\": {\n \"@id\": \"http://schema.org/logo\",\n \"@type\": \"@id\"\n }\n },\n \"https://bluebrain.github.io/nexus/contexts/resource.json\"\n ],\n \"@id\": \"7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\",\n \"@type\": \"Person\",\n \"age\": 34,\n \"logo\": \"a713b0e4-c745-4a89-a2ad-84b19c244bd5\",\n \"name\": \"John Doe\",\n \"_self\": \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3\",\n \"_constrainedBy\": \"https://bluebrain.github.io/nexus/schemas/unconstrained.json\",\n \"_project\": \"http://localhost/v1/projects/myorg/myproj\",\n \"_rev\": 4,\n \"_deprecated\": false,\n \"_createdAt\": \"2019-02-05T12:52:05.510Z\",\n \"_createdBy\": \"http://localhost/v1/anonymous\",\n \"_updatedAt\": \"2019-08-06T09:53:02.151413Z\",\n \"_updatedBy\": \"http://localhost/v1/anonymous\",\n \"_incoming\": \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3/incoming\",\n \"_outgoing\": \"http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3/outgoing\"\n}\nSee resolvers API for more details.","title":"Resource id resolution"},{"location":"/docs/releases/v1.1-release-notes.html#paginate-beyond-10-000-results","text":"The KG service uses ElasticSearch with a default project view to power listing of resources within a project. Due to the restriction set by this store when using from and size resources could not be listed after reaching 10,000 with the applied additional filters.\nTo address this issue, a new link (_next) has been added to all listing results such that following this link will continue the pagination over the imposed limit; the implementation relies on the searchAfter API which does not suffer from this restriction:\ncurl -s -H \"Authorization: Bearer $TOKEN\" \"http://localhost/v1/resources/myorg/myproj?size=2\" | jq\n\n{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/resource.json\"\n ],\n \"_total\": 8,\n \"_results\": [{...}, {...}],\n \"_next\": \"http://localhost/v1/resources/myorg/myproj?size=2&after=%5B1549370708063,%22https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex%22%5D\"\n}\nFollowing the _next link yields additional two results and a new _next value to continue from there:\ncurl -s -H \"Authorization: Bearer $TOKEN\" \"http://localhost/v1/resources/myorg/myproj?size=2&after=%5B1549370708063,%22https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex%22%5D\" | jq\n\n{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/resource.json\"\n ],\n \"_total\": 8,\n \"_results\": [{...}, {...}],\n \"_next\": \"http://localhost/v1/resources/myorg/myproj?size=2&after=%5B1549371125510,%22http://localhost/v1/resources/myorg/myproj/_/7fb43a6a-33f2-4106-8cb3-531f2d67c1e3%22%5D\"\n}","title":"Paginate beyond 10,000 results"},{"location":"/docs/releases/v1.1-release-notes.html#organization-and-project-uuids","text":"Internally, the organization and project labels are mapped to UUIDs to allow future functionality to relabel organizations and / or projects. These unique ids are exposed in the organization and project representations and in the event log through Server Sent Events, but until this release there was no way to resolve these UUIDS to organizations and / or projects.\nThe entire API now accepts UUIDs instead of organization or project segments, for example, getting the project and organization uuid:\ncurl -s -H \"Authorization: Bearer $TOKEN\" \"http://localhost/v1/projects/myorg/myproj\" | jq\n\n{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/admin.json\",\n \"https://bluebrain.github.io/nexus/contexts/resource.json\"\n ],\n \"@id\": \"http://localhost/v1/projects/myorg/myproj\",\n \"@type\": \"Project\",\n \"base\": \"http://localhost/v1/resources/myorg/myproj/_/\",\n \"vocab\": \"http://schema.org/\",\n \"apiMappings\": [],\n \"_uuid\": \"fadc3e6c-fca0-45d8-b65c-a984a012c689\",\n \"_label\": \"myproj\",\n \"_organizationUuid\": \"d363ee88-5426-420a-8078-f8e9d9652fe9\",\n \"_organizationLabel\": \"myorg\",\n \"_rev\": 3,\n \"_deprecated\": false,\n \"_createdAt\": \"2019-02-06T14:57:28.680Z\",\n \"_createdBy\": \"http://localhost/v1/anonymous\",\n \"_updatedAt\": \"2019-02-06T14:57:28.680Z\",\n \"_updatedBy\": \"http://localhost/v1/anonymous\"\n}\n… and using them to list resources:\ncurl -s -H \"Authorization: Bearer $TOKEN\" \"http://localhost/v1/resources/d363ee88-5426-420a-8078-f8e9d9652fe9/fadc3e6c-fca0-45d8-b65c-a984a012c689?size=2\" | jq\n\n{\n \"@context\": [\n \"https://bluebrain.github.io/nexus/contexts/search.json\",\n \"https://bluebrain.github.io/nexus/contexts/resource.json\"\n ],\n \"_total\": 8,\n \"_results\": [{...}, {...}],\n \"_next\": \"http://localhost/v1/resources/d363ee88-5426-420a-8078-f8e9d9652fe9/fadc3e6c-fca0-45d8-b65c-a984a012c689?size=2&after=%5B1549370708063,%22https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex%22%5D\"\n}","title":"Organization and Project UUIDs"},{"location":"/docs/releases/v1.1-release-notes.html#nexus-web-improvements","text":"This is the first fully supported version of Nexus Web, now freshly graduated from beta. Its v1.1 version reflects the feature set supporting the Nexus v1.1 release and will be kept in step with that project.","title":"Nexus Web improvements"},{"location":"/docs/releases/v1.1-release-notes.html#","text":"","title":"v1.1 Release Notes"},{"location":"/docs/releases/v1.1-release-notes.html#feature-highlights","text":"The login page now allows users to select the OpenId Connect provider:\nAbility to discriminate between Nexus specific resources (eg. Views, Resolvers) and user created resources:\nDisplay the project ACLs via View Project’s permissions link in the right panel:\nAbility to query user defined views, by using the drop-down presented in the query interface and additionally showing the index progress for the selected view (either as a green check if up to date, or a gauge with the percentage otherwise):","title":"Feature highlights"},{"location":"/docs/releases/v1.1-release-notes.html#other-changes","text":"The Javascript and Python SDKs and the CLI have been updated to support the additionally introduced functionality. The http client in the Python SDK / CLI has been configured to use connection pooling which brings a 4x+ performance boost due to removing the latency penalty for opening new connections. The CLI has been updated such that a user can login with username and password if the selected realm and provided client id supports Direct Access Grants. By convention the CLI defaults to nexus-public client. ElasticSearch compatibility has been updated to 7.x, please see the migration instructions. Other Bug Fixes.","title":"Other changes"},{"location":"/docs/releases/v1.0-to-v1.1-migration.html","text":"","title":"v1.0 To v1.1 Migration"},{"location":"/docs/releases/v1.0-to-v1.1-migration.html#v1-0-to-v1-1-migration","text":"As part of the v1.1 release there were two significant changes that require a primary store migration:\nUpdates to the event model ElasticSearch default view mapping update for 7.x compatibility\nAdditionally, due to a bug in the underlying persistence library some events may have been skipped when the tag_views table is populated as a reverse index for event tags.\nThe migration steps are as follows:\nStop the 3 services: iam, admin and kg. Backup the cassandra store. This step is a safeguard against anything which could go wrong during migration scripts. It’s also a good practice to protect from hardware failures. Delete all ElasticSearch indices curl -XDELETE 'http://{elasticsearch_host}/kg_*'\n Delete all BlazeGraph namespaces: for i in `curl -s 'http://{blazegraph_host}/blazegraph/namespace?describe-each-named-graph=false' | grep sparqlEndpoint | grep -o --color \"rdf:resource=\\\"[^\\\"]*\" | sed 's/rdf:resource=\"//' | sed 's#/sparql$##' | grep -v kb | grep -v LBS`\n do curl -X DELETE \"$i\"\ndone\n Update Elasticsearch software from 6.x to 7.2 or above. Deploy the new service images (tag 1.1): iam, admin and kg; make sure to start the iam, admin and kg services one by one, in order and wait for the service to become available, following the instructions:\nWhen running iam and admin services for the first time in v1.1, set the environment variable REPAIR_FROM_MESSAGES to true. This environment variable should be removed in subsequent runs. It makes services rebuild the cassandra database from the messages table and correcting any problems with the tag_views table When running kg service for the first time in v1.1, set the environment variable MIGRATE_V10_TO_V11 to true. This environment variable should be removed in subsequent runs. It triggers the event migration, full rebuild of the cassandra database from the messages table and correcting any problems with the tag_views table.","title":"v1.0 To v1.1 Migration"},{"location":"/docs/releases/v1.0-to-v1.1-migration.html#migration-process","text":"This section explains what happens during the migration process. Although the knowledge of what is happening behind the scenes should not be necessary to successfully migrate to v1.1, it might be of interest.","title":"Migration process"},{"location":"/docs/releases/v1.0-to-v1.1-migration.html#iam-and-admin-migration-process","text":"The migration for these services is straight forward since the changes introduced did not affect the main models in the cassandra store. The migration is essentially a repair of the cassandra store to make sure that every row which should be present in the tag_views cassandra table, is indeed there. To achieve that, during the boot process the service wipes all tables but messages and materializes all persistent actors found in the messages table to force repair all dependent tables.","title":"Iam and admin migration process"},{"location":"/docs/releases/v1.0-to-v1.1-migration.html#kg-migration-process","text":"The migration for this service includes several steps, since the content on the cassandra store messages table requires modifications as per the description above.\nThe following steps are executed:\nall tables but messages are wiped all project information is loaded from admin.messages all events in the messages table are migrated to the new model a full rebuild of the cassandra store is performed by materializing all persistent actors found in the messages table to force repair all dependent tables (equivalent to the behaviour of the REPAIR_FROM_MESSAGES flag for the iam and admin services) restart all index processes from scratch\nDepending on the volume of data stored in the system, the migration process can take a fairly long time. During this window the service does not bind on the HTTP port to avoid any de-synchronization.","title":"Kg migration process"},{"location":"/docs/releases/v1.0-release-notes.html","text":"","title":"v1.0 Release Notes"},{"location":"/docs/releases/v1.0-release-notes.html#v1-0-release-notes","text":"This is the first major release of Blue Brain Nexus after almost two years of development.\nAlso referred to as “Nexus V1”, this initial release is our first big milestone in our quest to build a Knowledge Graph platform uniquely combining flexible graph database, powerful search engine and scalable data store to enable:\nEasy unification and integration of fragmented and disparate data from heterogeneous domains to break data and metadata silos Better data governance with the ability to specify and enforce organization’s best practices for data collection, storage and description through high quality metadata Data lineage and provenance recording and description FAIR (Findable, Accessible, Interoperable, Re-usable) data and metadata management\nWe’ve been running this software in production for more than a year getting good feedback on its design and we are confident that the current API meets our current and longer term goals.\nThis release represents a commitment to backwards compatibility in all future releases of the v1.y.z series.\nVersioning Nexus artifacts are versioned using semantic versioning and while services and web applications that make up Nexus are versioned independently to address specific improvements or bugfixes, their versions are synchronized across minor releases. This means, for example, that services and applications are compatible with each other if their major and minor numbers match regardless of the value of the patch numbers.\nThe behaviour of the system is described across the documentation, but here are some notable changes from the previous v0.y.z series.","title":"v1.0 Release Notes"},{"location":"/docs/releases/v1.0-release-notes.html#functionality-behaviour","text":"","title":"Functionality & Behaviour"},{"location":"/docs/releases/v1.0-release-notes.html#nexus-web-interface","text":"Previously, the web interface was dubbed Nexus Explorer, and could only be used to browse the data stored in your Nexus instance. For the Nexus V1 release, we decided to build a new web application, called Nexus Web, that also enables operational management, data management and search capabilities on the system. At this stage of development, this application is likely to be most useful to technical users who work on integrating their data into Nexus.\nThe web application is set to offer most of the features you can get with the raw API, as well as additional conveniences for Nexus users.\nAt the time of the Nexus V1 release, you can use it to:\nLogin into Nexus Browse and search organizations, projects and resources you have access to See the raw JSON-LD payload of a resources Make advanced ElasticSearch and SPARQL queries Create, edit and deprecate organizations and projects Make a project publicly accessible Create resources through an interactive JSON editor","title":"Nexus web interface"},{"location":"/docs/releases/v1.0-release-notes.html#isolated-data-scopes","text":"The v0.y.z series handled data within one single space and while it did provide some benefits with respect to the ability to query the entire system, it also provided severe limitations with respect to data evolution, scalability and future developments. We move on from this monolithic approach towards a multi scoped system, where data is bucketed and managed independently in projects.\nWhat we previously referred to as domains are now called projects and represent data and configuration boundaries within the system (we decided to change the naming as we have found that the term “domain” was understood to imply a certain data organization scheme centered around business or scientific domains; this was not intended).\nIntroducing these boundaries has opened the door to make several performance and functional improvements to the system as follows:\ndata indexing can now be configured at the project level without impacting the overall system; we’ve introduced a new resource type View that controls how and where the data is being indexed. They can be managed at runtime by the clients with “administrative” privileges enabling the development of applications specific to the area of interest. An example of that is the BBP Nexus Search application designed specifically to address the needs of the BlueBrain Project. indexing processes are now created for each individual project increasing the indexing throughput and allowing the use of distinct indexing targets. the uniqueness of a resource within the system was determined by the resource id which comprised of the “organization”, “domain”, “schema” name and version and the resource id. Introducing these data boundaries allowed us to relax this constraint and allow multiple resources to share the same id if they are scoped in different projects. access control lists are now restricted to either root (/), organization (/{org}) or project (/{org}/{project}) removing the need to index these definitions along with the data.","title":"Isolated data scopes"},{"location":"/docs/releases/v1.0-release-notes.html#client-defined-identifiers","text":"The v0.y.z series was very opinionated on how resource ids are defined and prohibited client provided identifiers. The choice at the time was that a resource id needs to be resolvable (the resource id needed to match the url to access it). This strong constraint tied the resource ids to the Nexus deployment where they were managed. While this was probably fine for most data within the system, it was nearly impossible to manage data from external sources that came with its own identification scheme (e.g. ontologies).\nThe decision was made to remove this constraint and allow clients to specify their own identifiers. In order to maintain the same API simplicity with respect to accessing resources we came up with a aliasing and curie scheme configurable at the project level (_apiMappings_) that handles bidirectional compaction and expansion of resource identifiers.\nA simple http proxying configuration with URL rewriting deployed in front of the Nexus API allows resources to continue to be resolvable.","title":"Client defined identifiers"},{"location":"/docs/releases/v1.0-release-notes.html#resolution-mechanisms-for-shared-resources","text":"During the past year of production use of Nexus we have noticed that users tend to develop schemas and contexts as reusable components. An example of that is the Neuroshapes initiative, a community effort for a shared vocabulary and collection of constraints for neuroscience.\nThe use of schemas and contexts in the v0.y.z series applied a restriction on the locality of constrained resources, specifically resources could only be created in the same domain with schemas.\nIn the new iteration we’ve introduced a configurable resolution mechanism that allows users to make use of schemas and contexts that reside in other projects. The resources that control this behaviour are called Resolvers and they behave like dependency management systems in programming language ecosystems.\nResolvers can now be created and configured to look up schemas and contexts in arbitrary locations, scoped within projects. The resolution mechanism takes into account all the resolvers defined in a project using the priorities of each resolver and attempts to resolve the referenced resource based on its @id value. Current supported resolvers are:\nInProject: a default project resource created along with a project that looks up referenced resources in the same project. CrossProject: a type of resolver that can be created by clients to look up referenced resources in projects other than the current one.\nFuture developments will include additional resolver types that are capable of resolving resources in other Nexus deployments or shared repositories (e.g.: a git repository).\nSchema imports through the owl:imports clause works recursively as before, but it applies the resolution mechanism at each iteration. Context references work recursively as before applying the resolution mechanism at each iteration.\nNote: Contexts are no longer handled differently, as special kind of resources. Any resource id can be used as a context reference; the system will resolve the referenced resource and apply only the @context value from its representation to the resource that references it.","title":"Resolution mechanisms for shared resources"},{"location":"/docs/releases/v1.0-release-notes.html#improved-handling-of-binary-resources","text":"The v0.y.z series handled binary resources as sub-resources, called attachments, following the model pioneered by CouchDB. While it provided a guarantee that every binary resource is properly described with metadata, the model did not work well in the following situations:\nuploading binaries for later organization: the parent resource required creation before a binary could be attached to it, which in the cases where users were just interested in storing binaries in Nexus it required two API calls instead of one. conflicting vocabulary definitions: a lot of the data modeling effort relied on the Nexus metadata for the uploaded binaries which forced the use of a certain vocabulary and metadata structure in Nexus\nThis model of handling binaries has been superseded by full class support for binaries through files, a new kind of resource managed just like the other types of resources within the system. Files have their own lifecycle and can be independently updated. Description of files, for example in the case of datasets, can now be done external to the file resource within a separate resource. This model allows for many-to-many relationships between files and other resources.","title":"Improved handling of binary resources"},{"location":"/docs/releases/v1.0-release-notes.html#new-mechanism-for-stable-resource-references","text":"The v0.y.z series was quite opinionated on the use of stable references ensuring the structural and semantic immutability of a resource revision. Schemas and Contexts had to be published before they could be used and once published their lifecycle would finish, preventing further updates.\nThis behaviour was replaced by giving the client the control on the immutability guarantees through the use of revisions and tags. The schema versions are no longer present in the API and the mechanism for unpacking schema references are aware of possible tag and revision references provided as query parameters. A tag is a new type of sub-resource that represents a pointer to a resource revision.\nAssuming the following entry in the project apiMappings:\n{\n \"prefix\": \"persons\",\n \"namespace\": \"http://nexus.example.com/schemas/person?tag=v1.0.0\"\n}\n… would ensure that resources are constrained with a stable version of a schema:\ncurl -XPOST http://nexus.example.com/resources/{org}/{proj}/persons -d '{}'\nAdditionally, the use of curies is also available, leaving the door open to providing schema versions per resource. Considering the following entry in the project apiMappings:\n{\n \"prefix\": \"persons\",\n \"namespace\": \"http://nexus.example.com/schemas/person?tag=\"\n}\n… resources can be constrained with a dynamic version of a schema provided at the time of resource creation:\ncurl -XPOST http://nexus.example.com/resources/{org}/{proj}/persons:v1.0.0 -d '{}'\nRevision query params can be used in the exact same manner as tag params. When omitting rev or tag query params when referring to schema, it is implied that the latest version should be used every time that schema is resolved.\nContext references follow the very same behaviour. Context iri values can be augmented with a tag or rev query parameter to point to a specific immutable reference of the resource.\nNote: the behaviour depends on the new resource reference resolution process; a change in the resolver resources (a different resolution process configuration) can not provide an immutability guarantee of the references.","title":"New mechanism for stable resource references"},{"location":"/docs/releases/v1.0-release-notes.html#client-configurable-indexing-process","text":"As mentioned previously, the indexing processes are now applied at the level of each project and can be customized by the client. Each index process is represented by a newly introduced resource View which has the following classification:\nElasticSearchView: the process replays the project event log, filters out undesired resources based on configuration, applies minimal data transformation and updates an ElasticSearch index. AggregateElasticSearchView: this view does not directly manage an indexing process, but rather represents a collection of referenced _ElasticSearchView_s that would be proxied (queried at the same time) when querying this view. SparqlView: the process replays the project event log applies minimal data transformation and updates an RDF store (currently BlazeGraph).\nA default ElasticSearchView and a default SparqlView are automatically created along with a project. The default ElasticSearchView is used by Nexus internally to power resource listing.\nSince access control lists are now limited to nesting up to the level of a project, these views do not require indexing the acl configuration and can be proxied by the system supporting their native APIs.\n_ElasticSearchView_s expose a /_search sub-resource that represents the native API for interacting with ElasticSearch. Client HTTP requests are checked for authentication and authorization and then forwarded to their respective backends. In the case of an AggregateElasticSearchView the requests executed on all the referenced indices.\n_SparqlView_s expose a /sparql sub-resource that represents the native API for interacting with the SPARQL endpoint of the RDF store. Client HTTP requests are checked for authentication and authorization and then forwarded to the respective backend.\nThe previously supported query DSL has been dropped in favour of the direct interaction with the indices via their native APIs. The attempt to provide a general query interface on top of both indices was very ambitious but production use has proven it unsatisfactory. The change gives clients a lot more power in terms of function, flexibility, expressiveness and query optimization. It also opens the door to support additional index backends without having to reconcile them with the query DSL.","title":"Client configurable indexing process"},{"location":"/docs/releases/v1.0-release-notes.html#client-provided-information-vs-nexus-metadata-and-vocabulary","text":"Since it was often unclear which information was user provided and which was generated by the system as new rule has been introduced such that:\nall user provided information predicates are kept unchanged all Nexus metadata is now presented with a leading _, example: \"_deprecated\": true or \"_rev\": 4\". the Nexus metadata vocabulary is now namespaced to https://bluebrain.github.io/nexus/vocabulary/","title":"Client provided information vs Nexus metadata and vocabulary"},{"location":"/docs/releases/v1.0-release-notes.html#technical-notes","text":"","title":"Technical Notes"},{"location":"/docs/releases/v1.0-release-notes.html#iam-service-updates","text":"IAM has been redesigned such that it no longer attempts to proxy calls to the configured OIDC provider. Instead, it introduces a new resource type (_Realm_) that represent runtime configuration for the accepted OIDC providers. Based on the well known configuration document of the realm it finds and extracts some of the important provider addresses (e.g. the authorization and token endpoints), the signature keys and the issuer description. This allows for token identification and validation without the need to contact the provider and there’s no need to mediate the interaction with the provider. We therefore dropped the iam integration services as they were not needed anymore.\nNow it also expects that group information is present in the access token as a claim, either as an array or a comma separated list of group values.\nThe service also introduces another resource (_permissions_) as a singleton resource that manages (or enumerates) the permissions that are allowed to be set as values in the ACL definitions.\nAll IAM resources are now protected from blind writes (also known as lost update problem) by means of the rev query parameter, similar to the other services.","title":"IAM service updates"},{"location":"/docs/releases/v1.0-release-notes.html#introduced-a-new-service-admin","text":"A new service has been introduced, named Admin that manages the scoping (and its configuration) within the Nexus ecosystem. Organizations and Projects (previously named domains) are now managed by this service, allowing other future services to take advantage of the functionality provided without a direct dependency on the KG service. The service dependency tree is now as follows:\n+-----------+ +-----------+ +-----------+\n | | | | | |\n | IAM <---------+ Admin <---------+ KG |\n | | | | | |\n +-----+-----+ +-----------+ +-+---------+\n ^ |\n | |\n +---------------------------------------+\nAccess control lists are now restricted to either root (/), organization (/{org}) or project (/{org}/{project}) removing the need to index these definitions along with the data in their respective service boundaries.","title":"Introduced a new service: Admin"},{"location":"/docs/releases/v1.0-release-notes.html#introduced-javascript-sdk-for-nexus","text":"We released a Javascript SDK for Nexus that helps integrating with the Blue Brain Nexus API from Javascript and Typescript code. It aims at giving easy access to all the features offered by the API. It also offers Typescript declarations.\nThis is the library of top of which the Nexus Web interface is built, but it remains framework-agnostic.","title":"Introduced Javascript SDK for Nexus"},{"location":"/docs/releases/v1.0-release-notes.html#introduced-python-sdk-for-nexus","text":"We released a Python SDK for Nexus that helps integrating with the Blue Brain Nexus API from Python. It aims at giving easy access to all the features offered by the API.","title":"Introduced Python SDK for Nexus"},{"location":"/docs/releases/v1.0-release-notes.html#introduced-a-command-line-interface-cli-for-nexus","text":"We released a Nexus CLI that helps interaction with Nexus from the command line. This tool is built on top of the Python SDK for Nexus. It aims at giving easy access to all the features offered by the API and facilitate your data management with Nexus. The use of the CLI is extensively demonstrated in our [Nexus Tutorial].","title":"Introduced a Command Line Interface (CLI) for Nexus"},{"location":"/docs/releases/v1.0-release-notes.html#migration-from-v0-y-z-series","text":"The semantics of the API and managed resources in between the v0.y.z and v1.y.z series has changed considerably making an automatic migration almost impossible without understanding the structure of the data stored in Nexus. We recommend building a tailored migration script. Please find us on Github Discussions for help and advice on how to do this effectively depending on your use of Nexus.","title":"Migration from v0.y.z series"},{"location":"/docs/releases/v1.0-release-notes.html#removed-of-dependency-on-kafka","text":"Services have been updated to expose their event logs or subsets via HTTP through Server Sent Events, removing the need to use Kafka as means of service to service communication. It uses the same authentication and authorization mechanism as with the rest of the API, thus ensuring that the information exchanged in guarded by the ACLs defined.\nThe change reduces the additional operational burden of maintaining a Kafka cluster and also opens up the system for extension as the event logs can be consumed by third party applications in an efficient manner without the need of direct access to the message broker.","title":"Removed of dependency on Kafka"},{"location":"/docs/releases/v1.0-release-notes.html#in-memory-indices","text":"Versions v0.y.z of iam and later on admin services depended on ElasticSearch and BlazeGraph to maintain indices of the resources managed. Since these resources easily fit in memory on a single node, the dependency on these external systems has been removed in favour of in memory indices to provide a consistent view on the data and increase the general availability. In between nodes, when services are deployed as a cluster, the indices are replicated by using CRDTs which are natively supported by Akka Distributed Data.","title":"In memory indices"},{"location":"/docs/roadmap.html","text":"","title":"Roadmap"},{"location":"/docs/roadmap.html#roadmap","text":"Check our GitHub Milestones for the latest updates and priorities for Nexus.\nNote that the content of milestones is subject to change without notice (for example depending on sprint completion). We favor frequent releases, so we might remove some items of the milestone instead of extending the due date.\nOur current release schedule is one milestone every two weeks approximately, resulting in the next patch, minor or major release.\nThe schedule might vary depending on urgency of patch releases, feature complexity, and time of year (among other things).\nPlease reach out to us on our GitHub Discussions page if you have questions.","title":"Roadmap"},{"location":"/docs/fusion/index.html","text":"","title":"Nexus Fusion"},{"location":"/docs/fusion/index.html#nexus-fusion","text":"Nexus Fusion is the web interface of Blue Brain Nexus, powered by Nexus Delta. It offers prebuilt data visualization, querying, data manipulation, and administration capabilities to help integrate, edit and visualize data and resources inside Nexus Delta projects.","title":"Nexus Fusion"},{"location":"/docs/fusion/index.html#extensibility","text":"Nexus Fusion aims to be an extensible web application that can serve generic needs of data visualization, governance and administration, while simultaneously serving domain specific needs of users. In order to facilitate this, we are adapting a plugin model where developers can adapt Nexus Fusion for their user’s situation. This began in previous releases by introducing Plugins. Nexus Fusion aims to be a frame, upon which many extension are hung.","title":"Extensibility"},{"location":"/docs/fusion/index.html#notes","text":"Nexus Fusion was previously named Nexus Web before version 1.4. We hope this new name will help reflect the mission of the application: combining features for users across the data-driven science stack into one tool.","title":"Notes"},{"location":"/docs/fusion/architecture.html","text":"","title":"Architecture"},{"location":"/docs/fusion/architecture.html#architecture","text":"","title":"Architecture"},{"location":"/docs/fusion/architecture.html#technology-overview","text":"Nexus Fusion is a server-side rendered single-page webapp powered by React.js. It is written in Typescript, and therefore must be transpiled into native browser JavaScript, during a build step, before being served.\nThe build step produces a server artifact to run on a Node.js server, with client-side assets and Javascript.\nWe produce a docker image that is able to serve the compiled assets directly, which is available on Dockerhub.\nAlthough the application is served by a Node.js server, the client communicates directly to Nexus Delta using Nexus.js.","title":"Technology Overview"},{"location":"/docs/fusion/architecture.html#pages","text":"Nexus Fusion has undergone a significant restructuring to transition from a SubApp-based architecture to a page-based structure. This change will prepare the application for a full migration to file-system based routing technologie and help seperating the application main features.\nPages serve a specific top level entity or functionality concerns of diverse users and activities, and provide varying access privileges to each. The main features that can be accessed from the home page are: Organizations, Projects, Studios and My data.\nThe page Project, is responsible for handling all aspects of managing a single project.\nThe search page has been removed, but every element that was previously available on the search page now has a link on the home page. These links redirect users to the appropriate global search type page.\nThe pages in Nexus Fusion are part of the source code and reside in the src/pages folder.\nWhile all the previous feature is still available in the current version of Nexus Fusion, we expect its functionality to evolve and change in the upcoming release.","title":"Pages"},{"location":"/docs/fusion/architecture.html#plugins","text":"Plugins are ways to render resources. You can find more about them here. It is important to note that the plugin repository is hosted separately from Nexus Fusion. Nexus Fusion will request a Plugin Manifest from this repository at run-time, and fetch plugins to render during run time based on a config. Both the plugins, the configuration, and the manifest should be hosted somewhere Nexus Fusion can request it.","title":"Plugins"},{"location":"/docs/fusion/architecture.html#customization","text":"You can customize the Header of Nexus Fusion by setting up the following environment variables:\nLOGO_IMG: Url for an image to be used as application logo in the Header, for example, https://www.epfl.ch/logo-img.png LOGO_LINK: Url for the logo, for example, https://www.epfl.ch ORGANIZATION_IMG: Url for the organization page foreground image, for example, https://www.epfl.ch/default-org-img.png PROJECTS_IMG: Url for the projects page foreground image, for example,https://www.epfl.ch/default-projects-img.png STUDIOS_IMG: Url for the studios page foreground image, for example, https://www.epfl.ch/default-studios-img.png LANDING_VIDEO: Url for video in the the landing page, for example, https://www.epfl.ch/landing-page-video.mp4 LANDING_POSTER_IMG: Url for the video’s poster image in landing page (replace the video when loading, for example,https://www.epfl.ch/landing-page-poster-img.png MAIN_COLOR: Url for the organization page, for example “#062d68” If you use Nexus Forge, it is possible to include a Forge templates button by providing the url as FORGE_LINK, for example, https://some-url.hi\nThe full list of environment variables can be found here.","title":"Customization"},{"location":"/docs/fusion/organizations.html","text":"","title":"Organizations"},{"location":"/docs/fusion/organizations.html#organizations","text":"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.\nNote: Some organizations in Nexus Delta are created to support Nexus Fusion internals, such as the webapps organization. Be careful when deleting those.\nFurthermore, it is noteworthy that the capability to create new organizations is not limited solely to the organizations page. Rather, this functionality is available from various locations throughout the application, including the homepage and the global search types pages.","title":"Organizations"},{"location":"/docs/fusion/organizations.html#creating-a-new-organization","text":"When the organization is created successfully, the browser will redirect the user to the projects page where the user can see the list of all projects and create new ones (see Projects).","title":"Creating a New Organization"},{"location":"/docs/fusion/projects.html","text":"","title":"Projects"},{"location":"/docs/fusion/projects.html#projects","text":"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.\nBeyond simply listing projects, the Projects page also provides users with detailed statistics, including the total number of projects and the corresponding quantity of associated datasets.\nAdditionally, authorized users possess the ability to create new projects, a functionality that is accessible from various locations throughout the application, including the homepage and the global search types pages. Notably, when creating a new project, users are prompted to specify the organization to which the project will be affiliated, thus further reinforcing the organizational hierarchy within Nexus Fusion.","title":"Projects"},{"location":"/docs/fusion/project.html","text":"","title":"Project"},{"location":"/docs/fusion/project.html#project","text":"The Nexus Fusion project page allows you to manage your project in a given Blue Brain Nexus deployment. In particular, you can:\nList, create, edit and deprecate projects within an Organization, Check permissions on your Projects and Organizations, Create, view, edit, and deprecate resources within your projects, Query your Knowledge Graph with SPARQL and Elasticsearch views, Create new Studios (or edit or deprecate them, as Studios are resources), Check the indexing status of your projects.\nNote: Some organizations in Nexus Delta are created to support Nexus Fusion internals, such as the webapps organization. Be careful when deleting those.","title":"Project"},{"location":"/docs/fusion/project.html#creating-a-new-project","text":"When creating a Project, you can configure the Base, Vocab and through the “Advanced Settings” the API Mappings for the project. You can learn more about these settings in the Delta Documentation. The current version allows the user to create a Project in different main parts of the application, Organization page, projects page, and also in the global search types pages.\nThe project creation modal is configurable in way that can allow the user to select an organization when the user is not on the one of his organizations page.","title":"Creating a New Project"},{"location":"/docs/fusion/project.html#project-page","text":"The project view is the center stage to manage a project. Each tab is meant to give you functionalities that we will describe below.","title":"Project Page"},{"location":"/docs/fusion/project.html#browse","text":"The browse tab enables users to list all resources available in the current Project.\nOn the left hand side, you will find the Default Query. You can filter and search resources, order them, as well as share that query with your peers. You can create as many queries as you like by clicking + Add another resource list.","title":"Browse"},{"location":"/docs/fusion/project.html#resource-panel","text":"","title":"Resource Panel"},{"location":"/docs/fusion/project.html#description","text":"To enable users to visualize and describe their data, we have included a description viewer (this plugin) and editor (Advance View > Description Tab). This plugin will only show if the resource has a description property defined. Resource descriptions are rendered first with a templating system, and then as markdown. This allows users to show off their resources using a combination of HTML and markdown that is useful to render resource properties, iterate through resource lists, or render images stored in Nexus Delta. Nexus Fusion saves descriptions as a simple string inside the Resource’s description property. Markdown is rendered using showdown, with templating provided by handlebars. This feature is also used in the @ref:Studio Description.\nNote The Handlebar templating will be resolved before converting markdown.\nExample Resource\n{\n \"@id\": \"9a4c53f4-ab50-459f-9aed-cd9ad57b9c5d\",\n \"@type\": [\n \"Entity\",\n \"Cell\"\n ],\n \"brainLocation\": {\n \"@type\": \"BrainLocation\",\n \"brainRegion\": {\n \"label\": \"primary somatosensory cortex\"\n },\n \"layer\": {\n \"label\": \"layer 4\"\n }\n },\n \"description\": \"# {{name}} | {{ objectOfStudy.label }}\\n\\n## Subject\\nSpecies: {{ subject.species.label }}\\n<br/>\\n![image](https://my-nexus-deployment.org/v1/files/my-org/my-project/f33e3bdc-7ca3-4dad-b100-88f4891d221c)\\n\\n## Brain Region\\n{{ brainLocation.brainRegion.label }}\",\n \"name\": \"Cell #1029\",\n \"objectOfStudy\": {\n \"label\": \"Single Cell\"\n },\n \"subject\": {\n \"@type\": \"Subject\",\n \"age\": {\n \"period\": \"Post-natal\",\n \"unitCode\": \"days\",\n \"value\": 13\n },\n \"species\": {\n \"label\": \"Rattus norvegicus\"\n }\n }\n}\nExample Description (in the editor)\nPlease note that the following syntax {{ json.path }} will present the data found in the resource’s matching json path. This way, JSON data can be injected into your description based on the resource’s JSON payload.\n# {{name}} | {{ objectOfStudy.label }}\n\n## Subject\nSpecies: {{ subject.species.label }}\n<br/>\n![image](https://my-nexus-deployment.org/v1/files/my-org/my-project/f33e3bdc-7ca3-4dad-b100-88f4891d221c)\n\n## Brain Region\n{{ brainLocation.brainRegion.label }}\nPlease note that we are linking the image through the _self (not the @id) URI of an image stored in the Nexus instance as a resource of type File.\nResult\nUsers with write permissions on a Resource will have access to a tab called “Description” in the Advanced View plugin. There, you can use a full WYSIWYG editor to type out and preview a description before saving it.","title":"Description"},{"location":"/docs/fusion/project.html#advanced-view","text":"This is a provided plugin that enables users to look into the resources they store in a given Project. This plugin offers multiple capabilities you will find in its tabs:\nJSON - to view the JSON-LD representation of the resource. Description - to edit the resource description in Markdown. History - to view all the revisions of this resource. Links - to view the incoming and Outgoing relations of this resource to other resources. Graph - to view the resource as a Graph representation.","title":"Advanced View"},{"location":"/docs/fusion/project.html#preview","text":"This plugin presents data that is stored in the distribution of the resource. Namely the Files that have been attached to this resource. When available, the files are listed and can be Downloaded. Some specific file types can be previewed (e.g. PDF, CSV).","title":"Preview"},{"location":"/docs/fusion/project.html#image-viewer","text":"This plugin presents Image files that are represented under the resource’s image property. The images are previewed and made downloadable for the user.","title":"Image Viewer"},{"location":"/docs/fusion/project.html#query","text":"This tab enables a technical user to write queries against views configured in the project. Currently it supports SPARQL and Elasticsearch Views.","title":"Query"},{"location":"/docs/fusion/project.html#query-sparql-views","text":"Here you can write a SPARQL query, execute it and preview the results.","title":"Query SPARQL Views"},{"location":"/docs/fusion/project.html#query-elasticsearch-views","text":"Here you can write an Elasticsearch query, execute it and preview the results.","title":"Query Elasticsearch Views"},{"location":"/docs/fusion/project.html#create-and-upload","text":"Here you can create new resources. The dropdown menu (Resource Type) at the top will give you access to predefined resources (e.g. Storage, Views), you can also create your from scratch. Finally you can drag and drop Files to be uploaded into Nexus.","title":"Create and Upload"},{"location":"/docs/fusion/project.html#statistics","text":"If you have the privileges, you can view the count of resources as well as the quotas currently defined in your Nexus instance.","title":"Statistics"},{"location":"/docs/fusion/project.html#settings","text":"In this tab you can configure several aspects of your project.","title":"Settings"},{"location":"/docs/fusion/project.html#general","text":"This section allows users to configure the Base, Vocab and API Mappings of their project.","title":"General"},{"location":"/docs/fusion/project.html#views","text":"This section allows users to list all the Views currently configured in your project and trigger actions on them. More actions will be added in the future.","title":"Views"},{"location":"/docs/fusion/project.html#storage","text":"This section allows users to list all configured Storages in this project.","title":"Storage"},{"location":"/docs/fusion/project.html#resolvers","text":"This section allows users to list all configured Resolvers (API reference) in this project. They are also ordered by their priorities as in the ID resolution process.","title":"Resolvers"},{"location":"/docs/fusion/project.html#permissions-and-acls","text":"This section allows users to view the Permissions set on various levels of the Nexus instance:\n/ which is the root of all Organizations and Projects Organizations of the current project Specific Project Each of these level then list the users and groups onto which Permissions (i.e. ACLS) have been set.","title":"Permissions and ACLs"},{"location":"/docs/fusion/project.html#danger-zone","text":"In this section, users can do potentially damaging actions such as deprecating a project.","title":"Danger Zone"},{"location":"/docs/fusion/project.html#jira","text":"If you have the JIRA plugin configured in your Nexus instance, you can see all tickets created within this project, across all resources.","title":"JIRA"},{"location":"/docs/fusion/project.html#graph-analytics","text":"This tab enables users to view the overall structure of the knowledge graph stored in this project. It only shows types as well as their relations to other resource types. Bear in mind that if a resource has multiple types, each type will show independently in this graph. Furthermore, you can click on a type and view (on the right hand side panel) its property usage statistics as well as its relation statistics, this is useful to check the quality of your data.","title":"Graph Analytics"},{"location":"/docs/fusion/project.html#studios","text":"This tab will take you to the Studio listing page for this specific project.","title":"Studios"},{"location":"/docs/fusion/search.html","text":"","title":"Global Search Types"},{"location":"/docs/fusion/search.html#global-search-types","text":"Note Search requires Delta configuration. See the Delta Search documentation for details: Delta Search Documentation","title":"Global Search Types"},{"location":"/docs/fusion/search.html#search-preset-cards","text":"The search presets card at the home page allows the user to see the count of datasets for each type and select a specific type from the global types of Nexus. The same cards are also available on each global type page.","title":"Search Preset Cards"},{"location":"/docs/fusion/search.html#jump-to-project","text":"Projects matching the search criteria are listed below the search text from which you can instantly jump to the given project.","title":"Jump to Project"},{"location":"/docs/fusion/search.html#sorting","text":"Where no explicit sort criteria has been applied, search results are ordered by their ElasticSearch relevance score. Sort criteria can be applied to one or more fields to customise the ordering of results in the table.\nIn order to sort on a specific field, open the field’s dropdown menu and select one of Sort Ascending or Sort Descending (highlighted below).\nUpon selecting a sort direction the sorting criteria will be applied and the results will be updated immediately. Click the Clear button to remove the sorting criteria for the field. Sort criteria can be applied to several fields.\nNote If a field does not support sorting then the sorting option will not be displayed.\nA summary of the status of sorted columns is displayed at the top of the search results table.\nThe Sort dialog shows all sort criteria currently applied to the search results (shown below).\nThe sort direction can be changed here as well as removed entirely.","title":"Sorting"},{"location":"/docs/fusion/search.html#filtering","text":"Filters allow you to filter the search results further. The field’s dropdown menu provides access to the filter options. In the example below, the filter options for the Brain Region field are highlighted.\nThe Operator dropdown determines the type of filter operation and can be one of:\nis all of (AND) - resource must have all selected filter criteria is any of (OR) - resource must have one of the selected filter criteria is none of (NOT) - resource must not have any of the selected filter criteria is missing - resource must not have a value for the property\nThe list of filter values is displayed below the operator dropdown ordered by the terms that appear most frequently. The search box provides the ability to search for a specific filter term.\nA summary showing the number of filters applied is displayed above the search results table. Clicking on it reveals the filter dialog (see below).\n@@@ div { .center }@@@\nThe filter dialog lists all currently applied filters and provides the ability to remove a filter.","title":"Filtering"},{"location":"/docs/fusion/search.html#numerical-filters","text":"Columns with numerical values have some additional filters. The first is range selector which will allow you to limit the search to a range of values available in the column. Below the range selector, you can choose to see only “missing values” by checking the missing values check box.\nIn order to understand the data better, you can also use the minimum, maximum, average and sum of the values in the column. At the very bottom, you can see a histogram of the values. Histogram can be viewed in bar or line graph using a radio button.","title":"Numerical Filters"},{"location":"/docs/fusion/search.html#hidden-columns-and-ordering","text":"The search results table can be customised to display only the columns that you are interested in. The summary displaying the number of hidden columns is displayed at the top-left of the search results table (highlighted below).\nClick on the hidden columns summary to open the hidden columns and column order configuration dialog which is shown below.\nEach available column to display in the search results is listed along with a toggle to show or hide the column. The (Show all Columns) option provides a convenient way to show all columns.","title":"Hidden Columns and Ordering"},{"location":"/docs/fusion/search.html#column-ordering","text":"Columns can be reordered by clicking on the three vertical dots next to the column name and dragging to the desired location.","title":"Column ordering"},{"location":"/docs/fusion/search.html#hiding-column-using-the-field-menu","text":"An individual column can also be hidden using the field menu’s Hide column option (highlighted below).","title":"Hiding column using the Field menu"},{"location":"/docs/fusion/search.html#pagination","text":"The search results table is paginated to allow for convenient browsing of the search results. The paging controls for navigating the pages of results along with page size options are displayed at the top-right of the search results table (highlighted below).\nBy default, the page size is set to match the number of rows that fit your screen. You can however use the pagination dropdown in order to select a different page size. If a page size with more results than fit the page is selected, a scrollbar will display enabling vertical scrolling of the results.","title":"Pagination"},{"location":"/docs/fusion/search.html#reset-search-customisations","text":"All customisations to the search results can be removed using the Reset option displayed above the search results table (highlighted in the screenshot below).","title":"Reset Search Customisations"},{"location":"/docs/fusion/search.html#search-configurations","text":"A search configuration is a predefined, named combination of columns, sort options and filters. You can find these configurations in the Search Config dropdown on the top of the global search types page. Choosing a search config from the cards list will apply the config to the search table.","title":"Search Configurations"},{"location":"/docs/fusion/studios.html","text":"","title":"Studios"},{"location":"/docs/fusion/studios.html#studios","text":"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.\nUsers who possess the requisite permissions can create new Studios within the Nexus Fusion platform from several locations across the application, such as the homepage and the global search types pages. During the Studio creation process, users are prompted to designate the organization and project to which the Studio will be associated, reinforcing the hierarchical structure within the platform.","title":"Studios"},{"location":"/docs/fusion/studio.html","text":"","title":"Studio"},{"location":"/docs/fusion/studio.html#studio","text":"A Studio is a collection of persistent queries organized in a table layout for users to quickly access relevant data in a customizable way. Studio authors can create a studio to match a specific topic, and create organization schemes called Workspaces and Dashboards to access various aspects of that data.\nNote Want to configure a studio straightaway?\nFor example, a Studio might cover all datasets from the Neocortex, with a Workspace called Physiology and a Dashboard called Morphology Pipeline.\nIn essence, a Studio is a UI layer that performs queries according to a configuration that lives in a Nexus instance as a Resource. It has a label for a meaningful title and a description field to convey to the users what sort of data they can expect to find there. Most importantly, a Studio configuration has a Workspace collection.\n{\n \"@context\": \"https://bluebrainnexus.io/studio/context\",\n \"@type\": \"https://bluebrainnexus.io/studio/vocabulary/Studio\",\n \"description\": \"\",\n \"label\": \"test\",\n \"workspaces\": [\n \"https://nexussandbox.io/org/project/3bdf8b08-7b9a-443b-b04d-be2a048893ba\"\n ]\n}\nNote A Studio will be given a URI for navigation or sharing.","title":"Studio"},{"location":"/docs/fusion/studio.html#about-the-studio-context","text":"In order for the Studio to work as intended with the UI, a context must be in the project. Its purpose is to direct the Knowledge Graph to understand how studio-specific properties behave, such as that Workspaces should be set (an unordered collection without duplicates).\nIf you create a Studio using the UI in Nexus Fusion, this resource will be created for you, if it doesn’t exist already. If you plan on bootstrapping your own projects programmatically, such as through the API, then you might need to take care to include it.\nEvery Studio resource that is created should reference this context resource as the @context property. For an example, see the Studio resource mentioned above. The default Studio context @id for all our examples will be https://bluebrainnexus.io/studio/context, and it is what Nexus Fusion will use.\nHere’s what the context should look like:\n\"{\n \"@context\": [\n {\n \"@base\": \"https://bluebrainnexus.io/studio/\",\n \"@vocab\": \"https://bluebrainnexus.io/studio/vocabulary/\",\n \"label\": {\n \"@id\": \"http://www.w3.org/2000/01/rdf-schema#label\"\n },\n \"name\": {\n \"@id\": \"http://schema.org/name\"\n },\n \"description\": {\n \"@id\": \"http://schema.org/description\"\n },\n \"workspaces\": {\n \"@id\": \"https://bluebrainnexus.io/studio/vocabulary/workspaces\",\n \"@container\": \"@set\",\n \"@type\": \"@id\"\n },\n \"plugins\": {\n \"@id\": \"https://bluebrainnexus.io/studio/vocabulary/plugins\",\n \"@container\": \"@set\"\n },\n \"dashboards\": {\n \"@container\": \"@set\"\n },\n \"dashboard\": {\n \"@id\": \"https://bluebrainnexus.io/studio/vocabulary/dashboard\",\n \"@type\": \"@id\"\n },\n \"view\": {\n \"@id\": \"https://bluebrainnexus.io/studio/vocabulary/view\",\n \"@type\": \"@id\"\n }\n }\n ],\n \"@id\": \"https://bluebrainnexus.io/studio/context\"\n}\"","title":"About the Studio Context"},{"location":"/docs/fusion/studio.html#workspaces","text":"A workspace is a collection of Dashboards paired with a View. You can have any number of Dashboard-View pairings organized into a Workspace. You can label a Workspace and add a description to help users understand what kind of content they can expect to find there.\n{\n \"@context\": \"https://bluebrainnexus.io/studio/context\",\n \"@type\": \"StudioWorkspace\",\n \"dashboards\": [\n {\n \"dashboard\": \"https://bbp.epfl.ch/neurosciencegraph/data/8751df37-a75f-4858-b174-742264deb4e9\",\n \"view\": \"nxv:defaultSparqlIndex\"\n },\n {\n \"dashboard\": \"https://bbp.epfl.ch/neurosciencegraph/data/99982da8-ec3a-4f18-9388-a0cc81bfff0c\",\n \"view\": \"nxv:defaultSparqlIndex\"\n }\n ],\n \"description\": \"\",\n \"label\": \"MorphoTester\"\n}","title":"Workspaces"},{"location":"/docs/fusion/studio.html#dashboards","text":"A Dashboard is simply a query with a description and a label. This will be used by the Workspace to query against the view paired with it inside the Workspace configuration. This way, you can write one query, and re-use it against multiple potential views.\nAn example Dashboard resource looks like this:\n{\n \"@context\": \"https://bluebrainnexus.io/studio/context\",\n \"@type\": \"StudioDashboard\",\n \"dataQuery\": \"prefix nxv: <https://bluebrain.github.io/nexus/vocabulary/>\\nprefix s: <http://schema.org/>\\nSELECT DISTINCT ?self ?familyName ?givenName\\nWHERE {\\n?s nxv:constrainedBy <https://neuroshapes.org/dash/person> ;\\n nxv:self ?self ;\\n s:familyName ?familyName ; \\n s:givenName ?givenName\\n}\\nLIMIT 20\",\n \"description\": \"A list of every scientist\",\n \"label\": \"Scientists\",\n \"plugins\": [\"nexus-plugin-example\"]\n}\nThe Dashboard, once configured, will present the results of your SPARQL query in a table. Each item in the row will be clickable and lead to a details page showing the Resource, in this case, a list of scientists that have contributed data to the project.","title":"Dashboards"},{"location":"/docs/fusion/studio.html#how-to-configure-a-studio","text":"","title":"How to Configure a Studio"},{"location":"/docs/fusion/studio.html#studio-creation","text":"There is multiple places where the user can create a new Studio:\nHome page Home page > Studios List Home page > Projects List > Select Project > Studios Tab\nClick the Create Studio button.\nFill in a form providing the following:\nLabel: the name of your new Studio (required field) Description for your Studio\nClick Save and you will be navigated to the Studio View.\nThat’s it! Your new Studio is empty for now, but don’t worry! We will add Workspaces and Dashboards later.\nYou can also find your Studios in the Resource List (for example, filter by type Studio, or Search by id) and view it in the Resource View.","title":"Studio Creation"},{"location":"/docs/fusion/studio.html#updating-a-studio","text":"Once created, the label and the description of a Studio can be changed. Just click Edit Studio button and update the Label and the Description fields.","title":"Updating a Studio"},{"location":"/docs/fusion/studio.html#removing-a-studio","text":"To remove an unwanted Studio, deprecate it in the Resource View of your project in the Project space.","title":"Removing a Studio"},{"location":"/docs/fusion/studio.html#workspace-creation","text":"Inside any Studio, click the Workspace button followed by Add to add a new workspace.\nFill in a form providing the following:\nLabel: the name of your new Workspace (required field) Description for your Workspace\nClick Save and you will be navigated to the new workspace section of your Studio View, which is given a navigable URI.\nYour Workspace is created, but it will need to have at least one Dashboard/View association for anything to show there.\nYou can also find your Workspaces as raw JSON configurations in the Resource list (for example, filter by type StudioWorkspace, or search by id) and view it in the Resource View.","title":"Workspace Creation"},{"location":"/docs/fusion/studio.html#updating-a-workspace","text":"Inside any Studio, with the desired Workspace selected from the menu, click on Workspace, then the Edit button. Then you’ll be provided with a dialog where you can review and edit the Workspace configuration.\nAdd or Remove Dashboards: Add or remove a Dashboard to the collection in your Workspace configuration. The Dashboards listed are all the available non-deprecated ones in the project. Label: the name of your new Workspace (required field). Description for your Workspace.\nAfter your forms have been edited, simple click Save to submit your changes.","title":"Updating a Workspace"},{"location":"/docs/fusion/studio.html#removing-a-workspace","text":"You can remove a Workspace by navigating to the workspace and then clicking the Workspace button followed by Remove. Click OK in the dialog to confirm removal.","title":"Removing a Workspace"},{"location":"/docs/fusion/studio.html#dashboard-creation","text":"Inside any Studio View, under a selected Workspace, click the Dashboard button followed by Add.\nFill in the Create Dashboard form providing the following:\nName: the name of your new Dashboard (required field) Description: an optional description for your Dashboard View: specify the view in the project that the dashboard should use as its data source. The view can be of any of the supported Nexus view types including be Sparql, ElasticSearch, and CompositeView. When specifying a composite view, you will also specify whether to query all projections or a specific projection. Query: a valid query must also be specified: a SPARQL query for SPARQL views (a SPARQL query that conforms to the dataQuery field in the configuration) or an ElasticSearch query for ElasticSearch views.","title":"Dashboard Creation"},{"location":"/docs/fusion/studio.html#sparql-dashboards","text":"You can click on the View query in Sparql Editor to open the Sparql Editor in a new tab to work on your query while querying it against a Sparql View in your project, so you can make sure it works and provides the fields you want. Then, you can copy and past that back in the form. To understand more about the SPARQL queries requirements, check below.\nClick Save and the Dashboard and its query results should show up!\nYou can now also add this Dashboard to other Workspaces across the project.","title":"Sparql Dashboards"},{"location":"/docs/fusion/studio.html#elasticsearch-dashboard","text":"In the create dashboard form, you can select a ElasticSearch view from the view dropdown. And then use an ElasticSearch query targeting that view to populate your dashboard. It will work same as the SPARQL dashboard, except for the query and the view.","title":"Elasticsearch Dashboard"},{"location":"/docs/fusion/studio.html#updating-a-dashboard","text":"You’ll find the edit Dashboard under the dashboard label. After your form has been edited, simple click Save to submit your changes.","title":"Updating a Dashboard"},{"location":"/docs/fusion/studio.html#removing-a-dashboard","text":"You can remove a Dashboard by deprecating it from the Resource View.","title":"Removing a Dashboard"},{"location":"/docs/fusion/studio.html#sparql-query-requirements","text":"","title":"Sparql Query Requirements"},{"location":"/docs/fusion/studio.html#the-self-variable","text":"In order for the UI to function as intended, you must provide a unique ID variable inside your SPARQL statement, labeled as ?self. This will be used to generate the table and fetch resources when navigating to the Resource Panel of a row item. Ideally, this ?self variable should correspond with the _self of a target Resource of which to center your query against as a subject. The ?self variable will never be shown in the table, so you need some other variable in addition to view the results properly, or you’ll end up with a table without any rows.","title":"The ?self variable"},{"location":"/docs/fusion/studio.html#making-queries-visible","text":"In addition to the ?self variable, you need to have at minimum one other variable defined, which will be displayed on each row. The variable name will label the header of the table column, capitalized.","title":"Making queries visible"},{"location":"/docs/fusion/studio.html#the-minimum-functioning-query-with-the-self-variable-defined","text":"# This is the minimum functioning query for Studio\nprefix nxv: <https://bluebrain.github.io/nexus/vocabulary/>\nSELECT DISTINCT ?subject ?self\nWHERE {\n ?subject nxv:self ?self ;\n}\nLIMIT 20","title":"The minimum functioning query with the ?self variable defined"},{"location":"/docs/fusion/studio.html#example-sparql-queries","text":"Here’s an example of fetching unique Persons using https://schema.org properties.\nprefix nxv: <https://bluebrain.github.io/nexus/vocabulary/>\nprefix s: <http://schema.org/>\nSELECT DISTINCT ?self ?familyName ?givenName\nWHERE {\n ?s nxv:constrainedBy <https://neuroshapes.org/dash/person> ;\n nxv:self ?self ;\n s:familyName ?familyName ;\n s:givenName ?givenName\n}\nLIMIT 20","title":"Example SPARQL Queries"},{"location":"/docs/fusion/studio.html#studio-description","text":"Every Studio deserves a beautiful description to highlight its data. We’ve included a Description Viewer above the tables so that users can write flavored markdown to give their studios a paragraph of context or show off some images. Edit the description in either the Project resource editor, or using the edit Studio button located besides the Studio title\nThe description can be rendered using handlebars and markdown, in the same way described in the Project Resource Viewer","title":"Studio Description"},{"location":"/docs/fusion/my-data.html","text":"","title":"User data"},{"location":"/docs/fusion/my-data.html#user-data","text":"The My Data page within the Nexus Fusion platform serves as a central repository for all datasets that have been created or updated by the logged in user. This feature enables users to easily access and manage the data that they are interested in, without the need to navigate through irrelevant data.","title":"User data"},{"location":"/docs/fusion/my-data.html#data-panel","text":"Data Panel is a central location where users can gather and explore data using a variety of external tools. Through this feature, users can select different types of data from various locations within the application, including the My Data page, Global search pages, and Studios page.\nBy aggregating all relevant data into a single location, the Data panel streamlines the data exploration and analysis process by providing the ability to select specific file extensions for download allows users to easily export data for use in other applications or platforms.","title":"Data Panel"},{"location":"/docs/fusion/my-data.html#data-panel-action-bar","text":"The Data Panel action bar offers users the ability to select specific file type extensions for download, streamlining the process of exporting data for use in other applications or platforms.\nMoreover, the Data Panel action bar provides users with valuable data insights, such as the number of resources selected and the size of the data to be downloaded.","title":"Data Panel action bar"},{"location":"/docs/fusion/plugins.html","text":"","title":"Plugins"},{"location":"/docs/fusion/plugins.html#plugins","text":"A resource returned by the Nexus Delta API is usually a JSON-LD document. By default, Nexus Fusion displays JSON-LD in a code editor. If the user has edit right to the document, they can update the resource in the editor.\nResources can represent a wide variety of scientific artifacts. It can be a neuron morphology, neuron electrophysiology, a set of files to download, a set of images and so on. So a user may want to extend Nexus Fusion to allow them to visualize or otherwise extend the presentation layer with logic specific to their resource type. Plugins are a way to accomplish this.","title":"Plugins"},{"location":"/docs/fusion/plugins.html#what-are-plugins","text":"A core component of Studio is the ability for data curators to develop a domain-specific presentation layer for their resources in Nexus Fusion. This allows data consumers to visualize their datasets using graphs, charts, or 3D visualizations, and to present the relevant metadata to the user.\nPlugins are developed using Javascript and are loaded into the Nexus Fusion instance from the /plugins folder.","title":"What are Plugins"},{"location":"/docs/fusion/plugins.html#plugin-examples","text":"Below you can find the screenshots from some plugins that can be integrated into Nexus Fusion. They extend the Nexus Fusion presentation layer.\nNeuron Electro physiology viewer\nMINDS Metedata viewer\nData download plugin","title":"Plugin examples"},{"location":"/docs/fusion/plugins.html#development","text":"Your plugin must export a default function with the following signature:\nexport default ({ ref: HTMLElement, nexusClient: NexusClient, resource: Resource<T> }) => {\n return () => {\n // optional callback when your plugin is unmounted from the page\n };\n};\nNexus Plugins uses SystemJS.\nYou have to transpile and bundle your code using SystemJS as output:\nwith rollup: use system as output format with webpack: use system as outputTarget","title":"Development"},{"location":"/docs/fusion/plugins.html#configuring-nexus-fusion-to-run-your-plugins","text":"Once you have your Javascript bundled into a single file, you can place it in the ./plugins folder at the root of your Nexus Fusion instance.\nPlugins should follow this folder naming convention:\n.\n│ README.md\n│\n└───plugins\n│ └───my-nexus-plugin\n│ │ index.js\n│ └───yet-another-nexus-plugin\n│ │ index.js\n│ ...","title":"Configuring Nexus Fusion to run your plugins"},{"location":"/docs/fusion/plugins.html#plugin-manifest","text":"The plugin manifest should be available at the same remote endpoint as the plugins, this is so that Nexus Fusion can find the plugins and apply them dynamically.\nThe plugin manifest is a JSON object with keys that correspond to the plugin name with a value that corresponds to a descriptive payload of where to find the manifest, as well as some information about it’s development. It’s similar to a package.json file.\n{\n \"circuit\": {\n \"modulePath\": \"circuit.f7755e13c8b410efdf02.js\",\n \"name\": \"Circuit\",\n \"description\": \"\",\n \"version\": \"\",\n \"tags\": [],\n \"author\": \"\",\n \"license\": \"\",\n \"mapping\": {}\n }\n}\nPlugin Config\nThe plugin config should be available as an object under the mapping key of the plugin manifest. This tells Nexus Fusion when a plugin should be displayed, by matching a resource to a shape.","title":"Plugin Manifest"},{"location":"/docs/fusion/plugins.html#matching-all-resources","text":"The following will show nexus-plugin-test for every resource in Nexus Fusion.\n{\n \"nexus-plugin-test\": {\n \"modulePath\": \"nexus-plugin-test.js\",\n \"name\": \"Nexus Plugin Test\",\n \"description\": \"\",\n \"version\": \"\",\n \"tags\": [],\n \"author\": \"\",\n \"license\": \"\",\n \"mapping\": {}\n }\n}","title":"Matching all resources"},{"location":"/docs/fusion/plugins.html#matching-a-resource-with-a-specific-type-and-shape","text":"The following will show nexus-plugin-test for any resource of type File but only if they have a distribution.encodingFormat property that’s application/swc\n{\n \"nexus-plugin-test\": {\n \"modulePath\": \"nexus-plugin-test.js\",\n \"name\": \"Nexus Plugin Test\",\n \"description\": \"\",\n \"version\": \"\",\n \"tags\": [],\n \"author\": \"\",\n \"license\": \"\",\n \"mapping\": {\n \"@type\": \"File\",\n \"distribution\": {\n \"encodingFormat\": \"application/swc\"\n }\n }\n }\n}","title":"Matching a resource with a specific type and shape"},{"location":"/docs/fusion/plugins.html#default-plugins","text":"Default plugins are part of Fusion.","title":"Default Plugins"},{"location":"/docs/fusion/plugins.html#advanced-view-plugin","text":"The Advanced View Plugin displays JSON-LD in a code editor. If the user has edit access to the document, they can update the resource in the editor. It also has few additional tabs. History, Links and Graph. History tab displays the edit history of the resource. A user can explore the graph view of the resource in Graph tab. They can also view the incoming and outgoing links of the resource in Links tab.","title":"Advanced View Plugin"},{"location":"/docs/fusion/plugins.html#jira","text":"The Jira plugin enables integration with an instance of Jira to facilitate discussions about resources. The Jira plugin must be enabled in Nexus Delta and configured in the Fusion Deployment. Links between a Jira issue and a Nexus resource (or project) are stored in custom fields in Jira which are required to be configured before usage. It is the Nexus URL that is used to link to the resource. Issues created with the Jira plugin have a discussion label applied to them in Jira.","title":"Jira"},{"location":"/docs/fusion/plugins.html#configuration","text":"See the accompanying Delta Jira documentation for configuration of the Jira plugin in Delta and linking it with a Jira instance. In Fusion, there are several environment variables related to Jira that must be specified in order to configure its usage.\nJIRA_URL - URL of jira instance JIRA_RESOURCE_FIELD_NAME - the name of the custom field in Jira to use for storing the link to the Nexus resource JIRA_RESOURCE_FIELD_LABEL (defaults to Nexus Resource) - the label of the custom field in Jira being used for storing the link to the Nexus resource JIRA_PROJECT_FIELD_NAME - the name of the custom field in Jira to use for storing the link to the Nexus project JIRA_PROJECT_FIELD_LABEL (defaults to Nexus Project) - the label of the custom field in Jira being used for storing the link to the Nexus project\nThe custom fields in Jira should be created as URL type field and should be added to the required Jira screens and projects that you want to use with Nexus.","title":"Configuration"},{"location":"/docs/fusion/plugins.html#authorization","text":"The user will be required to authorize access to Jira prior to being able to use the Jira plugin in Fusion. From the Jira plugin the user is instructed to click the link to authorize access in Jira and then will be required to enter the provided verification code in Fusion to complete the authorization.","title":"Authorization"},{"location":"/docs/fusion/plugins.html#usage","text":"The Jira plugin is displayed for all resources, given that it’s enabled. A resource can be linked to an issue in Jira from within the Jira plugin in Fusion by either choosing to create a new issue or by linking to an existing Jira issue.\nMultiple issues can be associated with a resource and they will display in the table of linked resources in the Jira plugin. Issues can be removed from here also.","title":"Usage"},{"location":"/docs/fusion/plugins.html#project-view","text":"Besides the Jira plugin displaying in the Resource view, there is also a Jira plugin at the level of the project. It can be accessed via the Jira tab in the project view. In the Jira project view, all issues linked to resources within the project are listed along with their associated resource. Similar functionality to the Jira plugin on the resource is available here with the option to add/remove issues. Note that issues created within the Jira plugin at the project level are associated with the project only.","title":"Project view"},{"location":"/docs/forge.html","text":"","title":"Nexus Forge"},{"location":"/docs/forge.html#nexus-forge","text":"Blue Brain Nexus Forge is a domain-agnostic, generic and extensible Python framework enabling non-expert users to create and manage knowledge graphs by making it easy to:\nDiscover and reuse available knowledge resources such as ontologies and schemas to shape, constraint, link and add semantics to datasets. Build knowledge graphs from datasets generated from heterogenous sources and formats. Defining, executing and sharing data mappers to transform data from a source format to a target one conformant to schemas and ontologies. Interface with various stores offering knowledge graph storage, management and scaling capabilities, for example Nexus Core store or in-memory store. Validate and register data and metadata. Search and download data and metadata from a knowledge graph.\nFor more information about the Forge, please refer to the documentation.","title":"Nexus Forge"},{"location":"/docs/delta/index.html","text":"","title":"Nexus Delta"},{"location":"/docs/delta/index.html#nexus-delta","text":"Blue Brain Nexus Delta is a low latency, scalable and secure system that realizes a range of functions to support data management and knowledge graph lifecycles.\nIt is a central piece of the Nexus ecosystem of software components as it offers a set of foundational capabilities to the other components (Nexus Fusion and Nexus Forge) around data and metadata storage, management, validation and consumption in a secure setting.\nNexus Delta is developed in the open with a permissive licence (Apache License, version 2.0) using open standards and interoperable semantic web technologies like OpenID Connect, OAuth 2.0, RDF, JSON-LD, SHACL, Server-Sent Events.\nIt is quite versatile as it is able to handle very small to very large amounts of data on-premise or in the cloud and can be used in a large spectrum of industries being completely domain agnostic.\nPlease refer to the architecture and api reference sections for more information about this component.","title":"Nexus Delta"},{"location":"/docs/delta/architecture.html","text":"","title":"Architecture"},{"location":"/docs/delta/architecture.html#architecture","text":"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.\nThis document focuses on the characteristics of the Nexus Delta and its design choices.","title":"Architecture"},{"location":"/docs/delta/architecture.html#ecosystem","text":"Nexus Delta is a low latency, scalable and secure service that realizes a range of functions to support data management and knowledge graph lifecycles. It uses PostgreSQL as a primary store (source of truth for all the information in the system), Elasticsearch for full text search and Blazegraph for graph based data access.\nChange of primary store in Nexus 1.8 Until 1.8, Cassandra was the preferred primary store for Nexus. Please visit Release Notes for Nexus 1.8 to learn more about the reasons behind this change.\nAn overview of the Blue Brain Nexus ecosystem is presented in the figure below:\nNexus Fusion is a web interface that helps scientists with their day-to-day data-driven activities but also facilitates the system administrative tasks. It uses the Nexus.js (a javascript SDK) that provides as set of primitives for building web applications for Nexus Delta.\nNexus Forge is a domain-agnostic, generic and extensible Python framework that enables non-expert users to create and manage knowledge graphs using the Python programming language.","title":"Ecosystem"},{"location":"/docs/delta/architecture.html#clustering","text":"One of the more important design goals for the system was to be able to scale in order to support arbitrary increases in usage and data volume. Nexus Delta can be configured to run as single node or in a cluster configuration where the load on the system is distributed to all members:\nThe state of the cluster is handled by the primary store The nodes don’t communicate directly with each other but through changes in the primary store The load is distributed in the cluster in a round-robin way\nAdding and removing nodes requires for the moment to:\nStop the cluster Change the cluster configuration by updating the number of nodes and defining the index for each of them Start the cluster\nNew clustering deployment Until 1.8, Nexus was relying on akka-cluster to run in a clustered way. Please visit Release Notes for Nexus 1.8 to learn more about the reasons behind this change.\nPostgreSQL and Elasticsearch were chosen for their reliability, their flexibility and their scalability.\nBlazegraph was initially chosen to handle graph access patterns, but it is currently the only part of the system that cannot be scaled horizontally. We’re currently looking for open source alternatives that offer clustering out of the box or solutions that would coordinate multiple Blazegraph nodes.","title":"Clustering"},{"location":"/docs/delta/architecture.html#anatomy","text":"Nexus Delta was built following the Command Query Responsibility Segregation (CQRS) pattern where there’s a clear separation between the read and write models.\nIntent to change an entity is represented by commands that are validated for access and consistency before being evaluated.\nSuccessful evaluations of commands emit:\nEvents that are persisted to the event log Updated states that are persisted in the state log.\nThe event log is an append-only log where no update or deletion can occur.\nThe state log works differently:\nAppend new entries when a new entity is created or tagged (when this operation is available) Update and push back to the end of the log entities that have been updated\nThe changes on the event and the state logs are performed in the same transaction to make sure that the state log remains consistent.\nPostgreSQL is used as a primary store which represents the source of truth and which is responsible for performing the reads and writes of the logs.\nBoth the event and state log can be queried in different ways that allow among other things to:\nReconstruct the state of a single resource at a given point in time Fetch the latest states of entities of a given type in a chronological order\nAsynchronous processes (projections) rely on the range of queries offered by those logs to process data for multiple purposes. For instance, they allow to transform and then push data from the primary store to other data stores like Elasticsearch or Blazegraph.\nThe projections can persist their progress such that they can be resumed in case of a crash.\nNative interfaces are also offered as part of the read (query) model for querying Elasticsearch and Blazegraph.\nProjections and the separation between reads and writes have some interesting properties:\nThe system is eventually consistent and does not require a healing mechanism for handling synchronization errors The primary store acts as a bulkhead in case of arbitrary data ingestion spikes The primary store and the stores used for indices can be independently sized; indexing speed is allowed to vary based on the performance of each store The system continues to function with partial degradation instead of becoming unavailable if a store suffers downtime","title":"Anatomy"},{"location":"/docs/delta/architecture.html#resource-orientation","text":"Nexus Delta is built following the REpresentational State Transfer (REST) architectural style where its functions are consumed via access and manipulation of resources. All information in the system (system configuration or user data) is represented as resources. The API Reference describes all supported resource types, the addressing scheme and available operations.\nThe subset of events that correspond to single resource represent the resource lifecycle as depicted in the figure below. A resource lifecycle is a series of state transitions, each generating a unique revision.\nUser data is represented as sub-resources to projects which in turn are sub-resources of organizations. Organization and project resources provide logical grouping and isolation allowing for variation in configuration and access control policies.\nResource identification is based on HTTP Internationalized Resource Identifiers (IRIs) and uniqueness is guaranteed within the scope of a project. This allows the system to be used in a multi-tenant configuration but at the same time it implies that project and organization identifiers are part of a resource addressing scheme.\nIn order to avoid limitations in URL lengths and for convenience, resource identifiers can be aliased and compacted (CURIE) using project level configurations.","title":"Resource Orientation"},{"location":"/docs/delta/architecture.html#authentication-and-authorization","text":"The system supports OpenID Connect, OAuth 2.0 and JSON Web Tokens (JWTs) standards and can be configured to use identity providers that support these standards. Proof of identity can be provided by passing a Bearer JWT in the Authorization header of the HTTP requests when consuming the RESTful API.\nNexus Delta can use LDAP as an identity management system through several off-the-shelf products that implement these protocols on top of LDAP, like for example Keycloak.\nThe authorization flow is as follows:\nthe provided JWT is validated against the configured identity providers the subject and group claims are used to generate the set of identities of the caller (when no Bearer JWT is provided, the assumed identity is Anonymous) access to perform the intent is verified by comparing the collection of caller identities with the configured list of ACLs for the target resource(s)","title":"Authentication and Authorization"},{"location":"/docs/delta/api/index.html","text":"","title":"API Reference"},{"location":"/docs/delta/api/index.html#api-reference","text":"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\nThe API provides access and management of several primary resource types.","title":"API Reference"},{"location":"/docs/delta/api/index.html#identities","text":"Identities endpoint can be used to fetch user identities.\nOperations on identities","title":"Identities"},{"location":"/docs/delta/api/index.html#permissions","text":"A permission is the basic unit to provide a way to limit applications’ access to sensitive information.\nOperations on permisions","title":"Permissions"},{"location":"/docs/delta/api/index.html#realms","text":"A realm provides with the necessary information to perform authentication against a certain OIDC provider .\nOperations on realms","title":"Realms"},{"location":"/docs/delta/api/index.html#acls","text":"In order to restrict applications’ access to data by placing restrictions on them, three parameters are important:\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\nAn ACL defines the set of permissions that certain identities have on a concrete path.\nOperations on ACLs","title":"ACLs"},{"location":"/docs/delta/api/index.html#organizations","text":"The top-level grouping resource in the platform, called organization\nOperations on organizations","title":"Organizations"},{"location":"/docs/delta/api/index.html#projects","text":"The 2nd level grouping resources in the platform, called project. Projects provide isolation of ACLs, resource resolution and indices (ElasticSearch index and Blazegraph namespace).\nOperations on projects","title":"Projects"},{"location":"/docs/delta/api/index.html#quotas","text":"Defines the maximum number of resources and events that can exist in a certain scope.\nOperations on quotas","title":"Quotas"},{"location":"/docs/delta/api/index.html#schemas","text":"A schema is a resource which defines a set of rules and constrains using SHACL.\nOperations on schemas","title":"Schemas"},{"location":"/docs/delta/api/index.html#resources","text":"A resource is the most generic entity on the Knowledge Graph. Resources can be schemas, resolvers, views, storages, files or data.\nOperations on resources","title":"Resources"},{"location":"/docs/delta/api/index.html#resolvers","text":"A resolver is a resource which defines the way ids are retrieved inside a project.\nOperations on resolvers","title":"Resolvers"},{"location":"/docs/delta/api/index.html#views","text":"A view is a resource which defines the way indexing is applied to certain resources inside a project.\nOperations on views","title":"Views"},{"location":"/docs/delta/api/index.html#storages","text":"A storage is a resource which represents a backend where files are stored. It describes where and how files are created and retrieve.\nOperations on storages","title":"Storages"},{"location":"/docs/delta/api/index.html#files","text":"A file is a binary attachment resource.\nOperations on files","title":"Files"},{"location":"/docs/delta/api/index.html#archives","text":"An archive is a collection of resources stored inside an archive file. The archiving format chosen for this purpose is tar (or tarball).\nOperations on archives","title":"Archives"},{"location":"/docs/delta/api/index.html#resource-lifecycle","text":"Nexus Delta is build using the event sourcing approach. This strategy captures all changes to an application state as a sequence of events.\nAll resources in the system generally follow the very same lifecycle, as depicted in the diagram below. Every interaction with an API resource (creation, updates, state changes) is recorded into the system as revisions.\nData is never removed from the system, but rather is marked as deprecated. Depending on the type of resource, the deprecation flag may have various semantics:\nOrganizations: the resource itself and sub-resources cannot be updated. Views and resolvers contained within this organization will not be considered during indexing and resolution processes. Projects: the resource itself and sub-resources cannot be updated. Views and resolvers contained within this project will not be considered during indexing and resolution processes. Schemas: the resource itself cannot be updated and new data conformant to it cannot be created Resolvers: the resource itself will not be considered during the resolution process Views: the resource itself will not be considered during the indexing process Storages: no new files can be created against the deprecated storage Files: attachments cannot be added/deleted Data: the resource itself cannot be updated\nArchives resources are an exception. Those resources are ephemeral. They will be automatically removed from the system after certain time. This time is configurable (config property app.archives.cache-invalidate-after) and it defaults to 5 hours.\nFuture policies may use this flag to determine if or when the deprecated data may be archived.","title":"Resource Lifecycle"},{"location":"/docs/delta/api/content-negotiation.html","text":"","title":"Content Negotiation"},{"location":"/docs/delta/api/content-negotiation.html#content-negotiation","text":"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.\nExample\ncurl -H \"Accept: application/json\" \"http://localhost:8080/v1/version\"","title":"Content Negotiation"},{"location":"/docs/delta/api/content-negotiation.html#supported-mime-types","text":"Most of the Nexus Delta resources (except for querying the different indices and fetching files) support the following MIME types on the Accept Header:\napplication/ld+json: JSON-LD output response. Further specifying the query parameter format=compacted|expanded will provide with the JSON-LD compacted document form or the expanded document form. application/n-triples: RDF n-triples response, as defined by the w3. application/n-quads: RDF n-quads response, as defined by the w3. text/vnd.graphviz: A DOT response.\nIf Accept: */* HTTP header is present, Nexus defaults to the JSON-LD output in compacted form.","title":"Supported MIME types"},{"location":"/docs/delta/api/error-signaling.html","text":"","title":"Error Signaling"},{"location":"/docs/delta/api/error-signaling.html#error-signaling","text":"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.\nFormat copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/error.json\",\n \"@type\": \"<a machine readable unique identifier>\",\n \"reason\": \"<a human readable description of the error>\"\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 Cassandra).\nExample copysource{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/version.json\",\n \"delta\": \"1.5.0\",\n \"dependencies\": {\n \"blazegraph\": \"2.1.6-RC\",\n \"postgresql\": \"15.3\",\n \"elasticsearch\": \"8.7.1\",\n \"remoteStorage\": \"1.8.0\"\n },\n \"plugins\": {\n \"archive\": \"1.8.0\",\n \"blazegraph\": \"1.8.0\",\n \"composite-views\": \"1.8.0\",\n \"elasticsearch\": \"1.8.0\",\n \"storage\": \"1.8.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 archives archives/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 \"archives/write\",\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 \"archives/write\",\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/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#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#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}","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}","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}","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.\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.\nNote From Delta v1.5, 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 the new version.","title":"Resources"},{"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}\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/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}\n {...}\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":"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/resources/{org_label}/{project_label}/{schema_id}/{resource_id}?rev={previous_rev}\n {...}\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/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":"This 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#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/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#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.\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-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 &createdBy={createdBy}\n &createdAt={createdAt}\n &updatedBy={updatedBy}\n &updatedAt={updatedAt}\n &schema={schema}\n &q={search}\n &sort={sort}","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 &createdBy={createdBy}\n &createdAt={createdAt}\n &updatedBy={updatedBy}\n &updatedAt={updatedAt}\n &schema={schema}\n &q={search}\n &sort={sort}","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 &createdBy={createdBy}\n &updatedBy={updatedBy}\n &schema={schema}\n &q={search}\n &sort={sort}","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. {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.\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}","title":"Parameter description"},{"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}","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\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/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}","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}","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}","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.\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#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#passivation","text":"Views are now stopped if no event has been detected for a given period (by default 30 minutes).\nThis value can be updated by updating the configuration keys: - plugins.blazegraph.idle-timeout - plugins.composite-views.idle-timeout - plugins.elasticsearch.idle-timeout\nSetting an infinite time (Inf) will disable this feature.","title":"Passivation"},{"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}","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}","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}","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.\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#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/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/index.html#fetch-indexing-failures","text":"This endpoint fetches the available indexing failures as SSEs. 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\nExample\nRequest copysourcecurl \"http://localhost:8080/v1/views/myorg/myproj/myview/failures\" 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"},{"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-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 \"resourceTag\": \"{tag}\",\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. {tag}: String - Selects only resources with the provided tag 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 \"resourceTag\": \"{tag}\",\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. {tag}: String - Selects only resources with the provided tag 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#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: <http://music.com/> 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: <http://www.w3.org/2001/XMLSchema#> prefix music: <http://music.com/> prefix nxv: <https://bluebrain.github.io/nexus/vocabulary/> 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: <http://music.com/> 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: <http://www.w3.org/2001/XMLSchema#> prefix music: <http://music.com/> prefix nxv: <https://bluebrain.github.io/nexus/vocabulary/> 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: <http://music.com/> 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: <http://www.w3.org/2001/XMLSchema#> prefix music: <http://music.com/> prefix nxv: <https://bluebrain.github.io/nexus/vocabulary/> 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: <http://music.com/> 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: <http://www.w3.org/2001/XMLSchema#> prefix music: <http://music.com/> prefix nxv: <https://bluebrain.github.io/nexus/vocabulary/> 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: <http://music.com/> 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: <http://www.w3.org/2001/XMLSchema#> prefix music: <http://music.com/> prefix nxv: <https://bluebrain.github.io/nexus/vocabulary/> 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: <http://music.com/> 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: <http://www.w3.org/2001/XMLSchema#> prefix music: <http://music.com/> prefix nxv: <https://bluebrain.github.io/nexus/vocabulary/> 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: <http://music.com/> 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: <http://www.w3.org/2001/XMLSchema#> prefix music: <http://music.com/> prefix nxv: <https://bluebrain.github.io/nexus/vocabulary/> 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: <http://music.com/> 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: <http://www.w3.org/2001/XMLSchema#> prefix music: <http://music.com/> prefix nxv: <https://bluebrain.github.io/nexus/vocabulary/> 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: <http://music.com/> 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: <http://www.w3.org/2001/XMLSchema#> prefix music: <http://music.com/> prefix nxv: <https://bluebrain.github.io/nexus/vocabulary/> 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: <http://music.com/>\nCONSTRUCT {\n ?s ?p ?o\n} WHERE {\n ?s ?p ?o FILTER(?s = music:absolution)\n}' Response copysource<http://music.com/absolution> <http://music.com/name> \"Absolution\" .\n<http://music.com/absolution> <http://music.com/numberOfSongs> \"2\"^^<http://www.w3.org/2001/XMLSchema#integer> .\n<http://music.com/absolution> <http://music.com/length> \"488\"^^<http://www.w3.org/2001/XMLSchema#integer> .","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: <http://music.com/>\nCONSTRUCT {\n ?s ?p ?o\n} WHERE {\n ?s ?p ?o FILTER(?s = music:absolution)\n}' Response copysource<http://music.com/absolution> <https://bluebrain.github.io/nexus/vocabulary/self> <http://localhost:8080/v1/resources/myorg/albums/_/absolution> .\n<http://music.com/absolution> <https://bluebrain.github.io/nexus/vocabulary/updatedAt> \"2021-05-17T14:36:44.992Z\"^^<http://www.w3.org/2001/XMLSchema#dateTime> .\n<http://music.com/absolution> <http://music.com/label> \"Warner Bros.\" .\n<http://music.com/absolution> <https://bluebrain.github.io/nexus/vocabulary/schemaProject> <http://localhost:8080/v1/projects/myorg/albums> .\n<http://music.com/absolution> <http://music.com/released> \"2003-09-15\" .\n<http://music.com/absolution> <https://bluebrain.github.io/nexus/vocabulary/deprecated> \"false\"^^<http://www.w3.org/2001/XMLSchema#boolean> .\n<http://music.com/absolution> <http://music.com/label> \"Taste\" .\n<http://music.com/absolution> <http://music.com/title> \"Absolution\" .\n<http://music.com/absolution> <http://music.com/label> \"East West\" .\n<http://music.com/absolution> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://music.com/Album> .\n<http://music.com/absolution> <https://bluebrain.github.io/nexus/vocabulary/updatedBy> <http://localhost:8080/v1/anonymous> .\n<http://music.com/absolution> <http://music.com/by> <http://music.com/muse> .\n<http://music.com/absolution> <https://bluebrain.github.io/nexus/vocabulary/project> <http://localhost:8080/v1/projects/myorg/albums> .\n<http://music.com/absolution> <https://bluebrain.github.io/nexus/vocabulary/createdAt> \"2021-05-17T14:36:44.992Z\"^^<http://www.w3.org/2001/XMLSchema#dateTime> .\n<http://music.com/absolution> <https://bluebrain.github.io/nexus/vocabulary/constrainedBy> <https://bluebrain.github.io/nexus/schemas/unconstrained.json> .\n<http://music.com/absolution> <https://bluebrain.github.io/nexus/vocabulary/createdBy> <http://localhost:8080/v1/anonymous> .\n<http://music.com/absolution> <https://bluebrain.github.io/nexus/vocabulary/outgoing> <http://localhost:8080/v1/resources/myorg/albums/_/absolution/outgoing> .\n<http://music.com/absolution> <https://bluebrain.github.io/nexus/vocabulary/rev> \"1\"^^<http://www.w3.org/2001/XMLSchema#integer> .\n<http://music.com/absolution> <https://bluebrain.github.io/nexus/vocabulary/incoming> <http://localhost:8080/v1/resources/myorg/albums/_/absolution/incoming> .","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/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.\n{\n \"@type\": \"RemoteDiskStorage\",\n \"default\": \"{default}\",\n \"endpoint\": \"{endpoint}\",\n \"credentials\": \"{credentials}\",\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. {credentials}: String - the service account access token to authenticate and authorize Nexus Delta client against the storage service. This field is optional, defaulting to the configuration flag plugins.storage.storages.remote-disk.default-credentials. {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 \"accessKey\": \"{access_key}\",\n \"secretKey\": \"{secret_key}\",\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. {access_key}: String - the Amazon S3 compatible access key. This field is optional, defaulting to the configuration flag plugins.storage.storages.amazon.default-access-key. {secret_key}: String - the Amazon S3 compatible secret key. This field is optional, defaulting to the configuration flag plugins.storage.storages.amazon.default-secret-key. {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}","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}","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}","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.\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#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}\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.\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}\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.\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\" 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}\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. {filenane}: 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\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}\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. {filenane}: 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.\nExample\nRequest copysourcecurl -X PUT \\\n -H \"Content-Type: application/json\" \\\n \"http://localhost:8080/v1/files/myorg/myproject/mylink?storage=remote\" -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}?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#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}","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}","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}","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.\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 tar (or tarball). 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 When modifying archives, the caller must have archives/write permissions on the current path of the project or the ancestor paths. When reading 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 ]\n}\nwhere…\n{resource_id}: Iri - the @id value of the resource to be added to the archive. {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), 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","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 (tarball).\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 tarball 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:\n*/* or application/x-tar will return a tar archive (or tarball) application/zip will return a zip archive\nNote The limitations of the tar format makes the usage of archives difficult (among other things, the maximum file name is limited to 100 characters), so its support will be removed in a future release.\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 (tarball) copysourcecurl \"http://localhost:8080/v1/archives/myorg/myproject/myarchive\" \\\n -H \"Accept: application/x-tar\" \\\n -o output.tar 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#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}\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.","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/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 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\nimport monix.bio.Task\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): Task[Plugin] = Task.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?"}]}