def turtle_index(sink, root, datauri, querychannel): triples = [] freenodeURI = root + "#freenode" triples += [(freenodeURI, RDFS.label, PlainLiteral("Freenode"))] channels = sorted(sink.channels.keys()) channelURIs = [] for channel in channels: channelID = channel.strip("#").lower() channelURI = root + channelID + "#channel" channelURIs.append(channelURI) oldChannelURI = "irc://freenode/%23" + channelID triples += [None, (freenodeURI, SIOC.space_of, channelURI), (channelURI, OWL.sameAs, oldChannelURI), (channelURI, RDF.type, SIOC.Forum), (channelURI, RDF.type, SIOCT.ChatChannel), (channelURI, RDFS.label, PlainLiteral("#" + channel)), ] for day in sorted(sink.channel2days[channel]): logURI = "%s%s/%s" % (root, channelID, day) triples += [(channelURI, RDFS.seeAlso, logURI)] if querychannel: nicks = sorted(sink.channel2nicks[querychannel].keys()) for nick in nicks: userURI = root + "users/%s#user" % nick triples += [None, (channelURI, SIOC.has_subscriber, userURI), (userURI, RDFS.label, PlainLiteral(nick)), ] writer = TurtleWriter(None, namespaces) if querychannel and channels: title = "Index of #%s" % channels[0] writer.write([("", FOAF.primaryTopic, channelURIs[0])]) elif querychannel: title = "Empty index" else: title = "Index of some IRC discussion logs" writer.write([("", FOAF.primaryTopic, freenodeURI)]) writer.write([("", FOAF.topic, channelURI) for channelURI in channelURIs]) writer.write([("", RDFS.label, PlainLiteral(title))]) writer.setBase(root) writer.write(triples) writer.close()
def close(self): for nick in self.seenNicks: creator = self.root + "users/" + nick + "#user" oldCreator = "irc://freenode/" + nick + ",isuser" self.triples += [None, (creator, OWL.sameAs, oldCreator), (creator, RDFS.label, PlainLiteral(nick)), (creator, RDF.type, SIOC.User), ] writer = TurtleWriter(None, namespaces) title = "Log of #%s on %s" % (self.channel, self.timeprefix) writer.write([("", RDFS.label, PlainLiteral(title)), ("", FOAF.primaryTopic, self.channelURI), ]) writer.setBase(self.base) writer.write(self.triples) writer.close()
def render_user_index(sink, format, crumbs, datarooturi, datauri): freenodeURI = datarooturi + "#freenode" nicks = get_nicks() nick2people = get_nick2people() if format == "html": context = new_context() context.addGlobal('crumbs', crumbs) context.addGlobal('datarooturi', datarooturi) context.addGlobal('datauri', datauri) users = [] for nick in nicks: user = datarooturi + "users/%s#user" % nick users.append({'uri': user, 'nick': nick}) context.addGlobal('users', users) template = get_template('users') expand_template(template, context) elif format == "turtle": triples = [] for nick in nicks: user = datarooturi + "users/%s#user" % nick triples += [None, (freenodeURI, SIOC.space_of, user), (user, RDFS.label, PlainLiteral(nick)), (user, RDF.type, SIOC.User)] if nick in nick2people: triples += [(nick2people[nick], FOAF.holdsAccount, user)] writer = TurtleWriter(None, namespaces) title = "User index" writer.write([("", RDFS.label, PlainLiteral(title)), ("", FOAF.primaryTopic, freenodeURI)]) writer.write(triples) writer.close()
def render_user(sink, format, crumbs, datarooturi, nick, datauri, latestsink): userURI = datarooturi + "users/%s#user" % nick global Red import RDF as Red person = find_person(nick) error = None model = Red.Model() # XXX work around a bug in Redland? if person: try: model.load(person.rsplit('#', 1)[0], name='guess') except: error = "Error loading the FOAF info: %s" % sys.exc_info()[1] channels = sorted(sink.nick2channels.get(nick, {}).keys()) if format == "html": context = new_context() context.addGlobal('crumbs', crumbs) context.addGlobal('datarooturi', datarooturi) context.addGlobal('datauri', datauri) context.addGlobal('error', error) info = [] if person: for name in link_values(model, person, [FOAF.name, FOAF.firstName, FOAF.nick, RDFS.label]): info.append({'key': 'Name', 'value': "%s" % name}) for ircnick in nick_values(datarooturi, model, person, [FOAF.holdsAccount]): if userURI in ("%s" % ircnick): ircnick = ircnick + " <em>[confirms the Web ID claim]</em>" elif ircnick is None: ircnick = """None <em>[can't confirm the Web ID claim, should be <a href="%s">%s</a>]</em>""" % (userURI, nick) else: ircnick = ircnick + """ <em>[doesn't confirm the Web ID claim, should be <a href="%s">%s</a>]</em>""" % (userURI, nick) info.append({'key': 'IRC account', 'value': "%s" % ircnick}) for website in link_values(model, person, [FOAF.homepage]): info.append({'key': 'Website', 'value': "%s" % website}) for weblog in link_values(model, person, [FOAF.weblog]): info.append({'key': 'Weblog', 'value': "%s" % weblog}) for img in image_values(model, person, [FOAF.depiction, FOAF.img]): info.append({'key': 'Image', 'value': "%s" % img}) for known in friend_values(datarooturi, model, person, [FOAF.knows]): info.append({'key': 'Knows', 'value': "%s" % known}) context.addGlobal('here', {'nick': nick, 'person': {'webid': person, 'info': info}}) channeldata = [] for channel in channels: channelURI = datarooturi + "%s#channel" % channel channeldata.append({'uri': channelURI, 'name': "#"+channel}) context.addGlobal('channels', channeldata) context.addGlobal('events', latestsink.events) template = get_template('user') expand_template(template, context) elif format == "turtle": oldUserURI = "irc://freenode/%s,isuser" % nick triples = [None, (datarooturi + "#freenode", SIOC.space_of, userURI), (userURI, OWL.sameAs, oldUserURI), (userURI, RDFS.label, PlainLiteral(nick)), (userURI, RDF.type, SIOC.User), ] if person: triples += [None, (person, FOAF.holdsAccount, userURI)] triples += get_triples(model, person, [FOAF.name, FOAF.firstName, FOAF.nick, RDFS.label]) for channel in channels: channelURI = datarooturi + "%s#channel" % channel triples += [None, (channelURI, SIOC.has_subscriber, userURI), (channelURI, RDFS.label, PlainLiteral("#%s" % channel)), ] writer = TurtleWriter(None, namespaces) title = "About user %s" % nick writer.write([("", RDFS.label, PlainLiteral(title)), ("", FOAF.primaryTopic, userURI), ]) writer.write(triples) writer.close()