Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor!: change all project IRIs to contain UUID instead of shortcode (DEV-1400) #2255

Merged
merged 29 commits into from Oct 27, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
6d3d8bc
add test data
mpro7 Oct 18, 2022
ed9725d
add plugin and simple test
mpro7 Oct 18, 2022
8445698
adjust the code to use Map of IRIs to change
mpro7 Oct 18, 2022
b848f78
add IRIs and UUIDs to Map
mpro7 Oct 18, 2022
4bc8a73
replace var
mpro7 Oct 18, 2022
9246a26
Merge branch 'main' into DEV-1400-dsp-api-fix-project-iris
mpro7 Oct 18, 2022
feacfd7
make plugin more functional
mpro7 Oct 18, 2022
3267047
simplify test & enhance test cases
mpro7 Oct 19, 2022
f2e6b99
activate plugin
mpro7 Oct 19, 2022
2950358
remove BEOL quickfix
mpro7 Oct 19, 2022
ed50d57
change project IRI creation way
mpro7 Oct 19, 2022
f9bbeb0
fix test
mpro7 Oct 19, 2022
221be70
fix project IRI validation
mpro7 Oct 20, 2022
16818b4
remove test which is not needed anymore
mpro7 Oct 20, 2022
57a5920
change all project IRIs instead of plugin trigs
mpro7 Oct 20, 2022
4292ae5
remove bad test
mpro7 Oct 20, 2022
1231ee6
fix tests
mpro7 Oct 21, 2022
e37df28
Merge branch 'main' into DEV-1400-dsp-api-fix-project-iris
mpro7 Oct 21, 2022
b456aa2
revert XML-to-standoff mapping iris
mpro7 Oct 21, 2022
866874a
update docs
mpro7 Oct 21, 2022
e05203f
add test for standoff mapping case
mpro7 Oct 21, 2022
9e2c178
fix standoff tests
mpro7 Oct 24, 2022
5b116ed
update project IRIs in plugin trig files too
mpro7 Oct 24, 2022
2d25888
update XML mappings
mpro7 Oct 24, 2022
32fe665
improve iri tests
mpro7 Oct 25, 2022
03b9503
fix 2 more tests
mpro7 Oct 25, 2022
c40539f
Merge branch 'main' into DEV-1400-dsp-api-fix-project-iris
mpro7 Oct 25, 2022
fffe3c0
review changes
mpro7 Oct 27, 2022
1113a42
revert project IRIs in plugin trig files change
mpro7 Oct 27, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions docs/03-apis/api-admin/groups.md
Expand Up @@ -41,7 +41,7 @@
{"value": "NewGroupDescription", "language": "en"},
{"value": "NeueGruppenBeschreibung", "language": "de"}
],
"project": "http://rdfh.ch/projects/00FF",
"project": "http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA",
"status": true,
"selfjoin": false
}
Expand All @@ -55,7 +55,7 @@ specified by the `id` in the request body as below:
"id": "http://rdfh.ch/groups/00FF/a95UWs71KUklnFOe1rcw1w",
"name": "GroupWithCustomIRI",
"descriptions": [{"value": "A new group with a custom IRI", "language": "en"}],
"project": "http://rdfh.ch/projects/00FF",
"project": "http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA",
"status": true,
"selfjoin": false
}
Expand Down
14 changes: 7 additions & 7 deletions docs/03-apis/api-admin/lists.md
Expand Up @@ -99,7 +99,7 @@ Additionally, each list can have an optional custom IRI (of [Knora IRI](../api-v
```json
{
"id": "http://rdfh.ch/lists/0001/yWQEGXl53Z4C4DYJ-S2c5A",
"projectIri": "http://rdfh.ch/projects/0001",
"projectIri": "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ",
"name": "a new list",
"labels": [{ "value": "New list with IRI", "language": "en"}],
"comments": [{ "value": "New comment", "language": "en"}]
Expand All @@ -122,7 +122,7 @@ The response will contain the basic information of the list, `listinfo` and an e
}
],
"name": "a new list",
"projectIri": "http://rdfh.ch/projects/0001"
"projectIri": "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ"
}
}
}
Expand All @@ -142,7 +142,7 @@ The response will contain the basic information of the list, `listinfo` and an e
```json
{
"parentNodeIri": "http://rdfh.ch/lists/0001/yWQEGXl53Z4C4DYJ-S2c5A",
"projectIri": "http://rdfh.ch/projects/0001",
"projectIri": "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ",
"name": "a child",
"labels": [{ "value": "New List Node", "language": "en"}]
}
Expand All @@ -153,7 +153,7 @@ Additionally, each child node can have an optional custom IRI (of [Knora IRI](..
```json
{ "id": "http://rdfh.ch/lists/0001/8u37MxBVMbX3XQ8-d31x6w",
"parentNodeIri": "http://rdfh.ch/lists/0001/yWQEGXl53Z4C4DYJ-S2c5A",
"projectIri": "http://rdfh.ch/projects/0001",
"projectIri": "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ",
"name": "a child",
"labels": [{ "value": "New List Node", "language": "en"}]
}
Expand Down Expand Up @@ -183,7 +183,7 @@ number of existing children.

```json
{ "parentNodeIri": "http://rdfh.ch/lists/0001/yWQEGXl53Z4C4DYJ-S2c5A",
"projectIri": "http://rdfh.ch/projects/0001",
"projectIri": "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ",
"name": "Inserted new child",
"position": 0,
"labels": [{ "value": "New List Node", "language": "en"}]
Expand All @@ -206,7 +206,7 @@ list and the IRI of the project it belongs to.

```json
{ "listIri": "http://rdfh.ch/lists/0001/yWQEGXl53Z4C4DYJ-S2c5A",
"projectIri": "http://rdfh.ch/projects/0001",
"projectIri": "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ",
"name": "new name for the list",
"labels": [{ "value": "a new label for the list", "language": "en"}],
"comments": [{ "value": "a new comment for the list", "language": "en"}]
Expand All @@ -232,7 +232,7 @@ The response will contain the basic information of the list, `listinfo` (or `nod
}
],
"name": "new name for the list",
"projectIri": "http://rdfh.ch/projects/0001"
"projectIri": "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ"
}
}
```
Expand Down
10 changes: 5 additions & 5 deletions docs/03-apis/api-admin/permissions.md
Expand Up @@ -34,7 +34,7 @@ included in the request body, for example:
```json
{
"forGroup":"http://rdfh.ch/groups/0001/thing-searcher",
"forProject":"http://rdfh.ch/projects/0001",
"forProject":"http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ",
"hasPermissions":[
{
"additionalInformation":null,
Expand All @@ -60,7 +60,7 @@ As a response, the created administrative permission and its IRI are returned as
{
"administrative_permission": {
"forGroup": "http://rdfh.ch/groups/0001/thing-searcher",
"forProject": "http://rdfh.ch/projects/0001",
"forProject": "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ",
"hasPermissions": [
{
"additionalInformation": null,
Expand Down Expand Up @@ -118,7 +118,7 @@ default object access permission for a group of a project the request body would
```json
{
"forGroup":"http://rdfh.ch/groups/0001/thing-searcher",
"forProject":"http://rdfh.ch/projects/0001",
"forProject":"http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ",
"forProperty":null,
"forResourceClass":null,
"hasPermissions":[
Expand Down Expand Up @@ -160,7 +160,7 @@ a resource class of a specific project:
{
"id": "http://rdfh.ch/permissions/00FF/fSw7w1sI5IwDjEfFi1jOeQ",
"forGroup":null,
"forProject":"http://rdfh.ch/projects/00FF",
"forProject":"http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA",
"forProperty":null,
"forResourceClass":"http://www.knora.org/ontology/00FF/images#bild",
"hasPermissions":[
Expand All @@ -179,7 +179,7 @@ The response contains the newly created permission and its IRI, as:
{
"default_object_access_permission": {
"forGroup": null,
"forProject": "http://rdfh.ch/projects/00FF",
"forProject": "http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA",
"forProperty": null,
"forResourceClass": "http://www.knora.org/ontology/00FF/images#bild",
"hasPermissions": [
Expand Down
2 changes: 1 addition & 1 deletion docs/03-apis/api-admin/projects.md
Expand Up @@ -187,7 +187,7 @@ Operates on the following properties:
The following is an example for project information stored in the `admin` named graph:

```
<http://rdfh.ch/projects/00FF>
<http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA>
rdf:type knora-admin:knoraProject ;
knora-admin:projectShortname "images"^^xsd:string ;
knora-admin:projectShortcode "00FF"^^xsd:string ;
Expand Down
4 changes: 2 additions & 2 deletions docs/03-apis/api-admin/users.md
Expand Up @@ -223,7 +223,7 @@ The following is an example for user information stored in the `admin` named gra
knora-admin:password "$e0801$FGl9FDIWw+D83OeNPGmD9u2VTqIkJopIQECgmb2DSWQLS0TeKSvYoWAkbEv6KxePPlCI3CP9MmVHuvnWv8/kag==$mlegCYdGXt+ghuo8i0rLjgOiNnGDW604Q5g/v7zwBPU="^^xsd:string ;
knora-admin:preferredLanguage "de"^^xsd:string ;
knora-admin:status "true"^^xsd:boolean ;
knora-admin:isInProject <http://rdfh.ch/projects/00FF> ;
knora-admin:isInProject <http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA> ;
knora-admin:isInSystemAdminGroup "false"^^xsd:boolean ;
knora-admin:isInProjectAdminGroup <http://rdfh.ch/projects/00FF> .
knora-admin:isInProjectAdminGroup <http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA> .
```
8 changes: 4 additions & 4 deletions docs/03-apis/api-v2/editing-resources.md
Expand Up @@ -107,7 +107,7 @@ For example, here is a request to create a resource with various value types:
}
},
"knora-api:attachedToProject" : {
"@id" : "http://rdfh.ch/projects/0001"
"@id" : "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ"
},
"rdfs:label" : "test thing",
"@context" : {
Expand All @@ -133,7 +133,7 @@ by adding `knora-api:attachedToUser`. For example:
"knora-api:booleanValueAsBoolean" : true
},
"knora-api:attachedToProject" : {
"@id" : "http://rdfh.ch/projects/0001"
"@id" : "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ"
},
"knora-api:attachedToUser" : {
"@id" : "http://rdfh.ch/users/9XBCrDV3SRa7kS1WwynB4Q"
Expand Down Expand Up @@ -189,7 +189,7 @@ can also have a custom creation date specified by adding `knora-api:creationDate
"@id" : "http://rdfh.ch/0001/oveR1dQltEUwNrls9Lu5Rw",
"@type" : "anything:Thing",
"knora-api:attachedToProject" : {
"@id" : "http://rdfh.ch/projects/0001"
"@id" : "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ"
},
"anything:hasInteger" : {
"@id" : "http://rdfh.ch/0001/oveR1dQltEUwNrls9Lu5Rw/values/IN4R19yYR0ygi3K2VEHpUQ",
Expand Down Expand Up @@ -352,7 +352,7 @@ The response to requesting a deleted resource will look as the following example
"@type": "xsd:anyURI"
},
"knora-api:attachedToProject": {
"@id": "http://rdfh.ch/projects/0001"
"@id": "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ"
},
"knora-api:userHasPermission": "CR",
"knora-api:attachedToUser": {
Expand Down
2 changes: 1 addition & 1 deletion docs/03-apis/api-v2/editing-values.md
Expand Up @@ -311,7 +311,7 @@ Sipi. Here is an example of a request to create a resource of class `anything:Th
"knora-api:fileValueHasFilename": "3UIsXH9bP0j-BV0D4sN51Xz.jp2"
},
"knora-api:attachedToProject": {
"@id": "http://rdfh.ch/projects/0001"
"@id": "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ"
},
"rdfs:label": "test thing",
"@context": {
Expand Down
10 changes: 4 additions & 6 deletions docs/03-apis/api-v2/knora-iris.md
Expand Up @@ -16,8 +16,6 @@ Knora project regardless of where it is hosted. The IRIs of ontologies that
are built into Knora do not contain shortcodes; these ontologies implicitly
belong to the Knora system project.

A user-created ontology IRI must always include its project shortcode.

Project ID `0000` is reserved for shared ontologies
(see [Shared Ontologies](../../02-knora-ontologies/introduction.md#shared-ontologies)).

Expand Down Expand Up @@ -188,7 +186,7 @@ Knora generates IRIs for data that it creates in the triplestore. Each
generated data IRI contains one or more [UUID](https://tools.ietf.org/html/rfc4122)
identifiers to make it unique. To keep data IRIs relatively short, each UUID is
[base64url-encoded](https://tools.ietf.org/html/rfc4648#section-5), without padding;
thus each UUID is a 22-character string.
thus each UUID is a 22-character string. DSP-API supports UUID version 4 or 5.

Data IRIs are not currently intended to be dereferenced as URLs.
Instead, each Knora resource has a separate [permalink](permalinks.md).
Expand All @@ -208,10 +206,10 @@ follows:
- Standoff tag:
`http://rdfh.ch/PROJECT_SHORTCODE/RESOURCE_UUID/values/VALUE_UUID/STANDOFF_UUID`
- XML-to-standoff mapping:
`http://rdfh.ch/PROJECT_SHORTCODE/mappings/MAPPING_NAME`
`http://rdfh.ch/projects/PROJECT_SHORTCODE/mappings/MAPPING_NAME`
- XML-to-standoff mapping element:
`http://rdfh.ch/PROJECT_SHORTCODE/mappings/MAPPING_NAME/elements/MAPPING_ELEMENT_UUID`
- Project: `http://rdfh.ch/projects/PROJECT_SHORTCODE` (or `http://rdfh.ch/projects/PROJECT_UUID`)
`http://rdfh.ch/projects/PROJECT_SHORTCODE/mappings/MAPPING_NAME/elements/MAPPING_ELEMENT_UUID`
- Project: `http://rdfh.ch/projects/PROJECT_UUID`
- Group: `http://rdfh.ch/groups/PROJECT_SHORTCODE/GROUP_UUID`
- Permission:
`http://rdfh.ch/permissions/PROJECT_SHORTCODE/PERMISSION_UUID`
Expand Down
24 changes: 12 additions & 12 deletions docs/03-apis/api-v2/ontology-information.md
Expand Up @@ -48,7 +48,7 @@ The response is in the complex API v2 schema. Sample response:
},
"rdfs:label": "The anything ontology",
"knora-api:attachedToProject": {
"@id": "http://rdfh.ch/projects/0001"
"@id": "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ"
},
"@type": "owl:Ontology",
"@id": "http://0.0.0.0:3333/ontology/0001/anything/v2"
Expand All @@ -60,7 +60,7 @@ The response is in the complex API v2 schema. Sample response:
},
"rdfs:label": "The something ontology",
"knora-api:attachedToProject": {
"@id": "http://rdfh.ch/projects/0001"
"@id": "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ"
},
"@type": "owl:Ontology",
"@id": "http://0.0.0.0:3333/ontology/0001/something/v2"
Expand All @@ -72,7 +72,7 @@ The response is in the complex API v2 schema. Sample response:
},
"rdfs:label": "The images demo ontology",
"knora-api:attachedToProject": {
"@id": "http://rdfh.ch/projects/00FF"
"@id": "http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA"
},
"@type": "owl:Ontology",
"@id": "http://0.0.0.0:3333/ontology/00FF/images/v2"
Expand All @@ -84,7 +84,7 @@ The response is in the complex API v2 schema. Sample response:
},
"rdfs:label": "The BEOL ontology",
"knora-api:attachedToProject": {
"@id": "http://rdfh.ch/projects/yTerZGyxjZVqFMNNKXCDPF"
"@id": "http://rdfh.ch/projects/bL0y8GRuTUiFmvF1oXbeFQ"
},
"@type": "owl:Ontology",
"@id": "http://0.0.0.0:3333/ontology/0801/beol/v2"
Expand All @@ -96,7 +96,7 @@ The response is in the complex API v2 schema. Sample response:
},
"rdfs:label": "The Biblio ontology",
"knora-api:attachedToProject": {
"@id": "http://rdfh.ch/projects/yTerZGyxjZVqFMNNKXCDPF"
"@id": "http://rdfh.ch/projects/bL0y8GRuTUiFmvF1oXbeFQ"
},
"@type": "owl:Ontology",
"@id": "http://0.0.0.0:3333/ontology/0801/biblio/v2"
Expand All @@ -108,7 +108,7 @@ The response is in the complex API v2 schema. Sample response:
},
"rdfs:label": "The Newton-Project ontology",
"knora-api:attachedToProject": {
"@id": "http://rdfh.ch/projects/yTerZGyxjZVqFMNNKXCDPF"
"@id": "http://rdfh.ch/projects/bL0y8GRuTUiFmvF1oXbeFQ"
},
"@type": "owl:Ontology",
"@id": "http://0.0.0.0:3333/ontology/0801/newton/v2"
Expand All @@ -120,7 +120,7 @@ The response is in the complex API v2 schema. Sample response:
},
"rdfs:label": "The incunabula ontology",
"knora-api:attachedToProject": {
"@id": "http://rdfh.ch/projects/0803"
"@id": "http://rdfh.ch/projects/yISnUYe6SYmoyuqeMdW39w"
},
"@type": "owl:Ontology",
"@id": "http://0.0.0.0:3333/ontology/0803/incunabula/v2"
Expand All @@ -132,7 +132,7 @@ The response is in the complex API v2 schema. Sample response:
},
"rdfs:label": "The dokubib ontology",
"knora-api:attachedToProject": {
"@id": "http://rdfh.ch/projects/0804"
"@id": "http://rdfh.ch/projects/oIjhUsZmQLuJ0VMGvJ2pfg"
},
"@type": "owl:Ontology",
"@id": "http://0.0.0.0:3333/ontology/0804/dokubib/v2"
Expand All @@ -144,7 +144,7 @@ The response is in the complex API v2 schema. Sample response:
},
"rdfs:label": "The Anton Webern project ontology",
"knora-api:attachedToProject": {
"@id": "http://rdfh.ch/projects/08AE"
"@id": "http://rdfh.ch/projects/NeWmPqGNQ5KVMAG6L8AjNA"
},
"@type": "owl:Ontology",
"@id": "http://0.0.0.0:3333/ontology/08AE/webern/v2"
Expand Down Expand Up @@ -205,14 +205,14 @@ HTTP GET to http://host/v2/ontologies/metadata/PROJECT_IRI[/PROJECT_IRI...]
The project IRIs must be URL-encoded.

