74 lines
3.0 KiB
Python
74 lines
3.0 KiB
Python
import json
|
|
from rdflib import Graph, Literal, Namespace, RDF, URIRef, XSD
|
|
import os
|
|
|
|
# Define the namespaces
|
|
SINCERE = Namespace("http://sincere.org/s1#")
|
|
|
|
|
|
# Function to convert JSON to RDF
|
|
def json_to_rdf(json_data, rdf_file_path):
|
|
# Create an RDF graph
|
|
g = Graph()
|
|
|
|
# Bind the SINCERE namespace
|
|
g.bind("sincere", SINCERE)
|
|
|
|
# Process each entry in the data
|
|
for i, entry in enumerate(json_data['data'], start=1):
|
|
channel_id = entry['channel_id']
|
|
data_value = entry['data_value']
|
|
measurement = entry['measurement']
|
|
time = entry['time']
|
|
|
|
channel_uri = URIRef(f"http://sincere.org/s1/resource/channel_{channel_id}")
|
|
measurement_uri = URIRef(f"http://sincere.org/s1/resource/measurement_{channel_id}_{i}")
|
|
|
|
g.add((channel_uri, RDF.type, SINCERE.Channel))
|
|
g.add((channel_uri, SINCERE.hasMeasurement, measurement_uri))
|
|
|
|
g.add((measurement_uri, RDF.type, SINCERE.Measurement))
|
|
g.add((measurement_uri, SINCERE.measurement, Literal(measurement, datatype=XSD.string)))
|
|
g.add((measurement_uri, SINCERE.time, Literal(time, datatype=XSD.string)))
|
|
g.add((measurement_uri, SINCERE.value, Literal(data_value, datatype=XSD.float)))
|
|
|
|
# Serialize the graph in Turtle format and save to a file
|
|
g.serialize(destination=rdf_file_path, format="turtle")
|
|
|
|
|
|
# Function to read all JSON files from a folder and process each one
|
|
def process_json_files(input_dir, output_dir):
|
|
# Ensure the output directory exists
|
|
os.makedirs(output_dir, exist_ok=True)
|
|
|
|
# Iterate over all files in the input directory
|
|
count = 1
|
|
for file_name in os.listdir(input_dir):
|
|
file_path = os.path.join(input_dir, file_name)
|
|
|
|
if os.path.isfile(file_path) and file_path.endswith('.json'):
|
|
try:
|
|
# Read JSON data from the file
|
|
with open(file_path, 'r') as file:
|
|
json_data = json.load(file)
|
|
|
|
# Generate an RDF file path based on the file name
|
|
rdf_file_name = "output_channel_" + str(count) + ".ttl"
|
|
rdf_file_path = os.path.join(output_dir, rdf_file_name)
|
|
|
|
# Convert JSON to RDF and save to file
|
|
json_to_rdf(json_data, rdf_file_path)
|
|
print(f"Processed {file_name} -> {rdf_file_path}")
|
|
count += 1
|
|
except json.JSONDecodeError as e:
|
|
print(f"Error decoding JSON in file {file_name}: {e}")
|
|
except PermissionError:
|
|
print(f"Permission denied for file {file_name}")
|
|
|
|
|
|
# Example usage
|
|
input_dir = 'C:/Users/USER/PycharmProjects/sincere/meteorogical_data/input_json_file' # Replace with your input directory containing JSON files
|
|
output_dir = 'C:/Users/USER/PycharmProjects/sincere/meteorogical_data/output_json_file' # Replace with your desired output directory for RDF files
|
|
|
|
process_json_files(input_dir, output_dir)
|