uses isDescribedBy relationships to create a faceted browse
taxa
CONSTRUCT {taxa} term:label {tlabel} ;rdf:type {term:Taxa} FROM {object} term:isDescribedBy {semantic} rdf:type {taxa} rdf:type {term:Taxa}, {object} rdf:type {objectClass}, [ {objectClass} term:label {clabel} ], [ {taxa} term:label {tlabel} ] WHERE isuri(objectClass) USING NAMESPACE term = <http://iridl.ldeo.columbia.edu/ontologies/iriterms.owl#>, iridl = <http://iridl.ldeo.columbia.edu/ontologies/iridl.owl#>
itemClasses
CONSTRUCT {objectClass} term:label {clabel} ; rdf:type {term:ItemClass} FROM {object} rdf:type {objectClass} rdfs:subClassOf {term:SearchItem}, [ {objectClass} term:label {clabel} ] WHERE isuri(objectClass) USING NAMESPACE term = <http://iridl.ldeo.columbia.edu/ontologies/iriterms.owl#>, iridl = <http://iridl.ldeo.columbia.edu/ontologies/iridl.owl#>
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.