1- # Class: {{ gen.name(element) }}
1+ {% - if element .title %}
2+ {% - set title = element .title ~ ' (' ~ element .name ~ ')' -%}
3+ {% - else %}
4+ {% - if gen .use_class_uris -%}
5+ {% - set title = element .name -%}
6+ {% - else -%}
7+ {% - set title = gen .name (element ) -%}
8+ {% - endif -%}
9+ {% - endif -%}
10+
11+ {% macro compute_range (slot ) -%}
12+ {% - if slot .any_of or slot .exactly_one_of -%}
13+ {% - for subslot_range in schemaview .slot_range_as_union (slot ) -%}
14+ {{ gen.link(subslot_range) }}
15+ {% - if not loop .last -%}
16+   ; or  ; <br />
17+ {% - endif -%}
18+ {% - endfor -%}
19+ {% - else -%}
20+ {{ gen.link(slot.range) }}
21+ {% - endif -%}
22+ {% endmacro %}
23+
24+ # Class: {{ title }}
225
326{% - if header -%}
427{{header}}
528{% - endif -%}
629
730
831{% if element .description %}
9- _{{ element.description }}_
32+ {% set element_description_lines = element .description .split ('\n' ) %}
33+ {% for element_description_line in element_description_lines %}
34+ _{{ element_description_line }}_
35+ {% endfor %}
1036{% endif %}
1137
1238{% if element .abstract %}
1339* __NOTE__: this is an abstract class and should not be instantiated directly
1440{% endif %}
15- {% if element .mixin %}
16- * __NOTE__: this is a mixin class intended to be used in combination with other classes, and not used directly
17- {% endif %}
1841
1942URI: {{ gen.uri_link(element) }}
2043
2144
22-
23- {% if schemaview .class_parents (element .name ) %}
45+ {% if diagram_type == "er_diagram" %}
2446```{{ gen.mermaid_directive() }}
25- classDiagram
26- {% for s in schemaview .class_parents (element .name )|sort (attribute ='name' ) -%}
27- {{ gen.name(schemaview.get_element(s)) }} <|-- {{ gen.name(element) }}
28- {% endfor %}
29- {% for s in schemaview .class_induced_slots (element .name )|sort (attribute ='name' ) -%}
30- {{ gen.name(element) }} : {{gen.name(s)}}
31- {% endfor %}
32-
47+ {{ gen.mermaid_diagram([element.name] ) }}
3348```
34- {% elif schemaview .class_children (element .name ) %}
35- ```{{ gen.mermaid_directive() }}
36- classDiagram
37- {% for s in schemaview .class_children (element .name )|sort (attribute ='name' ) -%}
38- {{ gen.name(element) }} <|-- {{ gen.name(schemaview.get_element(s)) }}
39- {% endfor %}
40- {% for s in schemaview .class_induced_slots (element .name )|sort (attribute ='name' ) -%}
41- {{ gen.name(element) }} : {{gen.name(s)}}
42- {% endfor %}
49+ {% elif diagram_type == "plantuml_class_diagram" %}
50+ ```puml
51+ {{ gen.mermaid_diagram([element.name] ) }}
4352```
4453{% else %}
45- ```{{ gen.mermaid_directive() }}
46- classDiagram
47- class {{ gen.name(element) }}
48- {% for s in schemaview .class_induced_slots (element .name )|sort (attribute ='name' ) -%}
49- {{ gen.name(element) }} : {{gen.name(s)}}
50- {% endfor %}
51- ```
54+ {% include "class_diagram.md.jinja2" %}
5255{% endif %}
5356
54-
5557{% if schemaview .class_parents (element .name ) or schemaview .class_children (element .name , mixins =False ) %}
5658
5759## Usage
@@ -68,19 +70,36 @@ SELECT * FROM {{element.name}};
6870
6971## Slots
7072
71- | Name | Cardinality and Range | Description |
72- | --- | --- | --- |
73- {% for s in schemaview .class_induced_slots (element .name ) -%}
74- | {{gen.link(s)}} | {{ gen.cardinality(s) }} <br /> {{gen.link(s.range)}} | {{s.description|enshorten}} |
73+ | Name | Cardinality and Range | Description | Inheritance |
74+ | --- | --- | --- | --- |
75+ {% if gen .get_direct_slots (element )|length > 0 %}
76+ {% - for slot in gen .get_direct_slots (element ) -%}
77+ | {{ gen.link(slot) }} | {{ gen.cardinality(slot) }} <br /> {{ compute_range(slot) }} | {{ slot.description|enshorten }} | direct |
78+ {% endfor -%}
79+ {% endif -%}
80+ {% if gen .get_indirect_slots (element )|length > 0 %}
81+ {% - for slot in gen .get_indirect_slots (element ) -%}
82+ | {{ gen.link(slot) }} | {{ gen.cardinality(slot) }} <br /> {{ compute_range(slot) }} | {{ slot.description|enshorten }} | {{ gen.links(gen.get_slot_inherited_from(element.name, slot.name))|join(', ') }} |
83+ {% endfor -%}
84+ {% endif %}
85+
86+ {% if schemaview .is_mixin (element .name ) %}
87+ ## Mixin Usage
88+
89+ | mixed into | description |
90+ | --- | --- |
91+ {% for c in schemaview .class_children (element .name , is_a =False ) -%}
92+ | {{ gen.link(c) }} | {{ schemaview.get_class(c).description|enshorten }} |
7593{% endfor %}
94+ {% endif %}
7695
96+ {% if schemaview .usage_index ().get (element .name ) %}
7797## Usages
7898
79- {% if schemaview .usage_index ().get (element .name ) %}
8099| used by | used in | type | used |
81100| --- | --- | --- | --- |
82101{% for usage in schemaview .usage_index ().get (element .name ) -%}
83- | {{gen.link(usage.used_by)}} | {{gen.link(usage.slot)}} | {{usage.metaslot}} | {{usage.used }} |
102+ | {{gen.link(usage.used_by)}} | {{gen.link(usage.slot)}} | {{usage.metaslot}} | {{ gen.link( usage.used) }} |
84103{% endfor %}
85104{% endif %}
86105
@@ -128,14 +147,25 @@ This class has a SQL view definition:
128147| --- | --- |
129148{% for m , mt in schemaview .get_mappings (element .name ).items () -%}
130149{% if mt |length > 0 -%}
131- | {{ m }} | {{ mt }} |
150+ | {{ m }} | {{ mt|join(', ') }} |
132151{% endif -%}
133152{% endfor %}
134153
135154{% endif -%}
136155
156+ {% if gen .example_object_blobs (element .name ) -%}
157+ ## Examples
158+ {% for name , blob in gen .example_object_blobs (element .name ) -%}
159+ ### Example: {{name}}
160+
161+ ```yaml
162+ {{ blob }}
163+ ```
164+ {% endfor %}
165+ {% endif %}
166+
137167
138- ## LinkML Specification
168+ ## LinkML Source
139169
140170<!-- TODO: investigate https://stackoverflow.com/questions/37606292/how-to-create-tabbed-code-blocks-in-mkdocs-or-sphinx -->
141171
@@ -157,4 +187,4 @@ This class has a SQL view definition:
157187
158188{% - if footer -%}
159189{{footer}}
160- {% - endif -%}
190+ {% - endif -%}
0 commit comments