OWLAPI 记录

Posted by Lucius on June 7, 2022

分析 Ontology

1
2
ontology.getLogicalAxioms().forEach(System.out::println); // 查看所有 Logical Axioms
o.getClassesInSignature().forEach(System.out::println); // 查看 Signature 中所有 Class

判断是否为 owl:Nothing

1
2
// type of e is OWLClass
if (e.isOWLNothing()) return true;

添加 Abox 中 a: C

1
2
3
4
5
IRI IOR = IRI.create("http://www.cs.manchester.ac.uk/pgt/COMP60421/FamilyHistory");
OWLIndividual individual = df.getOWLNamedIndividual(IOR + "#person0");
OWLClass person = df.getOWLClass(IOR + "#Person");
OWLAxiom assertion = df.getOWLClassAssertionAxiom(person, individual);
ontology.add(assertion);

添加 Abox 中 (a, b): R

1
2
3
4
5
OWLIndividual individual = df.getOWLNamedIndividual(IOR + "#person0");
OWLIndividual surname = df.getOWLNamedIndividual(IOR + "#" + surname);
OWLObjectProperty hasSurname = df.getOWLObjectProperty(IOR + "hasSurname");
assertion = df.getOWLObjectPropertyAssertionAxiom(hasSurname, individual, surname);
ontology.add(assertion);

构造 OWLClassExpression

1
2
3
4
5
6
7
8
OWLDataFactory df = OWLManager.getOWLDataFactory();
df.getOWLObjectIntersectionOf() // 取交
df.getOWLObjectUnionOf() // 取并
df.getOWLObjectComplementOf() // 取反
df.getOWLObjectSomeValuesFrom() // exsists r.C
df.getOWLObjectAllValuesFrom() // forall r.C
df.getOWLThing() // 全集
df.getOWLNothing() // 空集

查看 OWLEntity 类型

1
2
3
4
OWLEntity a;
System.out.println(a.getEntityType());
a.isType(EntityType.CLASS);
a.isType(EntityType.NAMED_INDIVIDUAL);

获得 Ontology 中所有 OWLClassExpression

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
public class KRP {

	final OWLOntologyManager man;
	final OWLDataFactory df = OWLManager.getOWLDataFactory();
	final OWLOntology o;
	OWLReasoner r;
	
	KRP(File file) throws OWLOntologyCreationException {
		// DO NOT CHANGE
		this.man = OWLManager.createOWLOntologyManager();
		this.o = man.loadOntologyFromOntologyDocument(file);
		this.r = new PelletReasonerFactory().createReasoner(o);
		this.r.precomputeInferences(InferenceType.CLASS_HIERARCHY);
	}
	
	public Set<OWLClassExpression> getAllClassExpressions() {
		Set<OWLClassExpression> class_expression_set = new HashSet<OWLClassExpression>();
		OWLOntologyWalker walker = new OWLOntologyWalker(Collections.singleton(o));
		OWLOntologyWalkerVisitor visitor = new OWLOntologyWalkerVisitor(walker) {
			@Override
			public void visit(OWLDataAllValuesFrom desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLDataExactCardinality desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLDataMaxCardinality desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLDataMinCardinality desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLDataSomeValuesFrom desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLObjectAllValuesFrom desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLObjectComplementOf desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLObjectExactCardinality desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLObjectHasSelf desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLObjectHasValue desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLObjectIntersectionOf desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLObjectMaxCardinality desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLObjectMinCardinality desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLObjectOneOf desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLObjectSomeValuesFrom desc) {
				class_expression_set.add(desc);
			}
			public void visit(OWLObjectUnionOf desc) {
				class_expression_set.add(desc);
			}
		};
		
		for (OWLClassExpression exp : o.getClassesInSignature()) {
			class_expression_set.add(exp);
		}
		walker.walkStructure(visitor);
		
		return class_expression_set;
	}

判断某个 OWLClassExpression 是否为另一个的子集

1
2
3
4
public boolean checkSuperclass(OWLClassExpression sub_class, OWLClassExpression super_class) {
	OWLClassExpression new_exp = df.getOWLObjectIntersectionOf(sub_class, df.getOWLObjectComplementOf(super_class));
	return !r.isSatisfiable(new_exp);
}

HermiT OWL Reasoner

参考资料