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}