001/**
002 * Copyright (C) 2007 - 2016, Jens Lehmann
003 *
004 * This file is part of DL-Learner.
005 *
006 * DL-Learner is free software; you can redistribute it and/or modify
007 * it under the terms of the GNU General Public License as published by
008 * the Free Software Foundation; either version 3 of the License, or
009 * (at your option) any later version.
010 *
011 * DL-Learner is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
014 * GNU General Public License for more details.
015 *
016 * You should have received a copy of the GNU General Public License
017 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
018 */
019package org.dllearner.algorithms.pattern;
020
021import org.semanticweb.owlapi.model.OWLAnnotationAssertionAxiom;
022import org.semanticweb.owlapi.model.OWLAnnotationPropertyDomainAxiom;
023import org.semanticweb.owlapi.model.OWLAnnotationPropertyRangeAxiom;
024import org.semanticweb.owlapi.model.OWLAsymmetricObjectPropertyAxiom;
025import org.semanticweb.owlapi.model.OWLAxiom;
026import org.semanticweb.owlapi.model.OWLAxiomVisitor;
027import org.semanticweb.owlapi.model.OWLClass;
028import org.semanticweb.owlapi.model.OWLClassAssertionAxiom;
029import org.semanticweb.owlapi.model.OWLClassExpression;
030import org.semanticweb.owlapi.model.OWLClassExpressionVisitor;
031import org.semanticweb.owlapi.model.OWLDataAllValuesFrom;
032import org.semanticweb.owlapi.model.OWLDataExactCardinality;
033import org.semanticweb.owlapi.model.OWLDataHasValue;
034import org.semanticweb.owlapi.model.OWLDataMaxCardinality;
035import org.semanticweb.owlapi.model.OWLDataMinCardinality;
036import org.semanticweb.owlapi.model.OWLDataPropertyAssertionAxiom;
037import org.semanticweb.owlapi.model.OWLDataPropertyDomainAxiom;
038import org.semanticweb.owlapi.model.OWLDataPropertyRangeAxiom;
039import org.semanticweb.owlapi.model.OWLDataSomeValuesFrom;
040import org.semanticweb.owlapi.model.OWLDatatypeDefinitionAxiom;
041import org.semanticweb.owlapi.model.OWLDeclarationAxiom;
042import org.semanticweb.owlapi.model.OWLDifferentIndividualsAxiom;
043import org.semanticweb.owlapi.model.OWLDisjointClassesAxiom;
044import org.semanticweb.owlapi.model.OWLDisjointDataPropertiesAxiom;
045import org.semanticweb.owlapi.model.OWLDisjointObjectPropertiesAxiom;
046import org.semanticweb.owlapi.model.OWLDisjointUnionAxiom;
047import org.semanticweb.owlapi.model.OWLEquivalentClassesAxiom;
048import org.semanticweb.owlapi.model.OWLEquivalentDataPropertiesAxiom;
049import org.semanticweb.owlapi.model.OWLEquivalentObjectPropertiesAxiom;
050import org.semanticweb.owlapi.model.OWLFunctionalDataPropertyAxiom;
051import org.semanticweb.owlapi.model.OWLFunctionalObjectPropertyAxiom;
052import org.semanticweb.owlapi.model.OWLHasKeyAxiom;
053import org.semanticweb.owlapi.model.OWLInverseFunctionalObjectPropertyAxiom;
054import org.semanticweb.owlapi.model.OWLInverseObjectPropertiesAxiom;
055import org.semanticweb.owlapi.model.OWLIrreflexiveObjectPropertyAxiom;
056import org.semanticweb.owlapi.model.OWLNegativeDataPropertyAssertionAxiom;
057import org.semanticweb.owlapi.model.OWLNegativeObjectPropertyAssertionAxiom;
058import org.semanticweb.owlapi.model.OWLObjectAllValuesFrom;
059import org.semanticweb.owlapi.model.OWLObjectComplementOf;
060import org.semanticweb.owlapi.model.OWLObjectExactCardinality;
061import org.semanticweb.owlapi.model.OWLObjectHasSelf;
062import org.semanticweb.owlapi.model.OWLObjectHasValue;
063import org.semanticweb.owlapi.model.OWLObjectIntersectionOf;
064import org.semanticweb.owlapi.model.OWLObjectMaxCardinality;
065import org.semanticweb.owlapi.model.OWLObjectMinCardinality;
066import org.semanticweb.owlapi.model.OWLObjectOneOf;
067import org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom;
068import org.semanticweb.owlapi.model.OWLObjectPropertyDomainAxiom;
069import org.semanticweb.owlapi.model.OWLObjectPropertyRangeAxiom;
070import org.semanticweb.owlapi.model.OWLObjectSomeValuesFrom;
071import org.semanticweb.owlapi.model.OWLObjectUnionOf;
072import org.semanticweb.owlapi.model.OWLReflexiveObjectPropertyAxiom;
073import org.semanticweb.owlapi.model.OWLSameIndividualAxiom;
074import org.semanticweb.owlapi.model.OWLSubAnnotationPropertyOfAxiom;
075import org.semanticweb.owlapi.model.OWLSubClassOfAxiom;
076import org.semanticweb.owlapi.model.OWLSubDataPropertyOfAxiom;
077import org.semanticweb.owlapi.model.OWLSubObjectPropertyOfAxiom;
078import org.semanticweb.owlapi.model.OWLSubPropertyChainOfAxiom;
079import org.semanticweb.owlapi.model.OWLSymmetricObjectPropertyAxiom;
080import org.semanticweb.owlapi.model.OWLTransitiveObjectPropertyAxiom;
081import org.semanticweb.owlapi.model.SWRLRule;
082
083/**
084 * @author Lorenz Buehmann
085 *
086 */
087public class MaximumModalDepthDetector implements OWLAxiomVisitor, OWLClassExpressionVisitor{
088        
089        int maxModalDepth;
090        
091        public static int getMaxModalDepth(OWLAxiom axiom){
092                MaximumModalDepthDetector depthDetector = new MaximumModalDepthDetector();
093                axiom.accept(depthDetector);
094                return depthDetector.maxModalDepth;
095        }
096
097        /* (non-Javadoc)
098         * @see org.semanticweb.owlapi.model.OWLAnnotationAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLAnnotationAssertionAxiom)
099         */
100        @Override
101        public void visit(OWLAnnotationAssertionAxiom axiom) {
102        }
103
104        /* (non-Javadoc)
105         * @see org.semanticweb.owlapi.model.OWLAnnotationAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLSubAnnotationPropertyOfAxiom)
106         */
107        @Override
108        public void visit(OWLSubAnnotationPropertyOfAxiom axiom) {
109        }
110
111        /* (non-Javadoc)
112         * @see org.semanticweb.owlapi.model.OWLAnnotationAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLAnnotationPropertyDomainAxiom)
113         */
114        @Override
115        public void visit(OWLAnnotationPropertyDomainAxiom axiom) {
116        }
117
118        /* (non-Javadoc)
119         * @see org.semanticweb.owlapi.model.OWLAnnotationAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLAnnotationPropertyRangeAxiom)
120         */
121        @Override
122        public void visit(OWLAnnotationPropertyRangeAxiom axiom) {
123        }
124
125        
126
127        /* (non-Javadoc)
128         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLDeclarationAxiom)
129         */
130        @Override
131        public void visit(OWLDeclarationAxiom axiom) {
132        }
133
134        /* (non-Javadoc)
135         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLSubClassOfAxiom)
136         */
137        @Override
138        public void visit(OWLSubClassOfAxiom axiom) {
139                OWLClassExpression subClass = axiom.getSubClass();
140                subClass.accept(this);
141                int tmp = maxModalDepth;
142                maxModalDepth = 1;
143                OWLClassExpression superClass = axiom.getSuperClass();
144                superClass.accept(this);
145                maxModalDepth = Math.max(tmp, maxModalDepth);
146        }
147
148        /* (non-Javadoc)
149         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLNegativeObjectPropertyAssertionAxiom)
150         */
151        @Override
152        public void visit(OWLNegativeObjectPropertyAssertionAxiom axiom) {
153        }
154
155        /* (non-Javadoc)
156         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLAsymmetricObjectPropertyAxiom)
157         */
158        @Override
159        public void visit(OWLAsymmetricObjectPropertyAxiom axiom) {
160        }
161
162        /* (non-Javadoc)
163         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLReflexiveObjectPropertyAxiom)
164         */
165        @Override
166        public void visit(OWLReflexiveObjectPropertyAxiom axiom) {
167        }
168
169        /* (non-Javadoc)
170         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLDisjointClassesAxiom)
171         */
172        @Override
173        public void visit(OWLDisjointClassesAxiom axiom) {
174        }
175
176        /* (non-Javadoc)
177         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLDataPropertyDomainAxiom)
178         */
179        @Override
180        public void visit(OWLDataPropertyDomainAxiom axiom) {
181        }
182
183        /* (non-Javadoc)
184         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLObjectPropertyDomainAxiom)
185         */
186        @Override
187        public void visit(OWLObjectPropertyDomainAxiom axiom) {
188        }
189
190        /* (non-Javadoc)
191         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLEquivalentObjectPropertiesAxiom)
192         */
193        @Override
194        public void visit(OWLEquivalentObjectPropertiesAxiom axiom) {
195        }
196
197        /* (non-Javadoc)
198         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLNegativeDataPropertyAssertionAxiom)
199         */
200        @Override
201        public void visit(OWLNegativeDataPropertyAssertionAxiom axiom) {
202        }
203
204        /* (non-Javadoc)
205         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLDifferentIndividualsAxiom)
206         */
207        @Override
208        public void visit(OWLDifferentIndividualsAxiom axiom) {
209        }
210
211        /* (non-Javadoc)
212         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLDisjointDataPropertiesAxiom)
213         */
214        @Override
215        public void visit(OWLDisjointDataPropertiesAxiom axiom) {
216        }
217
218        /* (non-Javadoc)
219         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLDisjointObjectPropertiesAxiom)
220         */
221        @Override
222        public void visit(OWLDisjointObjectPropertiesAxiom axiom) {
223        }
224
225        /* (non-Javadoc)
226         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLObjectPropertyRangeAxiom)
227         */
228        @Override
229        public void visit(OWLObjectPropertyRangeAxiom axiom) {
230        }
231
232        /* (non-Javadoc)
233         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom)
234         */
235        @Override
236        public void visit(OWLObjectPropertyAssertionAxiom axiom) {
237        }
238
239        /* (non-Javadoc)
240         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLFunctionalObjectPropertyAxiom)
241         */
242        @Override
243        public void visit(OWLFunctionalObjectPropertyAxiom axiom) {
244        }
245
246        /* (non-Javadoc)
247         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLSubObjectPropertyOfAxiom)
248         */
249        @Override
250        public void visit(OWLSubObjectPropertyOfAxiom axiom) {
251        }
252
253        /* (non-Javadoc)
254         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLDisjointUnionAxiom)
255         */
256        @Override
257        public void visit(OWLDisjointUnionAxiom axiom) {
258        }
259
260        /* (non-Javadoc)
261         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLSymmetricObjectPropertyAxiom)
262         */
263        @Override
264        public void visit(OWLSymmetricObjectPropertyAxiom axiom) {
265        }
266
267        /* (non-Javadoc)
268         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLDataPropertyRangeAxiom)
269         */
270        @Override
271        public void visit(OWLDataPropertyRangeAxiom axiom) {
272        }
273
274        /* (non-Javadoc)
275         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLFunctionalDataPropertyAxiom)
276         */
277        @Override
278        public void visit(OWLFunctionalDataPropertyAxiom axiom) {
279        }
280
281        /* (non-Javadoc)
282         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLEquivalentDataPropertiesAxiom)
283         */
284        @Override
285        public void visit(OWLEquivalentDataPropertiesAxiom axiom) {
286        }
287
288        /* (non-Javadoc)
289         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLClassAssertionAxiom)
290         */
291        @Override
292        public void visit(OWLClassAssertionAxiom axiom) {
293        }
294
295        /* (non-Javadoc)
296         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLEquivalentClassesAxiom)
297         */
298        @Override
299        public void visit(OWLEquivalentClassesAxiom axiom) {
300        }
301
302        /* (non-Javadoc)
303         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLDataPropertyAssertionAxiom)
304         */
305        @Override
306        public void visit(OWLDataPropertyAssertionAxiom axiom) {
307        }
308
309        /* (non-Javadoc)
310         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLTransitiveObjectPropertyAxiom)
311         */
312        @Override
313        public void visit(OWLTransitiveObjectPropertyAxiom axiom) {
314        }
315
316        /* (non-Javadoc)
317         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLIrreflexiveObjectPropertyAxiom)
318         */
319        @Override
320        public void visit(OWLIrreflexiveObjectPropertyAxiom axiom) {
321        }
322
323        /* (non-Javadoc)
324         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLSubDataPropertyOfAxiom)
325         */
326        @Override
327        public void visit(OWLSubDataPropertyOfAxiom axiom) {
328        }
329
330        /* (non-Javadoc)
331         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLInverseFunctionalObjectPropertyAxiom)
332         */
333        @Override
334        public void visit(OWLInverseFunctionalObjectPropertyAxiom axiom) {
335        }
336
337        /* (non-Javadoc)
338         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLSameIndividualAxiom)
339         */
340        @Override
341        public void visit(OWLSameIndividualAxiom axiom) {
342        }
343
344        /* (non-Javadoc)
345         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLSubPropertyChainOfAxiom)
346         */
347        @Override
348        public void visit(OWLSubPropertyChainOfAxiom axiom) {
349        }
350
351        /* (non-Javadoc)
352         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLInverseObjectPropertiesAxiom)
353         */
354        @Override
355        public void visit(OWLInverseObjectPropertiesAxiom axiom) {
356        }
357
358        /* (non-Javadoc)
359         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLHasKeyAxiom)
360         */
361        @Override
362        public void visit(OWLHasKeyAxiom axiom) {
363        }
364
365        /* (non-Javadoc)
366         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.OWLDatatypeDefinitionAxiom)
367         */
368        @Override
369        public void visit(OWLDatatypeDefinitionAxiom axiom) {
370        }
371
372        /* (non-Javadoc)
373         * @see org.semanticweb.owlapi.model.OWLAxiomVisitor#visit(org.semanticweb.owlapi.model.SWRLRule)
374         */
375        @Override
376        public void visit(SWRLRule axiom) {
377        }
378
379        /* (non-Javadoc)
380         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLClass)
381         */
382        @Override
383        public void visit(OWLClass ce) {
384        }
385
386        /* (non-Javadoc)
387         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLObjectIntersectionOf)
388         */
389        @Override
390        public void visit(OWLObjectIntersectionOf ce) {
391        }
392
393        /* (non-Javadoc)
394         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLObjectUnionOf)
395         */
396        @Override
397        public void visit(OWLObjectUnionOf ce) {
398        }
399
400        /* (non-Javadoc)
401         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLObjectComplementOf)
402         */
403        @Override
404        public void visit(OWLObjectComplementOf ce) {
405        }
406
407        /* (non-Javadoc)
408         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLObjectSomeValuesFrom)
409         */
410        @Override
411        public void visit(OWLObjectSomeValuesFrom ce) {
412                maxModalDepth++;
413                ce.getFiller().accept(this);
414        }
415
416        /* (non-Javadoc)
417         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLObjectAllValuesFrom)
418         */
419        @Override
420        public void visit(OWLObjectAllValuesFrom ce) {
421                maxModalDepth++;
422                ce.getFiller().accept(this);
423        }
424
425        /* (non-Javadoc)
426         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLObjectHasValue)
427         */
428        @Override
429        public void visit(OWLObjectHasValue ce) {
430        }
431
432        /* (non-Javadoc)
433         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLObjectMinCardinality)
434         */
435        @Override
436        public void visit(OWLObjectMinCardinality ce) {
437                maxModalDepth++;
438                ce.getFiller().accept(this);
439        }
440
441        /* (non-Javadoc)
442         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLObjectExactCardinality)
443         */
444        @Override
445        public void visit(OWLObjectExactCardinality ce) {
446                maxModalDepth++;
447                ce.getFiller().accept(this);
448        }
449
450        /* (non-Javadoc)
451         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLObjectMaxCardinality)
452         */
453        @Override
454        public void visit(OWLObjectMaxCardinality ce) {
455                maxModalDepth++;
456                ce.getFiller().accept(this);
457        }
458
459        /* (non-Javadoc)
460         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLObjectHasSelf)
461         */
462        @Override
463        public void visit(OWLObjectHasSelf ce) {
464        }
465
466        /* (non-Javadoc)
467         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLObjectOneOf)
468         */
469        @Override
470        public void visit(OWLObjectOneOf ce) {
471        }
472
473        /* (non-Javadoc)
474         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLDataSomeValuesFrom)
475         */
476        @Override
477        public void visit(OWLDataSomeValuesFrom ce) {
478        }
479
480        /* (non-Javadoc)
481         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLDataAllValuesFrom)
482         */
483        @Override
484        public void visit(OWLDataAllValuesFrom ce) {
485        }
486
487        /* (non-Javadoc)
488         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLDataHasValue)
489         */
490        @Override
491        public void visit(OWLDataHasValue ce) {
492        }
493
494        /* (non-Javadoc)
495         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLDataMinCardinality)
496         */
497        @Override
498        public void visit(OWLDataMinCardinality ce) {
499        }
500
501        /* (non-Javadoc)
502         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLDataExactCardinality)
503         */
504        @Override
505        public void visit(OWLDataExactCardinality ce) {
506        }
507
508        /* (non-Javadoc)
509         * @see org.semanticweb.owlapi.model.OWLClassExpressionVisitor#visit(org.semanticweb.owlapi.model.OWLDataMaxCardinality)
510         */
511        @Override
512        public void visit(OWLDataMaxCardinality ce) {
513        } 
514        
515        
516}