Skip to content
This repository was archived by the owner on Oct 8, 2020. It is now read-only.

Commit 66820a4

Browse files
Merge branch 'release/0.7.1'
2 parents 84c40de + a11cd50 commit 66820a4

File tree

23 files changed

+864550
-67
lines changed

23 files changed

+864550
-67
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
*.class
22
*.log
3+
catalog-v001.xml
34

45
pom.xml.versionsBackup
56

.travis.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,6 @@ scala:
77
- 2.11.11
88
script:
99
- mvn scalastyle:check
10-
- mvn test
10+
- mvn test
11+
jdk:
12+
- openjdk8

pom.xml

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>net.sansa-stack</groupId>
99
<artifactId>sansa-parent</artifactId>
10-
<version>0.6.0</version>
10+
<version>0.7.1</version>
1111
</parent>
1212

1313
<packaging>pom</packaging>
@@ -16,8 +16,7 @@
1616
<description>SANSA OWL is a library to read OWL files into Spark or Flink.
1717
It allows files to reside in HDFS as well as in a local file system and distributes them across Spark
1818
RDDs/Datasets or Flink DataSets.
19-
</description>
20-
19+
</description>
2120
<organization>
2221
<name>Smart Data Analytics (SDA) research group</name>
2322
<url>http://sda.tech</url>
@@ -53,6 +52,17 @@
5352
</roles>
5453
<timezone>0</timezone>
5554
</developer>
55+
<developer>
56+
<id>heba</id>
57+
<name>Heba Mohamed</name>
58+
<email>hmohamed@uni-bonn.de</email>
59+
<organization>Computer Science Institute, University of Bonn</organization>
60+
<organizationUrl>http://sda.tech</organizationUrl>
61+
<roles>
62+
<role>developer</role>
63+
</roles>
64+
<timezone>0</timezone>
65+
</developer>
5666
</developers>
5767

5868
<issueManagement>
@@ -137,5 +147,4 @@
137147
</properties>
138148
</profile>
139149
</profiles>
140-
141150
</project>

sansa-owl-common/pom.xml

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>net.sansa-stack</groupId>
99
<artifactId>sansa-owl-parent_2.11</artifactId>
10-
<version>0.6.0</version>
10+
<version>0.7.1</version>
1111
</parent>
1212

1313
<name>SANSA OWL layer - Common</name>
@@ -19,6 +19,33 @@
1919
<groupId>org.scala-lang</groupId>
2020
<artifactId>scala-library</artifactId>
2121
</dependency>
22+
<dependency>
23+
<groupId>org.scala-lang.modules</groupId>
24+
<artifactId>scala-java8-compat_${scala.binary.version}</artifactId>
25+
</dependency>
26+
27+
<!-- Hadoop dependencies (mainly used for InputFormat definitions) -->
28+
<dependency>
29+
<groupId>org.apache.hadoop</groupId>
30+
<artifactId>hadoop-mapreduce-client-core</artifactId>
31+
</dependency>
32+
33+
<dependency>
34+
<groupId>org.apache.hadoop</groupId>
35+
<artifactId>hadoop-common</artifactId>
36+
<version>${hadoop.common.version}</version>
37+
</dependency>
38+
<dependency>
39+
<groupId>org.apache.hadoop</groupId>
40+
<artifactId>hadoop-streaming</artifactId>
41+
<version>${hadoop.version}</version>
42+
</dependency>
43+
44+
<!-- slf4j Logger dependencies -->
45+
<dependency>
46+
<groupId>org.slf4j</groupId>
47+
<artifactId>slf4j-api</artifactId>
48+
</dependency>
2249

2350
<!-- OWL API dependencies -->
2451
<dependency>
@@ -30,6 +57,43 @@
3057
<artifactId>owlapi-apibinding</artifactId>
3158
</dependency>
3259

