Skip to content

Commit

Permalink
feat: support rml and ontology formats including: Turtle, N-Triples, …
Browse files Browse the repository at this point in the history
…N-Quads, Trig, Trix, RDF/XML, JSON-LD, Notation-3
  • Loading branch information
xuemduan committed Nov 11, 2024
1 parent cca2526 commit 8c2818d
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 72 deletions.
35 changes: 22 additions & 13 deletions fastapp.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from pyshacl import validate
import multiprocessing as mp
from scoop.main import main
from scoop.ontology_format_detection import get_ontology_format
from scoop.rdf_graph_load import load_rdf_graph

from scoop.SCOOP.shape_integration_priority import ShapeIntegrationPriority
from scoop.SCOOP.shape_integration_priority_r import ShapeIntegrationPriorityR
Expand Down Expand Up @@ -94,22 +94,31 @@ async def translate(request_data: TranslationRequest):

if request_data.rmlData!=[]:
for index, data in enumerate(request_data.rmlData):
rml_file = os.path.join(inputrml_folder, f"rml{index}.ttl")
rdflib.Graph().parse(data=data, format="turtle").serialize(destination=rml_file, format="turtle")
g, rdf_format = load_rdf_graph(data)
if rdf_format:
rml_file = os.path.join(inputrml_folder, f"rml{index}.ttl")
g.serialize(destination=rml_file, format='ttl')
else:
# unrecognized format
return JSONResponse(content={"error": "Invalid RML format"}, status_code=400)
args.extend(['-m', inputrml_folder, '-xr', inputrml_folder])
# if request_data.owlData!=[]:
# for index, data in enumerate(request_data.owlData):
# owl_file = os.path.join(inputowl_folder, f"owl{index}.txt")
# open(owl_file, 'w', encoding='utf-8').write(data)
# args.extend(['-o', inputowl_folder])

if request_data.owlData != []:
for index, data in enumerate(request_data.owlData):
rdf_format = get_ontology_format(data)
print("HERE",rdf_format)
owl_file = os.path.join(inputowl_folder, f"owl{index}.{rdf_format}")
with open(owl_file, 'w', encoding='utf-8') as f:
f.write(data)
print("Start loading ontology")
g, rdf_format = load_rdf_graph(data)
print(f"Detected RDF format: {rdf_format}")
if rdf_format:
print("Here")
owl_file = os.path.join(inputowl_folder, f"owl{index}.ttl")
print(f"OWL file: {owl_file}")
g.serialize(destination=owl_file, format='ttl')
print("Ontology loaded")
else:
# unrecognized format
return JSONResponse(content={"error": "Invalid Ontology format"}, status_code=400)
args.extend(['-o', inputowl_folder])

if request_data.xsdData!=[]:
for index, data in enumerate(request_data.xsdData):
xsd_file = os.path.join(inputxsd_folder, f"xsd{index}.xsd")
Expand Down
59 changes: 0 additions & 59 deletions scoop/ontology_format_detection.py

This file was deleted.

28 changes: 28 additions & 0 deletions scoop/rdf_graph_load.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import rdflib
import logging

logging.basicConfig(level=logging.ERROR)

def load_rdf_graph(data):
formats = ['turtle', 'nt', 'xml', 'json-ld', 'n3', 'trig', 'trix', 'nquads']
for fmt in formats:
graph = rdflib.Graph()
try:
graph.parse(data=data, format=fmt)
return graph, fmt
except:
continue

return None, None

if __name__ == '__main__':
rdf_strings = [
'@prefix ex: <http://example.org/> . ex:subject ex:predicate ex:object .', # Turtle
'{"@context": {"ex": "http://example.org/"},"@id": "ex:subject", "ex:predicate": "ex:object"}', # JSON-LD
'<http://example.org/subject> <http://example.org/predicate> <http://example.org/object> .', # N-Triples
'<http://example.org/subject> <http://example.org/predicate> <http://example.org/object> <http://example.org/graph> .', # N-Quads
]

for rdf_string in rdf_strings:
graph, rdf_format = get_rdf_format(rdf_string)
print(f"Detected RDF format: {rdf_format}, Graph: {graph}")

0 comments on commit 8c2818d

Please sign in to comment.