content,
<div xmlns:kid="http://purl.org/kid/ns#" kid:strip="">
<?python
from rdflib.util import from_n3
KERNEL = redfoot.namespace("http://redfoot.net/3.0/kernel#")
SESSION = redfoot.namespace("http://redfoot.net/3.0/session#")
subject = from_n3(request.parameters.get("subject"))
predicate = from_n3(request.parameters.get("predicate"))
object = from_n3(request.parameters.get("object", None), None)
datatype = request.parameters.get("datatype") or None
if datatype:
datatype = URIRef(datatype)
if object and datatype and isinstance(object, Literal):
object.datatype = datatype
if object is None:
o = request.parameters.get("object_literal") or ""
object = Literal(o, datatype=datatype)
object_orig = from_n3(request.parameters.get("object_orig", None), None)
if object_orig and isinstance(object_orig, Literal):
dt = request.parameters.get("object_orig_datatype") or None
if dt:
object_orig.datatype = URIRef(dt)
if object!=None:
processor = request.parameters.get("processor", None)
if processor=="delete":
redfoot.remove((subject, predicate, object_orig))
predicate = None
object = None
elif processor=="update":
#derive context from subject
#context = redfoot.get_context(redfoot.context_id(subject))
uid = redfoot.value(request.session_id, SESSION.uid)
if uid:
#use context associated with session id.
try:
user_document = redfoot.value(request.session_id, SESSION.context)
except UniquenessError, e:
user_document = None
if user_document is None:
from time import gmtime
# 2005/04/06/09:45:22/
year, month, date, h, m, s, _, _, _ = gmtime()
name = "%04d/%02d/%02d/%02d:%02d:%02d" % (year, month, date, h, m, s)
uri = URIRef("%s/document/%s" % (request.host, name))
user_document = redfoot.context_id(uri)
c = redfoot.get_context(request.session_id)
redfoot.remove((request.session_id, SESSION.context, None))
c.add((request.session_id, SESSION.context, user_document))
c.add((user_document, RDF.type, KERNEL.Context))
context = redfoot.get_context(user_document, creator=uid)
if object_orig!=None and object_orig!=object:
redfoot.remove((subject, predicate, object_orig))
context.add((subject, predicate, object))
else:
response.write("<p>Did not update. Must be logged in to update.</p>")
possible = []
for property in redfoot.possible_properties_for_subject(subject):
possible.append((redfoot.label(property) or property, property))
possible.sort()
?>
<form kid:if="subject"
name="edit_form" action="" method="post">
<input type="hidden" name="subject" value="${subject.n3()}"/>
<input type="hidden" name="processor" value="update"/>
<input kid:if="object!=None" type="hidden" name="object_orig" value="${object.n3()}"/>
<input kid:if="object!=None and isinstance(object, Literal)" type="hidden" name="object_orig_datatype" value="${object.datatype}"/>
<table class="generic">
<tr>
<td>Subject</td>
<td>${subject}</td>
</tr>
<tr>
<td>predicate</td>
<td>
<select type="text" name="predicate" onChange="edit_form.submit()">
<option value="">Select a new Property to add</option>
<option kid:if="predicate and not predicate in redfoot.possible_properties_for_subject(subject)"
style="color: red" selected="true"
value="${predicate.n3()}">${redfoot.label(predicate)}</option>
<span kid:for="label, property in possible" kid:strip="">
<option kid:if="property==predicate" value="${property.n3()}" selected="true" >${label}</option>
<option kid:if="property!=predicate" value="${property.n3()}">${label}</option>
</span>
</select>
</td>
</tr>
<tr>
<td>Object</td>
<td>
<?python
if object is not None and isinstance(object, Literal):
isDatatype = True
else:
isDatatype = (predicate, RDFS.range, RDFS.Literal) in redfoot or (predicate, RDFS.range, RDFS.Resource) in redfoot or (predicate, RDF.type, URIRef('http://www.w3.org/2002/07/owl#DatatypeProperty')) in redfoot
values = {}
value_list = []
seen = set()
if object and not isinstance(object, Literal):
seen.add(object)
value_list.append((redfoot.label(object) or object, object))
if predicate:
for range in redfoot.objects(predicate, RDFS.range):
for t in redfoot.transitive_subjects(RDFS.subClassOf, range):
for value in redfoot.subjects(RDF.type, t):
if not value in seen:
seen.add(value)
#label = "%s (%s)" % (redfoot.label(value), value)
label = redfoot.label(value) or value
values[value] = label
value_list.append((label, value))
value_list.sort()
isObject = bool(value_list)
?>
<span kid:if="isObject" kid:strip="">
<select name="object" kid:if="predicate">
<option value=''></option>
<span kid:for="label, value in value_list" kid:strip="">
<option kid:if="value==object" value="${value.n3()}" selected="true" >${label}</option>
<option kid:if="value!=object" value="${value.n3()}">${label}</option>
</span>
</select>
</span>
<span kid:strip="" kid:if="isDatatype">
<?python
if object and isinstance(object, Literal):
value = object
else:
value = ''
possible = []
for datatype in redfoot.subjects(RDF.type, RDFS.Datatype):
label = redfoot.label(datatype)
possible.append((label, datatype))
possible.sort()
?>
<span kid:if="isDatatype and isObject" kid:strip=""><br/>or<br/></span>
Datatype: <select name="datatype">
<option value=''></option>
<span kid:for="label, datatype in possible" kid:strip="">
<option kid:if="isinstance(object, Literal) and datatype==object.datatype" value="${datatype}" selected="true" >${label}</option>
<option kid:if="not isinstance(object, Literal) or datatype!=object.datatype" value="${datatype}">${label}</option>
</span>
</select>
<br/>
<textarea name="object_literal" rows="10" cols="60">${value}</textarea>
</span>
</td>
</tr>
</table>
<span kid:if="object!=None">
<input type="submit" value="Update"/>
<input type="button" value="Delete" onclick="edit_form.processor.value='delete'; edit_form.submit()"/>
</span>
<span kid:if="object==None">
<input type="submit" value="Add"/>
</span>
<input type="button" value="Edit Resource"
onclick="edit_form.processor.value='update';edit_form.action='resource'; edit_form.submit()"/>
</form>
<?python
DC_creator = URIRef("http://purl.org/dc/elements/1.1/creator")
if subject and predicate and object:
contexts = []
for context in redfoot.contexts((subject, predicate, object)):
creator = redfoot.value(context, DC_creator)
if creator:
label = redfoot.label(creator) or creator
else:
label = " - "
contexts.append((label, context))
else:
contexts = []
?>
<p kid:for="label, context in contexts">Asserted by: ${label}</p>
</div>
Comments regarding http://redfoot.net/3.0/aspects/generic/edit_triple
Login to submit a comment.