jpl-imce / gov.nasa.jpl.omf.scala.binding.owlapi Goto Github PK
View Code? Open in Web Editor NEWOWL API binding for JPL's Ontological Modeling Framework (OMF)
Home Page: https://jpl-imce.github.io/gov.nasa.jpl.omf.scala.binding.owlapi/
OWL API binding for JPL's Ontological Modeling Framework (OMF)
Home Page: https://jpl-imce.github.io/gov.nasa.jpl.omf.scala.binding.owlapi/
The cause is a typo in using the wrong variable for all available reified relationships.
Due to the development of the OML Conversions among different representations, the unit tests currently fail because the ontologies.public have not yet been updated as a result of running the OML conversions successfully in a roundtrip fashion.
When loading an ontology document (e.g., via a file), the OWL OntologyManager may throw OWLOntologyAlreadyExistsException. This behavior should be avoided; that is, check whether there exists an ontology for a given ontology document before trying to load that document. This way, normal processing should not trigger any OWLOntologyAlreadyExistsException errors.
With the OWLAPI v5.0.5 and Protege 5.2.0, this causes some bizarre parsing problems
(see: JPL-IMCE/gov.nasa.jpl.imce.ontologies.public#15)
Missing OWL OntologyImports for OML ModuleEdges involving an OML DescriptionBox.
This is the root cause of this issue:
JPL-IMCE/gov.nasa.jpl.imce.oml.converters#10
Somehow, in the move from sbt 0.13.13 => 0.13.15 and sbt coursier resulted in loosing the *.zip dependencies in the published POM.
OWL2 DataOneOf is parsed; however, the constructed OML ScalarOneOfLiteralAxioms needs to be added to the signature.
There is a subtle problem with the interaction between Scala & Java8 Streams used in the OWLAPI.
def resolveConceptSubClassAxioms
(conceptCMs: Map[OWLClass, Concept],
allConceptsIncludingImported: Map[OWLClass, Concept])
(implicit reasoner: OWLReasoner, backbone: OMFBackbone)
: Set[java.lang.Throwable] \/ Unit
= {
val sub_sup = for {
(subC, subM) <- conceptCMs
supC <- reasoner.getSuperClasses(subC, true).entities().toScala[Set]
supM <- findEntityConcept(supC.getIRI, allConceptsIncludingImported)
} yield (subM, supM)
( ().right[Set[java.lang.Throwable]] /: sub_sup ) { ... }
}
The problem is in this line: supC <- reasoner.getSuperClasses(subC, true).entities().toScala[Set]
reasoner.getSuperClasses(subC, true)
produces an OWLAPI NodeSet
reasoner.getSuperClasses(subC, true).entities()
produces a Java8 Stream of OWLAPI Entities.
reasoner.getSuperClasses(subC, true).entities().toScala[Set]
converts that Java8 Stream to a Scala Set collection.
supC <- reasoner.getSuperClasses(subC, true).entities().toScala[Set]
should iterate over all elements in the converted Scala Set collection.
Unfortunately, only the first element of the stream is iterated over.
The following iterates properly over all elements in the stream:
val sub_sup = for {
(subC, subM) <- conceptCMs
supE = reasoner.getSuperClasses(subC, true).entities()
supS = supE.toScala[Set]
supC <- supS
supM <- findEntityConcept(supC.getIRI, allConceptsIncludingImported)
} yield (subM, supM)
OML => OWL results in incorrect representation of reified relationships.
reifiedRelationship Supplies {
inverseFunctional
asymmetric
irreflexive
unreified = supplies
inverse = isSuppliedBy
source = Authority
target = SuppliedElement }
produced:
<rdf:Description>
<rdf:type rdf:resource="http://www.w3.org/2003/11/swrl#Imp"/>
<swrl:body>
<rdf:Description>
<rdf:type rdf:resource="http://www.w3.org/2003/11/swrl#AtomList"/>
<rdf:first>
<rdf:Description>
<rdf:type rdf:resource="http://www.w3.org/2003/11/swrl#IndividualPropertyAtom"/>
<swrl:propertyPredicate rdf:resource="http://imce.jpl.nasa.gov/foundation/project/project#hasSuppliesSource"/>
<swrl:argument1 rdf:resource="urn:swrl#r"/>
<swrl:argument2 rdf:resource="urn:swrl#s"/>
</rdf:Description>
</rdf:first>
<rdf:rest>
<rdf:Description>
<rdf:type rdf:resource="http://www.w3.org/2003/11/swrl#AtomList"/>
<rdf:first>
<rdf:Description>
<rdf:type rdf:resource="http://www.w3.org/2003/11/swrl#IndividualPropertyAtom"/>
<swrl:propertyPredicate rdf:resource="http://imce.jpl.nasa.gov/foundation/project/project#hasSuppliesTarget"/>
<swrl:argument1 rdf:resource="urn:swrl#r"/>
<swrl:argument2 rdf:resource="urn:swrl#t"/>
</rdf:Description>
</rdf:first>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:Description>
</rdf:rest>
</rdf:Description>
</swrl:body>
<swrl:head>
<rdf:Description>
<rdf:type rdf:resource="http://www.w3.org/2003/11/swrl#AtomList"/>
<rdf:first>
<rdf:Description>
<rdf:type rdf:resource="http://www.w3.org/2003/11/swrl#IndividualPropertyAtom"/>
<swrl:propertyPredicate rdf:resource="http://imce.jpl.nasa.gov/foundation/project/project#Supplies"/>
<swrl:argument1 rdf:resource="urn:swrl#s"/>
<swrl:argument2 rdf:resource="urn:swrl#t"/>
</rdf:Description>
</rdf:first>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:Description>
</swrl:head>
</rdf:Description>
The swrl:head
should refer to project#supplies
instead of project#Supplies
Currently, the built-in IRI for this annotation property is oml#isTerminologyBoxOpen
In OWL:
dc:description
annotates the object property of an OML ReifiedRelationship.
In OML:
dc:description
annotates the OML ReifiedRelationship itself
This is a problem in OML.Tycho:
JPL-IMCE/gov.nasa.jpl.imce.oml#63
Provenance = UUID of the corresponding OML element
In SWRL, a rule may be written like this:
behavior:InteractionBehaviorRegion(?R) ^
behavior:InteractionBehaviorAutomaton(?A) ^
behavior:hasRegion(?A, ?R) ^
behavior:Interaction(?I) ^
behavior:hasInteractionBehaviorClass(?I, ?A) ->
behavior:hasInteractionBehavior(?I, ?R)
In OML, the corresponding OML ChainRule must be written with the body atoms ordered like this:
behavior:Interaction(?I) ^
behavior:hasInteractionBehaviorClass(?I, ?A) ^
behavior:InteractionBehaviorAutomaton(?A) ^
behavior:hasRegion(?A, ?R) ^
behavior:InteractionBehaviorRegion(?R) ->
behavior:hasInteractionBehavior(?I, ?R)
The OWL API does not reliably produce abbreviated IRIs; especially for dc, rdf and rdfs.
For other ontologies, if the OWLAPI doesn't provide a proper abbreviated IRI, construct one from the last segment of the IRI and of the IRI fragment.
When mapping an IRI to an OWL file, strip the trailing '/' before adding '.oml'.
Conversions from OWL => OML are currently not possible if the OWL ontologies have circular imports. This happens for RDF & RDFS that import each other but could also happen for other ontologies since circular references are allowed in OML.
Replace the dependency on the graph-misc API (see scala-graph/scala-graph#74 (comment)) with equivalent functionality with the updated graph-core (see http://www.scala-graph.org/download/#1.12.0)
Exploit the immutable character of many OMF/OWLAPI objects to speed up hashCode operations:
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3.productHash(MurmurHash3.scala:64)
at scala.util.hashing.MurmurHash3$.productHash(MurmurHash3.scala:211)
at scala.runtime.ScalaRunTime$._hashCode(ScalaRunTime.scala:168)
at gov.nasa.jpl.omf.scala.binding.owlapi.types.ModelScalarDataType.hashCode(ModelScalarDataType.scala:26)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3.productHash(MurmurHash3.scala:64)
at scala.util.hashing.MurmurHash3$.productHash(MurmurHash3.scala:211)
at scala.runtime.ScalaRunTime$._hashCode(ScalaRunTime.scala:168)
at gov.nasa.jpl.omf.scala.binding.owlapi.types.ScalarDataTypeFacetRestrictionAxiom.hashCode(ScalarDataTypeFacetRestrictionAxiom.scala:28)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3$$anonfun$orderedHash$1.apply(MurmurHash3.scala:110)
at scala.util.hashing.MurmurHash3$$anonfun$orderedHash$1.apply(MurmurHash3.scala:109)
at scala.collection.Iterator$class.foreach(Iterator.scala:893)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
at scala.util.hashing.MurmurHash3.orderedHash(MurmurHash3.scala:109)
at scala.util.hashing.MurmurHash3$.seqHash(MurmurHash3.scala:219)
at scala.collection.IndexedSeqLike$class.hashCode(IndexedSeqLike.scala:44)
at scala.collection.immutable.Vector.hashCode(Vector.scala:62)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3.productHash(MurmurHash3.scala:64)
at scala.util.hashing.MurmurHash3$.productHash(MurmurHash3.scala:211)
at scala.runtime.ScalaRunTime$._hashCode(ScalaRunTime.scala:168)
at gov.nasa.jpl.omf.scala.binding.owlapi.types.ImmutableModelTerminologyGraph.hashCode(ImmutableModelTerminologyGraph.scala:63)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3.productHash(MurmurHash3.scala:64)
at scala.util.hashing.MurmurHash3$.productHash(MurmurHash3.scala:211)
at scala.runtime.ScalaRunTime$._hashCode(ScalaRunTime.scala:168)
at gov.nasa.jpl.omf.scala.binding.owlapi.types.TerminologyGraphDirectExtensionAxiom.hashCode(TerminologyGraphDirectExtensionAxiom.scala:25)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3$$anonfun$orderedHash$1.apply(MurmurHash3.scala:110)
at scala.util.hashing.MurmurHash3$$anonfun$orderedHash$1.apply(MurmurHash3.scala:109)
at scala.collection.Iterator$class.foreach(Iterator.scala:893)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
at scala.util.hashing.MurmurHash3.orderedHash(MurmurHash3.scala:109)
at scala.util.hashing.MurmurHash3$.seqHash(MurmurHash3.scala:219)
at scala.collection.IndexedSeqLike$class.hashCode(IndexedSeqLike.scala:44)
at scala.collection.immutable.Vector.hashCode(Vector.scala:62)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3.productHash(MurmurHash3.scala:64)
at scala.util.hashing.MurmurHash3$.productHash(MurmurHash3.scala:211)
at scala.runtime.ScalaRunTime$._hashCode(ScalaRunTime.scala:168)
at gov.nasa.jpl.omf.scala.binding.owlapi.types.ImmutableModelTerminologyGraph.hashCode(ImmutableModelTerminologyGraph.scala:63)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3.productHash(MurmurHash3.scala:64)
at scala.util.hashing.MurmurHash3$.productHash(MurmurHash3.scala:211)
at scala.runtime.ScalaRunTime$._hashCode(ScalaRunTime.scala:168)
at gov.nasa.jpl.omf.scala.binding.owlapi.types.TerminologyGraphDirectExtensionAxiom.hashCode(TerminologyGraphDirectExtensionAxiom.scala:25)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3$$anonfun$orderedHash$1.apply(MurmurHash3.scala:110)
at scala.util.hashing.MurmurHash3$$anonfun$orderedHash$1.apply(MurmurHash3.scala:109)
at scala.collection.Iterator$class.foreach(Iterator.scala:893)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
at scala.util.hashing.MurmurHash3.orderedHash(MurmurHash3.scala:109)
at scala.util.hashing.MurmurHash3$.seqHash(MurmurHash3.scala:219)
at scala.collection.IndexedSeqLike$class.hashCode(IndexedSeqLike.scala:44)
at scala.collection.immutable.Vector.hashCode(Vector.scala:62)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3.productHash(MurmurHash3.scala:64)
at scala.util.hashing.MurmurHash3$.productHash(MurmurHash3.scala:211)
at scala.runtime.ScalaRunTime$._hashCode(ScalaRunTime.scala:168)
at gov.nasa.jpl.omf.scala.binding.owlapi.types.ImmutableModelTerminologyGraph.hashCode(ImmutableModelTerminologyGraph.scala:63)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3.productHash(MurmurHash3.scala:64)
at scala.util.hashing.MurmurHash3$.productHash(MurmurHash3.scala:211)
at scala.runtime.ScalaRunTime$._hashCode(ScalaRunTime.scala:168)
at gov.nasa.jpl.omf.scala.binding.owlapi.types.TerminologyGraphDirectExtensionAxiom.hashCode(TerminologyGraphDirectExtensionAxiom.scala:25)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3$$anonfun$orderedHash$1.apply(MurmurHash3.scala:110)
at scala.util.hashing.MurmurHash3$$anonfun$orderedHash$1.apply(MurmurHash3.scala:109)
at scala.collection.Iterator$class.foreach(Iterator.scala:893)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
at scala.util.hashing.MurmurHash3.orderedHash(MurmurHash3.scala:109)
at scala.util.hashing.MurmurHash3$.seqHash(MurmurHash3.scala:219)
at scala.collection.IndexedSeqLike$class.hashCode(IndexedSeqLike.scala:44)
at scala.collection.immutable.Vector.hashCode(Vector.scala:62)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3.productHash(MurmurHash3.scala:64)
at scala.util.hashing.MurmurHash3$.productHash(MurmurHash3.scala:211)
at scala.runtime.ScalaRunTime$._hashCode(ScalaRunTime.scala:168)
at gov.nasa.jpl.omf.scala.binding.owlapi.types.ImmutableModelTerminologyGraph.hashCode(ImmutableModelTerminologyGraph.scala:63)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3.productHash(MurmurHash3.scala:64)
at scala.util.hashing.MurmurHash3$.productHash(MurmurHash3.scala:211)
at scala.runtime.ScalaRunTime$._hashCode(ScalaRunTime.scala:168)
at gov.nasa.jpl.omf.scala.binding.owlapi.types.TerminologyGraphDirectExtensionAxiom.hashCode(TerminologyGraphDirectExtensionAxiom.scala:25)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3$$anonfun$orderedHash$1.apply(MurmurHash3.scala:110)
at scala.util.hashing.MurmurHash3$$anonfun$orderedHash$1.apply(MurmurHash3.scala:109)
at scala.collection.Iterator$class.foreach(Iterator.scala:893)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
at scala.util.hashing.MurmurHash3.orderedHash(MurmurHash3.scala:109)
at scala.util.hashing.MurmurHash3$.seqHash(MurmurHash3.scala:219)
at scala.collection.IndexedSeqLike$class.hashCode(IndexedSeqLike.scala:44)
at scala.collection.immutable.Vector.hashCode(Vector.scala:62)
at scala.runtime.ScalaRunTime$.hash(ScalaRunTime.scala:206)
at scala.util.hashing.MurmurHash3.productHash(MurmurHash3.scala:64)
at scala.util.hashing.MurmurHash3$.productHash(MurmurHash3.scala:211)
at scala.runtime.ScalaRunTime$._hashCode(ScalaRunTime.scala:168)
at gov.nasa.jpl.omf.scala.binding.owlapi.types.ImmutableModelTerminologyGraph.hashCode(ImmutableModelTerminologyGraph.scala:63)
at scala.collection.mutable.FlatHashTable$class.addEntry(FlatHashTable.scala:148)
at scala.collection.mutable.HashSet.addEntry(HashSet.scala:40)
at scala.collection.mutable.FlatHashTable$class.growTable(FlatHashTable.scala:225)
at scala.collection.mutable.FlatHashTable$class.addEntry(FlatHashTable.scala:159)
at scala.collection.mutable.HashSet.addEntry(HashSet.scala:40)
at scala.collection.mutable.FlatHashTable$class.addElem(FlatHashTable.scala:139)
at scala.collection.mutable.HashSet.addElem(HashSet.scala:40)
at scala.collection.mutable.HashSet.$plus$eq(HashSet.scala:59)
at scala.collection.mutable.HashSet.$plus$eq(HashSet.scala:40)
at gov.nasa.jpl.omf.scala.core.OMFOps$$anonfun$closure$1.apply(OMFOps.scala:64)
at scala.collection.immutable.HashSet$HashSet1.foreach(HashSet.scala:316)
at scala.collection.immutable.HashSet$HashTrieSet.foreach(HashSet.scala:972)
at gov.nasa.jpl.omf.scala.core.OMFOps$.closure(OMFOps.scala:63)
at gov.nasa.jpl.omf.scala.core.package$.terminologyGraphImportClosure(package.scala:123)
at gov.nasa.jpl.omf.scala.binding.owlapi.types.ModelTerminologyGraph.isTypeTermDefinedRecursively(ModelTerminologyGraph.scala:93)
at gov.nasa.jpl.omf.scala.binding.owlapi.types.MutableModelTerminologyGraph.addEntityConceptSubClassAxiom(MutableModelTerminologyGraph.scala:1345)
at gov.nasa.jpl.omf.scala.binding.owlapi.OWLAPIMutableTerminologyGraphOps$class.addEntityConceptSubClassAxiom(OWLAPIOMFOps.scala:1011)
at gov.nasa.jpl.omf.scala.binding.owlapi.OWLAPIOMFOps.addEntityConceptSubClassAxiom(OWLAPIOMFOps.scala:1257)
at gov.nasa.jpl.omf.scala.binding.owlapi.OWLAPIOMFOps.addEntityConceptSubClassAxiom(OWLAPIOMFOps.scala:1257)
at gov.nasa.jpl.omf.scala.core.MutableTerminologyGraphOps$$anonfun$addEntityConceptSubClassAxiom$2.apply(OMFOps.scala:1542)
at gov.nasa.jpl.omf.scala.core.MutableTerminologyGraphOps$$anonfun$addEntityConceptSubClassAxiom$2.apply(OMFOps.scala:1538)
at scalaz.$bslash$div.flatMap(Either.scala:135)
at gov.nasa.jpl.omf.scala.core.MutableTerminologyGraphOps$class.addEntityConceptSubClassAxiom(OMFOps.scala:1538)
at gov.nasa.jpl.omf.scala.binding.owlapi.OWLAPIOMFOps.addEntityConceptSubClassAxiom(OWLAPIOMFOps.scala:1257)
In this stack trace, there are 4 customizable hashCode methods that have been invoked:
at gov.nasa.jpl.omf.scala.binding.owlapi.types.ModelScalarDataType.hashCode(ModelScalarDataType.scala:26)
at gov.nasa.jpl.omf.scala.binding.owlapi.types.ScalarDataTypeFacetRestrictionAxiom.hashCode(ScalarDataTypeFacetRestrictionAxiom.scala:28)
4x at gov.nasa.jpl.omf.scala.binding.owlapi.types.ImmutableModelTerminologyGraph.hashCode(ImmutableModelTerminologyGraph.scala:63)
4x at gov.nasa.jpl.omf.scala.binding.owlapi.types.TerminologyGraphDirectExtensionAxiom.hashCode(TerminologyGraphDirectExtensionAxiom.scala:25)
All of these case classes represent immutable objects; which means that it is possible to exploit the optimization trick in Programming in Scala, 3rd Ed, chapter 30, Recipe for hashCode, which defines it as a val
computed once at object creation instead of as def
method.
This fails CI builds, eg.: https://travis-ci.org/JPL-IMCE/gov.nasa.jpl.omf.scala.binding.owlapi/builds/240473772#L5031
[info] - when load xsd *** FAILED ***
[info] java.util.IllegalFormatConversionException: c != org.semanticweb.owlapi.model.IRI
[info] at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4302)
[info] at java.util.Formatter$FormatSpecifier.printCharacter(Formatter.java:2869)
[info] at java.util.Formatter$FormatSpecifier.print(Formatter.java:2757)
[info] at java.util.Formatter.format(Formatter.java:2520)
[info] at java.util.Formatter.format(Formatter.java:2455)
[info] at java.lang.String.format(String.java:2927)
[info] at scala.collection.immutable.StringLike$class.format(StringLike.scala:318)
[info] at scalax.collection.connectivity.GraphComponents$$anonfun$scalax$collection$connectivity$GraphComponents$$visit$1$1.apply(GraphComponents.scala:120)
This is a workaround to this issue: scala-graph/scala-graph#75
JPL-IMCE/gov.nasa.jpl.imce.ontologies.public#37
For example either of the SWRL rules below should be acceptable:
fault-management:PerformanceConstraint(?P) ^
fault-management:ViolationExplanation(?V) ^
behavior:ElementBehavior(?B) ^
analysis:analyzes(?V, ?P) ^
analysis:explains(?V, ?B) ->
fault-management:violates(?B, ?P)
behavior:ElementBehavior(?B) ^
analysis:isExplainedBy(?B, ?V) ^
fault-management:ViolationExplanation(?V) ^
analysis:analyzes(?V, ?P) ^
fault-management:PerformanceConstraint(?P)->
fault-management:violates(?B, ?P)
Either one should result in OML in the following rule:
behavior:ElementBehavior ^
analysis:isExplainedBy ^
fault-management:ViolationExplanation ^
analysis:analyzes ^
fault-management:PerformanceConstraint->
fault-management:violates
The OMF metadata ontology is obsolete, see: JPL-IMCE/gov.nasa.jpl.imce.ontologies.public#42
For the OWL2API v5.1.2, several vocabularies are effectively "built-in":
These should not be parsed with the OWL2API explicitly.
When resolving an OWL ontology, specialization axioms are looked up w.r.t. classes defined in that ontology. Instead, the lookup should be extended to classes defined in the transitive import closure of that ontology.
This fails because of discrepancies in derived UUID construction:
sbt run-main gov.nasa.jpl.omf.scala.binding.owlapi.converters.ConvertOWL2Tables \
-c \
file:`pwd`/target/extracted/gov.nasa.jpl.imce.ontologies.public/ontologies/imce.local.catalog.xml \
-i \
http://imce.jpl.nasa.gov/foundation/mission/mission \
-o \
file:`pwd`/target/test1/mission.json.zip
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.