10:- module(trill_2_funct, [convert_explanations/2, convert_axiom/2]). 11
12
14prolog2function(class(IRI), ClFunc):-
15 iri(IRI,IRIF),
16 appendFunctional2('Class', [IRIF], ClFunc).
17
19prolog2function(datatype(IRI), DtFunc):-
20 iri(IRI,IRIF),
21 appendFunctional2('Datatype', [IRIF], DtFunc).
22
24prolog2function(objectProperty(IRI), OpFunc) :-
25 iri(IRI,IRIF),
26 appendFunctional2('ObjectProperty', [IRIF], OpFunc).
27
29prolog2function(dataPropery(IRI), DPFunc):-
30 iri(IRI,IRIF),
31 appendFunctional2('Dataproperty', [IRIF], DPFunc).
32
34prolog2function(annotationProperty(IRI), APFunc ):-
35 iri(IRI,IRIF),
36 appendFunctional2('AnnotationProperty', [IRIF], APFunc).
37
39prolog2function(namedIndividual(IRI), NIFunc):-
40 iri(IRI,IRIF),
41 appendFunctional2('NamedIndividual', [IRIF], NIFunc).
42
44prolog2function(anonymousIndividual(IRI), AIFunc):-
45 iri(IRI,IRIF),
46 appendFunctional2('AnonymousIndividual', [IRIF], AIFunc).
47
48
50
52prolog2function(subClassOf(ClassExpression1, ClassExpression2), SCFunc):- 53 classExpression2function(ClassExpression1,ClassExpressionFunctional1),
54 classExpression2function(ClassExpression2,ClassExpressionFunctional2),
55 appendFunctional('SubClassOf',[ClassExpressionFunctional1, ClassExpressionFunctional2],SCFunc).
56
58prolog2function(equivalentClasses(ListaClassExpression), ECFunc):- 59 findall(CEF,(member(CE,ListaClassExpression),classExpression2function(CE,CEF)),L),
60 appendFunctional('EquivalentClasses',L,ECFunc).
61
63prolog2function(disjointClasses(ListaClassExpression), DCFunc):- 64 findall(CEF,(member(CE,ListaClassExpression),classExpression2function(CE,CEF)),L),
65 appendFunctional('DisjointClasses',L,DCFunc).
66
68prolog2function(disjointUnion(IRI,ListaClassExpression), ECFunc):- 69 classExpression2function(IRI,ClassExpressionFunctional),
70 findall(CEF,(member(CE,ListaClassExpression),classExpression2function(CE,CEF)),L),
71 appendFunctional2('DisjointUnion',[ClassExpressionFunctional|L],ECFunc).
72
74prolog2function(subPropertyOf(PropertyExpression1, PropertyExpression2), SPFunc):-
75 propertyExpression2function(PropertyExpression1,PropertyExpressionFunctional1),
76 propertyExpression2function(PropertyExpression2,PropertyExpressionFunctional2),
77 appendFunctional('SubObjectPropertyOf',[PropertyExpressionFunctional1, PropertyExpressionFunctional2],SPFunc).
78
80prolog2function(equivalentProperties(ListaPropertyExpression), EPFunc):- 81 findall(PEF,(member(PE,ListaPropertyExpression), propertyExpression2function(PE,PEF)),A),
82 appendFunctional('EquivalentObjectProperties', A, EPFunc).
83
85prolog2function(dijointProperties(ListaPropertyExpression), DPFunc):- 86 findall(PEF,(member(PE, ListaPropertyExpression), propertyExpression2function(PE,PEF)),A),
87 appendFunctional('DisjointObjectProperties', A, DPFunc).
88
90prolog2function(inverseProperties(ObjectPropertyExpression1, ObjectPropertyExpression2), IOPFunc):- 91 propertyExpression2function(ObjectPropertyExpression1,ObjectPropertyExpressionFunctional1),
92 propertyExpression2function(ObjectPropertyExpression2,ObjectPropertyExpressionFunctional2), 93 appendFunctional('InverseObjectProperties',[ObjectPropertyExpressionFunctional1, ObjectPropertyExpressionFunctional2],IOPFunc).
94
96prolog2function(propertyDomain(PropertyExpression, ClassExpression), OPDFunc):- 97 propertyExpression2function(PropertyExpression,PropertyExpressionF),
98 classExpression2function(ClassExpression,ClassExpressionF),
99 appendFunctional('ObjectPropertyDomain',[PropertyExpressionF,ClassExpressionF],OPDFunc).
100
102prolog2function(propertyRange(PropertyExpression, ClassExpression), OPRFunc) :- 103 propertyExpression2function(PropertyExpression,PropertyExpressionF),
104 classExpression2function(ClassExpression,ClassExpressionF),
105 appendFunctional('ObjectPropertyRange',[PropertyExpressionF,ClassExpressionF],OPRFunc).
106
108prolog2function(functionalProperty(PropertyExpression),FOPFunc) :- 109 propertyExpression2function(PropertyExpression,IRI),
110 appendFunctional('FunctionalObjectProperty',[IRI] ,FOPFunc).
111
113prolog2function(inverseFunctionalProperty(PropertyExpression), IFPFunc):- 114 propertyExpression2function(PropertyExpression,IRI),
115 appendFunctional('InverseFunctionalObjectProperty',[IRI] ,IFPFunc).
116
118prolog2function(reflexiveProperty(PropertyExpression), RPFunc) :- 119 propertyExpression2function(PropertyExpression,IRI),
120 appendFunctional('ReflexiveObjectProperty',[IRI] ,RPFunc).
121
123prolog2function(irreflexiveProperty(PropertyExpression), IOPFunc):- 124 propertyExpression2function(PropertyExpression,IRI),
125 appendFunctional('IrreflexiveObjectProperty', [IRI] ,IOPFunc).
126
128prolog2function(symmetricProperty(PropertyExpression), SOPFunc) :- 129 propertyExpression2function(PropertyExpression,IRI),
130 appendFunctional('SymmetricObjectProperty', [IRI] ,SOPFunc).
131
133prolog2function(asymmetricProperty(PropertyExpression), AOPFunc):- 134 propertyExpression2function(PropertyExpression,IRI),
135 appendFunctional('AsymmetricObjectProperty', [IRI] ,AOPFunc).
136
138prolog2function(transitiveProperty(PropertyExpression), TOPFunc):- 139 propertyExpression2function(PropertyExpression,IRI),
140 appendFunctional('TransitiveObjectProperty', [IRI] ,TOPFunc).
141
143prolog2function(hasKey(ClassExpression,PropertyExpression), HKFunc):- 144 classExpression2function(ClassExpression,ClassExpressionF),
145 propertyExpression2function(PropertyExpression,PropertyExpressionF),
146 appendFunctional('HasKey',[ClassExpressionF,PropertyExpressionF],HKFunc).
147
148
150
152prolog2function(sameIndividual(ListIndividual), SIFunc) :- 153 findall(IEF,(member(IE, ListIndividual), individual2function(IE,IEF)),A),
154 appendFunctional('SameIndividual', A, SIFunc).
155
157prolog2function(differentIndividual(ListIndividual), DIFunc ) :- 158 findall(IEF,(member(IE, ListIndividual), individual2function(IE,IEF)),A),
159 appendFunctional('DifferentIndividual', A, DIFunc).
160
161
163
165prolog2function(classAssertion(ClassExpression, IndividualExpression), CAFunc) :- 166 classExpression2function(ClassExpression,ClassExpressionF),
167 individual2function(IndividualExpression,IndividualExpressionF),
168 appendFunctional('ClassAssertion',[ClassExpressionF,IndividualExpressionF],CAFunc).
169
171prolog2function(propertyAssertion(PropertyExpression, IndividualExpression1, IndividualExpression2), OPAFunc ):- 172 propertyExpression2function(PropertyExpression,PropertyExpressionF),
173 individual2function(IndividualExpression1, IndividualExpression1F),
174 individual2function(IndividualExpression2, IndividualExpression2F),
175 appendFunctional('ObjectPropertyAssertion', [PropertyExpressionF, IndividualExpression1F, IndividualExpression2F], OPAFunc).
176
178prolog2function(negativePropertyAssertion(PropertyExpression, IndividualExpression1, IndividualExpression2), NOPAFunc ):- 179 propertyExpression2function(PropertyExpression,PropertyExpressionF),
180 individual2function(IndividualExpression1, IndividualExpression1F),
181 individual2function(IndividualExpression2, IndividualExpression2F),
182 appendFunctional('ObjectPropertyAssertion', [PropertyExpressionF, IndividualExpression1F, IndividualExpression2F], NOPAFunc).
183
184
186
188prolog2function(annotationAssertion(AnnotationProperty, AnnotationSubject, AnnotationValue),AAFunc):- 189 propertyExpression2function(AnnotationProperty, AnnotationPropertyF),
190 propertyExpression2function(AnnotationSubject, AnnotationSubjectF),
191 (
192 193 iri(AnnotationValue,AnnotationValueF)
194 ->
195 196 appendFunctional('AnnotationAssertion', [AnnotationPropertyF,AnnotationSubjectF,AnnotationValueF], AAFunc)
197 ;
198 199 (literal2function(AnnotationValue, AnnotationValueF),
200 appendFunctional2('AnnotationAssertion', [AnnotationPropertyF,AnnotationSubjectF,AnnotationValueF], AAFunc))
201 ).
202
204prolog2function(annotation(AnnotationProperty, AnnotationProperty, AnnotationValue), AFunc):- 205 propertyExpression2function(AnnotationProperty, AnnotationPropertyF),
206 (
207 208 iri(AnnotationValue,AnnotationValueF)
209 ->
210 211 appendFunctional('AnnotationAssertion', [AnnotationPropertyF,AnnotationPropertyF,AnnotationValueF], AFunc)
212 ;
213 214 literal2function(AnnotationValue, AnnotationValueF),
215 appendFunctional2('AnnotationAssertion', [AnnotationPropertyF,AnnotationPropertyF,AnnotationValueF], AFunc)
216 ).
217
218
220
222prolog2function(ontology(IRI), OIFunc) :-
223 appendFunctional1('Ontology', [IRI], OIFunc).
224
226prolog2function(ontologyImport(ontology(IRI)), OIMFunc):-
227 appendFunctional1('OntologyImport', [IRI], OIMFunc).
228
230prolog2function(ontologyVersionInfo(ontology(IRI), OVFunc)):-
231 appendFunctional1('OntologyVersionInfo', [IRI], OVFunc).
232
233
235
236classExpression2function(CE,CEF):-
237 (iri(CE,CEF);
238 objectIntersectionOf(CE,CEF);
239 objectSomeValuesFrom(CE,CEF);
240 objectUnionOf(CE, CEF);
241 objectComplementOf(CE,CEF);
242 objectOneOf(CE,CEF);
243 objectAllValuesFrom(CE,CEF);
244 objectHasValue(CE,CEF);
245 objectHasSelf(CE,CEF) ;
246 objectMinCardinality(CE,CEF);
247 objectMaxCardinality(CE,CEF);
248 objectExactCardinality(CE,CEF);
249 dataSomeValuesFrom(CE,CEF);
250 dataAllValuesFrom(CE,CEF);
251 dataHasValue(CE,CEF);
252 dataMinCardinality(CE,CEF);
253 dataMaxCardinality(CE,CEF);
254 dataExactCardinality(CE,CEF)),
255 !.
256
276
278individual2function(PE, PEF):-
279 iri(PE,PEF).
280
281propertyExpression2function(PE, PEF):-
282 iri(PE,PEF).
283
285iri(IRI,IRIF) :-
286 atomic(IRI),
287 atomic_list_concat(['<',IRI,'>'],IRIL),
288 atomic_list_concat([IRIL,' '],IRIF).
289
291objectIntersectionOf(intersectionOf(CEs),ClassExpressionFL):-
292 ClassExpressionF = 'ObjectIntersectionOf',
293 findall(CEF,(member(CE,CEs),classExpression2function(CE,CEF)),L),
294 appendFunctional(ClassExpressionF,L,ClassExpressionFL).
295
297objectSomeValuesFrom(someValuesFrom(P,C),SVFFunc):-
298 classExpression2function(C,CF),
299 propertyExpression2function(P,PF),
300 appendFunctional('ObjectSomeValuesFrom',[CF,PF], SVFFunc).
301
303objectUnionOf(unionOf(CEs),ClassExpressionFL):-
304 ClassExpressionF = 'ObjectUnionOf',
305 findall(CEF,(member(CE,CEs),classExpression2function(CE,CEF)),L),
306 appendFunctional(ClassExpressionF,L,ClassExpressionFL).
307
309objectComplementOf(complementOf(CE), CEF):-
310 classExpression2function(CE,CEs),
311 appendFunctional('ObjectComplementOf', CEs, CEF).
312
314objectOneOf(oneOf(List), CEFs) :-
315 findall(CEF, (member(CE,List),classExpression2function(CE,CEF)), L),
316 appendFunctional('ObjectOneOf', L, CEFs).
317
319objectAllValuesFrom(allValueFrom(P, C), AVFFunc):-
320 classExpression2function(C, CF),
321 propertyExpression2function(P, PF),
322 appendFunctional('ObjectAllValuesFrom',[PF,CF], AVFFunc).
323
325objectHasValue(hasValue(P,I), HVFunc):-
326 propertyExpression2function(P, PF),
327 individual2function(I, IF),
328 appendFunctional('ObjectHasValue', [PF, IF], HVFunc).
329
331objectHasSelf(hasSelf(P), HVFunc):-
332 propertyExpression2function(P, PF),
333 appendFunctional('ObjectHasSelf', PF, HVFunc).
334
336objectMinCardinality(minCardinality(C, P, E), OMiCFunc):-
337 number(C),
338 C>=0,
339 propertyExpression2function(P, PF),
340 classExpression2function(E, EF),
341 appendFunctional('ObjectMinCardinality',[C,PF,EF], OMiCFunc).
342objectMinCardinality(minCardinality(C, P), OMiCFunc):-
343 number(C),
344 C>=0,
345 propertyExpression2function(P, PF),
346 appendFunctional('ObjectMinCardinality',[C,PF], OMiCFunc).
347
349objectMaxCardinality(maxCardinality(C, P, E), OMaCFunc):-
350 number(C),
351 C>=0,
352 propertyExpression2function(P, PF),
353 classExpression2function(E, EF),
354 appendFunctional('ObjectMaxCardinality',[C,PF,EF], OMaCFunc).
355objectMaxCardinality(maxCardinality(C, P), OMaCFunc):-
356 number(C),
357 C>=0,
358 propertyExpression2function(P, PF),
359 appendFunctional('ObjectMaxCardinality',[C,PF], OMaCFunc).
360
362objectExactCardinality(exactCardinality(C, P, E), OECFunc):-
363 number(C),
364 C>=0,
365 propertyExpression2function(P, PF),
366 classExpression2function(E, EF),
367 appendFunctional('ObjectExactCardinality',[C,PF,EF], OECFunc).
368objectExactCardinality(exactCardinality(C, P), OECFunc):-
369 number(C),
370 C>=0,
371 propertyExpression2function(P, PF),
372 appendFunctional('ObjectExactCardinality',[C,PF], OECFunc).
373
375dataSomeValuesFrom(someValuesFrom(DE), DataPropertyExpressionFL):-
376 DataPropertyExpressionF= 'DataSomeValuesFrom',
377 dataExpression2function(DE,DEF),
378 379 appendFunctional(DataPropertyExpressionF, DEF, DataPropertyExpressionFL).
380
382dataAllValuesFrom(allValuesFrom(DE), DataPropertyExpressionFL):-
383 DataPropertyExpressionF= 'AllSomeValuesFrom',
384 dataExpression2function(DE,DEF),
385 386 appendFunctional(DataPropertyExpressionF, DEF, DataPropertyExpressionFL).
387
389dataHasValue(hasValue(P,I), DVFunc):-
390 dataPropertyExpression2function(P, PF),
391 literal2function(I, IF),
392 appendFunctional('DataHasValue', [PF, IF], DVFunc).
393
395dataMinCardinality(minCardinality(C, P), DMiCFunc):-
396 number(C),
397 C>=0,
398 propertyExpression2function(P, PF),
399 appendFunctional('DataMinCardinality',[C,PF], DMiCFunc).
400
402dataMaxCardinality(maxCardinality(C, P), DMaCFunc):-
403 number(C),
404 C>=0,
405 propertyExpression2function(P, PF),
406 appendFunctional('DataMaxCardinality',[C,PF], DMaCFunc).
407
409dataExactCardinality(exactCardinality(C, P), DECFunc):-
410 number(C),
411 C>=0,
412 propertyExpression2function(P, PF),
413 appendFunctional('DataExactCardinality',[C,PF], DECFunc).
414
415
417
419appendFunctional(Pred, Lista, Ris):-
420 atomic_list_concat([Pred,'('|Lista], Atom),
421 atomic_concat(Atom, ')', Ris).
422
424appendFunctional1(Pred1, Lista1, Ris1):-
425 atomic_list_concat([Pred1,'(<'|Lista1], Atom1),
426 atomic_concat(Atom1, '>', Ris1).
427
429appendFunctional2(Pred2, Lista2, Ris2):-
430 atomic_concat('Declaration(',Pred2, Atom2),
431 atomic_list_concat([Atom2,'('|Lista2], Atom3),
432 atomic_concat(Atom3, '))', Ris2).
433
434
436
437writefile:-
438
439 440 open('kb_funct.owl', write, Stream),
441 nl(Stream),
442
443 444 kb_prefixes(Le),
445 foreach(member(K=P,Le),
446 (
447 write(Stream, 'Prefix('),
448 write(Stream, K),
449 write(Stream, ':=<'),
450 write(Stream, P),
451 write(Stream, '>)\n')
452 )
453 ),
454 write(Stream,'\n'),
455
456 457 findall(PO, (axiom(ontology(Oiri)),prolog2function(ontology(Oiri),PO)),Lo),
458 foreach(member(Os, Lo), writeln(Stream, Os)),
459 write(Stream,'\n'),
460
461 462 findall(OP,(axiom(Ax),Ax\=ontology(_),prolog2function(Ax,OP)),La),
463 foreach(member(As,La), writeln(Stream,As)),
464
465 466 write(Stream,')'),
467 write(Stream,'\n'),
468 close(Stream).
476convert_explanations([],[]).
477
478convert_explanations([ExplTRILL|ExplsTRILL],[ExplFunct|ExplsFunct]):-
479 convert_explanation(ExplTRILL,ExplFunct),
480 convert_explanations(ExplsTRILL,ExplsFunct).
481
482convert_explanation([],[]).
483
484convert_explanation([TRILLAx|OtherTRILLAxs],[FunctAx|OtherFunctAxs]):-
485 prolog2function(TRILLAx,FunctAx),
486 convert_explanation(OtherTRILLAxs,OtherFunctAxs).
493convert_axiom(TRILLAx,FunctAx):-
494 prolog2function(TRILLAx,FunctAx)
trill_2_funct
This module translates TRILL format into OWL functional syntax.