Aggiungere a Graphol il supporto per la definizione DatatypeDefinition
Il tentativo di costruire un DatatypeDefinition (quello in figura) risulta nell'errore che riporto sotto:

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.
Per essere sicuri, intendi proprio DatatypeDefinition o DatatypeRestriction? Perché a meno che non sto capendo male quell'espressione costruisce la seconda delle due.
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?
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.
Mi sa che hai ragione in effetti. Si può definire una DatatypeRestriction, un datatype custom, ma una DatatypeDefinition mi sa proprio di no.
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.