60+
<!-- Apache JENA 3.x-->
61+
<dependency>
62+
<groupId>org.apache.jena</groupId>
63+
<artifactId>jena</artifactId>
64+
<version>${jena.version}</version>
65+
<type>pom</type>
66+
</dependency>
67+
<dependency>
68+
<groupId>org.apache.jena</groupId>
69+
<artifactId>jena-core</artifactId>
70+
<version>${jena.version}</version>
71+
</dependency>
72+
<dependency>
73+
<groupId>org.apache.jena</groupId>
74+
<artifactId>jena-arq</artifactId>
75+
<version>${jena.version}</version>
76+
</dependency>
77+
<dependency>
78+
<groupId>org.apache.jena</groupId>
79+
<artifactId>jena-tdb</artifactId>
80+
<version>${jena.version}</version>
81+
<scope>provided</scope>
82+
</dependency>
83+
84+
<!-- Spark dependencies -->
85+
<dependency>
86+
<groupId>org.apache.spark</groupId>
87+
<artifactId>spark-core_${scala.binary.version}</artifactId>
88+
</dependency>
89+
<dependency>
90+
<groupId>org.apache.spark</groupId>
91+
<artifactId>spark-sql_2.11</artifactId>
92+
</dependency>
93+
<dependency>
94+
<groupId>de.javakaffee</groupId>
95+
<artifactId>kryo-serializers</artifactId>
96+
</dependency>
3397
<!-- parsing dependencies -->
3498
<dependency>
3599
<groupId>org.scala-lang.modules</groupId>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package net.sansa_stack.owl.common
22

