TL;DR
If I have a JSON document like
{
  "policyid": "http://example.com/policy:0099",
  "policytype": "http://www.w3.org/ns/odrl/2/Set" 
}
and I want have a JSON-LD document similar to
{
  "@context": {
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "policytype": { "@id": "rdf:type",  "@type": "@id" }
   }
   "@id" : "http://example.com/policy:0099",
   "policytype": "http://www.w3.org/ns/odrl/2/Set"
}
Is it possible to not change the name/vale pair { "policyid": "http://example.com/policy:0099" } to { "@id" : "http://example.com/policy:0099" } but rather say something in the context to say "policyid" -> "@id".
{
  "@context": {
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "policytype": { "@id": "rdf:type",  "@type": "@id" },
    #### something here that says "policyid" -> "@id"
   }
   "policyid" : "http://example.com/policy:0099",
   "policytype": "http://www.w3.org/ns/odrl/2/Set"
}
I was going through the spec example and couldn't find how to do that.
More context
Say if we have a model which has specification for RDF, and JSON Encoding, for example, ODRL 2.1 Ontology and ODRL Version 2.1 JSON Encoding.
I want to start from JSON and generate JSON-LD by mapping JSON Encoding to the ODRL ontology.
{
  "policyid": "http://example.com/policy:0099",
  "policytype": "http://www.w3.org/ns/odrl/2/Set",  
  "permissions": [{
     "target": "http://example.com/asset:9898",
     "action": "http://www.w3.org/ns/odrl/2/reproduce"
  }]
}
The following is RDF model I want to convert this json to. (I will put the Turtle serialization to make it more readable).
@prefix odrl: <http://www.w3.org/ns/odrl/2/> .
<http://example.com/policy:0099> a odrl:Set .
<http://example.com/policy:0099> odrl:permission _:perm0 .
_:perm0 odrl:action <http://www.w3.org/ns/odrl/2/reproduce> .
_:perm0 odrl:target <http://example.com/asset:9898> . 
I can do this with almost with minimal changes with a context as the following.
{
  "@context": { 
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "odrl": "http://www.w3.org/ns/odrl/2/",
    "policytype": { "@id": "rdf:type",  "@type": "@id" },
    "permissions": { "@id": "odrl:permission",  "@type": "@id"},
     "target" : {"@id": "odrl:target",  "@type": "@id" },
     "action" : {"@id": "odrl:action",  "@type": "@id" }
  },
  "@id": "http://example.com/policy:0099",
  "policytype": "http://www.w3.org/ns/odrl/2/Set",
  "permissions": [{ 
       "target": "http://example.com/asset:9898",
       "action": "http://www.w3.org/ns/odrl/2/reproduce" }]
}
But if I want to keep the original JSON as it is, is there a way to say "policyid" -> "@id" in the context?
Many thanks!
Is it possible to not change the name/vale pair { "policyid": "http://example.com/policy:0099" } to { "@id" : "http://example.com/policy:0099" } but rather say something in the context to say "policyid" -> "@id".
Yes, you simply map policyid to @id. This is called keyword aliasing in the spec. So your example would look like this:
{
  "@context": {
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "policyid": "@id",
    "policytype": { "@id": "rdf:type",  "@type": "@id" }
   },
   "policyid" : "http://example.com/policy:0099",
   "policytype": "http://www.w3.org/ns/odrl/2/Set"
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With