Example response for the `anything` test project
(project IRI `http://rdfh.ch/projects/0001`):
(project IRI `http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ`):

```json
{
"@id" : "http://0.0.0.0:3333/ontology/0001/anything/v2",
"@type" : "owl:Ontology",
"knora-api:attachedToProject" : {
"@id" : "http://rdfh.ch/projects/0001"
"@id" : "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ"
},
"knora-api:lastModificationDate": "2017-12-19T15:23:42.166Z",
"rdfs:label" : "The anything ontology",
Expand Down Expand Up @@ -601,7 +601,7 @@ sample ontology in the complex schema, `http://0.0.0.0:3333/ontology/00FF/images
"@id" : "http://0.0.0.0:3333/ontology/00FF/images/v2",
"@type" : "owl:Ontology",
"knora-api:attachedToProject" : {
"@id" : "http://rdfh.ch/projects/00FF"
"@id" : "http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA"
},
"rdfs:label" : "The images demo ontology",
"@graph" : [ {
Expand Down
2 changes: 1 addition & 1 deletion docs/03-apis/api-v2/permalinks.md
Expand Up @@ -54,7 +54,7 @@ For example:
"@value" : "http://ark.dasch.swiss/ark:/72163/1/0803/2a6221216701W.20160302T150521Z"
},
"knora-api:attachedToProject" : {
"@id" : "http://rdfh.ch/projects/0803"
"@id" : "http://rdfh.ch/projects/yISnUYe6SYmoyuqeMdW39w"
},
"knora-api:attachedToUser" : {
"@id" : "http://rdfh.ch/users/91e19f1e01"
Expand Down
2 changes: 1 addition & 1 deletion docs/03-apis/api-v2/reading-and-searching-resources.md
Expand Up @@ -636,7 +636,7 @@ For example, the following response contains the list of events describing the v
"@type": "xsd:dateTimeStamp"
},
"knora-api:attachedToProject": {
"@id": "http://rdfh.ch/projects/0001"
"@id": "http://rdfh.ch/projects/Lw3FC39BSzCwvmdOaTyLqQ"
}
},
"knora-api:versionDate": {
Expand Down
10 changes: 5 additions & 5 deletions docs/05-internals/design/api-admin/administration.md
Expand Up @@ -244,7 +244,7 @@ permission object with the compact form literal would be: :
```
<http://rdfh.ch/permissions/001
rdf:type knora-admin:AdministrativePermission ;
knora-admin:forProject <http://rdfh.ch/projects/00FF>;
knora-admin:forProject <http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA>;
knora-admin:forGroup knora-admin:ProjectMember ;
knora-base:hasPermissions "ProjectResourceCreateAllPermission"^^xsd:string .
```
Expand Down Expand Up @@ -311,7 +311,7 @@ Example default object access permission instance:
```
<http://rdfh.ch/permissions/002
rdf:type knora-admin:DefaultObjectAccessPermission ;
knora-admin:forProject <http://rdfh.ch/projects/00FF>;
knora-admin:forProject <http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA>;
knora-admin:forGroup knora-admin:ProjectMember ;
knora-base:hasPermissions "CR knora-admin:Creator|M knora-admin:ProjectMember|V knora-admin:KnownUser"^^xsd:string .
```
Expand Down Expand Up @@ -529,7 +529,7 @@ either *knora-admin:forGroup*, *knora-admin:forResourceClass*, or

```
<http://rdfh.ch/permissions/[UUID]> rdf:type knora-admin:AdministrativePermission ;
knora-admin:forProject <http://rdfh.ch/projects/00FF> ;
knora-admin:forProject <http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA> ;
knora-admin:forGroup knora-admin:ProjectAdmin ;
knora-base:hasPermissions "ProjectResourceCreateAllPermission|
ProjectAdminAllPermission"^^xsd:string .
Expand All @@ -539,7 +539,7 @@ either *knora-admin:forGroup*, *knora-admin:forResourceClass*, or

```
<http://rdfh.ch/permissions/[UUID]> rdf:type knora-admin:AdministrativePermission ;
knora-admin:forProject <http://rdfh.ch/projects/00FF> ;
knora-admin:forProject <http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA> ;
knora-admin:forGroup knora-admin:ProjectMember ;
knora-base:hasPermissions "ProjectResourceCreateAllPermission"^^xsd:string .
```
Expand All @@ -565,7 +565,7 @@ either *knora-admin:forGroup*, *knora-admin:forResourceClass*, or

```
<http://rdfh.ch/permissions/[UUID]> rdf:type knora-admin:DefaultObjectAccessPermission ;
knora-admin:forProject <http://rdfh.ch/projects/00FF> ;
knora-admin:forProject <http://rdfh.ch/projects/MTvoB0EJRrqovzRkWXqfkA> ;
knora-admin:forGroup knora-admin:ProjectMember ;
knora-base:hasPermissions "CR knora-admin:Creator|
M <http://rdfh.ch/groups/[shortcode]/[UUID]>|
Expand Down