kbss-cvut / s-pipes

Tool for execution of RDF-based pipelines.
GNU Lesser General Public License v3.0
4 stars 5 forks source link

Refactor RestExceptionHandler to use JOPA #253

Open blcham opened 1 month ago

blcham commented 1 month ago

blcham commented 1 month ago

Some additional info:


MB:

Chtel bych se zeptat jakou sanci mam v "JOPA + nase knihovna pro serializaci do JSONLD" generovat nasledujici:

{
  "@context": {
    "variable1": "http://onto.fel.cvut.cz/ontologies/s-pipes/variable1",
    "variable2": "http://onto.fel.cvut.cz/ontologies/s-pipes/variable2",
    "module": "http://onto.fel.cvut.cz/ontologies/s-pipes/module",
    "message": "http://onto.fel.cvut.cz/ontologies/s-pipes/message",
    "constraintQuery": "http://onto.fel.cvut.cz/ontologies/s-pipes/constraintQuery",
    "constraintFailureEvidences": {
      "@id": "http://onto.fel.cvut.cz/ontologies/s-pipes/constraintFailureEvidences",
      "@container": "@list"
    },
    "ValidationConstraintError": "http://onto.fel.cvut.cz/ontologies/s-pipes/ValidationConstraintError"
  },
  "@type": "ValidationConstraintError",
  "module": "ExampleModule",
  "message": "Example error message",
  "constraintQuery": "SELECT ?variable1 ?variable2 WHERE { ... }",
  "constraintFailureEvidences": [
    {
      "variable1": "value1_1",
      "variable2": "value1_2"
    },
    {
      "variable1": "value2_1",
      "variable2": "value2_2"
    }
  ]
}

Ta problematicka cast je:

"constraintFailureEvidences": {
      "@id": "http://onto.fel.cvut.cz/ontologies/s-pipes/constraintFailureEvidences",
      "@container": "@list"
    },

a

 "constraintFailureEvidences": [
    {
      "variable1": "value1_1",
      "variable2": "value1_2"
    },
    {
      "variable1": "value2_1",
      "variable2": "value2_2"
    }
  ]

Protoze to reprezentuje ResultSet-y z SPARQL query tedy "variable1", "variable2" se zmeni poctem (muze byt vic promennych) i nazvem (muzu se jmenovat libovolne) ...

Predpokladam, ze by to asi slo naimplementovat tak ze bych musel doplnit ID a typ (napr. ID = "http://onto..../row-data-23093201", typ = "http://onto..../row-data") a pak dalsi problem bych cekal ze bude usporadani promennych (chtel bych definovat usporadani v jakem se serializuje v tom JSON-LD objektu, tedy v tomto priklade bych chtel abych "variable1" bylo pred "variable2" ....

Zbyle veci predpokladam, ze najdu (nemusis mi psat odkazy -- jenom potvrdit ze to jde) 1) aby to byl "@list" -- jenom oanotuji field v JOPA 2) usporadani promennych v JSONLD -- to asi vyresit nepujde co? 3) jinak pujde to vyresit i v JOPA verzi 0.18.7


ML: 1) Je-li field typu List, mělo by to automaticky generovat příslušný @container: @list 2) Použiješ anotaci @JsonLdAttributeOrder a do ní napíšeš názvy fieldů v pořadí, v jakém se mají serializovat 3) No, těžko říct, můžeš zkusit v JB4JSON-LD dát exclusion na jopa-api a doufat, že to nepadne pak na chybějící API

Nevím, jak přesně vypadá ten objekt constraitnFailureEvidences, jestli je to jen wrapper okolo mapy (což předpokládám). V tom případě by sis mohl napsat custom serializer, který ti do kontextu dá příslušný mapping pro variable1 atd., jinak jsou mapy podporovány jen na úrovni JOPA @Properties, tj. klíčem mapy by musela být přímo IRI a tu to použije naplno v JSON-LD (tj. do kontextu se to vůbec nedostane). Snad ti to takhle pomůže, případně si můžeme zavolat nebo můžu zkusit udělat nějaký POC, pokud mi dáš vstupní data (tj. nějaké třídy a sample data a očekávaný výstup) (edited)