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