Skip to content

Commit ae9bcb6

Browse files
committed
Added cable3d and instance_cable3d to schema
- Added cable3d to schema - Added instance_cable3d to schema - Added corresponding schema tron validation
1 parent d12c1ce commit ae9bcb6

File tree

3 files changed

+71
-9
lines changed

3 files changed

+71
-9
lines changed

schema/pvcollada_references_2.0.sch

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,19 @@
9696
</assert>
9797
</rule>
9898
</pattern>
99+
100+
<!-- Pattern: Validate instance_cable3d references -->
101+
<pattern id="instance_cable3d_references">
102+
<rule context="pv:instance_cable3d">
103+
<let name="instance_geom" value="ancestor::collada:instance_geometry"/>
104+
<let name="geom_url" value="substring-after($instance_geom/@url, '#')"/>
105+
<let name="referenced_geom" value="//collada:geometry[@id=$geom_url]"/>
106+
<assert test="$referenced_geom//pv:cable3d">
107+
instance_cable3d must be in an instance_geometry that references a geometry containing a cable3d element.
108+
Referenced geometry: <value-of select="$geom_url"/>
109+
</assert>
110+
</rule>
111+
</pattern>
99112

100113
<!-- Pattern: Validate instance_table references -->
101114
<pattern id="instance_table_references">
@@ -131,7 +144,7 @@
131144
</assert>
132145
</rule>
133146
</pattern>
134-
147+
135148
<!-- Pattern: Validate combiner3d component references -->
136149
<pattern id="combiner3d_component_references">
137150
<rule context="pv:combiner3d[@combiner_id]">
@@ -142,6 +155,17 @@
142155
</assert>
143156
</rule>
144157
</pattern>
158+
159+
<!-- Pattern: Validate cable3d component references -->
160+
<pattern id="cable3d_component_references">
161+
<rule context="pv:cable3d[@cable_id]">
162+
<let name="cable_ref" value="@cable_id"/>
163+
<assert test="//pv:cable[@id=$cable_ref]">
164+
cable3d element references non-existent cable '<value-of select="$cable_ref"/>'.
165+
Must reference a cable defined in components/cables.
166+
</assert>
167+
</rule>
168+
</pattern>
145169

146170
<!-- Pattern: Validate instance_inverter3d circuit references -->
147171
<pattern id="instance_inverter3d_circuit_references">
@@ -175,6 +199,17 @@
175199
</assert>
176200
</rule>
177201
</pattern>
202+
203+
<!-- Pattern: Validate instance_cable3d circuit references -->
204+
<pattern id="instance_cable3d_circuit_references">
205+
<rule context="pv:instance_cable3d[@cable_to_parent_id]">
206+
<let name="cable_to_parent_ref" value="@cable_to_parent_id"/>
207+
<assert test="//pv:cable_to_parent[@id=$cable_to_parent_ref]">
208+
instance_cable3d element references non-existent cable_to_parent '<value-of select="$cable_to_parent_ref"/>'.
209+
Must reference a cable_to_parent defined in the circuit.
210+
</assert>
211+
</rule>
212+
</pattern>
178213

179214
<!-- Pattern: Validate instance_inverter URL references -->
180215
<pattern id="instance_inverter_url_references">

schema/pvcollada_schema_0.1.xsd

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1225,4 +1225,31 @@ xmlns:collada="http://www.collada.org/2008/03/COLLADASchema">
12251225
</xs:attribute>
12261226
</xs:complexType>
12271227
</xs:element>
1228+
<xs:element name="cable3d">
1229+
<xs:annotation>
1230+
<xs:documentation>This tag should only appear in the extra/technique section of a Collada geometry tag to signal a 3D model
1231+
for a cable.</xs:documentation>
1232+
</xs:annotation>
1233+
<xs:complexType>
1234+
<xs:attribute name="cable_id" type="xs:IDREF">
1235+
<xs:annotation>
1236+
<xs:documentation>Id of the cable defined in the components part</xs:documentation>
1237+
</xs:annotation>
1238+
</xs:attribute>
1239+
</xs:complexType>
1240+
</xs:element>
1241+
<xs:element name="instance_cable3d">
1242+
<xs:annotation>
1243+
<xs:documentation>This tag should only appear in the extra/technique section of a Collada instance_geometry tag to signal a
1244+
3D instance of a cable. The attribute url of the instance_geometry must reference a Collada geometry that is a model
1245+
for a cable3d (has an cable3d tag in its extra/technique tag).</xs:documentation>
1246+
</xs:annotation>
1247+
<xs:complexType>
1248+
<xs:attribute name="cable_to_parent_id" type="xs:IDREF">
1249+
<xs:annotation>
1250+
<xs:documentation>Id of the cable_to_parent defined in the circuit part</xs:documentation>
1251+
</xs:annotation>
1252+
</xs:attribute>
1253+
</xs:complexType>
1254+
</xs:element>
12281255
</xs:schema>

