owlapi_interface¶
Python interface to the FaCT++ Reasoner.
This module is copied from the SimPhoNy project.
Original author: Matthias Urban
OwlApiInterface
¶
Interface to the FaCT++ reasoner via OWLAPI.
Source code in ontopy/factpluspluswrapper/owlapi_interface.py
class OwlApiInterface:
"""Interface to the FaCT++ reasoner via OWLAPI."""
def __init__(self):
"""Initialize the interface."""
def reason(self, graph):
"""Generate the inferred axioms for a given Graph.
Args:
graph (Graph): An rdflib graph to execute the reasoner on.
"""
with tempfile.NamedTemporaryFile("wt") as tmpdir:
graph.serialize(tmpdir.name, format="xml")
return self._run(tmpdir.name, command="--run-reasoner")
def reason_files(self, *owl_files):
"""Merge the given owl and generate the inferred axioms.
Args:
*owl_files (os.path): The owl files two merge.
"""
return self._run(*owl_files, command="--run-reasoner")
def merge_files(self, *owl_files):
"""Merge the given owl files and its import closure.
Args:
*owl_files (os.path): The owl files two merge.
"""
return self._run(*owl_files, command="--merge-only")
@staticmethod
def _run(
*owl_files, command, output_file=None, return_graph=True
) -> rdflib.Graph:
"""Run the FaCT++ reasoner using a java command.
Args:
*owl_files (str): Path to the owl files to load.
command (str): Either --run-reasoner or --merge-only
output_file (str, optional): Where the output should be stored.
Defaults to None.
return_graph (bool, optional): Whether the result should be parsed
and returned. Defaults to True.
Returns:
The reasoned result.
"""
java_base = os.path.abspath(
os.path.join(os.path.dirname(__file__), "java")
)
cmd = (
[
"java",
"-cp",
java_base + "/lib/jars/*",
"-Djava.library.path=" + java_base + "/lib/so",
"org.simphony.OntologyLoader",
]
+ [command]
+ list(owl_files)
)
logger.info("Running Reasoner")
logger.debug("Command %s", cmd)
subprocess.run(cmd, check=True) # nosec
graph = None
if return_graph:
graph = rdflib.Graph()
graph.parse(RESULT_FILE)
if output_file:
os.rename(RESULT_FILE, output_file)
else:
os.remove(RESULT_FILE)
return graph
__init__(self)
special
¶
Initialize the interface.
Source code in ontopy/factpluspluswrapper/owlapi_interface.py
def __init__(self):
"""Initialize the interface."""
merge_files(self, *owl_files)
¶
Merge the given owl files and its import closure.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
*owl_files |
os.path |
The owl files two merge. |
() |
Source code in ontopy/factpluspluswrapper/owlapi_interface.py
def merge_files(self, *owl_files):
"""Merge the given owl files and its import closure.
Args:
*owl_files (os.path): The owl files two merge.
"""
return self._run(*owl_files, command="--merge-only")
reason(self, graph)
¶
Generate the inferred axioms for a given Graph.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
graph |
Graph |
An rdflib graph to execute the reasoner on. |
required |
Source code in ontopy/factpluspluswrapper/owlapi_interface.py
def reason(self, graph):
"""Generate the inferred axioms for a given Graph.
Args:
graph (Graph): An rdflib graph to execute the reasoner on.
"""
with tempfile.NamedTemporaryFile("wt") as tmpdir:
graph.serialize(tmpdir.name, format="xml")
return self._run(tmpdir.name, command="--run-reasoner")
reason_files(self, *owl_files)
¶
Merge the given owl and generate the inferred axioms.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
*owl_files |
os.path |
The owl files two merge. |
() |
Source code in ontopy/factpluspluswrapper/owlapi_interface.py
def reason_files(self, *owl_files):
"""Merge the given owl and generate the inferred axioms.
Args:
*owl_files (os.path): The owl files two merge.
"""
return self._run(*owl_files, command="--run-reasoner")
reason_from_terminal()
¶
Run the reasoner from terminal.
Source code in ontopy/factpluspluswrapper/owlapi_interface.py
def reason_from_terminal():
"""Run the reasoner from terminal."""
parser = argparse.ArgumentParser(
description="Run the FaCT++ reasoner on the given OWL file. "
"Catalog files are used to load the import closure. "
"Then the reasoner is executed and the inferred triples are merged "
"with the asserted ones. If multiple OWL files are given, they are "
"merged beforehand"
)
parser.add_argument(
"owl_file", nargs="+", help="OWL file(s) to run the reasoner on."
)
parser.add_argument("output_file", help="Path to store inferred axioms to.")
args = parser.parse_args()
OwlApiInterface()._run( # pylint: disable=protected-access
*args.owl_file,
command="--run-reasoner",
return_graph=False,
output_file=args.output_file,
)