33
object OWLSyntax extends Enumeration {
4-
val Functional, Manchester = Value
4+
val Functional, Manchester, OwlXml = Value
55
}
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
package net.sansa_stack.owl.common.parsing
2+
3+
import scala.compat.java8.StreamConverters._
4+
5+
import com.typesafe.scalalogging.Logger
6+
import org.semanticweb.owlapi.apibinding.OWLManager
7+
import org.semanticweb.owlapi.formats.OWLXMLDocumentFormat
8+
import org.semanticweb.owlapi.io.StringDocumentSource
9+
import org.semanticweb.owlapi.model._
10+
11+
/**
12+
* Singleton instance of type OWLXMLSyntaxParsing
13+
*/
14+
15+
object OWLXMLSyntaxParsing extends Serializable {
16+
17+
private val logger = Logger(classOf[OWLXMLSyntaxParsing])
18+
19+
private def manager = OWLManager.createOWLOntologyManager()
20+
21+
// map to define owlXml schema syntax pattern
22+
var OWLXMLSyntaxPattern: Map[String, Map[String, String]] = Map(
23+
"versionPattern" -> Map(
24+
"beginTag" -> "<?xml",
25+
"endTag" -> "?>"
26+
).withDefaultValue("Pattern for begin and end tags not found"),
27+
"prefixPattern" -> Map(
28+
"beginTag" -> "<rdf:RDF",
29+
"endTag" -> ">"
30+
).withDefaultValue("Pattern for begin and end tags not found"),
31+
"owlClassPattern" -> Map(
32+
"beginTag" -> "<owl:Class",
33+
"endTag" -> "</owl:Class>"
34+
).withDefaultValue("Pattern for begin and end tags not found"),
35+
"owlClassPattern2" -> Map(
36+
"beginTag" -> "<owl:Class",
37+
"endTag" -> "/>"
38+
).withDefaultValue("Pattern for begin and end tags not found"),
39+
"owlDataTypePropertyPattern" -> Map(
40+
"beginTag" -> "<owl:DatatypeProperty",
41+
"endTag" -> "</owl:DatatypeProperty>"
42+
).withDefaultValue("Pattern for begin and end tags not found"),
43+
"owlDataTypePropertyPattern2" -> Map(
44+
"beginTag" -> "<owl:DatatypeProperty",
45+
"endTag" -> "/>"
46+
).withDefaultValue("Pattern for begin and end tags not found"),
47+
"owlObjectPropertyPattern" -> Map(
48+
"beginTag" -> "<owl:ObjectProperty",
49+
"endTag" -> "</owl:ObjectProperty>"
50+
).withDefaultValue("Pattern for begin and end tags not found"),
51+
"owlObjectPropertyPattern2" -> Map(
52+
"beginTag" -> "<owl:ObjectProperty",
53+
"endTag" -> "/>"
54+
).withDefaultValue("Pattern for begin and end tags not found"),
55+
"owlNamedIndividualPattern" -> Map(
56+
"beginTag" -> "<owl:NamedIndividual",
57+
"endTag" -> "</owl:NamedIndividual>"
58+
).withDefaultValue("Pattern for begin and end tags not found"),
59+
"owlAnnotationPropertyPattern" -> Map(
60+
"beginTag" -> "<owl:AnnotationProperty",
61+
"endTag" -> "</owl:AnnotationProperty>"
62+
).withDefaultValue("Pattern for begin and end tags not found"),
63+
"owlAnnotationPropertyPattern2" -> Map(
64+
"beginTag" -> "<owl:AnnotationProperty",
65+
"endTag" -> "/>"
66+
).withDefaultValue("Pattern for begin and end tags not found"),
67+
"owlAxiomPattern" -> Map(
68+
"beginTag" -> "<owl:Axiom",
69+
"endTag" -> "</owl:Axiom>"
70+
).withDefaultValue("Pattern for begin and end tags not found"),
71+
"TransitivePropertyPattern" -> Map(
72+
"beginTag" -> "<owl:TransitiveProperty",
73+
"endTag" -> "</owl:TransitiveProperty>"
74+
).withDefaultValue("Pattern for begin and end tags not found"),
75+
"rdfsDatatypePattern" -> Map(
76+
"beginTag" -> "<rdfs:Datatype",
77+
"endTag" -> ">"
78+
).withDefaultValue("Pattern for begin and end tags not found"),
79+
"rdfDescription" -> Map(
80+
"beginTag" -> "<rdf:Description",
81+
"endTag" -> "</rdf:Description>"
82+
).withDefaultValue("Pattern for begin and end tags not found"),
83+
"owlRestriction" -> Map(
84+
"beginTag" -> "<owl:Restriction",
85+
"endTag" -> "</owl:Restriction>"
86+
).withDefaultValue("Pattern for begin and end tags not found")
87+
)
88+
89+
90+
/** definition to build Owl Axioms out of expressions
91+
*
92+
* @param xmlString xmlVersion string
93+
* @param prefixString owlxml prefix string
94+
* @param expression owl expressions of owlxml syntax
95+
* @return A set consisting OWL Axioms built out of owl expressions
96+
*/
97+
98+
def makeAxiom(xmlString: String, prefixString: String, expression: String): Set[OWLAxiom] = {
99+
100+
// compose a string consisting of xml version, owlXml prefixes, owlXml expressions
101+
val axiomString = xmlString + "\n" + prefixString + "\n" + expression + "\n" + "</rdf:RDF>"
102+
103+
// load an ontology from file
104+
val ontology = try {
105+
// load an ontology from an input stream
106+
manager.loadOntologyFromOntologyDocument(new StringDocumentSource(axiomString))
107+
} catch {
108+
case e: Exception => null
109+
}
110+
111+
val extractedAxioms = if (ontology != null) {
112+
113+
// get the ontology format
114+
val format = manager.getOntologyFormat(ontology)
115+
val owlXmlFormat = new OWLXMLDocumentFormat
116+
117+
// copy all the prefixes from OWL document format to OWL XML format
118+
if (format != null && format.isPrefixOWLDocumentFormat) {
119+
owlXmlFormat.copyPrefixesFrom(format.asPrefixOWLDocumentFormat)
120+
}
121+
122+
// get axioms from the loaded ontology
123+
val axioms: Set[OWLAxiom] = ontology.axioms().toScala[Set]
124+
axioms
125+
126+
} else {
127+
// logger.warn("No ontology was created for expression \n" + expression + "\n")
128+
null
129+
}
130+
extractedAxioms
131+
}
132+
133+
/**
134+
* Trait to support the parsing of input OWL files in OWLXML syntax.
135+
* This trait mainly defines how to make axioms from input OWLXML
136+
* syntax expressions.
137+
*/
138+
139+
trait OWLXMLSyntaxParsing extends Serializable {
140+
}
141+
}

0 commit comments

Comments
 (0)