#!/bin/env python """ compDecls.py -- 'compile' declarations from iCalendar ontology USAGE: python compDecls.py foo.rdf >foo.py Then copy/paste stuff from foo.py into fromIcal.py. TODO: - subcomponent connections - geo label. (wierd bug?) """ __version__ = '$Id: compDecls.py,v 1.4 2023/12/29 17:34:44 timbl Exp $' from myStore import Namespace, load # http://www.w3.org/2000/10/swap/ from warnings import warn RDF = Namespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#") RDFS = Namespace("http://www.w3.org/2000/01/rdf-schema#") ICAL = Namespace("http://www.w3.org/2002/12/cal/ical#") SPEC = Namespace("http://www.w3.org/2002/12/cal/icalSpec#") OWL = Namespace("http://www.w3.org/2002/07/owl#") def compile(ont): """find the classes with labels; treat them as iCalendar component types. Then find ?P where [?C rdfs:subClassOf [ owl:onProperty ?P ] ]. And find ?T where [?P spec:valueType ?T]. """ progress("looking for Classes") comps = {} for c in ont.each(pred = RDF.type, obj = OWL.Class): #progress("looking for label on ", c) l = ont.any(c, RDFS.label) if l: ln = c.uriref().split("#")[1] props = {} for r in ont.each(subj = c, pred = RDFS.subClassOf): p = ont.any(r, OWL.onProperty) if p: pln = p.uriref().split("#")[1] pl = ont.any(p, RDFS.label) if pl: pt = ont.any(p, SPEC.valueType) if pt: ty = str(pt) else: plt = ont.any(p, SPEC.valueListType) if plt: ty = (str(plt),) else: warn("no value type for %s" % p) ty = 'None' props[str(pl)] = (pln, ty, None, None) else: warn("no label for %s" %p) comps[str(l)] = (ln, props, "@@subcomponents") return comps def progress(*args): for i in args: sys.stderr.write(str(i)) sys.stderr.write("\n") def usage(): import sys print(__doc__, file=sys.stderr) import pprint def main(argv): try: ontf = argv[1] except IndexError: usage() return 2 progress("loading ", ontf, "...") ont = load(ontf) decls = compile(ont) pprint.pprint(decls) if __name__ == '__main__': import sys sys.exit(main(sys.argv)) # $Log: compDecls.py,v $ # Revision 1.4 2023/12/29 17:34:44 timbl # 2to3 # # Revision 1.3 2023/12/29 17:32:15 timbl # tabs to spaces # # Revision 1.2 2004/04/07 18:35:16 connolly # valueListType # # Revision 1.1 2004/02/29 14:35:04 connolly # useful #