diff --git a/paradox.json b/paradox.json index 7d1623fce0..615bc7c75a 100644 --- a/paradox.json +++ b/paradox.json @@ -1,4 +1,4 @@ { "name" : "docs", - "version" : "0.0.0+1-eca76925+20240213-0846-SNAPSHOT" + "version" : "0.0.0+1-eca76925+20240227-1656-SNAPSHOT" } \ No newline at end of file diff --git a/snapshot/contexts/files.json b/snapshot/contexts/files.json index c97b6d02cc..1146b67c00 100644 --- a/snapshot/contexts/files.json +++ b/snapshot/contexts/files.json @@ -22,6 +22,8 @@ "_keywords": "https://bluebrain.github.io/nexus/vocabulary/keywords", "_location": "https://bluebrain.github.io/nexus/vocabulary/location", "_filename": "https://bluebrain.github.io/nexus/vocabulary/filename", + "description": "http://schema.org/description", + "name": "http://schema.org/name", "_mediaType": "https://bluebrain.github.io/nexus/vocabulary/mediaType", "_uuid": "https://bluebrain.github.io/nexus/vocabulary/uuid", "_storage": { diff --git a/snapshot/contexts/type-hierarchy.json b/snapshot/contexts/type-hierarchy.json new file mode 100644 index 0000000000..d76303cf18 --- /dev/null +++ b/snapshot/contexts/type-hierarchy.json @@ -0,0 +1,7 @@ +{ + "@context": { + "@vocab": "https://bluebrain.github.io/nexus/vocabulary/", + "mapping": "https://bluebrain.github.io/nexus/vocabulary/mapping" + }, + "@id": "https://bluebrain.github.io/nexus/contexts/type-hierarchy.json" +} \ No newline at end of file diff --git a/snapshot/docs/delta/api/acls-api.html b/snapshot/docs/delta/api/acls-api.html index 2593365731..157dfb1b8b 100644 --- a/snapshot/docs/delta/api/acls-api.html +++ b/snapshot/docs/delta/api/acls-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/archives-api.html b/snapshot/docs/delta/api/archives-api.html index 5946905136..bb82145c6b 100644 --- a/snapshot/docs/delta/api/archives-api.html +++ b/snapshot/docs/delta/api/archives-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/assets/files/create-post.sh b/snapshot/docs/delta/api/assets/files/create-post.sh index 6231d071b8..2f30691272 100644 --- a/snapshot/docs/delta/api/assets/files/create-post.sh +++ b/snapshot/docs/delta/api/assets/files/create-post.sh @@ -1,3 +1,4 @@ curl -X POST \ -F "file=@/path/to/myfile.jpg;type=image/jpeg" \ + -F 'metadata="{\"name\": \"My File\"}"' \ "http://localhost:8080/v1/files/myorg/myproject" \ No newline at end of file diff --git a/snapshot/docs/delta/api/assets/files/create-put.sh b/snapshot/docs/delta/api/assets/files/create-put.sh index e608dcaeb0..c175959547 100644 --- a/snapshot/docs/delta/api/assets/files/create-put.sh +++ b/snapshot/docs/delta/api/assets/files/create-put.sh @@ -1,3 +1,4 @@ curl -X PUT \ -F "file=@/path/to/myfile.pdf;type=application/pdf" \ + -F 'metadata="{\"name\": \"My File\"}"' \ "http://localhost:8080/v1/files/myorg/myproject/myfile?storage=remote&tag=mytag" \ No newline at end of file diff --git a/snapshot/docs/delta/api/assets/files/created-post.json b/snapshot/docs/delta/api/assets/files/created-post.json index 0a9246258f..ea55f61708 100644 --- a/snapshot/docs/delta/api/assets/files/created-post.json +++ b/snapshot/docs/delta/api/assets/files/created-post.json @@ -5,6 +5,7 @@ ], "@id": "http://localhost:8080/v1/resources/myorg/myproject/_/c581fdd4-6151-4430-aa33-f97ab6aa0b38", "@type": "File", + "name": "My File", "_bytes": 8615, "_constrainedBy": "https://bluebrain.github.io/nexus/schemas/files.json", "_createdAt": "2021-05-12T07:28:30.472Z", diff --git a/snapshot/docs/delta/api/assets/files/created-put.json b/snapshot/docs/delta/api/assets/files/created-put.json index 515cc415f4..888127df3b 100644 --- a/snapshot/docs/delta/api/assets/files/created-put.json +++ b/snapshot/docs/delta/api/assets/files/created-put.json @@ -5,6 +5,7 @@ ], "@id": "http://localhost:8080/v1/resources/myorg/myproject/_/myfile", "@type": "File", + "name": "My File", "_bytes": 5963969, "_constrainedBy": "https://bluebrain.github.io/nexus/schemas/files.json", "_createdAt": "2021-05-12T07:30:54.576Z", diff --git a/snapshot/docs/delta/api/assets/files/link-post.json b/snapshot/docs/delta/api/assets/files/link-post.json index 446409ecd5..194a0dbbdc 100644 --- a/snapshot/docs/delta/api/assets/files/link-post.json +++ b/snapshot/docs/delta/api/assets/files/link-post.json @@ -1,5 +1,13 @@ { "path": "relative/path/to/myfile.png", "filename": "myfile.png", - "mediaType": "image/png" + "mediaType": "image/png", + "metadata": { + "name": "My File", + "description": "a description of the file", + "keywords": { + "key1": "value1", + "key2": "value2" + } + } } \ No newline at end of file diff --git a/snapshot/docs/delta/api/assets/files/link-post.sh b/snapshot/docs/delta/api/assets/files/link-post.sh index 1e4e51d762..4d3d7dc4f3 100644 --- a/snapshot/docs/delta/api/assets/files/link-post.sh +++ b/snapshot/docs/delta/api/assets/files/link-post.sh @@ -4,5 +4,13 @@ curl -X POST \ '{ "path": "relative/path/to/myfile.png", "filename": "myfile.png", - "mediaType": "image/png" + "mediaType": "image/png", + "metadata": { + "name": "My File", + "description": "a description of the file", + "keywords": { + "key1": "value1", + "key2": "value2" + } + } }' \ No newline at end of file diff --git a/snapshot/docs/delta/api/assets/files/link-put.json b/snapshot/docs/delta/api/assets/files/link-put.json index 1ab60517e2..73e0e5235f 100644 --- a/snapshot/docs/delta/api/assets/files/link-put.json +++ b/snapshot/docs/delta/api/assets/files/link-put.json @@ -1,3 +1,11 @@ { - "path": "relative/path/to/myfile2.png" + "path": "relative/path/to/myfile2.png", + "metadata": { + "name": "My File", + "description": "a description of the file", + "keywords": { + "key1": "value1", + "key2": "value2" + } + } } \ No newline at end of file diff --git a/snapshot/docs/delta/api/assets/files/link-put.sh b/snapshot/docs/delta/api/assets/files/link-put.sh index ca815cc4e8..4ba756ce25 100644 --- a/snapshot/docs/delta/api/assets/files/link-put.sh +++ b/snapshot/docs/delta/api/assets/files/link-put.sh @@ -2,5 +2,13 @@ curl -X PUT \ -H "Content-Type: application/json" \ "http://localhost:8080/v1/files/myorg/myproject/mylink?storage=remote&tag=mytag" -d \ '{ - "path": "relative/path/to/myfile2.png" + "path": "relative/path/to/myfile2.png", + "metadata": { + "name": "My File", + "description": "a description of the file", + "keywords": { + "key1": "value1", + "key2": "value2" + } + } }' \ No newline at end of file diff --git a/snapshot/docs/delta/api/assets/files/linked-post.json b/snapshot/docs/delta/api/assets/files/linked-post.json index 73a2252ae8..2f74efcad9 100644 --- a/snapshot/docs/delta/api/assets/files/linked-post.json +++ b/snapshot/docs/delta/api/assets/files/linked-post.json @@ -5,6 +5,8 @@ ], "@id": "http://localhost:8080/v1/resources/myorg/myproject/_/9ca0d270-35f0-4369-9c17-296fe36fd9a5", "@type": "File", + "name": "My File", + "description": "a description of the file", "_bytes": 1658857, "_constrainedBy": "https://bluebrain.github.io/nexus/schemas/files.json", "_createdAt": "2021-05-12T07:56:42.991Z", @@ -15,6 +17,10 @@ }, "_filename": "myfile.png", "_incoming": "http://localhost:8080/v1/files/myorg/myproject/9ca0d270-35f0-4369-9c17-296fe36fd9a5/incoming", + "_keywords": { + "key1": "value1", + "key2": "value2" + }, "_location": "file:///tmp/test/nexus/myorg/myproject/3/4/c/4/9/1/a/1/myfile.png", "_mediaType": "image/png", "_origin": "Storage", diff --git a/snapshot/docs/delta/api/assets/files/linked-put.json b/snapshot/docs/delta/api/assets/files/linked-put.json index 741aa635c5..6c4364e3b7 100644 --- a/snapshot/docs/delta/api/assets/files/linked-put.json +++ b/snapshot/docs/delta/api/assets/files/linked-put.json @@ -5,6 +5,8 @@ ], "@id": "http://localhost:8080/v1/resources/myorg/myproject/_/mylink", "@type": "File", + "name": "My File", + "description": "description of the file", "_bytes": 1658857, "_constrainedBy": "https://bluebrain.github.io/nexus/schemas/files.json", "_createdAt": "2021-05-12T08:00:34.563Z", @@ -15,6 +17,10 @@ }, "_filename": "myfile2.png", "_incoming": "http://localhost:8080/v1/files/myorg/myproject/mylink/incoming", + "_keywords": { + "key1": "value1", + "key2": "value2" + }, "_location": "file:///tmp/test/nexus/myorg/myproject/6/6/0/4/9/9/d/9/myfile2.png", "_origin": "Storage", "_outgoing": "http://localhost:8080/v1/files/myorg/myproject/mylink/outgoing", diff --git a/snapshot/docs/delta/api/assets/type-hierarchy/create.sh b/snapshot/docs/delta/api/assets/type-hierarchy/create.sh new file mode 100644 index 0000000000..ef0455fb94 --- /dev/null +++ b/snapshot/docs/delta/api/assets/type-hierarchy/create.sh @@ -0,0 +1,13 @@ +curl -X POST \ + -H "Content-Type: application/json" \ + "http://localhost:8080/v1/type-hierarchy" \ + -d \ +'{ + "mapping": { + "https://schema.org/VideoGame": [ + "https://schema.org/SoftwareApplication", + "https://schema.org/CreativeWork", + "https://schema.org/Thing" + ] + } +}' \ No newline at end of file diff --git a/snapshot/docs/delta/api/assets/type-hierarchy/created.json b/snapshot/docs/delta/api/assets/type-hierarchy/created.json new file mode 100644 index 0000000000..b6d2be0c4f --- /dev/null +++ b/snapshot/docs/delta/api/assets/type-hierarchy/created.json @@ -0,0 +1,23 @@ +{ + "@context": [ + "https://bluebrain.github.io/nexus/contexts/type-hierarchy.json", + "https://bluebrain.github.io/nexus/contexts/metadata.json" + ], + "@id": "https://bluebrain.github.io/nexus/vocabulary/TypeHierarchy", + "@type": "TypeHierarchy", + "mapping": { + "https://schema.org/VideoGame": [ + "https://schema.org/SoftwareApplication", + "https://schema.org/CreativeWork", + "https://schema.org/Thing" + ] + }, + "_constrainedBy": "https://bluebrain.github.io/nexus/schemas/type-hierarchy.json", + "_createdAt": "1970-01-01T00:00:00Z", + "_createdBy": "http://localhost/v1/realms/qyjcmbqlkavvsbbo/users/jane-doe", + "_deprecated": false, + "_rev": 1, + "_self": "http://localhost/v1/type-hierarchy", + "_updatedAt": "1970-01-01T00:00:00Z", + "_updatedBy": "http://localhost/v1/realms/qyjcmbqlkavvsbbo/users/jane-doe" +} \ No newline at end of file diff --git a/snapshot/docs/delta/api/assets/type-hierarchy/fetch.sh b/snapshot/docs/delta/api/assets/type-hierarchy/fetch.sh new file mode 100644 index 0000000000..cd93b72c5a --- /dev/null +++ b/snapshot/docs/delta/api/assets/type-hierarchy/fetch.sh @@ -0,0 +1 @@ +curl "http://localhost:8080/v1/type-hierarchy \ No newline at end of file diff --git a/snapshot/docs/delta/api/assets/type-hierarchy/fetched.json b/snapshot/docs/delta/api/assets/type-hierarchy/fetched.json new file mode 100644 index 0000000000..7bf152b099 --- /dev/null +++ b/snapshot/docs/delta/api/assets/type-hierarchy/fetched.json @@ -0,0 +1,23 @@ +{ + "@context" : [ + "https://bluebrain.github.io/nexus/contexts/type-hierarchy.json", + "https://bluebrain.github.io/nexus/contexts/metadata.json" + ], + "@id" : "https://bluebrain.github.io/nexus/vocabulary/TypeHierarchy", + "@type" : "TypeHierarchy", + "mapping" : { + "https://schema.org/VideoGame" : [ + "https://schema.org/SoftwareApplication", + "https://schema.org/CreativeWork", + "https://schema.org/Thing" + ] + }, + "_constrainedBy" : "https://bluebrain.github.io/nexus/schemas/type-hierarchy.json", + "_createdAt" : "1970-01-01T00:00:00Z", + "_createdBy" : "http://localhost/v1/realms/sanwxierjnyajvxn/users/jane-doe", + "_deprecated" : false, + "_rev" : 1, + "_self" : "http://localhost/v1/type-hierarchy", + "_updatedAt" : "1970-01-01T00:00:00Z", + "_updatedBy" : "http://localhost/v1/realms/sanwxierjnyajvxn/users/jane-doe" +} \ No newline at end of file diff --git a/snapshot/docs/delta/api/assets/type-hierarchy/payload.json b/snapshot/docs/delta/api/assets/type-hierarchy/payload.json new file mode 100644 index 0000000000..fc4331bbc8 --- /dev/null +++ b/snapshot/docs/delta/api/assets/type-hierarchy/payload.json @@ -0,0 +1,9 @@ +{ + "mapping": { + "https://schema.org/VideoGame": [ + "https://schema.org/SoftwareApplication", + "https://schema.org/CreativeWork", + "https://schema.org/Thing" + ] + } +} \ No newline at end of file diff --git a/snapshot/docs/delta/api/assets/type-hierarchy/update.sh b/snapshot/docs/delta/api/assets/type-hierarchy/update.sh new file mode 100644 index 0000000000..81ed2a27cd --- /dev/null +++ b/snapshot/docs/delta/api/assets/type-hierarchy/update.sh @@ -0,0 +1,13 @@ +curl -X PUT \ + -H "Content-Type: application/json" \ + "http://localhost:8080/v1/type-hierarchy?rev=1" \ + -d \ +'{ + "mapping": { + "https://schema.org/VideoGame": [ + "https://schema.org/SoftwareApplication", + "https://schema.org/CreativeWork", + "https://schema.org/Thing" + ] + } +}' \ No newline at end of file diff --git a/snapshot/docs/delta/api/assets/type-hierarchy/updated.json b/snapshot/docs/delta/api/assets/type-hierarchy/updated.json new file mode 100644 index 0000000000..6376e18a77 --- /dev/null +++ b/snapshot/docs/delta/api/assets/type-hierarchy/updated.json @@ -0,0 +1,24 @@ +{ + "@context": [ + "https://bluebrain.github.io/nexus/contexts/type-hierarchy.json", + "https://bluebrain.github.io/nexus/contexts/metadata.json" + ], + "@id": "https://bluebrain.github.io/nexus/vocabulary/TypeHierarchy", + "@type": "TypeHierarchy", + "mapping": { + "https://schema.org/VideoGame": [ + "https://schema.org/SoftwareApplication", + "https://schema.org/CreativeWork", + "https://schema.org/Thing" + ] + }, + "_constrainedBy": "https://bluebrain.github.io/nexus/schemas/type-hierarchy.json", + "_createdAt": "1970-01-01T00:00:00Z", + "_createdBy": "http://localhost/v1/realms/knntwmnuxprsqrio/users/jane-doe", + "_deprecated": false, + "_rev": 2, + "_self": "http://localhost/v1/type-hierarchy", + "_updatedAt": "1970-01-01T00:00:00Z", + "_updatedBy": "http://localhost/v1/realms/knntwmnuxprsqrio/users/jane-doe" +} + diff --git a/snapshot/docs/delta/api/assets/version.json b/snapshot/docs/delta/api/assets/version.json index 839bc1fae0..d835c77cf9 100644 --- a/snapshot/docs/delta/api/assets/version.json +++ b/snapshot/docs/delta/api/assets/version.json @@ -1,17 +1,17 @@ { "@context": "https://bluebrain.github.io/nexus/contexts/version.json", - "delta": "1.9.0", + "delta": "1.10.0", "dependencies": { "blazegraph": "2.1.6-RC", - "postgresql": "15.5", - "elasticsearch": "8.11.1", + "postgresql": "15.6", + "elasticsearch": "8.12.1", "remoteStorage": "1.9.0" }, "plugins": { - "archive": "1.9.0", - "blazegraph": "1.9.0", - "composite-views": "1.9.0", - "elasticsearch": "1.9.0", - "storage": "1.9.0" + "archive": "1.10.0", + "blazegraph": "1.10.0", + "composite-views": "1.10.0", + "elasticsearch": "1.10.0", + "storage": "1.10.0" } } \ No newline at end of file diff --git a/snapshot/docs/delta/api/authentication.html b/snapshot/docs/delta/api/authentication.html index 7cc46e544c..434dc3c699 100644 --- a/snapshot/docs/delta/api/authentication.html +++ b/snapshot/docs/delta/api/authentication.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/content-negotiation.html b/snapshot/docs/delta/api/content-negotiation.html index 3efe7103d4..42b926c34c 100644 --- a/snapshot/docs/delta/api/content-negotiation.html +++ b/snapshot/docs/delta/api/content-negotiation.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/error-signaling.html b/snapshot/docs/delta/api/error-signaling.html index db55395daa..0ccecd7753 100644 --- a/snapshot/docs/delta/api/error-signaling.html +++ b/snapshot/docs/delta/api/error-signaling.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/files-api.html b/snapshot/docs/delta/api/files-api.html index ba3921db66..7d6aeff6e2 100644 --- a/snapshot/docs/delta/api/files-api.html +++ b/snapshot/docs/delta/api/files-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • @@ -334,6 +335,7 @@

    MIME specifying the type of the file
  • _origin: whether the file attributes resulted from an action taken by a client or the Nexus Storage Service
  • @@ -353,17 +355,16 @@

    POST /v1/files/{org_label}/{project_label}?storage={storageId}&tag={tagName}

    … where - {storageId} selects a specific storage backend where the file will be uploaded. This field is optional. When not specified, the default storage of the project is used. - {tagName} an optional label given to the file on its first revision.

    -

    The json payload:

    -
      -
    • If 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}).
    • -
    +

    The request body:

    +

    The body should be a multipart form, to allow file upload. The form should contain one part named file. This part can be given a content-type header, which will be used if specified. If not specified, the content-type will be inferred from the file’s extension.

    +

    This part can contain the following disposition parameters: - filename: the filename which will be used in the back-end file system - metadata: a JSON object containing the following one or more of the following fields: - name: a string which is a descriptive name for the file. It will be indexed in the full-text search. - description: a string that describes the file. It will be indexed in the full-text search. - keywords: a JSON object with Label keys and string values. These keywords will be indexed and can be used to search for the file.

    Example

    Request
    sourcecurl -X POST \
          -F "file=@/path/to/myfile.jpg;type=image/jpeg" \
    +     -F 'metadata="{\"name\": \"My File\"}"' \
          "http://localhost:8080/v1/files/myorg/myproject"
    Response
    @@ -374,6 +375,7 @@

    PUT /v1/files/{org_label}/{project_label}/{file_id}?storage={storageId}&tag={tagName}

    … where - {storageId} selects a specific storage backend where the file will be uploaded. This field is optional. When not specified, the default storage of the project is used. - {tagName} an optional label given to the file on its first revision.

    -

    Note that if the payload contains an @id different from the {file_id}, the request will fail.

    +

    The body should be a multipart form, to allow file upload. The form should contain one part named file. This part can be given a content-type header, which will be used if specified. If not specified, the content-type will be inferred from the file’s extension.

    +

    This part can contain the following disposition parameters: - filename: the filename which will be used in the back-end file system - metadata: a JSON object containing one or more of the following fields: - name: a string which is a descriptive name for the file. It will be indexed in the full-text search. - description: a string that describes the file. It will be indexed in the full-text search. - keywords: a JSON object with Label keys and string values. These keywords will be indexed and can be used to search for the file.

    Example

    Request
    sourcecurl -X PUT \
          -F "file=@/path/to/myfile.pdf;type=application/pdf" \
    +     -F 'metadata="{\"name\": \"My File\"}"' \
          "http://localhost:8080/v1/files/myorg/myproject/myfile?storage=remote&tag=mytag"
    Response
    @@ -423,6 +427,7 @@

    Example

    @@ -477,14 +487,30 @@

    Payload
    source{
       "path": "relative/path/to/myfile.png",
       "filename": "myfile.png",
    -  "mediaType": "image/png"
    +  "mediaType": "image/png",
    +  "metadata": {
    +    "name": "My File",
    +    "description": "a description of the file",
    +    "keywords": {
    +      "key1": "value1",
    +      "key2": "value2"
    +    }
    +  }
     }
    Response
    @@ -495,6 +521,8 @@

    source{ - "path": "relative/path/to/myfile2.png" + "path": "relative/path/to/myfile2.png", + "metadata": { + "name": "My File", + "description": "a description of the file", + "keywords": { + "key1": "value1", + "key2": "value2" + } + } }

    Response
    @@ -564,6 +617,8 @@

    Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/id-resolution.html b/snapshot/docs/delta/api/id-resolution.html index 3459ef3a52..14cd6fc037 100644 --- a/snapshot/docs/delta/api/id-resolution.html +++ b/snapshot/docs/delta/api/id-resolution.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/identities.html b/snapshot/docs/delta/api/identities.html index 03aa281e4a..cbb58f2c50 100644 --- a/snapshot/docs/delta/api/identities.html +++ b/snapshot/docs/delta/api/identities.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/index.html b/snapshot/docs/delta/api/index.html index 7c2ddd160e..439a69b23a 100644 --- a/snapshot/docs/delta/api/index.html +++ b/snapshot/docs/delta/api/index.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/jira.html b/snapshot/docs/delta/api/jira.html index 356243f126..a4acecc334 100644 --- a/snapshot/docs/delta/api/jira.html +++ b/snapshot/docs/delta/api/jira.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/multi-fetch.html b/snapshot/docs/delta/api/multi-fetch.html index dbc2eaea37..2434415e56 100644 --- a/snapshot/docs/delta/api/multi-fetch.html +++ b/snapshot/docs/delta/api/multi-fetch.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/orgs-api.html b/snapshot/docs/delta/api/orgs-api.html index b1396910ec..dfa63c9b43 100644 --- a/snapshot/docs/delta/api/orgs-api.html +++ b/snapshot/docs/delta/api/orgs-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/permissions-api.html b/snapshot/docs/delta/api/permissions-api.html index f8e0be8f6d..be86441b39 100644 --- a/snapshot/docs/delta/api/permissions-api.html +++ b/snapshot/docs/delta/api/permissions-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/projects-api.html b/snapshot/docs/delta/api/projects-api.html index d3f0375ceb..f8147027d0 100644 --- a/snapshot/docs/delta/api/projects-api.html +++ b/snapshot/docs/delta/api/projects-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/quotas.html b/snapshot/docs/delta/api/quotas.html index 0f1ae61082..90efb33361 100644 --- a/snapshot/docs/delta/api/quotas.html +++ b/snapshot/docs/delta/api/quotas.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/realms-api.html b/snapshot/docs/delta/api/realms-api.html index e134528e4b..122083484f 100644 --- a/snapshot/docs/delta/api/realms-api.html +++ b/snapshot/docs/delta/api/realms-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/resolvers-api.html b/snapshot/docs/delta/api/resolvers-api.html index 60ba9e53f5..e596f1a4cd 100644 --- a/snapshot/docs/delta/api/resolvers-api.html +++ b/snapshot/docs/delta/api/resolvers-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • @@ -911,10 +912,11 @@

    Fetch original resource payload using resolvers

    Fetches the original source payload of a resource using the provided resolver.

    If 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.

    -
    GET /v1/resolvers/{org_label}/{project_label}/{resolver_id}/{resource_id}/source?rev={rev}&tag={tag}
    +
    GET /v1/resolvers/{org_label}/{project_label}/{resolver_id}/{resource_id}/source?rev={rev}&tag={tag}&annotate={annotate}
     
    -

    where … - {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.

    +

    where … - {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. - {annotate}: Boolean - annotate the response with the resource metadata. This field only applies to standard resources. This field is optional.

    {rev} and {tag} fields cannot be simultaneously present.

    +

    If {annotate} is set, the metadata is injected alongside with the original payload where the ones from the original payload take precedence. The context in the original payload is also amended with the metadata context.

    Example

    Request
    diff --git a/snapshot/docs/delta/api/resources-api.html b/snapshot/docs/delta/api/resources-api.html index 414376dafb..2cb95d2f80 100644 --- a/snapshot/docs/delta/api/resources-api.html +++ b/snapshot/docs/delta/api/resources-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • @@ -841,7 +842,7 @@

  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/search-api.html b/snapshot/docs/delta/api/search-api.html index b9af1cf173..240ed4c6cd 100644 --- a/snapshot/docs/delta/api/search-api.html +++ b/snapshot/docs/delta/api/search-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/storages-api.html b/snapshot/docs/delta/api/storages-api.html index 15a1c46780..d3795e598a 100644 --- a/snapshot/docs/delta/api/storages-api.html +++ b/snapshot/docs/delta/api/storages-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/supervision-api.html b/snapshot/docs/delta/api/supervision-api.html index 041184a348..a575f0c45b 100644 --- a/snapshot/docs/delta/api/supervision-api.html +++ b/snapshot/docs/delta/api/supervision-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • @@ -415,13 +416,13 @@

    -
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/type-hierarchy-api.html b/snapshot/docs/delta/api/type-hierarchy-api.html new file mode 100644 index 0000000000..f5e6a47be4 --- /dev/null +++ b/snapshot/docs/delta/api/type-hierarchy-api.html @@ -0,0 +1,526 @@ + + + + + + + + + + + + + + + + + + + + + + +Type hierarchy · Blue Brain Nexus + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    +
    + +
      +
    • + +
    • +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    Snapshot version
    +

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

    +
    +
    +

    Type hierarchy

    +

    The type hierarchy is a singleton entity that defines a mapping between concrete types and their abstract types.

    Authorization notes
    +

    When modifying the type hierarchy, the caller must have resources/read permission at root level.

    +

    Please visit Authentication & authorization section to learn more about it.

    +

    Create using POST

    +
    POST /v1/type-hierarchy
    +  {...}
    +
    +

    Example

    +
    +
    Request
    +
    +
    sourcecurl -X POST \
    +     -H "Content-Type: application/json" \
    +     "http://localhost:8080/v1/type-hierarchy" \
    +     -d \
    +'{
    +  "mapping": {
    +    "https://schema.org/VideoGame": [
    +      "https://schema.org/SoftwareApplication",
    +      "https://schema.org/CreativeWork",
    +      "https://schema.org/Thing"
    +    ]
    +  }
    +}'
    +
    Payload
    +
    +
    source{
    +  "mapping": {
    +    "https://schema.org/VideoGame": [
    +      "https://schema.org/SoftwareApplication",
    +      "https://schema.org/CreativeWork",
    +      "https://schema.org/Thing"
    +    ]
    +  }
    +}
    +
    Response
    +
    +
    source{
    +  "@context": [
    +    "https://bluebrain.github.io/nexus/contexts/type-hierarchy.json",
    +    "https://bluebrain.github.io/nexus/contexts/metadata.json"
    +  ],
    +  "@id": "https://bluebrain.github.io/nexus/vocabulary/TypeHierarchy",
    +  "@type": "TypeHierarchy",
    +  "mapping": {
    +    "https://schema.org/VideoGame": [
    +      "https://schema.org/SoftwareApplication",
    +      "https://schema.org/CreativeWork",
    +      "https://schema.org/Thing"
    +    ]
    +  },
    +  "_constrainedBy": "https://bluebrain.github.io/nexus/schemas/type-hierarchy.json",
    +  "_createdAt": "1970-01-01T00:00:00Z",
    +  "_createdBy": "http://localhost/v1/realms/qyjcmbqlkavvsbbo/users/jane-doe",
    +  "_deprecated": false,
    +  "_rev": 1,
    +  "_self": "http://localhost/v1/type-hierarchy",
    +  "_updatedAt": "1970-01-01T00:00:00Z",
    +  "_updatedBy": "http://localhost/v1/realms/qyjcmbqlkavvsbbo/users/jane-doe"
    +}
    +
    +

    Update

    +

    This operation overrides the payload.

    +

    In 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.

    +
    PUT /v1/type-hierarchy?rev={previous_rev}
    +  {...}
    +
    +

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

    +

    Example

    +
    +
    Request
    +
    +
    sourcecurl -X PUT \
    +     -H "Content-Type: application/json" \
    +     "http://localhost:8080/v1/type-hierarchy?rev=1" \
    +     -d \
    +'{
    +  "mapping": {
    +    "https://schema.org/VideoGame": [
    +      "https://schema.org/SoftwareApplication",
    +      "https://schema.org/CreativeWork",
    +      "https://schema.org/Thing"
    +    ]
    +  }
    +}'
    +
    Payload
    +
    +
    source{
    +  "mapping": {
    +    "https://schema.org/VideoGame": [
    +      "https://schema.org/SoftwareApplication",
    +      "https://schema.org/CreativeWork",
    +      "https://schema.org/Thing"
    +    ]
    +  }
    +}
    +
    Response
    +
    +
    source{
    +  "@context": [
    +    "https://bluebrain.github.io/nexus/contexts/type-hierarchy.json",
    +    "https://bluebrain.github.io/nexus/contexts/metadata.json"
    +  ],
    +  "@id": "https://bluebrain.github.io/nexus/vocabulary/TypeHierarchy",
    +  "@type": "TypeHierarchy",
    +  "mapping": {
    +    "https://schema.org/VideoGame": [
    +      "https://schema.org/SoftwareApplication",
    +      "https://schema.org/CreativeWork",
    +      "https://schema.org/Thing"
    +    ]
    +  },
    +  "_constrainedBy": "https://bluebrain.github.io/nexus/schemas/type-hierarchy.json",
    +  "_createdAt": "1970-01-01T00:00:00Z",
    +  "_createdBy": "http://localhost/v1/realms/knntwmnuxprsqrio/users/jane-doe",
    +  "_deprecated": false,
    +  "_rev": 2,
    +  "_self": "http://localhost/v1/type-hierarchy",
    +  "_updatedAt": "1970-01-01T00:00:00Z",
    +  "_updatedBy": "http://localhost/v1/realms/knntwmnuxprsqrio/users/jane-doe"
    +}
    +
    +
    +

    Fetch

    +
    GET /v1/type-hierarchy
    +
    +

    Example

    +
    +
    Request
    +
    +
    sourcecurl "http://localhost:8080/v1/type-hierarchy
    +
    Response
    +
    +
    source{
    +  "@context" : [
    +    "https://bluebrain.github.io/nexus/contexts/type-hierarchy.json",
    +    "https://bluebrain.github.io/nexus/contexts/metadata.json"
    +  ],
    +  "@id" : "https://bluebrain.github.io/nexus/vocabulary/TypeHierarchy",
    +  "@type" : "TypeHierarchy",
    +  "mapping" : {
    +    "https://schema.org/VideoGame" : [
    +      "https://schema.org/SoftwareApplication",
    +      "https://schema.org/CreativeWork",
    +      "https://schema.org/Thing"
    +    ]
    +  },
    +  "_constrainedBy" : "https://bluebrain.github.io/nexus/schemas/type-hierarchy.json",
    +  "_createdAt" : "1970-01-01T00:00:00Z",
    +  "_createdBy" : "http://localhost/v1/realms/sanwxierjnyajvxn/users/jane-doe",
    +  "_deprecated" : false,
    +  "_rev" : 1,
    +  "_self" : "http://localhost/v1/type-hierarchy",
    +  "_updatedAt" : "1970-01-01T00:00:00Z",
    +  "_updatedBy" : "http://localhost/v1/realms/sanwxierjnyajvxn/users/jane-doe"
    +}
    +
    +
    + + +
    +
    +
    +
    + + +
    + + + + + + + + + diff --git a/snapshot/docs/delta/api/user-permissions-api.html b/snapshot/docs/delta/api/user-permissions-api.html index b642516212..74c88c49a2 100644 --- a/snapshot/docs/delta/api/user-permissions-api.html +++ b/snapshot/docs/delta/api/user-permissions-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/version.html b/snapshot/docs/delta/api/version.html index b40589b028..582523ea52 100644 --- a/snapshot/docs/delta/api/version.html +++ b/snapshot/docs/delta/api/version.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • @@ -269,19 +270,19 @@

    <
    source{
       "@context": "https://bluebrain.github.io/nexus/contexts/version.json",
    -  "delta": "1.9.0",
    +  "delta": "1.10.0",
       "dependencies": {
         "blazegraph": "2.1.6-RC",
    -    "postgresql": "15.5",
    -    "elasticsearch": "8.11.1",
    +    "postgresql": "15.6",
    +    "elasticsearch": "8.12.1",
         "remoteStorage": "1.9.0"
       },
       "plugins": {
    -    "archive": "1.9.0",
    -    "blazegraph": "1.9.0",
    -    "composite-views": "1.9.0",
    -    "elasticsearch": "1.9.0",
    -    "storage": "1.9.0"
    +    "archive": "1.10.0",
    +    "blazegraph": "1.10.0",
    +    "composite-views": "1.10.0",
    +    "elasticsearch": "1.10.0",
    +    "storage": "1.10.0"
       }
     }

    Authorization notes
    diff --git a/snapshot/docs/delta/api/views/aggregated-es-view-api.html b/snapshot/docs/delta/api/views/aggregated-es-view-api.html index e7e8a89f9d..740f013820 100644 --- a/snapshot/docs/delta/api/views/aggregated-es-view-api.html +++ b/snapshot/docs/delta/api/views/aggregated-es-view-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/views/aggregated-sparql-view-api.html b/snapshot/docs/delta/api/views/aggregated-sparql-view-api.html index 8badc238b6..317fd196d7 100644 --- a/snapshot/docs/delta/api/views/aggregated-sparql-view-api.html +++ b/snapshot/docs/delta/api/views/aggregated-sparql-view-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/views/composite-sink.html b/snapshot/docs/delta/api/views/composite-sink.html index 7a57ab7788..de837db5d7 100644 --- a/snapshot/docs/delta/api/views/composite-sink.html +++ b/snapshot/docs/delta/api/views/composite-sink.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/views/composite-view-api.html b/snapshot/docs/delta/api/views/composite-view-api.html index 994468bc6b..1473aaeb6b 100644 --- a/snapshot/docs/delta/api/views/composite-view-api.html +++ b/snapshot/docs/delta/api/views/composite-view-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/views/elasticsearch-view-api.html b/snapshot/docs/delta/api/views/elasticsearch-view-api.html index eeec8928a3..d881d7a15c 100644 --- a/snapshot/docs/delta/api/views/elasticsearch-view-api.html +++ b/snapshot/docs/delta/api/views/elasticsearch-view-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/views/index.html b/snapshot/docs/delta/api/views/index.html index 6fb89a5de2..05f56df381 100644 --- a/snapshot/docs/delta/api/views/index.html +++ b/snapshot/docs/delta/api/views/index.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/views/pipes.html b/snapshot/docs/delta/api/views/pipes.html index a825074301..1ad56b6759 100644 --- a/snapshot/docs/delta/api/views/pipes.html +++ b/snapshot/docs/delta/api/views/pipes.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/api/views/sparql-view-api.html b/snapshot/docs/delta/api/views/sparql-view-api.html index 5c4ddfa0dc..c00ea474cd 100644 --- a/snapshot/docs/delta/api/views/sparql-view-api.html +++ b/snapshot/docs/delta/api/views/sparql-view-api.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/architecture.html b/snapshot/docs/delta/architecture.html index 69f40f3550..3a25b50c86 100644 --- a/snapshot/docs/delta/architecture.html +++ b/snapshot/docs/delta/architecture.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/benchmarks/index.html b/snapshot/docs/delta/benchmarks/index.html index 3bd7e38510..f495c1d483 100644 --- a/snapshot/docs/delta/benchmarks/index.html +++ b/snapshot/docs/delta/benchmarks/index.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/benchmarks/v1.2.1.html b/snapshot/docs/delta/benchmarks/v1.2.1.html index acb3272a56..81b0ceeadd 100644 --- a/snapshot/docs/delta/benchmarks/v1.2.1.html +++ b/snapshot/docs/delta/benchmarks/v1.2.1.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/benchmarks/v1.4.2.html b/snapshot/docs/delta/benchmarks/v1.4.2.html index d3161a6baa..23574b3d86 100644 --- a/snapshot/docs/delta/benchmarks/v1.4.2.html +++ b/snapshot/docs/delta/benchmarks/v1.4.2.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/index.html b/snapshot/docs/delta/index.html index 2bba744eda..e3f116b7f5 100644 --- a/snapshot/docs/delta/index.html +++ b/snapshot/docs/delta/index.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/delta/metadata.html b/snapshot/docs/delta/metadata.html index 1f94f07198..f9e4204c83 100644 --- a/snapshot/docs/delta/metadata.html +++ b/snapshot/docs/delta/metadata.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • @@ -325,7 +326,7 @@

    diff --git a/snapshot/docs/delta/plugins/index.html b/snapshot/docs/delta/plugins/index.html index b170144baf..3b4f540cde 100644 --- a/snapshot/docs/delta/plugins/index.html +++ b/snapshot/docs/delta/plugins/index.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/faq.html b/snapshot/docs/faq.html index 094ca15e2f..560415087c 100644 --- a/snapshot/docs/faq.html +++ b/snapshot/docs/faq.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/forge.html b/snapshot/docs/forge.html index 5f16441c9f..dae157076f 100644 --- a/snapshot/docs/forge.html +++ b/snapshot/docs/forge.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/fusion/architecture.html b/snapshot/docs/fusion/architecture.html index a9a393783a..284af121a6 100644 --- a/snapshot/docs/fusion/architecture.html +++ b/snapshot/docs/fusion/architecture.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/fusion/index.html b/snapshot/docs/fusion/index.html index 599993ac4b..c6947fa6e3 100644 --- a/snapshot/docs/fusion/index.html +++ b/snapshot/docs/fusion/index.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/fusion/my-data.html b/snapshot/docs/fusion/my-data.html index a07babd25c..6d73bb226e 100644 --- a/snapshot/docs/fusion/my-data.html +++ b/snapshot/docs/fusion/my-data.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/fusion/organizations.html b/snapshot/docs/fusion/organizations.html index 95f23645f9..aee7bf8a6d 100644 --- a/snapshot/docs/fusion/organizations.html +++ b/snapshot/docs/fusion/organizations.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/fusion/plugins.html b/snapshot/docs/fusion/plugins.html index 158a7d5ddd..430f70dc31 100644 --- a/snapshot/docs/fusion/plugins.html +++ b/snapshot/docs/fusion/plugins.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/fusion/project.html b/snapshot/docs/fusion/project.html index eeb96b10c9..45ae8c8902 100644 --- a/snapshot/docs/fusion/project.html +++ b/snapshot/docs/fusion/project.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/fusion/projects.html b/snapshot/docs/fusion/projects.html index c70446442a..e7f855f960 100644 --- a/snapshot/docs/fusion/projects.html +++ b/snapshot/docs/fusion/projects.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/fusion/search.html b/snapshot/docs/fusion/search.html index 0f10573f5b..68d86ddf46 100644 --- a/snapshot/docs/fusion/search.html +++ b/snapshot/docs/fusion/search.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/fusion/studio.html b/snapshot/docs/fusion/studio.html index 36ee3d537f..89f15ceb75 100644 --- a/snapshot/docs/fusion/studio.html +++ b/snapshot/docs/fusion/studio.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/fusion/studios.html b/snapshot/docs/fusion/studios.html index 7e2ba5c4b8..036b92eebc 100644 --- a/snapshot/docs/fusion/studios.html +++ b/snapshot/docs/fusion/studios.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/getting-started/index.html b/snapshot/docs/getting-started/index.html index ffed9de9c3..db0efc8e6c 100644 --- a/snapshot/docs/getting-started/index.html +++ b/snapshot/docs/getting-started/index.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/getting-started/running-nexus/configuration/index.html b/snapshot/docs/getting-started/running-nexus/configuration/index.html index 76e6d0a91f..724b148e57 100644 --- a/snapshot/docs/getting-started/running-nexus/configuration/index.html +++ b/snapshot/docs/getting-started/running-nexus/configuration/index.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/getting-started/running-nexus/docker/docker-compose.yaml b/snapshot/docs/getting-started/running-nexus/docker/docker-compose.yaml index 0b665523aa..f21909b513 100644 --- a/snapshot/docs/getting-started/running-nexus/docker/docker-compose.yaml +++ b/snapshot/docs/getting-started/running-nexus/docker/docker-compose.yaml @@ -5,7 +5,7 @@ services: - blazegraph - elasticsearch - postgres - image: bluebrain/nexus-delta:1.9.0-M10 + image: bluebrain/nexus-delta:1.10.0-M5 environment: DELTA_PLUGINS: "/opt/docker/plugins/" DELTA_EXTERNAL_CONF: "/config/delta.conf" @@ -23,7 +23,7 @@ services: memory: 1024M elasticsearch: - image: "docker.elastic.co/elasticsearch/elasticsearch:8.11.0" + image: "docker.elastic.co/elasticsearch/elasticsearch:8.12.1" environment: discovery.type: "single-node" bootstrap.memory_lock: "true" @@ -38,7 +38,7 @@ services: memory: 512M postgres: - image: library/postgres:15.5 + image: library/postgres:15.6 environment: POSTGRES_USER: "postgres" POSTGRES_PASSWORD: "postgres" diff --git a/snapshot/docs/getting-started/running-nexus/index.html b/snapshot/docs/getting-started/running-nexus/index.html index 871b2082f5..877d167abc 100644 --- a/snapshot/docs/getting-started/running-nexus/index.html +++ b/snapshot/docs/getting-started/running-nexus/index.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • @@ -417,19 +418,19 @@

    $ curl http://localhost/v1/version | jq { "@context": "https://bluebrain.github.io/nexus/contexts/version.json", - "delta": "1.9.0", + "delta": "1.10.0", "dependencies": { "blazegraph": "2.1.6-SNAPSHOT", - "elasticsearch": "8.11.1", - "postgres": "15.5" + "elasticsearch": "8.12.1", + "postgres": "15.6" }, "environment": "dev", "plugins": { - "archive": "1.9.0", - "blazegraph": "1.9.0", - "composite-views": "1.9.0", - "elasticsearch": "1.9.0", - "storage": "1.9.0" + "archive": "1.10.0", + "blazegraph": "1.10.0", + "composite-views": "1.10.0", + "elasticsearch": "1.10.0", + "storage": "1.10.0" } }

    diff --git a/snapshot/docs/getting-started/running-nexus/search-configuration.html b/snapshot/docs/getting-started/running-nexus/search-configuration.html index bc960f601c..6175e3e87c 100644 --- a/snapshot/docs/getting-started/running-nexus/search-configuration.html +++ b/snapshot/docs/getting-started/running-nexus/search-configuration.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/getting-started/try-nexus-movielens.html b/snapshot/docs/getting-started/try-nexus-movielens.html index a546570312..35297fe2fe 100644 --- a/snapshot/docs/getting-started/try-nexus-movielens.html +++ b/snapshot/docs/getting-started/try-nexus-movielens.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/getting-started/try-nexus.html b/snapshot/docs/getting-started/try-nexus.html index ea0a04be53..2abe4781f4 100644 --- a/snapshot/docs/getting-started/try-nexus.html +++ b/snapshot/docs/getting-started/try-nexus.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/getting-started/understanding-knowledge-graphs.html b/snapshot/docs/getting-started/understanding-knowledge-graphs.html index 03bfebda3c..11aa045ed7 100644 --- a/snapshot/docs/getting-started/understanding-knowledge-graphs.html +++ b/snapshot/docs/getting-started/understanding-knowledge-graphs.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/index.html b/snapshot/docs/index.html index 6520775a21..1fd9ba9a46 100644 --- a/snapshot/docs/index.html +++ b/snapshot/docs/index.html @@ -219,6 +219,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/releases/index.html b/snapshot/docs/releases/index.html index f3a45a5a66..139a311bb0 100644 --- a/snapshot/docs/releases/index.html +++ b/snapshot/docs/releases/index.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/releases/older-releases.html b/snapshot/docs/releases/older-releases.html index db71108da0..9e130463d3 100644 --- a/snapshot/docs/releases/older-releases.html +++ b/snapshot/docs/releases/older-releases.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/releases/v1.10-release-notes.html b/snapshot/docs/releases/v1.10-release-notes.html index f48f378b2b..ea581d35a5 100644 --- a/snapshot/docs/releases/v1.10-release-notes.html +++ b/snapshot/docs/releases/v1.10-release-notes.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • @@ -260,6 +261,10 @@ +
  • Files +
  • Storages
  • Resolvers
  • Global search @@ -330,6 +336,10 @@
  • +
  • Files +
  • Storages
  • Resolvers
  • Global search @@ -406,6 +417,10 @@

    Elasticsearch views

    New mapping and settings for the default Elasticsearch view

    The default Elasticsearch view now uses a new mapping and settings which improves the ability to search for resources using the listing endpoints.

    +

    Files

    +

    Custom metadata

    +

    It is now possible to add custom metadata when creating files. This metadata will be indexed for full-text search.

    +

    More information

    Storages

    Disabling default storage

    The creation of a default storage at project creation can now be disabled.

    @@ -419,6 +434,9 @@

    Resolvers

    +

    Fetching the annotated original payload of a resolved resource.

    +

    The annotate parameter has been introduced to the endpoint to get the original payload of a resolved resource.

    +

    More information

    Deprecations

    • The ability to tag a resolver has been removed. It is also no longer possible to fetch a resolver by tag.
    • diff --git a/snapshot/docs/releases/v1.4-to-v1.5-migration.html b/snapshot/docs/releases/v1.4-to-v1.5-migration.html index 445366c89f..8834ddd602 100644 --- a/snapshot/docs/releases/v1.4-to-v1.5-migration.html +++ b/snapshot/docs/releases/v1.4-to-v1.5-migration.html @@ -224,6 +224,7 @@
    • Graph analytics
    • Jira integration
    • Supervision
    • +
    • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/releases/v1.5-release-notes.html b/snapshot/docs/releases/v1.5-release-notes.html index 602b1509f9..b070597611 100644 --- a/snapshot/docs/releases/v1.5-release-notes.html +++ b/snapshot/docs/releases/v1.5-release-notes.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/releases/v1.5-to-v1.6-migration.html b/snapshot/docs/releases/v1.5-to-v1.6-migration.html index 8e75d60a4e..97a407efb8 100644 --- a/snapshot/docs/releases/v1.5-to-v1.6-migration.html +++ b/snapshot/docs/releases/v1.5-to-v1.6-migration.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/releases/v1.6-release-notes.html b/snapshot/docs/releases/v1.6-release-notes.html index 1773a2b72e..90b7ff91a0 100644 --- a/snapshot/docs/releases/v1.6-release-notes.html +++ b/snapshot/docs/releases/v1.6-release-notes.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/releases/v1.6-to-v1.7-migration.html b/snapshot/docs/releases/v1.6-to-v1.7-migration.html index 4301806acc..59aa3a51f0 100644 --- a/snapshot/docs/releases/v1.6-to-v1.7-migration.html +++ b/snapshot/docs/releases/v1.6-to-v1.7-migration.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/releases/v1.7-release-notes.html b/snapshot/docs/releases/v1.7-release-notes.html index eae265cfd3..2c82b72d93 100644 --- a/snapshot/docs/releases/v1.7-release-notes.html +++ b/snapshot/docs/releases/v1.7-release-notes.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/releases/v1.7-to-v1.8-migration.html b/snapshot/docs/releases/v1.7-to-v1.8-migration.html index ca615e2bf7..b1a7e6647d 100644 --- a/snapshot/docs/releases/v1.7-to-v1.8-migration.html +++ b/snapshot/docs/releases/v1.7-to-v1.8-migration.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/releases/v1.8-release-notes.html b/snapshot/docs/releases/v1.8-release-notes.html index 650066ac3a..33e501a9d5 100644 --- a/snapshot/docs/releases/v1.8-release-notes.html +++ b/snapshot/docs/releases/v1.8-release-notes.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/releases/v1.8-to-v1.9-migration.html b/snapshot/docs/releases/v1.8-to-v1.9-migration.html index 34e3eb2b3a..0fe58e9211 100644 --- a/snapshot/docs/releases/v1.8-to-v1.9-migration.html +++ b/snapshot/docs/releases/v1.8-to-v1.9-migration.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/releases/v1.9-release-notes.html b/snapshot/docs/releases/v1.9-release-notes.html index 88dc7291b0..aa709612a7 100644 --- a/snapshot/docs/releases/v1.9-release-notes.html +++ b/snapshot/docs/releases/v1.9-release-notes.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/roadmap.html b/snapshot/docs/roadmap.html index e2c26803ff..c0fb30bbde 100644 --- a/snapshot/docs/roadmap.html +++ b/snapshot/docs/roadmap.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/utilities/index.html b/snapshot/docs/utilities/index.html index 47a4536b2d..91f7b5697a 100644 --- a/snapshot/docs/utilities/index.html +++ b/snapshot/docs/utilities/index.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/docs/versions.html b/snapshot/docs/versions.html index 76918e9fa6..05e5d775af 100644 --- a/snapshot/docs/versions.html +++ b/snapshot/docs/versions.html @@ -224,6 +224,7 @@
  • Graph analytics
  • Jira integration
  • Supervision
  • +
  • Type hierarchy
  • Nexus Metadata
  • Plugins
  • diff --git a/snapshot/paradox.json b/snapshot/paradox.json index ad1ea050b0..36ddcbff30 100644 --- a/snapshot/paradox.json +++ b/snapshot/paradox.json @@ -1,4 +1,4 @@ { "name" : "docs", - "version" : "0.0.0+1-b07db61d+20240213-0843-SNAPSHOT" + "version" : "1.10.0-M6+0-eabbea59+20240227-1653-SNAPSHOT" } \ No newline at end of file diff --git a/snapshot/search/search_index.json b/snapshot/search/search_index.json index 5d69a0a19e..5f96c26590 100644 --- a/snapshot/search/search_index.json +++ b/snapshot/search/search_index.json @@ -1 +1 @@ -{"docs":[{"location":"/paradox.json","text":"","title":""},{"location":"/docs/index.html","text":"","title":"Blue Brain Nexus"},{"location":"/docs/index.html#blue-brain-nexus","text":"Blue Brain Nexus is an ecosystem that allows you to organize and better leverage your data through the use of a Knowledge Graph. In addition to the products listed here, you’ll find a rich ecosystem of libraries and tools.","title":"Blue Brain Nexus"},{"location":"/docs/index.html#products","text":"The Blue Brain Nexus ecosystem encompasses a broad range of capabilities that are brought to you across three complementary products and a suite of utilities.","title":"Products"},{"location":"/docs/index.html#nexus-fusion","text":"Enabling Collaborative Data and Knowledge Discovery\nFusion is our extensible web application. It hosts different apps to accommodate various use cases. It comes by default with Studios (where you work with data), Admin (for managing the Nexus instance), and will soon support to organise your data activities. It runs on top of the Delta web services, and integrates neatly with our Forge python framework.\nRead more about Fusion","title":"Nexus Fusion"},{"location":"/docs/index.html#nexus-forge","text":"Building and Using Knowledge Graphs Made Easy\nNexus Forge is a domain-agnostic, generic and extensible Python framework enabling non-expert users to create and manage knowledge graphs.\nRead more about Forge","title":"Nexus Forge"},{"location":"/docs/index.html#nexus-delta","text":"Managing the Data and Knowledge Graph Lifecycle\nA scalable and secure service to store and leverage all your data, neatly organised in a Knowledge Graph. It offers an API to perform all your data management operations, this way it can easily integrate with your software stack. Its advanced indexing capabilities automatically build views from your metadata.\nRead more about Delta","title":"Nexus Delta"},{"location":"/docs/index.html#utilities","text":"The Nexus ecosystem leverages a set of smaller open-source utilities.\nDiscover the utilities","title":"Utilities"},{"location":"/docs/index.html#quick-start-guide","text":"Do you know know what a knowledge graph is? Or want to deepen your understanding? Follow our introduction.\nWant to get started with Nexus right away? We provide a tutorial that uses our sandbox environment to let you try the functionalities.\nReady to deploy your own instance of Nexus? Follow our guide.","title":"Quick Start Guide"},{"location":"/docs/index.html#versions","text":"Looking for docs for another release of Nexus ?\nList of versions","title":"Versions"},{"location":"/docs/index.html#roadmap","text":"Curious about our upcoming features? Read our open Roadmap to find out more.","title":"Roadmap"},{"location":"/docs/versions.html","text":"","title":"Versions"},{"location":"/docs/versions.html#versions","text":"","title":"Versions"},{"location":"/docs/versions.html#current-v1-9-x-","text":"Documentation Github Release notes","title":"Current (v1.9.x)"},{"location":"/docs/versions.html#snapshot","text":"Documentation Github","title":"Snapshot"},{"location":"/docs/versions.html#previous-releases","text":"","title":"Previous releases"},{"location":"/docs/versions.html#v1-8-x","text":"Documentation Github Release notes","title":"v1.8.x"},{"location":"/docs/versions.html#v1-7-x","text":"Documentation Github Release notes","title":"v1.7.x"},{"location":"/docs/versions.html#v1-6-x","text":"Documentation Github Release notes","title":"v1.6.x"},{"location":"/docs/versions.html#v1-5-x","text":"Documentation Github Release notes","title":"v1.5.x"},{"location":"/docs/getting-started/index.html","text":"","title":"Getting Started"},{"location":"/docs/getting-started/index.html#getting-started","text":"The Nexus ecosystem is a data catalog with several technologies and techniques used to get insight and explore the data within the ecosystem.\nOne of the powerful ways to query data is through the Knowledge Graph built in Nexus. For that reason we encourage you to get familiar with these concepts reading Understanding Knowledge Graphs.\nThe next steps would be to either try Nexus using the Sandbox deployment or run Nexus locally.","title":"Getting Started"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html","text":"","title":"Understanding Knowledge Graphs"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#understanding-knowledge-graphs","text":"This section will help you understand knowledge graphs and related standards and technologies.","title":"Understanding Knowledge Graphs"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#what-is-a-knowledge-graph-","text":"A knowledge graph is a graph structure that links entities together. The links between the entities contain knowledge, based on how they connect to each other. For example, an apple can be connected to a tree (to show that it grows on trees) or in another case connected to a pie recipe (to show that it is part of a recipe). It is a formalized knowledge that enables programmatical reasoning about concepts in the world around us.\nIn this introduction to knowledge graphs the authors conclude that there is no clear definition of what a knowledge graph is. The term itself was coined in 2012 by Google as they introduced their Knowledge Graph as a mean of finding more relevant related search results by linking connected data on the web. As an idea, knowledge graphs are similar to semantic networks which date back to the 60’s and 70’s. The difference mainly lies in the size of the network, with knowledge graphs being larger. Knowledge graphs are also often generated in a rather manual way (data ingestion, data cleaning) instead of being generated and governed by a set of strict logical rules.\nFor a further introduction to knowledge graphs the “What is a knowledge graph” video from the CS520 Stanford course is a good resource.","title":"What is a knowledge graph?"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#the-graph-structure","text":"A knowledge graph consists of entities (nodes) that are connected to each other with relations (edges).\nThe entity is an object with properties that describe it. For example, a person, a company, an event, a thing… These properties can be called the entity’s “metadata”.\nThe relation describes how entities are connected. For example, being member of, visiting a place, belonging to a country…\nIt’s worth noting that having this graph data structure makes it easy to add new data into an existing graph by connecting new entities and new relations.","title":"The graph structure"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#describing-knowledge-in-a-graph","text":"After deciding what concept or idea that we wish to model in a knowledge graph, we need to collect the metadata that describes our entities. In order to make our data interoperable with other data and to allow us to import data from existing sources we should use a shared language when describing entities and relations. This is achieved using an ontology.\nThe ontology is a kind of dictionary containing types that can be used to describe entities. The metadata is created by picking a type from the ontology that matches what you wish to describe and defining the properties of the chosen type. E.g. a person can be described by a Person type. The name of the person can be encoded in a givenName property. This results in a set of data that can be processed both by humans and computers (as it is structured).\nFor example, in the image below, you can see that the entity Toy Story with a property Release date that has the value March 29th, 1995 and the Director property with the value John Lasseter.","title":"Describing knowledge in a graph"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#inferring-new-data-from-existing-relationships","text":"Since the entities are encoded using well-defined ontologies it allows us to draw conclusions based on the data we have and create new inferred data. This is done by giving the knowledge graph to an inference engine that can apply a set of logical rules to the data to derive new information. For example, if we have a knowledge graph containing persons and their birth year we could create an inference engine with rules that determine whether a person is a child or a retired person.\nIn the second example below, we have Toy Story, it has characters (using the relation called Character) and we have asserted the cast of characters. Having defined this, we can now define a rule that instructs the inference engine to create new relations Voice Cast whenever we find the Cast of a Character. This enables us to query the graph and directly get Toy Story’s voices cast without having to navigate through its Cast first.\nIn reality inferring knowledge is a complex topic. This video lecture shows some real-world examples of algorithms and rules for inference engines. E.g. reasoning about a persons creditworthiness based on what their home address is or trying to spot fake papers that have been submitted to a journal.","title":"Inferring new data from existing relationships"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#growing-a-knowledge-graph","text":"A graph is a flexible data structure, and an ontology can evolve as new data comes in. As a result, data can continually be added to help serve new use cases.\nThe illustration below shows how the initial graph representing Toy Story can be augmented to capture many other related domains such as:\nToy Story’s similar movies (e.g. Cars) Cities and associations related to motion picture production (e.g. Motion Picture Association of America) Places and people connected to animation movies (e.g. Steve Jobs)","title":"Growing a knowledge graph"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#encoding-knowledge-graphs-rdf-json-ld-and-other-standards","text":"","title":"Encoding knowledge graphs: RDF, JSON-LD, and other standards"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#rdf","text":"How do you encode knowledge graphs in a way that is interoperable with other applications and can be integrated with other data sources? You use some common formalism, a language, to describe your entities and relationships. For knowledge graphs this format is RDF. RDF (Resource Description Framework) is a data format where every piece of knowledge can be broken down into a structure (subject, predicate and object) called triple.\nRDF-formatted data can be queried using a query language such as SPARQL. This allows us to create applications that can process knowledge graphs, for example, to infer new data or get answers to questions we may have for the data that is stored in the knowledge graph.","title":"RDF"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#json-ld","text":"RDF is however only a part of what we need in order to encode a graph. We also need an implementation, a “concrete RDF syntax” that shows how to write down an RDF-formatted graph in a format that can be shared e.g. between applications. One syntax that can be used is JSON-LD. It stands for JSON for Linking Data.\nWe start by looking at a simple JSON example:\n[\n \t{\n \"title\":\"Floating island\",\n \"author\":\"Unknown\"\n \t},\n \t{\n \"title\":\"Apple balloon\",\n \"author\":\"Grant Achatz\"\n \t},\n \t{\n \"title\":\"Opera\",\n \"author\":\"Cyriaque Gavillon\"\n \t}\n\n ]\nAfter reading the above JSON we can ask ourselves what this data describes? If we don’t recognise the names we may think these perhaps are titles of books or movies. There is clearly a lack of context resulting in an ambiguity. JSON-LD allows to solve the ambiguity problem by enabling a semantic-preserving data encoding. This is achieved by adding an @context object where every key is associated with an identifier.\nIf we extend the JSON example with the payload below, then both a machine and a human can look up the context to find out that the JSON refers to recipes. I.e. Floating island, Apple balloon and Opera.\n[\n \t{\n \"@context\":\"https://json-ld.org/contexts/recipe.jsonld\",\n \"title\":\"Floating island\",\n \"author\":\"Unknown\"\n \t},\n \t{\n \"@context\":\"https://json-ld.org/contexts/recipe.jsonld\",\n \"title\":\"Apple balloon\",\n \"author\":\"Grant Achatz\"\n \t},\n \t{\n \"@context\":\"https://json-ld.org/contexts/recipe.jsonld\",\n \"title\":\"Opera\",\n \"author\":\"Cyriaque Gavillon\"\n \t }\n\n ]\nIn the JSON-LD playground you can try examples of JSON-LD.","title":"JSON-LD"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#using-schema-org-as-a-common-vocabulary","text":"Having defined a grammar (RDF) and a concrete syntax (JSON-LD) to encode knowledge graphs, there is one more thing to add in order to achieve interoperability with other knowledge graphs. We need a common vocabulary that defines which properties an entity should have - an ontology.\nOne such ontology that is commonly used is the Schema.org vocabulary. You can look up how different concepts are described by searching for them on the schema.org web page. For example, a video game entity is described by properties such as cheatCode or gamePlatform.","title":"Using Schema.org as a common vocabulary"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#reasoning-with-owl","text":"If you wish to reason about knowledge that is stored in a knowledge graph it is useful to have a language that can express properties and relations for the entities in the ontology (the dictionary) that your knowledge graph consists of. OWL (Web Ontology Language) is such a language. It is built on top of RDF (which can be seen as the grammar for OWL) and it is different from JSON-LD, since JSON-LD merely describes the syntax we use to encode our knowledge graph.\nWith OWL you can form axioms and expressions for the entities in your ontology. For example, expressing that a woman is a subclass of a person:\nSubClassOf( :Woman :Person )","title":"Reasoning with OWL"},{"location":"/docs/getting-started/understanding-knowledge-graphs.html#references-and-resources-","text":"The sections below contain references and resources that can be used to learn more about knowledge graphs.\nIntroduction: What Is a Knowledge Graph? in Knowledge Graphs: Methodology, Tools and Selected Use Cases Author: Fensel, Dieter et al Published: Springer International Publishing, 2020 DOI: 10.1007/978-3-030-37439-6_1 What are some knowledge graph inference algorithms? Published: 23.04.2020, Youtube.com What is the role of knowledge graphs in machine learning? - Challenges for explainable AI Published: 20.05.2020, Youtube.com Programming the Semantic Web Author: Segaran, Toby et al Published: O’Reilly Media, Inc., 2009 ISBN: 9780596153816 What is a knowledge graph? Published: 23.04.2020, Youtube.com RDF 1.1 primer Author: W3C Working Group Editors: Schreiber, G., Raimond, Y Published: 24.06.2014 JSON-LD 1.1 Editors: Kellogg G., Champin P-A., Longley D. Published: 16.07.2020 JSON LD - curated resources This is probably one of the best resources to start with if you are interested in JSON-LD. OWL 2 Web Ontology Language Document Overview (Second Edition) Author: W3C Working Group Published: 11.12.2012 Linked Data Patterns Authors: Leigh Dodds, Ian Davis Published: 31.05.2012 Validating RDF Data Authors: Jose Emilio labra Gayo, Eric Prud’hommeaux, Iovka Boneva, Dimitris Kontokostas Published: 2018","title":"References and resources:"},{"location":"/docs/getting-started/try-nexus.html","text":"","title":"Try Nexus with Neuroscience Datasets"},{"location":"/docs/getting-started/try-nexus.html#try-nexus-with-neuroscience-datasets","text":"Welcome to our Nexus tutorial! Nexus is an open-source data and metadata management suite. With Nexus, your data is catalogued and indexed as a knowledge graph, all interconnected.\nNexus consists of different products, such as:\nNexus Delta: our core data management platform Nexus Fusion: your web interface to access the metadata and data stored in the knowledge graph Nexus Forge: a Python library to work with knowledge graphs, and in particular Nexus Delta\nIn this tutorial, you’ll learn to interact with the knowledge graph through these different tools. Nexus can be used for any kind of data although this tutorial focuses on neuroscience data.\nThis tutorial is also part of the edX EPFL Simulation Neuroscience MOOC.\nIn Step 0, you’ll learn to setup your Python environment if you want to run the Jupyter notebooks locally. You can skip this step if you use Binder or Google Colaboratory (preferred).\nIn Step 1, you’ll learn about the Nexus Sandbox deployment, a dedicated environment for this tutorial. You’ll use Nexus Fusion to login and access your dedicated project instantiated in Nexus Delta.\nIn Step 2, you’ll learn to download and register data from the Allen Institute for Brain Science (AIBS). You’ll use Nexus Forge in a Jupyter notebook to interact with Nexus Delta.\nIn Step 3, you’ll learn to download and register data from multiple sources (AIBS and MouseLight). You’ll use Nexus Forge in a Jupyter notebook to interact with Nexus Delta.\nIn Step 4, you’ll learn to organize your data on the web for easier sharing and publishing. You’ll use Nexus Fusion on the Sandbox deployment.\nIn Step 5, you’ll learn to prepare your data in order to search for similar datasets across the data you have integrated in Blue Brain Nexus.\nLet’s go!\nYou can use the side menu to navigate between the page’s sections.","title":"Try Nexus with Neuroscience Datasets"},{"location":"/docs/getting-started/try-nexus.html#step-0-python-setup","text":"In this tutorial, you are encouraged to run Nexus Forge to interact with Nexus. Nexus Forge is a python library. We provide Jupyter Notebooks with examples.\nYou can either run the notebooks in Binder or Google Colaboratory, or run them locally.","title":"Step 0: Python Setup"},{"location":"/docs/getting-started/try-nexus.html#running-python-and-jupyter-locally","text":"Here is a step-by-step guide to setup your Python environment to work with Nexus Forge, Jupyter, and the Allen SDK.\nThis is not mandatory, feel free to use your preferred method. If you are using Binder or Google Colaboratory, you can skip this section.","title":"Running Python and Jupyter Locally"},{"location":"/docs/getting-started/try-nexus.html#install-miniconda","text":"Go to Miniconda and download and install the latest for your operating system.","title":"Install Miniconda"},{"location":"/docs/getting-started/try-nexus.html#create-an-environment","text":"Open the terminal and type:\nconda create -yn kgforge python=3.7","title":"Create an environment"},{"location":"/docs/getting-started/try-nexus.html#switch-to-the-environment","text":"In the terminal, type:\nconda activate kgforge","title":"Switch to the environment"},{"location":"/docs/getting-started/try-nexus.html#install-additional-packages","text":"To avoid any issues, install Jupyter in your environment.\npip install jupyter","title":"Install Additional Packages"},{"location":"/docs/getting-started/try-nexus.html#clone-the-nexus-repository","text":"The notebooks used for this tutorial are maintained in the Nexus GitHub repository under /docs/src/main/paradox/docs/getting-started/notebooks.\nTo clone the repository, you will need to install Git (if not already present on your system), then open the terminal, navigate to your preferred location, and type:\ngit clone https://github.com/BlueBrain/nexus.git","title":"Clone the Nexus Repository"},{"location":"/docs/getting-started/try-nexus.html#running-notebooks-in-binder-or-google-colaboratory","text":"","title":"Running Notebooks in Binder or Google Colaboratory"},{"location":"/docs/getting-started/try-nexus.html#step-1-nexus-setup","text":"We run the latest version of Nexus publicly for education. You can also use the instance in your organization (if any), or setup Nexus from scratch.","title":"Step 1: Nexus Setup"},{"location":"/docs/getting-started/try-nexus.html#1-1-using-the-sandbox","text":"The Sandbox is a deployment of Nexus for educational purposes.\nOnce on the Sandbox homepage, click on the “Connect” button. It will open a dropdown.\nAt the moment we only provide one identity provider (idP) in the sandbox environment - GitHub. Choose this option from the dropdown of the “Connect” button.\nYou will need an account on GitHub to be able to continue this tutorial.\nOnce logged in, you can get your token. The token is your secure, private, code that you will use in the rest of this tutorial to interact with Nexus.\nThe Sandbox environment automatically provisions a project for you so you don’t have to. Navigate to the Organizations page or click on the “Organizations” tab in the homepage, and you will see the list of organisations in Nexus. A project is contained in an organisation. The organisation where your project is created depends on your identity provider. If you logged in with GitHub for example, your project was created under the github-users organisation.\nNavigate to the correct organisation then search or scroll down to find your project (i.e. your username). You will need the names of the organisation and project for the next parts of the tutorial.","title":"1.1. Using the Sandbox"},{"location":"/docs/getting-started/try-nexus.html#1-2-running-your-own-instance-of-nexus","text":"We do not recommend to setup your own instance for this tutorial. If you are interested to install your own instance, check our guide.","title":"1.2. Running your Own Instance of Nexus"},{"location":"/docs/getting-started/try-nexus.html#step-2-download-and-register-data-from-a-single-source","text":"In this section, you will learn about metadata (and MINDS), provenance, and integrate data from the Allen Institute for Brain Science in Nexus.","title":"Step 2: Download and Register Data from a Single Source"},{"location":"/docs/getting-started/try-nexus.html#2-1-data-vs-metadata","text":"When we talk about data, we’re mostly talking about binary or text files. When we hear metadata, it means “data about the data”.\nIn neuroscience, you will have images of brain slices. You will have images of stained cells. You will find files of 3D-morphologies or electrophysiology recordings of the cell or neuron.\nThe brain is big, and the amount of data collected grows every second.\nAs a result, it quickly becomes extremely difficult for groups of scientists to manage, track, share, and work with this data.\nTo solve this growing pain, we can add metadata, or context, to the data collected. Specifically for neuroscience, we designed MINDS. MINDS is the Minimal Information about a Neuroscience DataSet.\nIn the diagram above, you can see that your data (which we will call Dataset from now on) has now additional properties:\nSubject: Species, age etc. of subject from which dataset was generated Brain Location: Brain region or 3D coordinates within a brain atlas Data Types: Type of the data stored in the dataset Contributions: The agent (scientists, organizations) to whom the dataset is attributed to Distribution: Direct link to the dataset binaries (downloadURL) or web page describing how to download them (accessURL) License: Dataset license (e.g. CC BY 4.0)\nYou can check the details of MINDS by visiting Neuroshapes. Neuroshapes provide open schemas for F.A.I.R. neuroscience data.","title":"2.1. Data vs Metadata"},{"location":"/docs/getting-started/try-nexus.html#2-2-provenance","text":"You have just seen how we can add metadata to our datasets to give more context. This allows scientists to find their data as well as their peers’ more easily.\nAnother important factor to consider is where the data comes from, i.e. what experiment generated it, who conducted the experiment, and what data was used to derive the new data.\nLuckily for us, some good folks have defined a provenance data model that we can use.\nThe diagram above is the basic representation of provenance. Our Dataset is an extension of the Entity. The Entity itself was generated by an Activity, which itself used (or not) another Entity. Finally, the Activity is associated with an Agent (e.g. a Person or Institution).\nThere are ways to add more details, for example with “qualified” relations. You can read more about it in the W3C PROV specification.","title":"2.2. Provenance"},{"location":"/docs/getting-started/try-nexus.html#2-3-allen-institute-for-brain-science-data","text":"The goal of the Allen Institute for Brain Science (AIBS) is to accelerate the understanding of how the brain works.\nThe AIBS has its data (mouse and human brains) available online for free. For the purpose of this tutorial, we’re mostly interested in Cells. Check out their data portal.\nYou can for example access a cell’s morphology page and browse and download the morphology data. Or you can head to the cell’s electrophysiology page to do the same.\nYou can either download and get the required information directly from their portal, or use the Allen SDK (Software Development Kit) to do so from your Python script (as shown in the example notebooks).","title":"2.3. Allen Institute for Brain Science Data"},{"location":"/docs/getting-started/try-nexus.html#2-5-mappers","text":"In Nexus Forge, a mapper will map, transform, and format fields from one source into another. In the case of Nexus, it will map the fields from a data source such as the AIBS to the formats supported by Nexus (the JSON payloads or resources).\nMore specifically, let’s imagine that we have a data source x that contains the following fields:\n{\n \"id\": 123,\n \"givenName\": \"john\",\n \"familyName\": \"doe\",\n \"gender\": \"male\"\n}\nWe want to map these to the fields id, name, and gender. This is how it could look like:\n{\n \"id\" : forge.format(\"identifier\", x.id)\n \"name\" : f\"{x.givenName}/{x.familyName}\",\n \"sex\" : forge.resolve(text=x.gender, scope=\"ontologies\", target=\"terms\")\n}\nWe see that the original id will be formatted to a type identifier, that the givenName and familyName were concatenated, and finally that for the gender, we will check to see if the value exists in an ontology (and is thus already standardized).\nRead more about mapping with Forge.\nIn the code available, we will integrate data from two sources: the AIBS and MouseLight (see Step 3). We will provide mappers for both data sources. You can check the mappers directly on GitHub. There are two mappers for the AIBS, one for neuron morphologies and another for electrophysiology data. For MouseLight, there’s only one mapper, as both morphologies and traces are in the same data source.","title":"2.5. Mappers"},{"location":"/docs/getting-started/try-nexus.html#2-6-running-the-notebook","text":"Github Google Colab Binder\nTo run the notebook locally, open your terminal, clone the Nexus repository, go to the notebook directory, and run Jupyter:\ngit clone https://github.com/BlueBrain/nexus.git\ncd nexus\ncd docs/src/main/paradox/docs/getting-started/notebooks\njupyter notebook one_cell_minds.ipynb","title":"2.6. Running the Notebook"},{"location":"/docs/getting-started/try-nexus.html#2-7-check-resources-in-the-sandbox","text":"Once you have registered resources through Nexus Forge (in the notebook), you can check that they are effectively present in Nexus. You now have two options to do so.","title":"2.7. Check Resources in the Sandbox"},{"location":"/docs/getting-started/try-nexus.html#2-7-1-viewing-resources-across-all-projects","text":"Navigate to the Sandbox landing page. Make sure you are logged in. You should be able to see all the data that was created through the Jupyter notebook under the My data section. Here you can see all the data that has been indexed across all projects you have the right to read from. In the case of this tutorial, you are likely to have access to your own project only.\nYou can also check resources of a particular type by clicking on the corresponding card for that type on the landing page. These cards allow you to search by different datasets. For example if you click on the card labeled “MINDS” on the screen shown in the screenshot above, you should see the following results\nPlease note that each instance of Nexus will have its own Search configuration, the BBP Sandbox has been configured to show NeuronMorphology and Trace datasets for the purpose of this tutorial.\nEach of the rows of this table represent Knowledge Graph entities that we have decided to expose, including some specific metadata describing them (the columns). You can now click on any row in this table to open the corresponding dataset and look into its details.\nYou can find more documentation on how to use Search here.","title":"2.7.1 Viewing resources across all projects"},{"location":"/docs/getting-started/try-nexus.html#2-7-2-by-browsing-your-personal-project","text":"Navigate to the Sandbox then to the correct organisation and project. In the project page, you will have the list of all resources present in your project (Default Query), including the ones that you just integrated. Depending on how you ran the notebook, you should find at least one NeuronMorphology and one Trace resource.","title":"2.7.2 By browsing your personal Project"},{"location":"/docs/getting-started/try-nexus.html#step-3-download-and-register-data-from-multiple-sources","text":"In this section, you will integrate additional data from MouseLight and the Allen Institute for Brain Science.","title":"Step 3: Download and Register Data from Multiple Sources"},{"location":"/docs/getting-started/try-nexus.html#3-1-mouselight-data","text":"The Janelia Research Campus makes MouseLight available to the scientific community. MouseLight generates complete morphological reconstructions of individual neurons from datasets of whole mouse brains imaged at sub-micron resolution.\nYou can access the MouseLight data directly in the browser. You can also access it programmatically through different endpoints, such as GraphQL: http://ml-neuronbrowser.janelia.org/graphql/.\nThe example notebooks will use these endpoints to collect and download the datasets and their metadata.","title":"3.1. MouseLight Data"},{"location":"/docs/getting-started/try-nexus.html#3-2-running-the-notebook","text":"Github Google Colab Binder\nTo run the notebook locally, open your terminal, clone the Nexus repository, go to the notebook directory, and run Jupyter:\ngit clone https://github.com/BlueBrain/nexus.git\ncd nexus\ncd docs/src/main/paradox/docs/getting-started/notebooks\njupyter notebook dataset_from_different_sources.ipynb","title":"3.2. Running the Notebook"},{"location":"/docs/getting-started/try-nexus.html#3-3-check-resources-in-the-sandbox","text":"Go back to section 2.7to learn how to check resources in the Sandbox.","title":"3.3. Check Resources in the Sandbox"},{"location":"/docs/getting-started/try-nexus.html#step-4-organize-and-visualize-cells-in-nexus-fusion","text":"Nexus Fusion allows you to browse the data stored in Nexus. Our extensible architecture also enables the development of visualization plugins.","title":"Step 4: Organize and Visualize Cells in Nexus Fusion"},{"location":"/docs/getting-started/try-nexus.html#4-1-sparql-and-rdf","text":"SPARQL is an RDF query language. In other words, it’s a way to request a subset of data from a database that conforms to the RDF (Resource Description Framework) model.\nWhen writing data to Nexus, the different payloads are stored in a long table, each row representing a resource. The data is then synced to our RDF database and thus converted to a graph. When reading the data, you can query this graph with SPARQL.\nLet us take a JSON-LD example payload:\n{\n \"@type\": [\"http://schema.org/Dataset\", \"http://www.w3.org/ns/prov#Entity\"],\n \"http://schema.org/description\": \"My first dataset\",\n \"http://schema.org/name\": \"Dataset\",\n \"http://schema.org/distribution\": [\n {\n \"@type\": \"http://schema.org/DataDownload\",\n \"http://schema.org/contentUrl\": {\n \"@id\": \"http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"http://schema.org/name\": \"mesh-gradient.png\"\n }\n ]\n}\nYou can copy and paste this JSON-LD payload in the JSON-LD Playground and see the expanded results.\nHere’s what it would look like as an RDF graph:\nThe graph is composed of triples of the form Subject - predicate -> Object. In the example above, _:b0 would be a subject (in our case _:b0 is just an arbitrary ID for the payload), is a predicate, and Dataset an object.\nIf we want to query this graph and return only the name and description of Dataset data types, we can write a simple SPARQL query:\nSELECT ?name ?description\nWHERE {\n ?resource ;\n ?name ;\n ?description .\n}\nThis would result in the following table:\nname description Dataset My first dataset\nLet’s decompose this query. The SELECT statement lists all the fields (i.e. variables) that we want to display. The WHERE clause shows how to get to these fields: which graph paths (or traversals) do we need to do to get to that field. In the WHERE clause, semi-colons ; indicate that we are still talking about the same Subject but with different predicates. A full stop . indicates that the statement is finished, i.e. that we have finished talking about a specific Subject. A WHERE clause can have multiple statements. If an Object in the statement has a value, it has to match, otherwise it won’t give any results. If the Object is prefixed by a question mark ? it becomes a variable. Variables can have any names.\nIf not using semi-colons, we could have written the query as three separate statements:\nSELECT ?name ?description\nWHERE {\n ?resource .\n ?resource ?name .\n ?resource ?description .\n}\nLet’s imagine that we now want to also get the contentUrl, the query can be adapted to:\nSELECT ?name ?description ?contentUrl\nWHERE {\n ?resource ;\n ?name ;\n ?description ;\n ?distribution .\n ?distribution ?contentUrl .\n}\nThis would result in the following table:\nname description contentURL Dataset My first dataset http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\nIf there were more resources that matched the same graph patterns, the query would have returned them as well.","title":"4.1. SPARQL and RDF"},{"location":"/docs/getting-started/try-nexus.html#4-1-1-optional-improving-json-ld-id-context-and-more","text":"The JSON-LD payload above is quite verbose. Let’s have a look at the different ways to improve it.\nThe first thing to notice is that if I want to reference my dataset, I don’t have an identifier. The node in the graph is a blank node _:b0. I can easily add an ID like this:\n{\n \"@id\": \"http://example.com/my_gradient_dataset\",\n \"@type\": [\"http://schema.org/Dataset\", \"http://www.w3.org/ns/prov#Entity\"],\n \"http://schema.org/description\": \"My first dataset\",\n \"http://schema.org/name\": \"Dataset\",\n \"http://schema.org/distribution\": [\n {\n \"@type\": \"http://schema.org/DataDownload\",\n \"http://schema.org/contentUrl\": {\n \"@id\": \"http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"http://schema.org/name\": \"mesh-gradient.png\"\n }\n ]\n}\nInstead of _:b0, the node will be identified by http://example.com/my_gradient_dataset. The @id uniquely identifies node objects.\nCan we now make the JSON-LD less verbose and easier to read? Yes, by defining a context. A context defines the short-hand names used in the JSON-LD payload. In particular, a context can contain a vocab.\n{\n \"@context\": {\n \"@vocab\": \"http://schema.org/\"\n },\n \"@id\": \"http://example.com/my_gradient_dataset\",\n \"@type\": [\"Dataset\", \"http://www.w3.org/ns/prov#Entity\"],\n \"description\": \"My first dataset\",\n \"name\": \"Dataset\",\n \"distribution\": [\n {\n \"@type\": \"DataDownload\",\n \"contentUrl\": {\n \"@id\": \"http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"name\": \"mesh-gradient.png\"\n }\n ]\n}\nIf you copy the above snippet to the JSON-LD Playground and look at the expanded form, you will notice that the properties all expand with the http://schema.org/ prefix. Don’t hesitate to do the same for the ones below. Play a little with the payload to see what happens to the expanded form.\nBut what if we want to shorten specific values? We can add them in the context as well.\n{\n \"@context\": {\n \"@vocab\": \"http://schema.org/\",\n \"Entity\": \"http://www.w3.org/ns/prov#Entity\"\n },\n \"@id\": \"http://example.com/my_gradient_dataset\",\n \"@type\": [\"Dataset\", \"Entity\"],\n \"description\": \"My first dataset\",\n \"name\": \"Dataset\",\n \"distribution\": [\n {\n \"@type\": \"DataDownload\",\n \"contentUrl\": {\n \"@id\": \"http://example.com/cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"name\": \"mesh-gradient.png\"\n }\n ]\n}\nFinally, the last improvement would be to shorten our IDs. For this we can use a base.\n{\n \"@context\": {\n \"@base\": \"http://example.com/\",\n \"@vocab\": \"http://schema.org/\",\n \"Entity\": \"http://www.w3.org/ns/prov#Entity\"\n },\n \"@id\": \"my_gradient_dataset\",\n \"@type\": [\"Dataset\", \"Entity\"],\n \"description\": \"My first dataset\",\n \"name\": \"Dataset\",\n \"distribution\": [\n {\n \"@type\": \"DataDownload\",\n \"contentUrl\": {\n \"@id\": \"cfb62f82-6d54-4e35-ab5e-3a3a164a04fb\"\n },\n \"name\": \"mesh-gradient.png\"\n }\n ]\n}\nBy default, in Nexus, the base (resp. vocab) defaults to your project, e.g. https://bbp.epfl.ch/nexus/v1/resources/github-users/adulbrich/_/ (resp. https://bbp.epfl.ch/nexus/v1/vocabs/github-users/adulbrich/).\nThe context can also point to another resource so that it is defined once and can be re-used in multiple resources. In Nexus, a default context for the Nexus-specific metadata is defined.\nThere’s much more to the JSON-LD syntax. Don’t hesitate to have a look for a more detailed explanation.","title":"4.1.1. (Optional) Improving JSON-LD: ID, Context and More"},{"location":"/docs/getting-started/try-nexus.html#4-1-2-optional-improving-sparql-prefixes","text":"The SPARQL query above was quite verbose in the sense that we had to write the full URI for predicates, similarly to the full properties URIs in the JSON payload.\nThere is a way to shorten these with PREFIX statements. Prefixes are similar to the base and vocabs for JSON-LD in their use.\nPREFIX rdf: \nPREFIX schema: \nSELECT ?name ?description ?contentUrl\nWHERE {\n ?resource rdf:type schema:Dataset ;\n schema:name ?name ;\n schema:description ?description ;\n schema:distribution ?distribution .\n ?distribution schema:contentUrl ?contentUrl .\n}\nThe new query will yield the exact same results as the one defined earlier, but is much more readable. By defining prefixes, we can replace long URIs by the prefix and the actual property. This means that for example becomes schema:distribution.\nYou will often see that instead of rdf:type (the shortened version of ), people use a. This is an RDF specific keyword to point to types. In the example above, the line would then be ?resource a schema:Dataset.\nYou can learn more about SPARQL in the official documentation.","title":"4.1.2. (Optional) Improving SPARQL: Prefixes"},{"location":"/docs/getting-started/try-nexus.html#4-2-project-and-resource-views","text":"As you saw in the example above, we can use SPARQL to query the cells in our Nexus project.\nLet’s start by accessing your Nexus instance or the Sandbox. Go to your project by clicking on the “Projects” card and searching for your project.\nIn the Sandbox, the organization corresponds to the identity provider used, and the project to your username. For example, if you used GitHub, the organization will be github-users and your project will be your GitHub username.\nIn the Project view, you will have the list of all resources that you’ve registered within your project. You can filter by type or search for a specific term in the name, label, or description.\nClick on a resource to open the Resource view.\nDepending on the resource data type, you might see one or more “plugins”. Plugins are components that will show up for specific resources or properties. For example, if you registered a neuron morphology and the data is properly attached through the distribution, you will be able to see a 3D morphology browser plugin.\nMore importantly, you will find the Advanced view plugin at the bottom of the view. Expand it and you will see the actual resource payload stored by Nexus, and navigate the graph through links, or visualize the surrounding graph in the graph tab.\nHere’s an example of the JSON payload of the neuron morphology resource previously registered (context left out for clarity):\n{\n \"@context\": {...},\n \"@id\": \"https://bbp.epfl.ch/neurosciencegraph/data/neuronmorphologies/491ea474-34f1-4143-8e1d-9f077602d36e\",\n \"@type\": [\n \"Dataset\",\n \"NeuronMorphology\"\n ],\n \"apicalDendrite\": \"spiny\",\n \"brainLocation\": {\n \"@type\": \"BrainLocation\",\n \"brainRegion\": {\n \"@id\": \"mba:778\",\n \"label\": \"VISp5\"\n },\n \"coordinatesInBrainAtlas\": {\n \"valueX\": 8881,\n \"valueY\": 953.839501299405,\n \"valueZ\": 7768.22695782726\n },\n \"hemisphere\": \"right\",\n \"layer\": \"5\"\n },\n \"cell_reporter_status\": \"positive\",\n \"contribution\": {\n \"@type\": \"Contribution\",\n \"agent\": {\n \"@id\": \"https://www.grid.ac/institutes/grid.417881.3\",\n \"@type\": \"Organization\",\n \"label\": \"Allen Institute for Brain Science\"\n }\n },\n \"csl__normalized_depth\": 0.478343598387418,\n \"distribution\": {\n \"@type\": \"DataDownload\",\n \"atLocation\": {\n \"@type\": \"Location\",\n \"store\": {\n \"@id\": \"https://bluebrain.github.io/nexus/vocabulary/diskStorageDefault\"\n }\n },\n \"contentSize\": {\n \"unitCode\": \"bytes\",\n \"value\": 83865\n },\n \"contentUrl\": \"https://sandbox.bluebrainnexus.io/v1/files/github-users/adulbrich/30704eaf-7c87-4d74-8d41-50f673961580\",\n \"digest\": {\n \"algorithm\": \"SHA-256\",\n \"value\": \"833a94e1b6de4b4bc5beef4ccc75f84cfec9d5e5f40752d7cefb0ed1f545bbda\"\n },\n \"encodingFormat\": \"application/swc\",\n \"name\": \"reconstruction.swc\"\n },\n \"generation\": {\n \"@type\": \"Generation\",\n \"activity\": {\n \"@type\": \"NeuronMorphologyReconstruction\",\n \"hadProtocol\": {}\n }\n },\n \"identifier\": 485909730,\n \"license\": {\n \"@id\": \"https://alleninstitute.org/legal/terms-use/\",\n \"@type\": \"License\"\n },\n \"name\": \"Cux2-CreERT2;Ai14-205530.03.02.01\",\n \"nr__average_contraction\": 0.891127894162828,\n \"nr__average_parent_daughter_ratio\": 0.844376941289302,\n \"nr__max_euclidean_distance\": 446.97383394351,\n \"nr__number_bifurcations\": 18,\n \"nr__number_stems\": 7,\n \"nr__reconstruction_type\": \"dendrite-only\",\n \"objectOfStudy\": {\n \"@id\": \"http://bbp.epfl.ch/neurosciencegraph/taxonomies/objectsofstudy/singlecells\",\n \"@type\": \"ObjectOfStudy\",\n \"label\": \"Single Cell\"\n },\n \"subject\": {\n \"@type\": \"Subject\",\n \"age\": {\n \"period\": \"Post-natal\"\n },\n \"identifier\": 485250100,\n \"name\": \"Cux2-CreERT2;Ai14-205530\",\n \"sex\": {},\n \"species\": {\n \"label\": \"Mus musculus\"\n },\n \"strain\": {\n \"label\": \"Cux2-CreERT2\"\n }\n },\n \"tag__apical\": \"intact\"\n}","title":"4.2. Project and Resource Views"},{"location":"/docs/getting-started/try-nexus.html#4-3-query-neuroscience-data","text":"Going back to the project view, you will notice a tab named ‘Query’. Let’s click on it and start experimenting. On clicking on the ‘Query tab’, you will see a sparql query editor.\nWe want to list the morphologies that we previously registered in our project. Let’s write some SPARQL to retrieve it.\nPREFIX nxv: \nPREFIX nsg: \nPREFIX schema: \nPREFIX prov: \nPREFIX rdf: \nPREFIX rdfs: \nPREFIX skos: \nSELECT DISTINCT ?self ?name ?brainRegion ?brainRegionLayer ?subjectSpecies ?subjectStrain ?registered_by ?registeredAt\nWHERE {\n?entity nxv:self ?self ;\n a nsg:NeuronMorphology ;\n schema:name ?name ;\n nxv:createdBy ?registered_by ;\n nxv:createdAt ?registeredAt ;\n nxv:deprecated false ;\n nsg:brainLocation / nsg:brainRegion / rdfs:label ?brainRegion ;\n nsg:brainLocation / nsg:layer ?brainRegionLayer ;\n nsg:subject / nsg:species / rdfs:label ?subjectSpecies ;\n nsg:subject / nsg:strain / rdfs:label ?subjectStrain.\n}\nLIMIT 1000\nWe list a couple more prefixes in this query. Even though we don’t use most of them, they are common ones.\nWe introduce a new notation to traverse the graph: slashes /. This helps us writing more succinct queries by not referencing a temporary variable every time we want to traverse a node.\nFinally, you will notice the self. This is an internal Nexus property (in addition to createdBy and createdAt, as illustrated by the use of the nxv prefix) that points to the actual source of the resource. We will need the self to open the resource view from a Studio (see next section).\nNote that we have have a LIMIT 1000 clause at the end. This will limit the number of returned results in case there are more than 1000.\nHere’s the result of the above query:\nself name brainRegion brainRegionLayer subjectSpecies subjectStrain registered_by registeredAt https://sandbox.bluebrainnexus.io/v1/resources/github-users/adulbrich/_/... Cux2-CreERT2;Ai14-205530.03.02.01 VISp5 5 Mus musculus Cux2-CreERT2 https://sandbox.bluebrainnexus.io/v1/realms/github/users/adulbrich 2021-07-27T18:58:45.238Z","title":"4.3. Query Neuroscience Data"},{"location":"/docs/getting-started/try-nexus.html#4-4-create-a-studio","text":"Go back to your project view. Click on the ‘Studios’ tab. It will open in a new window.\nYou will land on:\nOn this page you can create a new studio. A Studio is a dedicated web page in your project that you can organise into pages (workspaces, as horizontal tabs at the top) and sections (dashboards, as vertical tabs on the left side) and list your data in a logical way. The tables are powered by SPARQL queries and the data present in your project.\nStart by creating a Workspace. To create a workspace, click the Workspace button and in the menu that appears click Add Workspace. You will be presented with a dialog requesting the label of the workspace and optionally a description. Enter a label of your choosing and click Save.\nNext, create a Dashboard. Click the Dashboard button and choose Add from the pop-up menu. In the Dashboard creation dialog, specify the default Sparql Index view and specify the SPARQL query above. The ‘Configure Columns’ button will list the columns to be returned by the query and support specifying options on the columns such as enabling searching or sorting.\nBecause we are using the self, clicking on a row of the newly created table will open the resource view.\nIt’s your turn now to add a dashboard to list your Neuron Electrophysiology data. Create the dashboard and modify the SPARQL query above.\nCongratulations! You’ve created your very first studio, which completes this tutorial step.","title":"4.4. Create a Studio"},{"location":"/docs/getting-started/try-nexus.html#step-5-finding-similar-datasets-using-recommendations","text":"In this section, you will first learn about recommendation systems, then reuse the data you have integrated in Nexus in previous steps and build a recommendation system to find datasets that are similar to a chosen neuron morphology or electrophysiology recording.","title":"Step 5: Finding Similar Datasets using Recommendations"},{"location":"/docs/getting-started/try-nexus.html#5-1-introduction-to-recommendations","text":"Recommendation systems are widely used in many domains, for example, streaming services provide recommendations for movies or songs, online stores generate product recommendations, etc. Such systems allow selecting the most relevant entities from the vast space of all the available choices. This selection can be based on different criteria, for example, various features of target entities (movie genre, country, cast), user profiles, and interactions with the entities of interest (for example, previously watched movies).\nIn a similar way, there is a need for recommendation systems that help us to explore our Knowledge Graphs when they become overwhelmingly large. Given a node in a Knowledge Graph (corresponding to, for example, a neuron morphology dataset), we may want to recommend a set of most similar nodes according to some complex criteria.\nOne of the most common techniques for building a recommendation system is based on entity embedding that represents each entity with a numerical vector. Given a starting entity (a neuron morphology dataset), the task of finding similar entities can be reduced to a simple search for the nearest neighbors in the vector space of our embedding.\nOne of the first modern approaches to entity embedding reflecting their semantic similarity was developed by the Natural Language Processing (NLP) community and is called word2vec. To generate vector representations of words, it trains a neural network on a large text corpus from which word contexts are extracted. The resulting vector representation is able to capture the semantic similarity between different words.\nSimilarity to word2vec, node2vec builds vector representations of graph nodes. To generate ‘context’ for different nodes, this approach performs random walks and explores the neighborhood of a given node.\nFinally, another derivative of word2vec, adapted specifically for building node embedding on Knowledge Graphs, is called rdf2vec.\nIn this tutorial, we use rdf2vec in order to build a toy recommendation system for exploring similar neuron morphologies and electrophysiology recordings.\nFurther reads on graph embedding:\nGraph embedding techniques, applications, and performance: A survey Knowledge Graph Embedding: A Survey of Approaches and Applications","title":"5.1. Introduction to Recommendations"},{"location":"/docs/getting-started/try-nexus.html#5-2-running-the-notebook","text":"Github Google Colab Binder\nTo run the notebook locally, open your terminal, clone the Nexus repository, go to the notebook directory, and run Jupyter:\ngit clone https://github.com/BlueBrain/nexus.git\ncd nexus\ncd docs/src/main/paradox/docs/getting-started/notebooks\nNote: You will need gcc installed locally to run the following notebook.\njupyter notebook MOOC_Content_based_Recommender_System_using_Blue_Brain_Nexus.ipynb\nWell done! You have now completed the last part of this tutorial. To learn more, scroll down or navigate to our documentation, or start contributing to our Github repositories.\nIf you have reached this tutorial via the Simulation Neuroscience MOOC, you can now head back to the edX platform and complete this week assignment.","title":"5.2. Running the Notebook"},{"location":"/docs/getting-started/try-nexus.html#learn-more","text":"","title":"Learn More"},{"location":"/docs/getting-started/try-nexus.html#another-tutorial-with-the-movielens-dataset","text":"Nexus can be used to manage more than neuroscience data. If you want to try it, head over to our MovieLens Tutorial!","title":"Another Tutorial with the MovieLens Dataset"},{"location":"/docs/getting-started/try-nexus-movielens.html","text":"","title":"Try Nexus with the MovieLens Dataset"},{"location":"/docs/getting-started/try-nexus-movielens.html#try-nexus-with-the-movielens-dataset","text":"In this tutorial, you will use the core features of the Nexus ecosystem through our sandbox. This requires minimal technical knowledge but the ability to install a Python library and run a jupyter notebook.\nIn the first step, you’ll learn:\nto login into our Nexus Sandbox, create an organization and project, get your personal token.\nIn the second step, you’ll learn:\ninstall Nexus Forge, configure a Knowledge Graph forge, transform data, load the transformed data into the project, search for data using a SPARQL query.\nIn the third step, you’ll learn:\ncreate a Studio in Nexus Fusion, visualize and filter loaded data.\nFinally, check our Learn More section for more advanced tutorials based on the same datasets.","title":"Try Nexus with the MovieLens Dataset"},{"location":"/docs/getting-started/try-nexus-movielens.html#configuring-your-project-in-nexus-fusion","text":"The Nexus Sandbox is a deployment of Nexus Delta and Fusion publicly available to anybody. Please note that you should not store any sensitive data in this environment. Also, we do not offer guaranty as to how long the data will be kept, this is only for learning and testing purposes.\nNexus Fusion is the web interface that you will use in order to interact with Nexus Delta (the web services that manages the underlying knowledge graph).\nPlease bear in mind that the data stored in the Nexus Sandbox is being purged at regular intervals. We recommend you do not store any sensitive data in this environment since it is accessible to many other users.\nThe first step is to login, by clicking in the upper right corner of the screen. You can login with your Github credentials.\nThe Sandbox environment automatically provisions a project for you so you don’t have to. From the landing page, click on the “Organizations” card and you will see the list of organisations in Nexus. A project is contained in an organisation. The organisation where your project is created depends on your identity provider. If you logged in with GitHub for example, your project was created under the github-users organisation.\nNow open the github-users organisation and find your own project, which is named after your login. Once the project is created, you’ll land on the project view. There is no resources at first. Wait for it. You will quickly see that the project has finished indexing (top right corner).\nWhich means that the system has created default indices and storage for you.\nWe’re all set! We now have a project to host our resources and datasets. Let’s move on to the second part of this tutorial.","title":"Configuring your Project in Nexus Fusion"},{"location":"/docs/getting-started/try-nexus-movielens.html#working-with-data-in-nexus-forge","text":"We’ll load the MovieLens dataset into the created project within Nexus Delta using the python framework Nexus Forge.\nA jupyter notebook is available for this part of the tutorial and can be spawn easily using Google Colab, binder, or locally:\nGoogle Colab binder Github\nFor local execution, Nexus Forge can be installed using these instructions. Make sure that the jupyter notebook|lab is launched in the same virtual environment where Nexus Forge is installed. Alternatively, set up a specialized kernel.\nIf you want to try some other examples of Nexus Forge, you can use these notebooks.\nThe next step is to use this query to create a Studio view in Nexus Fusion.","title":"Working with Data in Nexus Forge"},{"location":"/docs/getting-started/try-nexus-movielens.html#exploring-the-graph-in-nexus-fusion","text":"Login the Sandbox and navigate your previously created project.\nClick on the studio tab.\nIn a new browser tab, you will see a list of all studios you have access to. Click on Create Studio.\nGive a name to your Studio and click Save.\nHere’s your empty Studio. Click the + icon to Add Workspace.\nGive a name to your Workspace and click Save.\nYou now have one Workspace configured. Click the + icon to Add Dashboard..\nIn order to query the graph in a Studio Dashboard, a small modification of the previous query is necessary. You can find more information about it in the Studio docs.\nPREFIX vocab: \nPREFIX nxv: \nSELECT DISTINCT ?self ?title\nWHERE {\n?id nxv:self ?self ;\n nxv:deprecated false ;\n vocab:title ?title ;\n ^vocab:movieId / vocab:tag \"thought-provoking\" .\n}\nLIMIT 20\nChoose a name for your Dashboard, copy the query. For the “View” select https://bluebrain.github.io/nexus/vocabulary/defaultSparqlIndex from the dropdown. Click on Configure Columns button to see a preview of all the columns the dashboard will have. Now click Save.\nAnd there are the results:\nGood job! You just finished this introductory course to Nexus using our Sandbox. You can now install Nexus locally or continue with the tutorials below.","title":"Exploring the Graph in Nexus Fusion"},{"location":"/docs/getting-started/try-nexus-movielens.html#learn-more","text":"","title":"Learn More"},{"location":"/docs/getting-started/try-nexus-movielens.html#querying-knowledge-graph-using-sparql","text":"This tutorial introduces the basics of SPARQL, a query language for querying RDF based knowledge graph. It also demonstrates how to query a Nexus SparqlView.\nYou will build queries to explore and navigate a knowledge graph using SPARQL and Nexus.\nYou will learn:\nthe basics of the SPARQL query language, how to connect to and query a SparqlView in Nexus.\nYou will need Python 3.5 or higher with support for Jupyter notebook.\nThis tutorial code is available on:\nGithub Google Colab","title":"Querying knowledge graph using SPARQL"},{"location":"/docs/getting-started/try-nexus-movielens.html#querying-a-knowledge-graph-using-elasticsearch","text":"The goal of this notebook is to learn how to connect to an Elasticsearch view and run queries against it.\nIt is not a tutorial about the Elasticsearch DSL language for which many well written learning resources are available.\nYou will build a simple python client to connect to a Nexus ElasticSearchView and query a knowledge graph using Elasticsearch DSL.\nYou will learn how to connect to and query a ElasticSearchView in Nexus.\nYou will need Python 3.5 or higher with support for Jupyter notebook.\nThe tutorial code is available on:\nGithub Google Colab","title":"Querying a Knowledge Graph using Elasticsearch"},{"location":"/docs/getting-started/try-nexus-movielens.html#linking-data-on-the-web","text":"In this tutorial, we demonstrate how to consume structured data published on the web according to the Linked data principles to extend and enrich a knowledge graph.\nYou will build a simple pipeline to query entities managed within Blue Brain Nexus, connect them with entities available on the web as structured data and extend and enrich their metadata.\nYou will learn:\nan understanding of linked data principles, how to query data stored in a Nexus SparqlView, how to query structured data on the web, how to extend the metadata of entities managed within Blue Brain Nexus with external structured data on the web: we target Wikidata as an example, how to update entities within Blue Brain Nexus using the SDK and enrich their metadata.\nYou will need Python 3.6 or higher with support for Jupyter notebook.\nThis tutorial code is available on:\nGithub Google Colab","title":"Linking data on the web"},{"location":"/docs/getting-started/running-nexus/index.html","text":"","title":"Running Nexus"},{"location":"/docs/getting-started/running-nexus/index.html#running-nexus","text":"If you wish to quickly try out Nexus, we provide a public sandbox. For a more in-depth test-drive of Nexus on your machine, we recommend the Docker Compose approach. For a production deployment on your in-house or cloud infrastructure, please refer to our deployment guide.","title":"Running Nexus"},{"location":"/docs/getting-started/running-nexus/index.html#using-the-public-sandbox","text":"A public instance of Nexus is running at https://sandbox.bluebrainnexus.io. You can log in with a GitHub account. It’s provided for evaluation purposes only, without any guarantees.\nThe API root is https://sandbox.bluebrainnexus.io/v1.\nNote Do not ingest any proprietary or sensitive data. The environment will be wiped regularly, your data and credentials can disappear anytime.","title":"Using the public sandbox"},{"location":"/docs/getting-started/running-nexus/index.html#run-nexus-locally-with-docker","text":"","title":"Run Nexus locally with Docker"},{"location":"/docs/getting-started/running-nexus/index.html#requirements","text":"","title":"Requirements"},{"location":"/docs/getting-started/running-nexus/index.html#docker","text":"Regardless of your OS, make sure to run a recent version of the Docker Engine. This was tested with version 20.10.23. The Docker Engine, along the Docker CLI, come with an installation of Docker Desktop. Visit the official Docker Desktop documentation for detailed installation steps.\nCommand :\ndocker --version\nExample :\n$ docker --version\nDocker version 20.10.23, build 7155243","title":"Docker"},{"location":"/docs/getting-started/running-nexus/index.html#memory-and-cpu-limits","text":"On macOS and Windows, Docker effectively runs containers inside a VM created by the system hypervisor. Nexus requires at least 2 CPUs and 8 GiB of memory in total. You can increase the limits in Docker settings in the menu Settings > Resources.\nFor a proper evaluation using Docker, we recommend allocating at least 16GiB of RAM to run the provided templates. Feel free to tweak memory limits in order to fit your hardware constraints. At the cost of a slower startup and a decreased overall performance, you should be able to go as low as:\nService Memory [MiB] PostgreSQL 512 Elasticsearch 512 Blazegraph 1024 Delta 1024","title":"Memory and CPU limits"},{"location":"/docs/getting-started/running-nexus/index.html#docker-compose","text":"","title":"Docker Compose"},{"location":"/docs/getting-started/running-nexus/index.html#set-up","text":"Download the Docker Compose template into a directory of your choice, for instance ~/docker/nexus/. Download the Delta configuration to the same directory. Download the http proxy configuration to the same directory.","title":"Set-up"},{"location":"/docs/getting-started/running-nexus/index.html#starting-nexus","text":"From within the directory that contains the docker-compose.yaml you downloaded, run the containers using Docker Compose:\nCommand :\ndocker compose --project-name nexus --file=docker-compose.yaml up --detach\nExample :\n$ cd ~/docker/nexus\n$ docker compose --project-name nexus --file=docker-compose.yaml up --detach\n...\n⠿ Network nexus_default Created 0.0s\n⠿ Container nexus-elasticsearch-1 Started 1.2s\n⠿ Container nexus-postgres-1 Started 1.2s\n⠿ Container nexus-blazegraph-1 Started 1.1s\n⠿ Container nexus-delta-1 Started 1.6s\n⠿ Container nexus-web-1 Started 1.8s\n⠿ Container nexus-router-1 Started 2.1s\nWhen running the command for the first time, Docker will pull all necessary images from Dockerhub if they are not available locally. Once all containers are running, wait one or two minutes and you should be able to access Nexus locally, on the port 80:\nCommand :\ncurl http://localhost/v1/version\nExample :\n$ curl http://localhost/v1/version | jq\n{\n \"@context\": \"https://bluebrain.github.io/nexus/contexts/version.json\",\n \"delta\": \"1.9.0\",\n \"dependencies\": {\n \"blazegraph\": \"2.1.6-SNAPSHOT\",\n \"elasticsearch\": \"8.11.1\",\n \"postgres\": \"15.5\"\n },\n \"environment\": \"dev\",\n \"plugins\": {\n \"archive\": \"1.9.0\",\n \"blazegraph\": \"1.9.0\",\n \"composite-views\": \"1.9.0\",\n \"elasticsearch\": \"1.9.0\",\n \"storage\": \"1.9.0\"\n }\n}","title":"Starting Nexus"},{"location":"/docs/getting-started/running-nexus/index.html#using-fusion","text":"Fusion can be accessed by opening http://localhost in your web browser. You can start by creating an organization from the http://localhost/admin page.\nNote This setup runs the Nexus ecosystem without an identity provider, and the anonymous user is given all default permissions; do not publicly expose the endpoints of such a deployment.","title":"Using Fusion"},{"location":"/docs/getting-started/running-nexus/index.html#administration","text":"To list running services or access logs, please refer to the official Docker documentation.","title":"Administration"},{"location":"/docs/getting-started/running-nexus/index.html#stopping-nexus","text":"You can stop and delete the entire deployment with:\nCommand :\ndocker compose --project-name nexus down --volumes\nExample :\n$ docker compose --project-name nexus down --volumes\n[+] Running 7/7\n⠿ Container nexus-router-1 Removed 0.2s\n⠿ Container nexus-web-1 Removed 0.3s\n⠿ Container nexus-delta-1 Removed 0.5s\n⠿ Container nexus-postgres-1 Removed 0.3s\n⠿ Container nexus-blazegraph-1 Removed 10.3s\n⠿ Container nexus-elasticsearch-1 Removed 1.0s\n⠿ Network nexus_default Removed 0.1s\nNote As no data is persisted outside the containers, everything will be lost once you shut down the Nexus deployment. If you’d like help with creating persistent volumes, feel free to contact us on Github Discussions.","title":"Stopping Nexus"},{"location":"/docs/getting-started/running-nexus/index.html#endpoints","text":"The provided reverse proxy (the nginx image) exposes several endpoints:\nroot: Nexus Fusion v1: Nexus Delta elasticsearch: Elasticsearch endpoint blazegraph: Blazegraph web interface\nIf you’d like to customize the listening port or remove unnecessary endpoints, you can simply modify the nginx.conf file.","title":"Endpoints"},{"location":"/docs/getting-started/running-nexus/index.html#postgresql-partitioning","text":"Nexus Delta takes advantage of PostgreSQL’s Table Partitioning feature. This allows for improved query performance, and facilitates loading, deleting, or transferring data.\nThe public.scoped_events and public.scoped_states are partitioned by organization, which is itself partitioned by the projects it contains; this follows the natural hierarchy that can be found in Nexus Delta.\nNexus Delta takes care of handling the creation and deletion of the partitions.\nIf the created project is the first one of a given organization, both the organization partition and the project subpartition will be created. If the organization partition already exist, then only the project subpartition will be created upon project creation.\nThe naming scheme of the (sub)partitions is as follows:\n{table_name}_{MD5_org_hash} for organization partitions\n{table_name}_{MD5_project_hash} for project partition\nwhere\n{table_name} is either scoped_events or scoped_states {MD5_org_hash} is the MD5 hash of the organization name {MD5_project_has} is the MD5 hash of the project reference (i.e. has the form {org_name}/{project_name})\nMD5 hashing is used in order to guarantee a constant partition name length (PostgreSQL table names are limited to 63 character by default), as well as to avoid any special characters that might be allowed in project names but not in PostgreSQL table names (such as -).\nExample:\nYou create the organization called myorg, inside of which you create the myproject project. When the project is created, Nexus Delta will have created the following partitions:\nscoped_events_B665280652D01C4679777AFD9861170C, the partition of events from the myorg organization scoped_events_7922DA7049D5E38C83053EE145B27596, the subpartition of the events from the myorg/myproject project scoped_states_B665280652D01C4679777AFD9861170C, the partition of states from the myorg organization scoped_states_7922DA7049D5E38C83053EE145B27596, the subpartition of the states from the myorg/myproject project","title":"PostgreSQL partitioning"},{"location":"/docs/getting-started/running-nexus/index.html#advanced-subpartitioning","text":"While Nexus Delta provides table partitioning out-of-the-box, it is primarily addressing the case where the data is more or less uniformly spread out across multiple projects. If however there is one or more project that are very large, it is possible to add further subpartitions according to a custom rule. This custom subpartitioning must be decided on a case-by-case basis using your knowledge of the given project; the idea is to create uniform partitions of your project. Please refer to the PostgreSQL Table Partitioning documentation.","title":"Advanced subpartitioning"},{"location":"/docs/getting-started/running-nexus/index.html#on-premise-cloud-deployment","text":"There are several things to consider when preparing to deploy Nexus “on premise” because the setup depends a lot on the various usage profiles, but the most important categories would be:\nAvailability Latency & throughput Capacity Efficient use of hardware resources Backup and restore Monitoring & alerting\nEach of the Nexus services and “off the shelf” products can be deployed as a single instance or as a cluster (with one exception at this point being Blazegraph which doesn’t come with a clustering option). The advantages for deploying clusters are generally higher availability, capacity and throughput at the cost of higher latency, consistency and having to potentially deal with network instability.\nThe decision to go with single node deployments or clustered deployments can be revisited later on and mixed setups (some services single node while others clustered) are also possible.\nThe Nexus distribution is made up of Docker images which can be run on any host operating system and each of the “off the shelf” products that also offer Docker as a deployment option. We would generally recommend using a container orchestration solution like Kubernetes as it offers good management capabilities, discovery, load balancing and self-healing. They also accommodate changes in hardware allocations for the deployments, changes that can occur due to evolving usage patterns, software updates etc. Currently, the largest Nexus deployment is at EPFL and runs on Kubernetes.","title":"On premise / cloud deployment"},{"location":"/docs/getting-started/running-nexus/index.html#choice-of-hardware","text":"Depending on the target throughput, usage profiles and data volume the hardware specification can vary greatly; please take a look at the benchmarks section to get an idea of what you should expect in terms of throughput with various hardware configurations. When the usage profiles are unknown a couple of rules of thumb should narrow the scope:\nNexus uses a collection of data stores (PostgreSQL, Elasticsearch, Blazegraph) which depend performance wise to the underlying disk access, so: prefer local storage over network storage for lower latency when doing IO, prefer SSD over HDDs because random access speed is more important than sequential access, one exception is the file storage (file resources which are stored as binary blobs on the filesystem) where the network disks should not be a cause for concern, nor random access speed; this assumes that accessing attachments is not the at the top in the usage profile All of Nexus services and most of the “off the shelf” products are built to run on top of the JVM which usually require more memory over computing power. A rough ratio of 2 CPU cores per 8GB of RAM is probably a good one (this of course depends on the CPU specification). Due to the design for scalability of Nexus services and “off the shelf” products the network is a very important characteristic of the deployment as frequent dropped packets or network partitions can seriously affect the availability of the system. Clustered / distributed systems generally use some form of consensus){ open=new } which is significantly affected by the reliability of the network. If the reliability of the network is a concern within the target deployment then vertical scalability is desirable over horizontal scalability: fewer host nodes with better specifications is better over more commodity hardware host nodes.","title":"Choice of hardware"},{"location":"/docs/getting-started/running-nexus/index.html#postgresql","text":"Nexus uses PostgreSQL as its primary store as for its strong reputation for performance, reliability and flexibility. It can also be run in different contexts from integration to\nSince this is the primary store it is the most important system to be backed up. All of the data that Nexus uses in other stores can be recomputed from the one stored in PostgreSQL as the other stores are used as mere indexing systems.\n// TODO capacity planning + recommendations\nAs described in the architecture section the generally adopted persistence model is an EventSourced model in which the data store is used as an append only store. This has implications to the total amount of disk used by the primary store.\n// TODO formula computing disk space","title":"PostgreSQL"},{"location":"/docs/getting-started/running-nexus/index.html#elasticsearch","text":"Nexus uses Elasticsearch to host several system indices and user defined ones. It offers sharding and replication out of the box. Deciding whether this system requires backup depends on the tolerated time for a restore. Nexus can be instructed to rebuild all indices using the data from the primary store, but being an incremental indexing process it can take longer than restoring from a backup. Since it can be configured to host a number of replicas for each shard it can tolerate a number of node failures.\nThe Elasticsearch setup documentation contains the necessary information on how to install and configure it, but recommendations on sizing the nodes and cluster are scarce because it depends on usage.\nA formula for computing the required disk space:\ntotal = (resource_size * count * documents + lucene_index) * replication_factor\n… where the lucene_index while it can vary should be less than twice the size of the original documents.\nAn example, assuming:\n10KB per resource 1.000.000 distinct resources 3 documents per resource (the number of documents depends on the configured views in the system) 2 additional shard replicas (replication factor of 3)\n… the total required disk size would be:\n(10KB * 1.000.000 * 3 + 2 * (10KB * 1.000.000 * 3)) * 3 = 270.000.000KB ~= 260GB\nThe resulting size represents the total disk space of the data nodes in the cluster; a 5 data node cluster with the data volume in the example above would have to be configured with 60GB disks per node.","title":"Elasticsearch"},{"location":"/docs/getting-started/running-nexus/index.html#blazegraph","text":"Nexus uses Blazegraph as an RDF (triple) store to provide a advanced querying capabilities on the hosted data. This store is treated as a specialized index on the data so as with Kafka and Elasticsearch in case of failures, the system can be fully restored from the primary store. While the technology is advertised to support High Availability and Scaleout deployment configurations, we have yet to be able to setup a deployment in this fashion.\nWe currently recommend deploying Blazegraph using the prepackaged tar.gz distribution available to download from GitHub.\nNote We’re looking at alternative technologies and possible application level (within Nexus) sharding and replicas.\nThe Hardware Configuration section in the documentation gives a couple of hints about the requirements to operate Blazegraph and there are additional sections for optimizations in terms of Performance, IO and Query.\nBlazegraph stores data in an append only journal which means updates will use additional disk space.\nA formula for computing the required disk space:\ntotal = (resource_triples + nexus_triples) * count * number_updates * triple_size + lucene_index\n… where the lucene_index while it can vary should be less than twice the size of the original documents.\nAn example, assuming:\n100 triples (rough estimate for a 10KB json-ld resource representation) 20 additional nexus triples on average 1.000.000 distinct resources 10 updates per resource 200 bytes triple size (using quads mode)\n… the total required disk size would be:\n(100 + 20) * 1.000.000 * 10 * 200 / 1024 * 3 ~= 700.000.000KB ~= 670GB\nCompactions can be applied to the journal using the CompactJournalUtility to reduce the disk usage, but it takes quite a bit a time and requires taking the software offline during the process.","title":"Blazegraph"},{"location":"/docs/getting-started/running-nexus/configuration/index.html","text":"","title":"Nexus configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#nexus-configuration","text":"Nexus Delta service can be highly customized using configuration file(s). Many things can be adapted to your deployment needs: port where the service is running, timeouts, pagination defaults, etc.\nThere are 3 ways to modify the default configuration:\nSetting the env variable DELTA_EXTERNAL_CONF which defines the path to a HOCON file. The configuration keys that are defined here can be overridden by the other methods. Using JVM properties as arguments when running the service: -D{property}. For example: -Dapp.http.interface=\"127.0.0.1\". Using FORCE_CONFIG_{property} environment variables. In order to enable this style of configuration, the JVM property -Dconfig.override_with_env_vars=true needs to be set. Once set, a configuration flag can be overridden. For example: CONFIG_FORCE_app_http_interface=\"127.0.0.1\".\nIn terms of JVM pool memory allocation, we recommend setting the following values to the JAVA_OPTS environment variable: -Xms4g -Xmx4g. The recommended values should be changed accordingly with the usage of Nexus Delta, the number of projects and the resources/schemas size.\nIn order to successfully run Nexus Delta there is a minimum set of configuration flags that need to be specified","title":"Nexus configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#http-configuration","text":"The http section of the configuration defines the binding address and port where the service will be listening.\nThe configuration flag akka.http.server.parsing.max-content-length can be used to control the maximum payload size allowed for Nexus Delta resources. This value applies to all posted resources except for files.","title":"Http configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#postgres-configuration","text":"The database section of the configuration defines the postgres specific configuration. As Nexus Delta uses three separate pools (‘read’, ‘write’, ‘streaming’), it is recommended to set the host, port, database name, username, and password via the app.defaults.database field, as it will apply to all pools. It is however possible to accommodate more advanced setups by configuring each pool separately by changing its respective app.database.{read|write|streaming} fields.\nThe pool size can be set using the app.defaults.database.access.pool-size setting for all pools, or individually for each pool (app.database.{read|write|streaming}.access.pool-size).\nNote A default Postgres deployment will limit the number of connections to 100, unless configured otherwise. See the Postgres Connection and Authentication documentation.\nBefore running Nexus Delta, the init scripts should be run in the lexicographical order.\nIt is possible to let Nexus Delta automatically create them using the following configuration parameters: app.database.tables-autocreate=true.\nNote Auto creation of tables is included as a development convenience and should be avoided in production.","title":"Postgres configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#rdf-parser","text":"The underlying Apache Jena parser used to validate incoming data is configurable using the json-ld-api field to enable different levels of strictness.","title":"RDF parser"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#service-account-configuration","text":"Nexus Delta uses a service account to perform automatic tasks under the hood. Examples of it are:\nGranting default ACLs to the user creating a project. Creating default views on project creation.\nThe service-account section of the configuration defines the service account configuration.","title":"Service account configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#automatic-project-provisioning","text":"Automatic project provisioning allows to create a dedicated project for users the first time they connect to Delta that is to say the first time, they query the project listing endpoints.\nThe generated project label will be:\nThe current username where only non-diacritic alphabetic characters ([a-zA-Z]), numbers, dashes and underscores will be preserved. This resulting string is then truncated to 64 characters if needed.\nThis feature can be turned on via the flag app.automatic-provisioning.enabled.\nThe automatic-provisioning section of the configuration defines the project provisioning configuration.","title":"Automatic project provisioning"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#fusion-configuration","text":"When fetching a resource, Nexus Delta allows to return a redirection to its representation in Fusion by providing text/html in the Accept header.\nThe fusion section of the configuration defines the fusion configuration.","title":"Fusion configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#projections-configuration","text":"Projections in Nexus Delta are asynchronous processes that can replay the event log and process this information. For more information on projections, please refer to the Architecture page.\nThe projections section of the configuration allows to configure the projections.\nIn case of failure in a projection, Nexus Delta records the failure information inside the public.failed_elem_logs PostgreSQL table, which can be used for analysis, and ultimately resolution of the failures. The configuration allows to set how long the failure information is stored for (app.projections.failed-elem-ttl), and how often the projection deleting the expired failures is awoken (app.projections.delete-expired-every).","title":"Projections configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#plugins-configuration","text":"Since 1.5.0, Nexus Delta supports plugins. Jar files present inside the local directory defined by the DELTA_PLUGINS environment variable are loaded as plugins into the Delta service.\nEach plugin configuration is rooted under plugins.{plugin_name}. All plugins have a plugins.{plugin_name}.priority configuration flag used to determine the order in which the routes are handled in case of collisions.\nFor more information about plugins, please refer to the Plugins page.","title":"Plugins configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#elasticsearch-views-plugin-configuration","text":"The elasticsearch plugin configuration can be found here.\nThe most important flags are: * plugins.elasticsearch.base which defines the endpoint where the Elasticsearch service is running. * plugins.elasticsearch.credentials.username and plugins.elasticsearch.credentials.password to allow to access to a secured Elasticsearch cluster. The user provided should have the privileges to create/delete indices and read/index from them.\nPlease refer to the Elasticsearch configuration which describes the different steps to achieve this.","title":"Elasticsearch views plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#blazegraph-views-plugin-configuration","text":"The blazegraph plugin configuration can be found here.\nThe most important flag is plugins.blazegraph.base which defines the endpoint where the Blazegraph service is running.\nThe plugins.blazegraph.slow-queries section of the Blazegraph configuration defines what is considered a slow Blazegraph query, which will get logged in the public.blazegraph_queries PostgreSQL table. This can be used to understand which Blazegraph queries can be improved.","title":"Blazegraph views plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#composite-views-plugin-configuration","text":"The composite views plugin configuration can be found here.\nThere are several configuration flags related to tweaking the range of values allowed for sources, projections and rebuild interval.\nAuthentication for remote sources can be specified in three different ways. The value of plugins.composite-views.remote-source-credentials should be speficied in the same way as remote storages, as shown here","title":"Composite views plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#storage-plugin-configuration","text":"The storage plugin configuration can be found here.\nNexus Delta supports 3 types of storages: ‘disk’, ‘amazon’ (s3 compatible) and ‘remote’.\nFor disk storages the most relevant configuration flag is plugins.storage.storages.disk.default-volume, which defines the default location in the Nexus Delta filesystem where the files using that storage are going to be saved. For S3 compatible storages the most relevant configuration flags are the ones related to the S3 settings: plugins.storage.storages.amazon.default-endpoint, plugins.storage.storages.amazon.default-access-key and plugins.storage.storages.amazon.default-secret-key. For remote disk storages the most relevant configuration flags are plugins.storage.storages.remote-disk.default-endpoint (the endpoint where the remote storage service is running) and plugins.storage.storages.remote-disk.credentials (the method to authenticate to the remote storage service).","title":"Storage plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#file-configuration","text":"When the media type is not provided by the user, Delta relies on automatic detection based on the file extension in order to provide one.\nFrom 1.9, it is possible to provide a list of extensions with an associated media type to compute the media type.\nThis list can be defined at files.media-type-detector.extensions:\nfiles {\n # Allows to define default media types for the given file extensions\n media-type-detector {\n extensions {\n custom = \"application/custom\"\n ntriples = \"application/n-triples\"\n }\n }\n}\nThe media type resolution process follow this order stopping at the first successful step:\nSelect the Content-Type header from the file creation/update request Compare the extension to the custom list provided in the configuratio Fallback on akka automatic detection Fallback to the default value application/octet-stream","title":"File configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#remote-storage-configuration","text":"Authentication for remote storage can be specified in three different ways. The value of plugins.storage.storages.remote-disk.credentials can be:","title":"Remote storage configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#recommended-client-credentials-openid-authentication-","text":"{\n type: \"client-credentials\"\n user: \"username\"\n password: \"password\"\n realm: \"internal\"\n}\nThis configuration tells Delta to log into the internal realm (which should have already been defined) with the user and password credentials, which will give Delta an access token to use when making requests to remote storage","title":"Recommended: client credentials (OpenId authentication)"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#anonymous","text":"{\n type: \"anonymous\"\n}","title":"Anonymous"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#long-living-auth-token-legacy-","text":"{\n type: \"jwt-token\"\n token: \"long-living-auth-token\"\n}","title":"Long-living auth token (legacy)"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#archive-plugin-configuration","text":"The archive plugin configuration can be found here.","title":"Archive plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#jira-plugin-configuration","text":"The Jira plugin configuration can be found here.\nSetting up the Jira plugin needs to set up the endpoint of the Jira instance but also the consumer key, the consumer secret and the private key required to interact with Jira (more details including the configuration steps in Jira here).","title":"Jira plugin configuration"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#monitoring","text":"For monitoring, Nexus Delta relies on Kamon.\nKamon can be disabled by passing the environment variable KAMON_ENABLED set to false.\nDelta configuration for Kamon is provided in the monitoring section. For a more complete description on the different options available, please look at the Kamon website.","title":"Monitoring"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#instrumentation","text":"Delta provides the Kamon instrumentation for:\nExecutors Scala futures Logback System metrics","title":"Instrumentation"},{"location":"/docs/getting-started/running-nexus/configuration/index.html#reporters","text":"Kamon reporters are also available for:\nJaeger Prometheus","title":"Reporters"},{"location":"/docs/getting-started/running-nexus/search-configuration.html","text":"","title":"Search configuration"},{"location":"/docs/getting-started/running-nexus/search-configuration.html#search-configuration","text":"Nexus provides global search functionality across all projects through the search plugin.\nWarning The search plugin is experimental and its functionality and API can change without notice.\nThere are several aspects that have been taken into consideration when adding global search capabilities in Nexus:\nglobal search requires a common (index) data model for correct analysis, indexing and querying it must obey the configured access control (search results should include only entries that the client has access to) clients must be able to discover the data model in order to be able to build appropriate queries projects administrators should be able to control, reconfigure or opt out of presenting information in global search","title":"Search configuration"},{"location":"/docs/getting-started/running-nexus/search-configuration.html#how-global-search-works","text":"Considering the requirements listed above, the implementation relies on existing Nexus features, namely:\nComposite Views as control resources for partitioning of indices, how data is indexed, what information to collect, what permissions are required for querying Automatic provisioning of project resources after creation Plugins for orchestrating the behaviour and exposing specific endpoints\nWhen the search plugin is enabled and configured it will automatically create within each project a CompositeView that controls what resources are indexed and what information is collected for each resource. The reasons for using one CompositeView per project are that resources shapes may differ between projects but also the indices must be partitioned such that when consuming the query interface, the query must be dispatched only to the indices that the client has access to. The CompositeView id is identical for each project: https://bluebrain.github.io/nexus/vocabulary/searchView.\nOnce the CompositeView is created by the plugin, it can be updated by each project administrator (specifically any client that demonstrates views/write permission on the target project) to adjust the configuration based on the specifics of the project (different access control, different resource shapes, custom selection of resources etc.).\nCompositeViews have been chosen because they are quite versatile, support a wide range of configuration options:\nmultiple sources multiple projections (indices) project graph traversal for collecting the necessary fields simple transformations\nMore information about CompositeViews can be found in the API Reference.\nThe search plugin introduces a new namespace (/v1/search) with two sub-resources (query and config).\nThe query endpoint accepts submitting an Elasticsearch query via POST, similar to other views based on Elasticsearch, like ElasticSearchView, AggregateElasticSearchView or CompositeView with configured Elasticsearch projections. The query will be dispatched to all ElasticSearch indices managed by the CompositeViews created by the search plugin (the ones that share the id mentioned above) for which the client has access to. This ensures that access to information is restricted based on each project’s access control.\nThe config endpoint allows clients to discover the underlying index data model such that it can present users (like in the case of Fusion) an appropriate interface for querying, filtering, sorting, aggregations etc. A minimal response for the config endpoint is like the following example:\n{\n \"fields\": [\n {\n \"name\": \"project\",\n \"label\": \"Project\",\n \"array\": false,\n \"optional\": false,\n \"fields\": [\n {\n \"name\": \"identifier\",\n \"format\": [\n \"uri\"\n ],\n \"optional\": false\n },\n {\n \"name\": \"label\",\n \"format\": [\n \"keyword\",\n \"text\"\n ],\n \"optional\": false\n }\n ]\n },\n {\n \"name\": \"@type\",\n \"label\": \"Types\",\n \"array\": true,\n \"optional\": false,\n \"format\": [\n \"uri\"\n ]\n }\n ]\n}\n… where the returned document describes a set of fields to be expected in the indices:\nname: String - the name of the field in the Elasticsearch document label: String - a human-readable label to be presented to users array: Boolean - true if the field can have multiple values, false otherwise optional: Boolean - true if the field may not exist in certain documents, false otherwise format: Array(String) - the expected formats of the field (e.g. uri, keyword, text, boolean, number etc.); format and fields cannot be present at the same time fields: Array(Object) - enumeration of nested fields; there are situations where a field value can (should) be handled differently depending on the intent, like for example ontological values that are represented by a Uri but also a String (name or label). Clients should be aware of such case to understand what to present to their users but also how to properly compute queries. format and fields cannot be present at the same time fields.name: String - the name of the sub-field in the Elasticsearch document fields.format: Array(String) - the expected formats of the field (e.g. uri, keyword, text, boolean, number etc.) fields.optional: Boolean - true if the field may not exist in certain documents, false otherwise\nThe config endpoint was created to allow clients to discover how resources are indexed and can be queried. It is currently loaded as a static file (plugins.search.fields={pathToFile}) during Delta’s bootstrapping, and it must match the rest of the search configuration:\nplugins.search.indexing.resource-types={pathToFile} - the list of types which will be used to filter resources to be indexed in the ElasticSearch projection plugins.search.indexing.query={pathToFile} - SPARQL construct query that will be used to create triples which will be then compacted using the provided context and indexed in the ElasticSearch projection plugins.search.indexing.context={pathToFile} - the context which is used to transform the results of the SPARQL construct query into compacted JSON-LD which will be indexed in the ElasticSearch projection plugins.search.indexing.mapping={pathToFile} - the Elasticsearch mappings that will be used in the ElasticSearch projection plugins.search.indexing.settings={pathToFile}- additional Elasticsearch settings that will be used in the ElasticSearch projection\nThe search plugin must also be enabled using the plugins.search.enabled=true setting.\nThese additional settings pertain to the configuration of the CompositeViews that are automatically provisioned by the search plugin. The CompositeView API Reference provides a detailed explanation on how CompositeViews work and how these options affect the generation of the indices.","title":"How Global Search works"},{"location":"/docs/getting-started/running-nexus/search-configuration.html#example-use-case","text":"This section describes a search configuration for a hypothetical data model presented in the diagram below. The example uses four related data types (Dataset, DataDownload, Person and License) and the intent is to provide the ability to query resources of type Dataset along with information registered in related resources (of type DataDownload, Person or License).\nThere are a couple of things to notice in the data model diagram:\nschema:name and rdfs:label are both optional but mostly used for the same purpose; the information should be collected from one with a fallback on the other schema:license is also optional, not all datasets may have a license when some fields are marked as optional it means that the resource of type Dataset may not include those fields, but this doesn’t mean that all related resources exist (a Dataset may refer to a Person that does not exist in the project)\nThe goal is that indexing will produce Elasticsearch documents that has the following structure:\n{\n \"@id\": \"...\",\n \"@type\": [\"http://schema.org/Dataset\", \"http://other...\"],\n \"name\": \"\",\n \"description\": \"...\",\n \"author\": \" if exists\",\n \"license\": \"