diff options
author | Federico Igne <federico.igne@cs.ox.ac.uk> | 2020-12-06 12:14:07 +0000 |
---|---|---|
committer | Federico Igne <federico.igne@cs.ox.ac.uk> | 2020-12-06 12:14:07 +0000 |
commit | 3362dd371ddcac7d60b4f64ddacb83c7d5b0a21e (patch) | |
tree | 76875bbcacee37ec28975321c748f226637a2807 | |
parent | 9dd3da94d106fed295ab7bef167f35fab0050d95 (diff) | |
download | RSAComb-3362dd371ddcac7d60b4f64ddacb83c7d5b0a21e.tar.gz RSAComb-3362dd371ddcac7d60b4f64ddacb83c7d5b0a21e.zip |
Add support for data property assertion axioms (OWLDataPropertyAssertionAxiom)
-rw-r--r-- | src/main/scala/uk/ac/ox/cs/rsacomb/converter/RDFoxConverter.scala | 15 | ||||
-rw-r--r-- | src/main/scala/uk/ac/ox/cs/rsacomb/implicits/RDFox.scala | 88 |
2 files changed, 95 insertions, 8 deletions
diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/converter/RDFoxConverter.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/converter/RDFoxConverter.scala index 4f4df26..6c83caf 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/converter/RDFoxConverter.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/converter/RDFoxConverter.scala | |||
@@ -8,6 +8,7 @@ import org.semanticweb.owlapi.model.{ | |||
8 | OWLClassAssertionAxiom, | 8 | OWLClassAssertionAxiom, |
9 | OWLClassExpression, | 9 | OWLClassExpression, |
10 | OWLDataProperty, | 10 | OWLDataProperty, |
11 | OWLDataPropertyAssertionAxiom, | ||
11 | OWLDataPropertyDomainAxiom, | 12 | OWLDataPropertyDomainAxiom, |
12 | OWLDataPropertyExpression, | 13 | OWLDataPropertyExpression, |
13 | OWLDataSomeValuesFrom, | 14 | OWLDataSomeValuesFrom, |
@@ -219,6 +220,20 @@ trait RDFoxConverter { | |||
219 | ResultF(List(prop)) | 220 | ResultF(List(prop)) |
220 | } | 221 | } |
221 | 222 | ||
223 | /** Data property assertion. | ||
224 | * | ||
225 | * @see [[org.semanticweb.owlapi.model.OWLDataPropertyAssertionAxiom OWLDataPropertyAssertionAxiom]] | ||
226 | */ | ||
227 | case a: OWLDataPropertyAssertionAxiom => | ||
228 | if (!a.getSubject.isNamed || !a.getObject.isNamed) | ||
229 | Result() | ||
230 | else { | ||
231 | val subj = a.getSubject.asOWLNamedIndividual.getIRI | ||
232 | val obj = a.getObject | ||
233 | val prop = convert(a.getProperty, subj, obj, suffix) | ||
234 | ResultF(List(prop)) | ||
235 | } | ||
236 | |||
222 | /** Catch-all case for all unhandled axiom types. */ | 237 | /** Catch-all case for all unhandled axiom types. */ |
223 | case a => | 238 | case a => |
224 | throw new RuntimeException( | 239 | throw new RuntimeException( |
diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/implicits/RDFox.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/implicits/RDFox.scala index 0462a47..35bf25c 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/implicits/RDFox.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/implicits/RDFox.scala | |||
@@ -1,20 +1,92 @@ | |||
1 | package uk.ac.ox.cs.rsacomb.implicits | 1 | package uk.ac.ox.cs.rsacomb.implicits |
2 | 2 | ||
3 | import tech.oxfordsemantic.jrdfox.logic.expression.{IRI => RDFoxIRI} | 3 | import tech.oxfordsemantic.jrdfox.logic.Datatype |
4 | import org.semanticweb.owlapi.model.{IRI => OWLIRI} | 4 | import tech.oxfordsemantic.jrdfox.logic.expression.{IRI => RDFoxIRI, Literal} |
5 | import org.semanticweb.owlapi.model.{IRI => OWLIRI, OWLLiteral, OWLDatatype} | ||
6 | import org.semanticweb.owlapi.vocab.OWL2Datatype | ||
5 | 7 | ||
6 | object RDFox { | 8 | object RDFox { |
7 | 9 | ||
8 | implicit def rdfoxToOwlapiIri(iri: RDFoxIRI): OWLIRI = { | 10 | implicit def rdfoxToOwlapiIri(iri: RDFoxIRI): OWLIRI = |
9 | OWLIRI.create(iri.getIRI) | 11 | OWLIRI.create(iri.getIRI) |
10 | } | ||
11 | 12 | ||
12 | implicit def owlapiToRdfoxIri(iri: OWLIRI): RDFoxIRI = { | 13 | implicit def owlapiToRdfoxIri(iri: OWLIRI): RDFoxIRI = |
13 | RDFoxIRI.create(iri.getIRIString()) | 14 | RDFoxIRI.create(iri.getIRIString()) |
14 | } | ||
15 | 15 | ||
16 | implicit def stringToRdfoxIri(iri: String): RDFoxIRI = { | 16 | implicit def stringToRdfoxIri(iri: String): RDFoxIRI = |
17 | RDFoxIRI.create(iri) | 17 | RDFoxIRI.create(iri) |
18 | } | 18 | |
19 | /** Converst an OWLAPI datatype into an RDFox datatype. | ||
20 | * | ||
21 | * The builtin datatypes defined by the two systems do not match | ||
22 | * perfectly. In particular these entities cannot be directly | ||
23 | * translated. | ||
24 | * | ||
25 | * From the OWLAPI (mapped to `INVALID_DATATYPE`): | ||
26 | * - OWL_RATIONAL | ||
27 | * - OWL_REAL | ||
28 | * - RDF_LANG_STRING | ||
29 | * - RDF_XML_LITERAL | ||
30 | * - XSD_BASE_64_BINARY | ||
31 | * - XSD_HEX_BINARY | ||
32 | * - XSD_LANGUAGE | ||
33 | * - XSD_NAME | ||
34 | * - XSD_NCNAME | ||
35 | * - XSD_NMTOKEN | ||
36 | * - XSD_NORMALIZED_STRING | ||
37 | * - XSD_TOKEN | ||
38 | * | ||
39 | * From RDFox: | ||
40 | * - BLANK_NODE | ||
41 | * - IRI_REFERENCE | ||
42 | * - XSD_DATE | ||
43 | * - XSD_DAY_TIME_DURATION | ||
44 | * - XSD_DURATION | ||
45 | * - XSD_G_DAY | ||
46 | * - XSD_G_MONTH | ||
47 | * - XSD_G_MONTH_DAY | ||
48 | * - XSD_G_YEAR | ||
49 | * - XSD_G_YEAR_MONTH | ||
50 | * - XSD_TIME | ||
51 | * - XSD_YEAR_MONTH_DURATION | ||
52 | */ | ||
53 | implicit def owlapiToRdfoxDatatype(datatype: OWLDatatype): Datatype = | ||
54 | if (datatype.isBuiltIn) { | ||
55 | datatype.getBuiltInDatatype match { | ||
56 | case OWL2Datatype.RDF_PLAIN_LITERAL => Datatype.RDF_PLAIN_LITERAL | ||
57 | case OWL2Datatype.RDFS_LITERAL => Datatype.RDFS_LITERAL | ||
58 | case OWL2Datatype.XSD_ANY_URI => Datatype.XSD_ANY_URI | ||
59 | case OWL2Datatype.XSD_BOOLEAN => Datatype.XSD_BOOLEAN | ||
60 | case OWL2Datatype.XSD_BYTE => Datatype.XSD_BYTE | ||
61 | case OWL2Datatype.XSD_DATE_TIME => Datatype.XSD_DATE_TIME | ||
62 | case OWL2Datatype.XSD_DATE_TIME_STAMP => Datatype.XSD_DATE_TIME_STAMP | ||
63 | case OWL2Datatype.XSD_DECIMAL => Datatype.XSD_DECIMAL | ||
64 | case OWL2Datatype.XSD_DOUBLE => Datatype.XSD_DOUBLE | ||
65 | case OWL2Datatype.XSD_FLOAT => Datatype.XSD_FLOAT | ||
66 | case OWL2Datatype.XSD_INT => Datatype.XSD_INT | ||
67 | case OWL2Datatype.XSD_INTEGER => Datatype.XSD_INTEGER | ||
68 | case OWL2Datatype.XSD_LONG => Datatype.XSD_LONG | ||
69 | case OWL2Datatype.XSD_NEGATIVE_INTEGER => Datatype.XSD_NEGATIVE_INTEGER | ||
70 | case OWL2Datatype.XSD_NON_NEGATIVE_INTEGER => | ||
71 | Datatype.XSD_NON_NEGATIVE_INTEGER | ||
72 | case OWL2Datatype.XSD_NON_POSITIVE_INTEGER => | ||
73 | Datatype.XSD_NON_POSITIVE_INTEGER | ||
74 | case OWL2Datatype.XSD_POSITIVE_INTEGER => Datatype.XSD_POSITIVE_INTEGER | ||
75 | case OWL2Datatype.XSD_SHORT => Datatype.XSD_SHORT | ||
76 | case OWL2Datatype.XSD_STRING => Datatype.XSD_STRING | ||
77 | case OWL2Datatype.XSD_UNSIGNED_BYTE => Datatype.XSD_UNSIGNED_BYTE | ||
78 | case OWL2Datatype.XSD_UNSIGNED_INT => Datatype.XSD_UNSIGNED_INT | ||
79 | case OWL2Datatype.XSD_UNSIGNED_LONG => Datatype.XSD_UNSIGNED_LONG | ||
80 | case OWL2Datatype.XSD_UNSIGNED_SHORT => Datatype.XSD_UNSIGNED_SHORT | ||
81 | case _ => Datatype.INVALID_DATATYPE | ||
82 | } | ||
83 | } else { | ||
84 | throw new RuntimeException( | ||
85 | s"Composite datatypes are not allowed." | ||
86 | ) | ||
87 | } | ||
88 | |||
89 | implicit def owlapiToRdfoxLiteral(lit: OWLLiteral): Literal = | ||
90 | Literal.create(lit.getLiteral, lit.getDatatype) | ||
19 | 91 | ||
20 | } | 92 | } |