# SOyA Open Items & Actions
## Tasks
- [ ] support using system attributes in OverlayDataBudRendering
- [x] support larger content
- [ ] finish SOyA Tutorial
- [ ] validation for sets: https://hackmd.io/VMr7hEn2T3aUCyRc9v3uqA
- [ ] create a new `soya` command to extract the SHACL part of a SOyA structure
- [ ] allow to delete SOyA structures
`soya delete name` (but how to avoid misuse?)
- [ ] support all data types (example: `positiveInteger`) in JSON Form
allow to fall-back to available data types in JSON Form
- [ ] ODRL representation of Data Agreements
### Task Details
#### ODRL representation of Data Agreements
* Example Data Agreements: https://hackmd.io/3GhuO47oRXu3_mpGO_pXvw?view#Data-Agreements
#### OverlayDataBudRendering
* system attributes: id, createdAt, updatedAt; maybe also attributes from meta?
* proposal: use the notation `$` to access system attributes (e.g., `$id`, `$createdAt`)
* example SOyA structure: https://soya.ownyourdata.eu/ConcreteMixture/yaml
## Conceptualisation
### Key Elements of SOyA
* text based using YAML
* simple building blocks with good examples
example: PlantUML
### Functions
* describe data structure (sit together in a meeting or workshop and write down data structures)
- forms: data collection & rendering
- possibility to use data-container backend to store data
- validations
- transformations
- bridge flat vs graph: `init`, `acquire`, `canonical`, `map`
- meta functions for collaboration & management: `push`, `pull`, `info`, `similar`
### Principles
- automate simple tasks (80%) by providing scaffold for specialised tools
- use specialised tools for the details (but store information in SOyA structure)
- SHACL for validation
- JSON Forms for form rendering
- jq, jolt for transformations
## Bugfixes
- [ ] tag handling for OverlayForm
* strange behaviour when using `tag` in OverlayForm
* does not switch between tags
* does not show custom OverlayForm but only default as soon as `tag: xyz` is present in YAML
* example SOyA structure: https://soya.ownyourdata.eu/zkEPD1/yaml
("simple" should not show field zkp: [SOyA-Form](https://soya-form.ownyourdata.eu/?schemaDri=zkEPD1&tag=extended&data=%7B%7D))
- [x] 1.1 regression: lists in forms depend on `soya_container: set`
(now replaced with `range: "rdf:list"`)
<details><summary>Details</summary>
example: SOyA structure [`FlightList`](https://soya.ownyourdata.eu/FlightList/yaml) <- uses custom FormOverlay but should be possible to auto-generate simple FormOverlay
minimal example to reproduce:
```bash=
echo 'meta:
name: ListDemo
content:
bases:
- name: ListDemo
attributes:
id: String
listItems: list<setItem | string>
- name: listItem
attributes:
number: String
priority: Integer' | soya init | soya form
```
```bash=
echo 'meta:
name: ListDemo
content:
bases:
- name: ListDemo
attributes:
id: String
listItems: list<setItem | string>
- name: listItem
attributes:
number: String
priority: Integer
listDemoId: String
nullable
foreignKey: ListDemo:id
'
```
introduce new "element":
```
{
"@id": "listItems",
"@type": "owl:ObjectProperty",
"domain": "ListDemo",
"range": "http://www.w3.org/1999/02/22-rdf-syntax-ns#List",
"soya:containerType": "set",
"soya:containerElementTypes": [
"https://example.com/listItem",
"xsd:string"
]
},
```
should produce:
```json=
{
"schema": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"listItems": {
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "string"
},
"priority": {
"type": "integer"
}
}
}
}
}
},
"ui": {
"type": "Group",
"label": "ListDemo",
"elements": [
{
"type": "VerticalLayout",
"elements": [
{
"type": "Control",
"scope": "#/properties/id"
},
{
"type": "Control",
"scope": "#/properties/listItems",
"options": {
"elementLabelProp": "number",
"detail": {
"type": "HorizontalLayout",
"elements": [
{
"type": "Control",
"scope": "#/properties/number"
},
{
"type": "Control",
"scope": "#/properties/priority"
}
]
}
}
}
]
}
]
}
}
```
</details>
- [x] data type `xsd:double` requires string input
example & reproduce: [link](https://soya-form.ownyourdata.eu/?schemaDri=ConcreteMixture&data=%7B%22cement%22%3A30.1%7D)
* list of data types and mapping to XSD data types & [JSON Form Controls](https://jsonforms.io/examples/control)
- Boolean -> `xsd:boolean`, `"type": "boolean"`
- Integer -> `xsd:integer`, `"type": "integer"`
- Float, Decimal, Double -> `xsd:double`, `"type": "number"`
- String -> `xsd:string`, `"type": "string"`
- Date -> `xsd:date`, `"type": "string", "format": "date"`
- Time -> `xsd:time`, `"type": "string", "format": "time"`
- DateTime -> `xsd:dateTime`, `"type": "string", "format": "date-time"`
- [ ] support multiple data types `set<itemlist|string>` in forms (use first element)
## Epics
- [ ] auto-generate SHACL for `set` handling (as discused in the 1.1 Bugfix)
- [ ] Tag management for SOyA structures
- [ ] implement Visual Studio Code plugin for SOyA management
full functionality without command line