Home > database >  How to get the results of a TDE in MarkLogic in RDF/JSON or Turtle format?
How to get the results of a TDE in MarkLogic in RDF/JSON or Turtle format?

Time:02-10

With any kind of Template Driven Extraction (TDE) in MarkLogic, how can I convert the results I get from the tde:node-data-extract function into RDF/JSON format? The JSON format returned by this method is not compliant with RDF/JSON, so I can't use it directly to insert triples into another database. In this case, I don't want to insert the triples into the same database that I'm applying the template against, I just want to use the template to create triples from XML data.

Here's an example of the JSON output that I get from the tde:node-data-extract function:

{
    "document/pt/document/39627370": [{
            "triple": {
                "subject": "http://www.example.com/document/id/39627370",
                "predicate": "http://www.example.com/typeOf",
                "object": {
                    "datatype": "http://www.w3.org/2001/XMLSchema#string",
                    "value": "http://www.example.com/document"
                }
            }
        },
        {
            "triple": {
                "subject": "http://www.example.com/publisher/Oxford_University_Press",
                "predicate": "http://www.example.com/typeOf",
                "object": {
                    "datatype": "http://www.w3.org/2001/XMLSchema#string",
                    "value": "http://www.example.com/publisher"
                }
            }
        }
   }
}

CodePudding user response:

Convert each "triple" property into a triple object using sem.triple(). Then serialize the array of sem.triple objects using sem.rdfSerialize().

CodePudding user response:

With the help from John and Mads, I found a slight variation that works really well assuming you're in the query console. $docs is any sequence of documents and $template is the TDE template.

let $jsontriples := tde:node-data-extract($docs, $template)

for $key in map:keys($jsontriples) 
  let $entry := map:get($jsontriples, $key)
  return $entry["triple"]

This will return the triples automatically serialized into Turtle format in the query console Result tab, which you can switch to JSON or Text. I assume the answer from John is the most correct in a situation where the serialization is not automatically performed (e.g. when not using the query console).

  • Related