schema/pvcollada_structure_2.0.sch

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
<!-- Pattern: Geometry-level PVCollada elements placement -->
5757
<pattern id="geometry_pvcollada_placement">
5858
<rule context="pv:terrain | pv:rack | pv:post | pv:gap |
59-
pv:inverter3d | pv:combiner3d | pv:transformer3d">
59+
pv:inverter3d | pv:combiner3d | pv:transformer3d | pv:cable3d">
6060
<assert test="parent::collada:technique/parent::collada:extra/parent::collada:geometry">
6161
Element '<name/>' must be inside geometry/extra/technique
6262
</assert>
@@ -67,18 +67,18 @@
6767
<pattern id="geometry_unique_elements">
6868
<rule context="collada:technique[@profile='PVCollada-2.0'][parent::collada:extra/parent::collada:geometry]">
6969
<assert test="count(pv:terrain | pv:rack | pv:post | pv:gap |
70-
pv:inverter3d | pv:combiner3d | pv:transformer3d) &lt;= 1">
71-
Only one terrain, rack, post, gap, inverter3d, combiner3d or transformer3d element is allowed per geometry.
70+
pv:inverter3d | pv:combiner3d | pv:transformer3d | pv:cable3d) &lt;= 1">
71+
Only one terrain, rack, post, gap, inverter3d, combiner3d, transformer3d or cable3d element is allowed per geometry.
7272
Found <value-of select="count(pv:terrain | pv:rack | pv:post | pv:gap |
73-
pv:inverter3d | pv:combiner3d | pv:transformer3d)"/> elements.
73+
pv:inverter3d | pv:combiner3d | pv:transformer3d | pv:cable3d)"/> elements.
7474
</assert>
7575
</rule>
7676
</pattern>
7777

7878
<!-- Pattern: Instance_geometry-level PVCollada elements placement -->
7979
<pattern id="instance_geometry_pvcollada_placement">
8080
<rule context="pv:instance_terrain | pv:instance_rack | pv:instance_post | pv:instance_gap |
81-
pv:instance_inverter3d | pv:instance_combiner3d | pv:instance_transformer3d">
81+
pv:instance_inverter3d | pv:instance_combiner3d | pv:instance_transformer3d | pv:instance_cable3d">
8282
<assert test="parent::collada:technique/parent::collada:extra/parent::collada:instance_geometry">
8383
Element '<name/>' must be inside instance_geometry/extra/technique
8484
</assert>
@@ -89,10 +89,10 @@
8989
<pattern id="instance_geometry_unique_elements">
9090
<rule context="collada:technique[@profile='PVCollada-2.0'][parent::collada:extra/parent::collada:instance_geometry]">
9191
<assert test="count(pv:instance_terrain | pv:instance_rack | pv:instance_post | pv:instance_gap |
92-
pv:instance_inverter3d | pv:instance_combiner3d | pv:instance_transformer3d) &lt;= 1">
93-
Only one instance_terrain, instance_rack, instance_post, instance_gap, instance_inverter3d, instance_combiner3d or instance_transformer3d element is allowed per instance_geometry.
92+
pv:instance_inverter3d | pv:instance_combiner3d | pv:instance_transformer3d | pv:instance_cable3d) &lt;= 1">
93+
Only one instance_terrain, instance_rack, instance_post, instance_gap, instance_inverter3d, instance_combiner3d, instance_transformer3d or pv:instance_cable3d element is allowed per instance_geometry.
9494
Found <value-of select="count(pv:instance_terrain | pv:instance_rack | pv:instance_post | pv:instance_gap |
95-
pv:instance_inverter3d | pv:instance_combiner3d | pv:instance_transformer3d)"/> elements.
95+
pv:instance_inverter3d | pv:instance_combiner3d | pv:instance_transformer3d | pv:instance_cable3d)"/> elements.
9696
</assert>
9797
</rule>
9898
</pattern>

0 commit comments

Comments
 (0)