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()