## Examples for `soya acquire`
1. simple "valid" example (new behaviour)
Soya structure: [`ex1`](https://soya.ownyourdata.eu/ex1) (sorry, no YAML available yet)
Input:
```json
{
"elements": ["a", "b"]
}
```
Command: `cat input.json | soya acquire ex1`
Expected Output:
```json
{
"@context": {
"@version": 1.1,
"@vocab": "https://soya.ownyourdata.eu/ex1/"
},
"@graph": [{
"@type": "ex1",
"elements": {
"@list": [
"a",
"b"
]
}
}]
}
```
Validation Command: `cat input.json | soya acquire ex1 | soya validate ex1`
Notes:
* based on the information in base ex1 that `elements` is a set -> the acquire functions should identify the array and replace it with `{"@list": [array]}`
* the YAML for ex1 should look like
```yaml
meta:
name: ex1
content:
bases:
- name: ex1
attributes:
elements: list<String>
overlays:
- type: OverlayValidation
base: ex1
name: ex1ValidationOverlay
attributes:
elements:
nodeKind: BlankNodeOrIRI
```
2. simple "invalid" example (current behaviour)
Soya structure: [`ex1`](https://soya.ownyourdata.eu/ex1)
Input:
```json
{
"elements": "a"
}
```
Command: `cat input.json | soya acquire ex1`
Expected Output:
```json
{
"@context": {
"@version": 1.1,
"@vocab": "https://soya.ownyourdata.eu/ex1/"
},
"@graph": [
{
"@type": "ex1",
"elements": "a"
}
]
}
```
Notes:
* not sure if we should keep this behaviour -> might ask Fajar on the input
3. simple "invalid" example (current behaviour)
Soya structure: [`ex1`](https://soya.ownyourdata.eu/ex1)
Input:
```json
{
"elements": {"a": "b"}
}
```
Command: `cat input.json | soya acquire ex1`
Expected Output:
```json
{
"@context": {
"@version": 1.1,
"@vocab": "https://soya.ownyourdata.eu/ex1/"
},
"@graph": [
{
"@type": "ex1",
"elements": [
{
"@type": "rdf:List",
"a": "b"
}
]
}
]
}
```
Notes:
* not sure if we keep this behaviour -> might ask Fajar on the input
* especially the behaviour of `"@type": "rdf:List"` is maybe strange
4. real world example (DID Document)
Soya structure: [`Did`](https://soya.ownyourdata.eu/Did/yaml)
Input:
```json
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/suites/ed25519-2020/v1"
],
"id": "did:oyd:zQmaBZTghndXTgxNwfbdpVLWdFf6faYE4oeuN2zzXdQt1kh",
"verificationMethod": [
{
"id": "did:oyd:zQmaBZTghndXTgxNwfbdpVLWdFf6faYE4oeuN2zzXdQt1kh#key-doc",
"type": "Ed25519VerificationKey2020",
"controller": "did:oyd:zQmaBZTghndXTgxNwfbdpVLWdFf6faYE4oeuN2zzXdQt1kh",
"publicKeyMultibase": "z6MusYB5iT5krCHYsZ76EzBaTdRwGKsaBhMcSbrXaPJgkuRQ"
},
{
"id": "did:oyd:zQmaBZTghndXTgxNwfbdpVLWdFf6faYE4oeuN2zzXdQt1kh#key-rev",
"type": "Ed25519VerificationKey2020",
"controller": "did:oyd:zQmaBZTghndXTgxNwfbdpVLWdFf6faYE4oeuN2zzXdQt1kh",
"publicKeyMultibase": "z6Mv7EYihbAat6Wq7GsjNsjcxt58dZT8fmsRjQGTkYamYrjB"
}
],
"keyAgreement":["did:oyd:zQmaBZTghndXTgxNwfbdpVLWdFf6faYE4oeuN2zzXdQt1kh#key-doc"],
"service": [
{
"id": "did:oyd:zQmaBZTghndXTgxNwfbdpVLWdFf6faYE4oeuN2zzXdQt1kh#payload",
"type": "Custom",
"serviceEndpoint": "https://oydid.ownyourdata.eu",
"payload": {
"simple": "example"
}
}
]
}
```
Command: `cat did.jsonld | soya acquire Did`
Expected Output:
```json
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/suites/ed25519-2020/v1"
],
"id": "did:oyd:zQmaBZTghndXTgxNwfbdpVLWdFf6faYE4oeuN2zzXdQt1kh",
"verificationMethod": {
"@list": [{
"id": "did:oyd:zQmaBZTghndXTgxNwfbdpVLWdFf6faYE4oeuN2zzXdQt1kh#key-doc",
"type": "Ed25519VerificationKey2020",
"controller": "did:oyd:zQmaBZTghndXTgxNwfbdpVLWdFf6faYE4oeuN2zzXdQt1kh",
"publicKeyMultibase": "z6MusYB5iT5krCHYsZ76EzBaTdRwGKsaBhMcSbrXaPJgkuRQ"
},
{
"id": "did:oyd:zQmaBZTghndXTgxNwfbdpVLWdFf6faYE4oeuN2zzXdQt1kh#key-rev",
"type": "Ed25519VerificationKey2020",
"controller": "did:oyd:zQmaBZTghndXTgxNwfbdpVLWdFf6faYE4oeuN2zzXdQt1kh",
"publicKeyMultibase": "z6Mv7EYihbAat6Wq7GsjNsjcxt58dZT8fmsRjQGTkYamYrjB"
}
]
},
"keyAgreement": {
"@list": ["did:oyd:zQmaBZTghndXTgxNwfbdpVLWdFf6faYE4oeuN2zzXdQt1kh#key-doc"]
},
"service": {
"@list": [{
"id": "did:oyd:zQmaBZTghndXTgxNwfbdpVLWdFf6faYE4oeuN2zzXdQt1kh#payload",
"type": "Custom",
"serviceEndpoint": "https://oydid.ownyourdata.eu",
"payload": {
"simple": "example"
}
}]
}
}
```
Validation Command: not available yet but should be `cat did.jsonld | soya acquire Did | soya validate Did` with statements in the ValidationOverlay:
```yaml
verificationMethod:
nodeKind: BlankNodeOrIRI
keyAgreement:
nodeKind: BlankNodeOrIRI
service:
nodeKind: BlankNodeOrIRI
```
Notes:
* maybe also discuss with Fajar if we really want to allow JSON-LD input for `soya acquire` -> if not, let's just strip away `@context"`
## Working Example
SOyA Structure with Validation Overlay:
```jsonld=
{
"@context": {
"@version": 1.1,
"@import": "https://ns.ownyourdata.eu/ns/soya-context.json",
"@base": "https://soya.ownyourdata.eu/DidTmp/",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"did": "https://www.w3.org/ns/did#"
},
"@graph": [{
"@id": "DidTmp",
"@type": "owl:Class",
"subClassOf": "did:DIDSubject"
},
{
"@id": "id",
"@type": "owl:DatatypeProperty",
"domain": "DidTmp",
"range": "xsd:string"
},
{
"@id": "verificationMethod",
"@type": "owl:ObjectProperty",
"domain": "DidTmp",
"range": "http://www.w3.org/1999/02/22-rdf-syntax-ns#List"
},
{
"@id": "VerificationMethod",
"@type": "owl:Class",
"subClassOf": "did:VerificationMethod"
},
{
"@id": "id",
"@type": "owl:DatatypeProperty",
"domain": "VerificationMethod",
"range": "xsd:string"
},
{
"@id": "DidTmpOverlayValidation",
"@type": "OverlayValidation",
"onBase": "DidTmp",
"name": "DidValidationOverlay",
"sh:targetClass": "DidTmp",
"sh:property": [{
"sh:path": "id",
"sh:minCount": 1,
"sh:maxCount": 1,
"sh:pattern": "^did:[a-z0-9]+:[a-zA-Z0-9.:\\-_%]+$",
"sh:message": "there must be one valid 'id' in a DID document"
},
{
"sh:path": "verificationMethod",
"sh:minCount": 1,
"sh:maxCount": 1,
"sh:property": [{
"sh:path": ["http://www.w3.org/ns/shacl#zeroOrMorePath", "http://www.w3.org/1999/02/22-rdf-syntax-ns#rest"],
"sh:property": [{
"sh:path": "http://www.w3.org/1999/02/22-rdf-syntax-ns#first",
"sh:property": [{
"sh:path": "id",
"sh:minCount": 1,
"sh:maxCount": 1
},
{
"sh:path": "type",
"sh:minCount": 1,
"sh:maxCount": 1
}
]
}]
}]
}
]
}
]
}
```
Test JSON-LD:
```jsonld
{
"@context": {
"@version": 1.1,
"did": "https://soya.ownyourdata.eu/DidTmp/",
"@vocab": "https://soya.ownyourdata.eu/DidTmp/"
},
"@graph": [{
"@type": "DidTmp",
"id": "did:oyd:zQmaaUbj3kfbFk2LjE9PPnXy8sbuMBbMWvh6pm4Vr2wVkzr",
"verificationMethod": {
"@list": [{
"id": "did:oyd:zQmaaUbj3kfbFk2LjE9PPnXy8sbuMBbMWvh6pm4Vr2wVkzr#key-doc",
"type": "Ed25519VerificationKey2020",
"controller": "did:oyd:zQmaaUbj3kfbFk2LjE9PPnXy8sbuMBbMWvh6pm4Vr2wVkzr",
"publicKeyMultibase": "z6MuwvdHwfVBCy6WDhPzBtDEds6fSFJEMtM5hmhEWdWJ5P46"
}]
}
}]
}
```
Command: `echo did.jsonld | soya validate DidTmp`