web/views/owl.py
changeset 4093 61b482fe826a
parent 4091 3fc6a53b7a6a
child 4157 f7830377b215
equal deleted inserted replaced
4092:df554ae4203c 4093:61b482fe826a
    69             self.w(OWL_OPENING_ROOT % {'appid': self._cw.vreg.schema.name})
    69             self.w(OWL_OPENING_ROOT % {'appid': self._cw.vreg.schema.name})
    70         self.visit_schema(skiptypes=skipmeta and schema.SKIP_TYPES or ())
    70         self.visit_schema(skiptypes=skipmeta and schema.SKIP_TYPES or ())
    71         if writeprefix:
    71         if writeprefix:
    72             self.w(OWL_CLOSING_ROOT)
    72             self.w(OWL_CLOSING_ROOT)
    73 
    73 
    74     def should_display_rschema(self, eschema, rschema, tschemas, role):
    74     def should_display_rschema(self, eschema, rschema, role):
    75         # XXX only consider tschemas[0]
       
    76         return not rschema in self.skiptypes and (
    75         return not rschema in self.skiptypes and (
    77             eschema.rdef(rschema, role, tschemas[0]).may_have_permission('read', self._cw))
    76             rschema.may_have_permission('read', self._cw, eschema, role))
    78 
    77 
    79     def visit_schema(self, skiptypes):
    78     def visit_schema(self, skiptypes):
    80         """get a layout for a whole schema"""
    79         """get a layout for a whole schema"""
    81         self.skiptypes = skiptypes
    80         self.skiptypes = skiptypes
    82         entities = sorted(eschema for eschema in self._cw.vreg.schema.entities()
    81         entities = sorted(eschema for eschema in self._cw.vreg.schema.entities()
    92     def visit_entityschema(self, eschema):
    91     def visit_entityschema(self, eschema):
    93         """get a layout for an entity OWL schema"""
    92         """get a layout for an entity OWL schema"""
    94         self.w(u'<owl:Class rdf:ID="%s">'% eschema)
    93         self.w(u'<owl:Class rdf:ID="%s">'% eschema)
    95         self.w(u'<!-- relations -->')
    94         self.w(u'<!-- relations -->')
    96         for rschema, targetschemas, role in eschema.relation_definitions():
    95         for rschema, targetschemas, role in eschema.relation_definitions():
    97             if not self.should_display_rschema(eschema, rschema, targetschemas, role):
    96             if not self.should_display_rschema(eschema, rschema, role):
    98                 continue
    97                 continue
    99             for oeschema in targetschemas:
    98             for oeschema in targetschemas:
   100                 if role == 'subject':
    99                 if role == 'subject':
   101                     card = rschema.rproperty(eschema, oeschema, 'cardinality')[0]
   100                     card = rschema.rproperty(eschema, oeschema, 'cardinality')[0]
   102                 else:
   101                 else:
   110  </owl:Restriction>
   109  </owl:Restriction>
   111 </rdfs:subClassOf>''' % (rschema, cardtag))
   110 </rdfs:subClassOf>''' % (rschema, cardtag))
   112 
   111 
   113         self.w(u'<!-- attributes -->')
   112         self.w(u'<!-- attributes -->')
   114         for rschema, aschema in eschema.attribute_definitions():
   113         for rschema, aschema in eschema.attribute_definitions():
   115             if not self.should_display_rschema(eschema, rschema, (aschema,), 'subject'):
   114             if not self.should_display_rschema(eschema, rschema, 'subject'):
   116                 continue
   115                 continue
   117             self.w(u'''<rdfs:subClassOf>
   116             self.w(u'''<rdfs:subClassOf>
   118   <owl:Restriction>
   117   <owl:Restriction>
   119    <owl:onProperty rdf:resource="#%s"/>
   118    <owl:onProperty rdf:resource="#%s"/>
   120    <rdf:type rdf:resource="&owl;FunctionalProperty"/>
   119    <rdf:type rdf:resource="&owl;FunctionalProperty"/>
   123         self.w(u'</owl:Class>')
   122         self.w(u'</owl:Class>')
   124 
   123 
   125     def visit_property_schema(self, eschema):
   124     def visit_property_schema(self, eschema):
   126         """get a layout for property entity OWL schema"""
   125         """get a layout for property entity OWL schema"""
   127         for rschema, targetschemas, role in eschema.relation_definitions():
   126         for rschema, targetschemas, role in eschema.relation_definitions():
   128             if not self.should_display_rschema(eschema, rschema, targetschemas, role):
   127             if not self.should_display_rschema(eschema, rschema, role):
   129                 continue
   128                 continue
   130             for oeschema in targetschemas:
   129             for oeschema in targetschemas:
   131                 self.w(u'''<owl:ObjectProperty rdf:ID="%s">
   130                 self.w(u'''<owl:ObjectProperty rdf:ID="%s">
   132  <rdfs:domain rdf:resource="#%s"/>
   131  <rdfs:domain rdf:resource="#%s"/>
   133  <rdfs:range rdf:resource="#%s"/>
   132  <rdfs:range rdf:resource="#%s"/>
   134 </owl:ObjectProperty>''' % (rschema, eschema, oeschema.type))
   133 </owl:ObjectProperty>''' % (rschema, eschema, oeschema.type))
   135 
   134 
   136     def visit_property_object_schema(self, eschema):
   135     def visit_property_object_schema(self, eschema):
   137         for rschema, aschema in eschema.attribute_definitions():
   136         for rschema, aschema in eschema.attribute_definitions():
   138             if not self.should_display_rschema(eschema, rschema, (aschema,), 'subject'):
   137             if not self.should_display_rschema(eschema, rschema, 'subject'):
   139                 continue
   138                 continue
   140             self.w(u'''<owl:DatatypeProperty rdf:ID="%s">
   139             self.w(u'''<owl:DatatypeProperty rdf:ID="%s">
   141   <rdfs:domain rdf:resource="#%s"/>
   140   <rdfs:domain rdf:resource="#%s"/>
   142   <rdfs:range rdf:resource="%s"/>
   141   <rdfs:range rdf:resource="%s"/>
   143 </owl:DatatypeProperty>''' % (rschema, eschema, OWL_TYPE_MAP[aschema.type]))
   142 </owl:DatatypeProperty>''' % (rschema, eschema, OWL_TYPE_MAP[aschema.type]))