# HG changeset patch # User Laure Bourgois # Date 1232544915 -3600 # Node ID 8dd71540902ff35369a228d6bba64911e1cfab4e # Parent 1261226552ecad177ef5cf9d0f6c8d1ef78fd1e3 OwlView generated a owl layout from schema application. It can be registered with an owl extension. diff -r 1261226552ec -r 8dd71540902f web/views/startup.py --- a/web/views/startup.py Wed Jan 21 08:37:32 2009 +0100 +++ b/web/views/startup.py Wed Jan 21 14:35:15 2009 +0100 @@ -15,6 +15,25 @@ _ = unicode +OWL_CARD_MAP = {'1': '''1 + 1''', + '?': '1', + '+': '1', + '*': 'n' + } + +OWL_CARD_MAP_DATA = {'String': 'xsd:string', + 'Datetime': 'xsd:dateTime', + 'Bytes': 'xsd:byte', + 'Float': 'xsd:float', + 'Boolean': 'xsd:boolean', + 'Int': 'xsd:int', + 'Date':'xsd:date', + 'Time': 'xsd:time', + 'Password': 'xsd:byte', + 'Decimal' : 'xsd:decimal', + 'Interval': 'xsd:duration' + } class ManageView(StartupView): id = 'manage' @@ -190,3 +209,164 @@ skipmeta=skipmeta) self.w(ureport_as_html(layout)) + +class OWLView(StartupView): + id = 'owl' + title = _('owl') + templatable =False + + def call(self): + skipmeta = int(self.req.form.get('skipmeta', True)) + self.visit_schemaOWL(display_relations=True, + skiprels=('is', 'is_instance_of', 'identity', + 'owned_by', 'created_by'), + skipmeta=skipmeta) + + + def visit_schemaOWL(self, display_relations=0, + skiprels=(), skipmeta=True): + """get a layout for a whole schema""" + self.w(u''' + + + + + + + ]> + + + + + Cubicweb OWL Ontology + Author: Laure Bourgois + + ''' % (self.schema.name, self.schema.name, self.schema.name, self.schema.name, self.schema.name, self.schema.name)) + entities = [eschema for eschema in self.schema.entities() + if not eschema.is_final()] + if skipmeta: + entities = [eschema for eschema in entities + if not eschema.meta] + keys = [(eschema.type, eschema) for eschema in entities] + self.w(u'') + for key, eschema in sorted(keys): + self.visit_entityschemaOWL(eschema, skiprels) + self.w(u'') + self.w(u'') + for key, eschema in sorted(keys): + self.visit_property_schemaOWL(eschema, skiprels) + self.w(u'') + for key, eschema in sorted(keys): + self.visit_property_object_schemaOWL(eschema, skiprels) + self.w(u' ') + + def eschema_link_url(self, eschema): + return self.req.build_url('eetype/%s?vid=eschema' % eschema) + + def rschema_link_url(self, rschema): + return self.req.build_url('ertype/%s?vid=eschema' % rschema) + + def possible_views(self, etype): + rset = self.req.etype_rset(etype) + return [v for v in self._possible_views(self.req, rset) + if v.category != 'startupview'] + + def stereotype(self, name): + return Span((' <<%s>>' % name,), klass='stereotype') + + def visit_entityschemaOWL(self, eschema, skiprels=()): + """get a layout for an entity OWL schema""" + etype = eschema.type + + if eschema.meta: + self.stereotype('meta') + self.w(u''' + '''%eschema, stereotype) + else: + self.w(u''' + '''% eschema) + + self.w(u'') + for rschema, targetschemas, role in eschema.relation_definitions(): + if rschema.type in skiprels: + continue + if not (rschema.has_local_role('read') or rschema.has_perm(self.req, 'read')): + continue + for oeschema in targetschemas: + label = rschema.type + if role == 'subject': + card = rschema.rproperty(eschema, oeschema, 'cardinality')[0] + else: + card = rschema.rproperty(oeschema, eschema, 'cardinality')[1] + self.w(u''' + + + %s + + + ''' % (label, OWL_CARD_MAP[card])) + + self.w(u'') + + for rschema, aschema in eschema.attribute_definitions(): + if not (rschema.has_local_role('read') or rschema.has_perm(self.req, 'read')): + continue + aname = rschema.type + if aname == 'eid': + continue + card_data = aschema.type + self.w(u''' + + + 1 + + ''' + + % aname) + self.w(u'') + + def visit_property_schemaOWL(self, eschema, skiprels=()): + """get a layout for property entity OWL schema""" + etype = eschema.type + + for rschema, targetschemas, role in eschema.relation_definitions(): + if rschema.type in skiprels: + continue + if not (rschema.has_local_role('read') or rschema.has_perm(self.req, 'read')): + continue + rschemaurl = self.rschema_link_url(rschema) + for oeschema in targetschemas: + label = rschema.type + self.w(u''' + + + + + ''' % (label, eschema, oeschema.type )) + + def visit_property_object_schemaOWL(self, eschema, skiprels=()): + + for rschema, aschema in eschema.attribute_definitions(): + if not (rschema.has_local_role('read') or rschema.has_perm(self.req, 'read')): + continue + aname = rschema.type + if aname == 'eid': + continue + card_data = aschema.type + self.w(u''' + + + ''' + % (aname, eschema, OWL_CARD_MAP_DATA[card_data])) +# +# + + +