#!/usr/bin/env python """ com.inamidst.node - Arcs Node Widget Author: Sean B. Palmer, inamidst.com """ import urllib, heapq import trio def parse_value(s): s = s.replace('\\"', '"') s = s.replace('\\t', '\t') s = s.replace('\\r', '\r') s = s.replace('\\n', '\n') return s.decode('unicode-escape') def parse_term(string): if string.startswith('<'): return trio.rdf.URI(parse_value(string[1:-1])) elif string.startswith('_:'): return trio.rdf.BlankNode(string[2:]) elif string.startswith('"'): return trio.rdf.PlainLiteral(parse_value(string[1:-1])) return trio.rdf.URI(parse_value(string)) def serialise_term(term): if isinstance(term, trio.rdf.URI): return '<' + escaped33(term.value.encode('utf-8')) + '>' elif isinstance(term, trio.rdf.BlankNode): return '_:' + term.label.encode('utf-8') elif isinstance(term, trio.rdf.PlainLiteral): return '"' + escaped32(term.lexical) + '"' elif isinstance(term, trio.rdf.TypedLiteral): return '"' + escaped32(term.lexical) + '"' raise ValueError('%r' % term) def racine(arcs, uri): return uri.split('#', 1)[0] def main(arcs, write, params): lib = arcs.library serialised_node = params['about'] rdf_node = parse_term(serialised_node) node = arcs.Node(rdf_node, lib) label = node.label() write(title=label + ' · Arcs → View Facts') write('
')
prev = '''
write("""""")
'''
write("""""")
write('' + label + '') write('
| ')
write('')
write('Sources') write(""" """) sources = set() for graph_label in lib.manifest[node.node]: s_graph = lib.graphs[graph_label] s_uri = s_graph.docURI s_rdfnode = trio.rdf.URI(unicode(s_uri)) sources.add((s_rdfnode, s_uri)) equivalents = lib.equivalents(node.node) for equivalent in equivalents: s_uri = racine(arcs, str(equivalent).strip('<>')) s_rdfnode = trio.rdf.URI(unicode(s_uri)) sources.add((s_rdfnode, s_uri)) canon = lib.canonicalise(node.node) if len(sources) > 1: write('')
for s_rdfnode, s_uri in sources:
equiv_source = s_rdfnode in equivalents
loaded_source = False
for G in lib.graphs.itervalues():
if G.docURI == s_uri:
loaded_source = True
break
if loaded_source:
color, codepoint, extra = '#2a5', '●', ' checked'
else: color, codepoint, extra = '#775', '○', ' unchecked'
write("""
%s
""" % (extra, attr(s_uri), color, codepoint))
# if lib.canonicalise(e_node) != canon:
if not equiv_source:
linktext = lib.label(s_rdfnode, extended=True)
else: linktext = s_uri
if linktext.startswith('http://'):
linktext = linktext.split('/')[2]
linktext = '.'.join(linktext.split('.')[-3:])
if loaded_source:
write('' + linktext + '')
else: write('' + linktext + '')
if lib.manifest.has_key(s_rdfnode) and not equiv_source:
write(' (about)')
# if equivalent == rdf_node:
# write(' (selected)')
# if equivalent == canon:
# write(' (canonical)')
write(' Arcs has %s facts about %s. " % (facts, label)) write('Key') write('○ ' +
' = unknown availability ● ' +
' = loaded source | ')
write('||
')
write('Alternative Links') write('@@ ') write(' | ')
write('') write(' | ') write('