eddy icon indicating copy to clipboard operation
eddy copied to clipboard

Aggiungere a Graphol il supporto per la definizione DatatypeDefinition

Open valeriosantarelli opened this issue 4 years ago • 7 comments

Il tentativo di costruire un DatatypeDefinition (quello in figura) risulta nell'errore che riporto sotto:

Schermata 2022-01-20 alle 11 40 15

Traceback (most recent call last):
  File "eddy/core/diagram.py", line 417, in mouseMoveEvent
  File "eddy/core/profiles/common.py", line 118, in checkEdge
  File "eddy/core/profiles/rules/owl2.py", line 518, in __call__
  File "eddy/core/owl.py", line 2186, in forDatatype
KeyError: http:///www.obdasystems.com/testontology/teenageInteger

L'errore viene generato al momento di attaccare l'input edge dal nodo Datatype al nodo operatore data.

valeriosantarelli avatar Jan 20 '22 10:01 valeriosantarelli

Per essere sicuri, intendi proprio DatatypeDefinition o DatatypeRestriction? Perché a meno che non sto capendo male quell'espressione costruisce la seconda delle due.

mnamici avatar Jan 20 '22 13:01 mnamici

Allora io stavo provando a costruire un assioma di questo tipo qui:

DatatypeDefinition(:personAge DatatypeRestriction(xsd:integer xsd:minInclusive "0"^^xsd:integer xsd:maxInclusive "150"^^xsd:integer)) 

La DatatypeRestriction me l'ha fatta fare, ma poi quando provo a definire la DatatypeDefinition va in errore. Forse sto sbagliando io?

valeriosantarelli avatar Jan 20 '22 14:01 valeriosantarelli

Per come è implementato attualmente, nella figura sopra il nodo Datatype che stai collegando in input al nodo operatore data in realtà rappresenta il tipo su cui stai applicando la restrizione, ovvero il primo argomento di DatatypeRestriction. Quindi collegando l'arco input dal nodo test:teenageInteger al nodo data avresti come traduzione l'espressione:

DatatypeRestriction(
    test:teenageInteger 
    xsd:minInclusive     "13"^^xsd:integer 
    xsd:maxInclusive    "19"^^xsd:integer
)

L'eccezione esce fuori quando viene fatta la verifica che le constraining facet connesse al nodo data (nel caso sopra xsd:minInclusive e xsd:maxInclusive) siano ammesse per il Datatype specificato (test:teenageInteger), e poiché si tratta di un datatype custom queste non sono definite. Questo chiaramente va risolto però per quanto riguarda la specifica di assiomi DatatypeDefinition non credo ci sia proprio il modo di definirli attualmente in Eddy.

mnamici avatar Jan 20 '22 16:01 mnamici

Mi sa che hai ragione in effetti. Si può definire una DatatypeRestriction, un datatype custom, ma una DatatypeDefinition mi sa proprio di no.

valeriosantarelli avatar Jan 20 '22 16:01 valeriosantarelli

Sì secondo me sono due issue distinte:

  • la prima (che potrebbe essere questa) è decidere come gestire l'espressione di restrizioni sui datatype che non facciano parte del datatype map OWL 2. L'effetto immediato è che si esce dal profilo DL ma ciò non toglie che si potrebbe voler permettere;
  • la seconda è definire un modo per specificare assiomi di tipo DatatypeDefiniton, ad esempio al momento non si possono neanche specificare assiomi del tipo: DatatypeDefinition(test:IntOrString DataUnionOf(xsd:integer xsd:string)) in quanto non c'è attualmente modo di collegare l'or con il nodo datatype.

mnamici avatar Jan 20 '22 17:01 mnamici