http://redfoot.net/3.0/code#python,
# TODO: move this somewhere we can import it... we're already using it in two places.
def node(data):
if data["type"]=="URIRef":
return URIRef(data["uri"])
elif data["type"]=="BNode":
return BNode(data["bnode"])
elif data["type"]=="Literal":
datatype = data["datatype"] or None
language = data["language"] or None
return Literal(data["value"], lang=language, datatype=datatype)
else:
raise Exception("Unexpected type: '%s'" % data["type"])
from rdflib import RDFS
import simplejson
assertions = []
subject = request.parameters.get("subject")
if subject:
# TODO: support for BNodes
data = simplejson.loads(subject)
subject = node(data)
initial_predicates = [RDFS.label, RDFS.comment, RDF.type]
remaining_predicates = []
for p in set(redfoot.predicates(subject, None)):
if p not in initial_predicates:
remaining_predicates.append((redfoot.label(p), p))
remaining_predicates.sort()
predicates = []
for p in initial_predicates:
predicates.append((redfoot.label(p), p))
predicates.extend(remaining_predicates)
for label, p in predicates:
for o in redfoot.objects(subject, p):
if isinstance(o, URIRef):
value = {"type": "URIRef", "label": redfoot.label(o), "uri": o}
elif isinstance(o, BNode):
value = {"type": "BNode", "label": redfoot.label(o), "bnode": o}
elif isinstance(o, Literal):
value = {"type": "Literal", "value": o, "datatype": o.datatype or "", "language": o.language or ""}
else:
raise Exception("unexpected type: %s" % type(o))
assertions.append({"predicate": {"type": "URIRef", "label": label, "uri": p},
"object": value})
response.write(simplejson.dumps(assertions))
Comments regarding Assertions Page Handler
Login to submit a comment.