{ "@context": { "iridl": "http://iridl.ldeo.columbia.edu/ontologies/iridl.owl#", "gaz": "http://iridl.ldeo.columbia.edu/ontologies/irigaz.owl#", "gazfw": "http://iridl.ldeo.columbia.edu/ontologies/irigaz_frwk.owl#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "Set-Language": {"@id": "iridl:Set-Language"}, "bbox": {"@id": "iridl:bbox", "@type": "@id"} } }The critical statement is that bbox is @type @id, and the namespace gaz that we happen to be using for the values of bbox.
{ "@type": "gazfw:currentPlace", "@context": { "gaz": "http://iridl.ldeo.columbia.edu/ontologies/irigaz.owl#", "gazfw": "http://iridl.ldeo.columbia.edu/ontologies/irigaz_frwk.owl#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "id": "@id", "graph": "@graph", "gazfw:contains": {"@container": "@set"}, "gazfw:partOf": {"@container": "@set"} } }Note that the frame changes the JSON-LD properties @id and @graph to id and graph respectively so that we could process them with PURE, which treats @ specially.
This gets replaced
Note that the frame changed the JSON-LD properties @id and @graph to id and graph respectively so that we could process them with PURE, which treats @ specially. The outermost label 'regions' comes from the id for the serql query, so that multiple queries can contribute to a collection of JSON.
That JSON is then parsed with a PURE directive and template to generate the menu.
{ "select": { "region <- regions.graph": { "option.current": "region.rdfs:label", "option.current@value": "region.id", "optgroup.subregion@label": "region.rdfs:label", "option.sub": { "opt <- region.gazfw:contains": { "@value": "opt.id", ".": "opt.rdfs:label" } }, "option.parent": { "popt <- region.gazfw:partOf": { "@value": "popt.id", ".": "popt.rdfs:label" } } } } }The directive is nested. The outer loop is then over graph which is an array that JSON-LD forces us to have, even though there is only one element. So we put an extra span around the select we want to template, so that we have an outer select tag to match on, presumably only once. Inside that loop, we define region, and use it for the label and id for the current bbox, and use its label for the contains option group. We also loop over contains and partOf, filling out the options if they are available -- the frame declarations insure that both will be arrays.