4A Server -  2.0
 All Classes Namespaces Files Functions Variables Enumerator
OWLVisitorForRestrictionData.java
Go to the documentation of this file.
1 /*
2  * Project: Server for annotations sharing
3  * Author: Ing. Jaroslav Dytrych idytrych@fit.vutbr.cz
4  * File: OWLVisitorForRestrictionData.java
5  * Description: Class collect information about restrictions
6  */
7 
8 /**
9  * @file OWLVisitorForRestrictionData.java
10  *
11  * @brief Class collect information about restrictions
12  */
13 
14 package cz.vutbr.fit.knot.annotations.web;
15 
16 import java.util.HashSet;
17 import java.util.Set;
18 import org.semanticweb.owlapi.model.OWLAxiom;
19 import org.semanticweb.owlapi.model.OWLClass;
20 import org.semanticweb.owlapi.model.OWLIndividual;
21 import org.semanticweb.owlapi.model.OWLObjectAllValuesFrom;
22 import org.semanticweb.owlapi.model.OWLObjectExactCardinality;
23 import org.semanticweb.owlapi.model.OWLObjectHasSelf;
24 import org.semanticweb.owlapi.model.OWLObjectHasValue;
25 import org.semanticweb.owlapi.model.OWLObjectMaxCardinality;
26 import org.semanticweb.owlapi.model.OWLObjectMinCardinality;
27 import org.semanticweb.owlapi.model.OWLObjectProperty;
28 import org.semanticweb.owlapi.model.OWLObjectSomeValuesFrom;
29 import org.semanticweb.owlapi.util.OWLOntologyWalker;
30 import org.semanticweb.owlapi.util.OWLOntologyWalkerVisitor;
31 
32 /**
33  * Class collect information about restrictions
34  *
35  * @brief Class collect information about restrictions
36  * @author Marek Kopecky
37  */
38 class OWLVisitorForRestrictionData extends OWLOntologyWalkerVisitor<Object> {
39 
40  /**
41  * Data class for cardinality restriction
42  * Ontology axims are stored here for further processing
43  *
44  * @brief Data class for cardinality restriction
45  * @author Marek Kopecky
46  */
47  public static class CardinalityData {
48  public int cardinality;
49  public String propertyURI;
50  public String classURI;
51  public CardinalityData(int cardinality, String propertyURI, String classURI) {
52  this.cardinality = cardinality;
53  this.propertyURI = propertyURI;
54  this.classURI = classURI;
55  }
56  }
57 
58 
59  /**
60  * Data class for someValueFrom and allValueFrom restriction
61  * Ontology axims are stored here for further processing
62  *
63  * @brief Data class for someValueFrom and allValueFrom restriction
64  * @author Marek Kopecky
65  */
66  public static class ValueData {
67  public String valueURI;
68  public String propertyURI;
69  public String classURI;
70  public ValueData(String valueURI, String propertyURI, String classURI) {
71  this.valueURI = valueURI;
72  this.propertyURI = propertyURI;
73  this.classURI = classURI;
74  }
75  }
76 
77  /**
78  * Data class for hasValue restriction
79  * Ontology axims are stored here for further processing
80  *
81  * @brief Data class for hasValue restriction
82  * @author Marek Kopecky
83  */
84  public static class HasValueData extends OWLVisitorForRestrictionData.ValueData {
85  public OWLIndividual individual;
86  public HasValueData(OWLIndividual individual, String propertyURI, String classURI) {
87  super(individual.toStringID(), propertyURI, classURI);
88  this.individual = individual;
89  }
90  }
91 
92  /**
93  * Set of minCardinality data
94  */
95  Set<OWLVisitorForRestrictionData.CardinalityData> minCardinalityData;
96  /**
97  * Set of maxCardinality data
98  */
99  Set<OWLVisitorForRestrictionData.CardinalityData> maxCardinalityData;
100  /**
101  * Set of cardinality data
102  */
103  Set<OWLVisitorForRestrictionData.CardinalityData> cardinalityData;
104  /**
105  * Set of hasValue data
106  */
107  Set<OWLVisitorForRestrictionData.HasValueData> hasValueData;
108  /**
109  * Set of self data
110  */
111  Set<OWLVisitorForRestrictionData.ValueData> hasSelfData;
112  /**
113  * Set of someValuesFrom data
114  */
115  Set<OWLVisitorForRestrictionData.ValueData> someValuesFromData;
116  /**
117  * Set of allValuesFrom data
118  */
119  Set<OWLVisitorForRestrictionData.ValueData> allValuesFromData;
120 
121  /**
122  * Initialize data structures.
123  * @param walker Important for super-class constructor.
124  */
125  public OWLVisitorForRestrictionData(OWLOntologyWalker walker) {
126  super(walker);
127  minCardinalityData = new HashSet<OWLVisitorForRestrictionData.CardinalityData>();
128  maxCardinalityData = new HashSet<OWLVisitorForRestrictionData.CardinalityData>();
129  cardinalityData = new HashSet<OWLVisitorForRestrictionData.CardinalityData>();
130  hasValueData = new HashSet<OWLVisitorForRestrictionData.HasValueData>();
131  hasSelfData = new HashSet<OWLVisitorForRestrictionData.ValueData>();
132  someValuesFromData = new HashSet<OWLVisitorForRestrictionData.ValueData>();
133  allValuesFromData = new HashSet<OWLVisitorForRestrictionData.ValueData>();
134  }
135 
136 
137  /**
138  * Gets minCardinality data
139  *
140  * @return MinCardinality data
141  */
142  public Set<OWLVisitorForRestrictionData.CardinalityData> getMinCardinalityData() {
143  return minCardinalityData;
144  }
145 
146  /**
147  * Gets maxCardinality data
148  *
149  * @return MaxCardinality data
150  */
151  public Set<OWLVisitorForRestrictionData.CardinalityData> getMaxCardinalityData() {
152  return maxCardinalityData;
153  }
154 
155  /**
156  * Gets cardinality data
157  *
158  * @return Cardinality data
159  */
160  public Set<OWLVisitorForRestrictionData.CardinalityData> getCardinalityData() {
161  return cardinalityData;
162  }
163 
164  /**
165  * Gets hasValue data
166  *
167  * @return HasValue data
168  */
169  public Set<OWLVisitorForRestrictionData.HasValueData> getHasValueData() {
170  return hasValueData;
171  }
172 
173  /**
174  * Gets hasSelf data
175  *
176  * @return HasSelf data
177  */
178  public Set<OWLVisitorForRestrictionData.ValueData> getHasSelfData() {
179  return hasSelfData;
180  }
181 
182  /**
183  * Get someValuesFrom data
184  *
185  * @return SomeValuesFrom data
186  */
187  public Set<OWLVisitorForRestrictionData.ValueData> getSomeValuesFromData() {
188  return someValuesFromData;
189  }
190 
191  /**
192  * Get allValuesFrom data
193  *
194  * @return AllValuesFrom data
195  */
196  public Set<OWLVisitorForRestrictionData.ValueData> getAllValuesFromData() {
197  return allValuesFromData;
198  }
199 
200  /**
201  * Determine, if string value represent number.
202  * @param value string value
203  * @return true, if value represent number, else false
204  */
205  public static boolean tryParseInt(String value)
206  {
207  if (value == null) {
208  return false;
209  }
210  try {
211  Integer.parseInt(value);
212  return true;
213  } catch (NumberFormatException e) {
214  return false;
215  }
216  }
217 
218  /**
219  * Determine, if uri represent anonymous class.
220  * @param uri OWL Class uri.
221  * @return true, if uri represent anonymous class
222  */
223  private boolean errorClassDetection(String uri) {
224  String name = UploadOntology.getNameFromURI(uri);
225  if (!name.startsWith("Error")) {
226  return false;
227  }
228  String errorNumber = name.substring(5, name.length());
229  return tryParseInt(errorNumber);
230  }
231 
232  // <editor-fold defaultstate="collapsed" desc="MinCardinality">
233  /**
234  * Get information about MinCardinality restriction.
235  * @param desc MinCardinality information.
236  * @return Nothing, because this function is called by OWLOntologyWalker.
237  */
238  @Override
239  public Object visit(OWLObjectMinCardinality desc) {
240  OWLAxiom axiom = getCurrentAxiom(); // get axiom
241  Set<OWLObjectProperty> properties = axiom.getObjectPropertiesInSignature(); // get properties set
242  if (properties.isEmpty()) { // undefined property
243  return null;
244  }
245  OWLClass subjectClass = null;
246  boolean subjectClassFound = false;
247  for (OWLClass cls : axiom.getClassesInSignature()) {
248  if (!cls.isOWLThing()) {
249  subjectClassFound = true;
250  subjectClass = cls;
251  break;
252  }
253  }
254  if (!subjectClassFound) { // subject wasn't found
255  return null;
256  }
257  OWLVisitorForRestrictionData.CardinalityData data = new OWLVisitorForRestrictionData.CardinalityData(desc.getCardinality(), properties.iterator().next().toStringID(), subjectClass.toStringID());
258  minCardinalityData.add(data);
259  // We don't need to return anything here.
260  return null;
261  }
262  // </editor-fold>
263 
264  // <editor-fold defaultstate="collapsed" desc="MaxCardinality">
265  /**
266  * Get information about MaxCardinality restriction.
267  * @param desc MaxCardinality information.
268  * @return Nothing, because this function is called by OWLOntologyWalker.
269  */
270  @Override
271  public Object visit(OWLObjectMaxCardinality desc) {
272  OWLAxiom axiom = getCurrentAxiom(); // get axiom
273  Set<OWLObjectProperty> properties = axiom.getObjectPropertiesInSignature(); // get properties set
274  if (properties.isEmpty()) { // undefined property
275  return null;
276  }
277  OWLClass subjectClass = null;
278  boolean subjectClassFound = false;
279  for (OWLClass cls : axiom.getClassesInSignature()) {
280  if (!cls.isOWLThing()) {
281  subjectClassFound = true;
282  subjectClass = cls;
283  break;
284  }
285  }
286  if (!subjectClassFound) { // subject wasn't found
287  return null;
288  }
289  OWLVisitorForRestrictionData.CardinalityData data = new OWLVisitorForRestrictionData.CardinalityData(desc.getCardinality(), properties.iterator().next().toStringID(), subjectClass.toStringID());
290  maxCardinalityData.add(data);
291  // We don't need to return anything here.
292  return null;
293  }
294  // </editor-fold>
295 
296  // <editor-fold defaultstate="collapsed" desc="ExactCardinality">
297  /**
298  * Get information about ExactCardinality restriction.
299  * @param desc ExactCardinality information.
300  * @return Nothing, because this function is called by OWLOntologyWalker.
301  */
302  @Override
303  public Object visit(OWLObjectExactCardinality desc) {
304  OWLAxiom axiom = getCurrentAxiom(); // get axiom
305  Set<OWLObjectProperty> properties = axiom.getObjectPropertiesInSignature(); // get properties set
306  if (properties.isEmpty()) { // undefined property
307  return null;
308  }
309  OWLClass subjectClass = null;
310  boolean subjectClassFound = false;
311  for (OWLClass cls : axiom.getClassesInSignature()) {
312  if (!cls.isOWLThing()) {
313  subjectClassFound = true;
314  subjectClass = cls;
315  break;
316  }
317  }
318  if (!subjectClassFound) { // subject wasn't found
319  return null;
320  }
321  OWLVisitorForRestrictionData.CardinalityData data = new OWLVisitorForRestrictionData.CardinalityData(desc.getCardinality(), properties.iterator().next().toStringID(), subjectClass.toStringID());
322  cardinalityData.add(data);
323  // We don't need to return anything here.
324  return null;
325  }
326  // </editor-fold>
327 
328  // <editor-fold defaultstate="collapsed" desc="hasValue">
329  /**
330  * Get information about HasValue restriction.
331  * @param desc HasValue information.
332  * @return Nothing, because this function is called by OWLOntologyWalker.
333  */
334  @Override
335  public Object visit(OWLObjectHasValue desc) {
336  OWLAxiom axiom = getCurrentAxiom(); // get axiom
337  Set<OWLObjectProperty> properties = axiom.getObjectPropertiesInSignature(); // get properties set
338  if (properties.isEmpty()) { // undefined property
339  return null;
340  }
341  OWLClass subjectClass = null;
342  boolean subjectClassFound = false;
343  for (OWLClass cls : axiom.getClassesInSignature()) {
344  if (!cls.isOWLThing()) {
345  subjectClassFound = true;
346  subjectClass = cls;
347  break;
348  }
349  }
350  if (!subjectClassFound) { // subject wasn't found
351  return null;
352  }
353  OWLVisitorForRestrictionData.HasValueData data = new OWLVisitorForRestrictionData.HasValueData(desc.getValue(), properties.iterator().next().toStringID(), subjectClass.toStringID());
354  hasValueData.add(data);
355  // We don't need to return anything here.
356  return null;
357  }
358  // </editor-fold>
359 
360  // <editor-fold defaultstate="collapsed" desc="hasSelf">
361  /**
362  * Get information about HasSelf restriction.
363  * @param desc Base information about restriction.
364  * @return Nothing, because this function is called by OWLOntologyWalker.
365  */
366  @Override
367  public Object visit(OWLObjectHasSelf desc) {
368  OWLAxiom axiom = getCurrentAxiom(); // get axiom
369  Set<OWLObjectProperty> properties = axiom.getObjectPropertiesInSignature(); // get properties set
370  if (properties.isEmpty()) { // undefined property
371  return null;
372  }
373  desc.isDataRestriction();
374  OWLClass subjectClass = null;
375  boolean subjectClassFound = false;
376  for (OWLClass cls : axiom.getClassesInSignature()) {
377  if (!cls.isOWLThing()) {
378  subjectClassFound = true;
379  subjectClass = cls;
380  break;
381  }
382  }
383  if (!subjectClassFound) { // subject wasn't found
384  return null;
385  }
386  OWLVisitorForRestrictionData.ValueData data = new OWLVisitorForRestrictionData.ValueData("", properties.iterator().next().toStringID(), subjectClass.toStringID());
387  hasSelfData.add(data);
388  // We don't need to return anything here.
389  return null;
390  }
391  // </editor-fold>
392 
393  // <editor-fold defaultstate="collapsed" desc="someValuesFrom">
394  /**
395  * Get information about SomeValuesFrom restriction.
396  * @param desc SomeValuesFrom information.
397  * @return Nothing, because this function is called by OWLOntologyWalker.
398  */
399  @Override
400  public Object visit(OWLObjectSomeValuesFrom desc) {
401  try {
402  OWLAxiom axiom = getCurrentAxiom(); // get axiom
403  Set<OWLObjectProperty> properties = axiom.getObjectPropertiesInSignature(); // get properties set
404  if (properties.isEmpty()) { // undefined property
405  return null;
406  }
407  OWLClass subjectClass = null;
408  boolean subjectClassFound = false;
409  for (OWLClass cls : axiom.getClassesInSignature()) {
410  if (!cls.isOWLThing() && !cls.toStringID().equals(desc.getFiller().asOWLClass().toStringID())) {
411  subjectClassFound = true;
412  subjectClass = cls;
413  break;
414  }
415  }
416  if (!subjectClassFound) { // subject wasn't found, was skipped, because subject is object too
417  subjectClassFound = true;
418  subjectClass = desc.getFiller().asOWLClass();
419  }
420  if (errorClassDetection(desc.getFiller().asOWLClass().toStringID())) {
421  return null;
422  }
423  OWLVisitorForRestrictionData.ValueData data = new OWLVisitorForRestrictionData.ValueData(desc.getFiller().asOWLClass().toStringID(), properties.iterator().next().toStringID(), subjectClass.toStringID());
424  someValuesFromData.add(data);
425  } catch (Exception e) {}
426  // We don't need to return anything here.
427  return null;
428  }
429  // </editor-fold>
430 
431  // <editor-fold defaultstate="collapsed" desc="allValuesFrom">
432  /**
433  * Get information about AllValuesFrom restriction.
434  * @param desc AllValuesFrom information.
435  * @return Nothing, because this function is called by OWLOntologyWalker.
436  */
437  @Override
438  public Object visit(OWLObjectAllValuesFrom desc) {
439  try {
440  OWLAxiom axiom = getCurrentAxiom(); // get axiom
441  Set<OWLObjectProperty> properties = axiom.getObjectPropertiesInSignature(); // get properties set
442  if (properties.isEmpty()) { // undefined property
443  return null;
444  }
445  OWLClass subjectClass = null;
446  boolean subjectClassFound = false;
447  for (OWLClass cls : axiom.getClassesInSignature()) {
448  if (!cls.isOWLThing() && !cls.toStringID().equals(desc.getFiller().asOWLClass().toStringID())) {
449  subjectClassFound = true;
450  subjectClass = cls;
451  break;
452  }
453  }
454  if (!subjectClassFound) { // subject wasn't found, was skipped, because subject is object too
455  subjectClassFound = true;
456  subjectClass = desc.getFiller().asOWLClass();
457  }
458  if (errorClassDetection(desc.getFiller().asOWLClass().toStringID())) {
459  return null;
460  }
461  OWLVisitorForRestrictionData.ValueData data = new OWLVisitorForRestrictionData.ValueData(desc.getFiller().asOWLClass().toStringID(), properties.iterator().next().toStringID(), subjectClass.toStringID());
462  allValuesFromData.add(data);
463  } catch (Exception e) {}
464  // We don't need to return anything here.
465  return null;
466  }
467  // </editor-fold>
468 }
Set< OWLVisitorForRestrictionData.ValueData > getSomeValuesFromData()
Set< OWLVisitorForRestrictionData.CardinalityData > maxCardinalityData
Set< OWLVisitorForRestrictionData.CardinalityData > getMaxCardinalityData()
Set< OWLVisitorForRestrictionData.CardinalityData > getCardinalityData()
Set< OWLVisitorForRestrictionData.CardinalityData > minCardinalityData
Set< OWLVisitorForRestrictionData.CardinalityData > getMinCardinalityData()
Set< OWLVisitorForRestrictionData.ValueData > getAllValuesFromData()
HasValueData(OWLIndividual individual, String propertyURI, String classURI)
Set< OWLVisitorForRestrictionData.CardinalityData > cardinalityData
Set< OWLVisitorForRestrictionData.HasValueData > getHasValueData()