0

I have a project with the structure:

-config
  -repositories
    -test-repo.ttl

The test-repo.ttl file looks like this:

@prefix lookup: <http://www.metaphacts.com/ontologies/platform/repository/lookup#> .
@prefix pathfinder: <http://www.metaphacts.com/ontologies/platform/service/pathfinder/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rep: <http://www.openrdf.org/config/repository#> .
@prefix sail: <http://www.openrdf.org/config/sail#> .
@prefix sr: <http://www.openrdf.org/config/repository/sail#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix mph: <http://www.metaphacts.com/ontologies/platform/repository#> .
@prefix ephedra: <http://www.metaphacts.com/ontologies/platform/ephedra#> .
@prefix fedsail: <http://www.openrdf.org/config/sail/federation#> .
@prefix sparqlr: <http://www.openrdf.org/config/repository/sparql#> .

[] a rep:Repository;
  rep:repositoryID "test-repo";
  rdfs:label "Repository to access data.";
  rep:repositoryImpl [
      rep:repositoryType "openrdf:SailRepository";
      sr:sailImpl [
          sail:sailType "metaphacts:RESTService";
          ephedra:serviceURL "https://request-to-access-data.com";
          ephedra:implementsService ephedra:test-ephedra;
          ephedra:httpMethod "GET";
          ephedra:httpHeader [
              ephedra:name "Authorization";
              ephedra:value "my_secret_token"
            ]
        ]
    ] .

The string my_secret_token changes every time the project is run, so I would need to imput its value from a java file. I am an absolute beginner in java. Is it possible to have a java file in which I create the my_secret_token variable and assign it the value of "123" for example, and then to pass this value to the ephedra:value field in the turtle file?

If so, can you help me to achieve this?

Ian Kurtis
  • 137
  • 7

1 Answers1

0

I am not sure I fully understand what you're trying to do, but if it's purely about changing that literal string in your Turtle file, I guess one simple way to do is to read the file into an in-memory RDf model, change the value, then write the model back to file again. Something like this (untested, but it gives the general idea hopefully):

// read the file into an RDF4J Model
Model model = Rio.parse("/path/to/test-repo.ttl", RDFFormat.TURTLE);

// create an IRI object for the 'ephedra:value' property
IRI ephedraValue = Values.iri("http://www.metaphacts.com/ontologies/platform/ephedra#value");

// find the statement in the RDF model we want to change the object of
model.getStatements(null, ephedraValue, null)
   .forEach(st -> {
        Value object = st.getObject();
        if (object.isLiteral()) { 
            // remove the old value
            model.remove(st);
            Literal newObject = Values.literal("my_NEW_secret_token");
            // add the new value
            model.add(st.getSubject, ephedraValue, newObject());
        }
);
// write modified model to file
Rio.write(model, new FileOutputStream("/path/to/file.ttle"), RDFFormat.TURTLE);
Jeen Broekstra
  • 21,642
  • 4
  • 51
  • 73
  • Thanks, but this is not modifying the my_secret_token value with the my_NEW_secret_token value. What should I do to have the updated value into the test-repo.ttl file? I changed the FileOutputStream to be equal to the location of the test-repo.ttl file... – Ian Kurtis Mar 30 '22 at 10:34