Skip to content

Commit

Permalink
Use inheritance for TypeDefinitions and Unknowns (modelica#591)
Browse files Browse the repository at this point in the history
t-sommer authored and chrbertsch committed Jul 5, 2019

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent eb64fb3 commit c805050
Showing 12 changed files with 242 additions and 221 deletions.
3 changes: 2 additions & 1 deletion .circleci/validate_xml.py
Original file line number Diff line number Diff line change
@@ -12,7 +12,8 @@
'model_structure_example2.xml',
'model_structure_example3.xml',
'model_exchange.xml',
'unit_definition.xml'
'unit_definition.xml',
'variable_types.xml',
]

for xml_file in xml_files:
28 changes: 8 additions & 20 deletions docs/examples/co_simulation.xml
Original file line number Diff line number Diff line change
@@ -24,18 +24,10 @@
</Unit>
</UnitDefinitions>
<TypeDefinitions>
<SimpleType name="Modelica.SIunits.Inertia">
<Float64 quantity="MomentOfInertia" unit="kg.m2" min="0.0"/>
</SimpleType>
<SimpleType name="Modelica.SIunits.Torque">
<Float64 quantity="Torque" unit="N.m"/>
</SimpleType>
<SimpleType name="Modelica.SIunits.AngularVelocity">
<Float64 quantity="AngularVelocity" unit="rad/s"/>
</SimpleType>
<SimpleType name="Modelica.SIunits.Angle">
<Float64 quantity="Angle" unit="rad"/>
</SimpleType>
<Float64 name="Modelica.SIunits.Inertia" quantity="MomentOfInertia" unit="kg.m2" min="0.0"/>
<Float64 name="Modelica.SIunits.Torque" quantity="Torque" unit="N.m"/>
<Float64 name="Modelica.SIunits.AngularVelocity" quantity="AngularVelocity" unit="rad/s"/>
<Float64 name="Modelica.SIunits.Angle" quantity="Angle" unit="rad"/>
</TypeDefinitions>
<DefaultExperiment startTime="0.0" stopTime="3.0" tolerance="0.0001"/>
<ModelVariables>
@@ -53,13 +45,9 @@
declaredType="Modelica.SIunits.AngularVelocity"/>
</ModelVariables>
<ModelStructure>
<Outputs>
<Unknown valueReference="805306368"/>
<Unknown valueReference="805306369"/>
</Outputs>
<InitialUnknowns>
<Unknown valueReference="805306368"/>
<Unknown valueReference="805306369"/>
</InitialUnknowns>
<Output valueReference="805306368"/>
<Output valueReference="805306369"/>
<InitialUnknown valueReference="805306368"/>
<InitialUnknown valueReference="805306369"/>
</ModelStructure>
</fmiModelDescription>
38 changes: 12 additions & 26 deletions docs/examples/model_exchange.xml
Original file line number Diff line number Diff line change
@@ -21,18 +21,10 @@
</Unit>
</UnitDefinitions>
<TypeDefinitions>
<SimpleType name="Modelica.SIunits.Inertia">
<Float64 quantity="MomentOfInertia" unit="kg.m2" min="0.0"/>
</SimpleType>
<SimpleType name="Modelica.SIunits.Torque">
<Float64 quantity="Torque" unit="N.m"/>
</SimpleType>
<SimpleType name="Modelica.SIunits.AngularVelocity">
<Float64 quantity="AngularVelocity" unit="rad/s"/>
</SimpleType>
<SimpleType name="Modelica.SIunits.Angle">
<Float64 quantity="Angle" unit="rad"/>
</SimpleType>
<Float64 name="Modelica.SIunits.Inertia" quantity="MomentOfInertia" unit="kg.m2" min="0.0"/>
<Float64 name="Modelica.SIunits.Torque" quantity="Torque" unit="N.m"/>
<Float64 name="Modelica.SIunits.AngularVelocity" quantity="AngularVelocity" unit="rad/s"/>
<Float64 name="Modelica.SIunits.Angle" quantity="Angle" unit="rad"/>
</TypeDefinitions>
<DefaultExperiment startTime="0.0" stopTime="3.0" tolerance="0.0001"/>
<ModelVariables>
@@ -54,19 +46,13 @@
<Float64 name="der(x[2])" valueReference="3" derivative="1"/>
</ModelVariables>
<ModelStructure>
<Outputs>
<Unknown valueReference="805306368"/>
<Unknown valueReference="805306369"/>
</Outputs>
<Derivatives>
<Unknown valueReference="2"/>
<Unknown valueReference="3"/>
</Derivatives>
<InitialUnknowns>
<Unknown valueReference="805306368"/>
<Unknown valueReference="805306369"/>
<Unknown valueReference="2" dependencies="0 536870912"/>
<Unknown valueReference="3" dependencies="0 1"/>
</InitialUnknowns>
<Output valueReference="805306368"/>
<Output valueReference="805306369"/>
<Derivative valueReference="2"/>
<Derivative valueReference="3"/>
<InitialUnknown valueReference="805306368"/>
<InitialUnknown valueReference="805306369"/>
<InitialUnknown valueReference="2" dependencies="0 536870912"/>
<InitialUnknown valueReference="3" dependencies="0 1"/>
</ModelStructure>
</fmiModelDescription>
22 changes: 8 additions & 14 deletions docs/examples/model_structure_example1.xml
Original file line number Diff line number Diff line change
@@ -20,20 +20,14 @@
<Float64 name="y" valueReference="11"/>
</ModelVariables>
<ModelStructure>
<Outputs>
<Unknown valueReference="11" dependencies="6 7"/>
</Outputs>
<Derivatives>
<Unknown valueReference="8" dependencies="6"/>
<Unknown valueReference="9" dependencies="2 4 5 6" dependenciesKind="constant constant dependent fixed"/>
<Unknown valueReference="10" dependencies="2 3 4 5 6" />
</Derivatives>
<InitialUnknowns>
<Unknown valueReference="6" dependencies="2 4 5"/>
<Unknown valueReference="7" dependencies="2 4 5 11"/>
<Unknown valueReference="8"/>
<Unknown valueReference="10"/>
</InitialUnknowns>
<Output valueReference="11" dependencies="6 7"/>
<Derivative valueReference="8" dependencies="6"/>
<Derivative valueReference="9" dependencies="2 4 5 6" dependenciesKind="constant constant dependent fixed"/>
<Derivative valueReference="10" dependencies="2 3 4 5 6" />
<InitialUnknown valueReference="6" dependencies="2 4 5"/>
<InitialUnknown valueReference="7" dependencies="2 4 5 11"/>
<InitialUnknown valueReference="8"/>
<InitialUnknown valueReference="10"/>
</ModelStructure>
<!-- end::VariablesAndStructure[] -->
</fmiModelDescription>
4 changes: 1 addition & 3 deletions docs/examples/model_structure_example2.xml
Original file line number Diff line number Diff line change
@@ -11,9 +11,7 @@
</ModelVariables>
<!-- tag::ModelStructure[] -->
<ModelStructure>
<Outputs>
<Unknown valueReference="2" dependencies="1" dependenciesKind="discrete"/>
</Outputs>
<Output valueReference="2" dependencies="1" dependenciesKind="discrete"/>
</ModelStructure>
<!-- end::ModelStructure[] -->
</fmiModelDescription>
4 changes: 1 addition & 3 deletions docs/examples/model_structure_example3.xml
Original file line number Diff line number Diff line change
@@ -11,9 +11,7 @@
</ModelVariables>
<!-- tag::ModelStructure[] -->
<ModelStructure>
<Outputs>
<Unknown valueReference="2" dependencies="1" dependenciesKind="dependent"/>
</Outputs>
<Output valueReference="2" dependencies="1" dependenciesKind="dependent"/>
</ModelStructure>
<!-- end::ModelStructure[] -->
</fmiModelDescription>
3 changes: 1 addition & 2 deletions docs/examples/unit_definition.xml
Original file line number Diff line number Diff line change
@@ -25,6 +25,5 @@
<ModelVariables>
<Float64 name="u" valueReference= "1"/>
</ModelVariables>
<ModelStructure>
</ModelStructure>
<ModelStructure/>
</fmiModelDescription>
53 changes: 53 additions & 0 deletions docs/examples/variable_types.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<fmiModelDescription fmiVersion="3.0-alpha" modelName="VariableTypes" instantiationToken="">

<CoSimulation modelIdentifier="VariableTypes"/>

<ModelVariables>
<Float32 name="Float32" valueReference="1" start="-INF -3.402823e+38 -1.175494e-38 NaN 1.175494e-38 3.402823e+38 INF">
<Dimension start="7"/>
</Float32>
<Float64 name="Float64" valueReference="2" start="-INF -1.79769e+308 -2.22507e-308 NaN 2.22507e-308 1.79769e+308 INF">
<Dimension start="7"/>
</Float64>
<Int8 name="Int8" valueReference="3" start="-128 127">
<Dimension start="2"/>
</Int8>
<UInt8 name="UInt8" valueReference="4" start="0 255">
<Dimension start="2"/>
</UInt8>
<Int16 name="Int16" valueReference="5" start="-32768 32767">
<Dimension start="2"/>
</Int16>
<UInt16 name="UInt16" valueReference="6" start="0 65535">
<Dimension start="2"/>
</UInt16>
<Int32 name="Int32" valueReference="7" start="-2147483648 2147483647">
<Dimension start="2"/>
</Int32>
<UInt32 name="UInt32" valueReference="8" start="0 4294967295">
<Dimension start="2"/>
</UInt32>
<Int64 name="Int64" valueReference="9" start="-9223372036854775808 9223372036854775807">
<Dimension start="2"/>
</Int64>
<UInt64 name="UInt64" valueReference="10" start="0 18446744073709551615">
<Dimension start="2"/>
</UInt64>
<Boolean name="Boolean" valueReference="11" start="true false 1 0">
<Dimension start="2"/>
<Dimension start="2"/>
</Boolean>
<String name="String" valueReference="12">
<Dimension start="2"/>
<Start value="foo"/>
<Start value="bar"/>
</String>
<Binary name="Binary" valueReference="13" maxSize="28" start="3c3f 686572">
<Dimension start="2"/>
</Binary>
</ModelVariables>

<ModelStructure/>

</fmiModelDescription>
42 changes: 4 additions & 38 deletions schema/fmi3ModelDescription.xsd
Original file line number Diff line number Diff line change
@@ -109,9 +109,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</xs:element>
<xs:element name="TypeDefinitions" minOccurs="0">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="SimpleType" type="fmi3SimpleType"/>
</xs:sequence>
<xs:group ref="fmi3TypeDefintion" maxOccurs="unbounded"/>
</xs:complexType>
</xs:element>
<xs:element name="LogCategories" minOccurs="0">
@@ -144,41 +142,9 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<xs:element name="ModelStructure">
<xs:complexType>
<xs:sequence>
<xs:element name="Outputs" type="fmi3VariableDependency" minOccurs="0">
</xs:element>
<xs:element name="Derivatives" type="fmi3VariableDependency" minOccurs="0">
</xs:element>
<xs:element name="InitialUnknowns" minOccurs="0">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="Unknown">
<xs:complexType>
<xs:attribute name="valueReference" type="xs:unsignedInt" use="required"/>
<xs:attribute name="dependencies">
<xs:simpleType>
<xs:list itemType="xs:unsignedInt"/>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="dependenciesKind">
<xs:simpleType>
<xs:list>
<xs:simpleType>
<xs:restriction base="xs:normalizedString">
<xs:enumeration value="dependent"/>
<xs:enumeration value="constant"/>
<xs:enumeration value="fixed"/>
<xs:enumeration value="tunable"/>
<xs:enumeration value="discrete"/>
</xs:restriction>
</xs:simpleType>
</xs:list>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Output" type="fmi3Unknown" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="Derivative" type="fmi3Unknown" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="InitialUnknown" type="fmi3Unknown" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="NumberOfEventIndicators" minOccurs="0">
<xs:complexType>
<xs:attribute name="dependencies" use="required">
204 changes: 127 additions & 77 deletions schema/fmi3Type.xsd
Original file line number Diff line number Diff line change
@@ -35,84 +35,134 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----------------------------------------------------------------------------
</xs:documentation>
</xs:annotation>
<xs:complexType name="fmi3SimpleType">
<xs:sequence>
<xs:choice>
<xs:element name="Float64">
<xs:complexType>
<xs:attributeGroup ref="fmi3Float64Attributes"/>
</xs:complexType>
</xs:element>
<xs:element name="Float32">
<xs:complexType>
<xs:attributeGroup ref="fmi3Float32Attributes"/>
</xs:complexType>
</xs:element>
<xs:element name="Int8">
<xs:complexType>
<xs:attributeGroup ref="fmi3Int8Attributes"/>
</xs:complexType>
</xs:element>
<xs:element name="UInt8">
<xs:complexType>
<xs:attributeGroup ref="fmi3UInt8Attributes"/>
</xs:complexType>
</xs:element>
<xs:element name="Int16">
<xs:complexType>
<xs:attributeGroup ref="fmi3Int16Attributes"/>
</xs:complexType>
</xs:element>
<xs:element name="UInt16">
<xs:complexType>
<xs:attributeGroup ref="fmi3UInt16Attributes"/>
</xs:complexType>
</xs:element>
<xs:element name="Int32">
<xs:complexType>
<xs:attributeGroup ref="fmi3Int32Attributes"/>
</xs:complexType>
</xs:element>
<xs:element name="UInt32">
<xs:complexType>
<xs:attributeGroup ref="fmi3UInt32Attributes"/>
</xs:complexType>
</xs:element>
<xs:element name="Int64">
<xs:complexType>
<xs:attributeGroup ref="fmi3Int64Attributes"/>
</xs:complexType>
</xs:element>
<xs:element name="UInt64">
<xs:complexType>
<xs:attributeGroup ref="fmi3UInt64Attributes"/>
</xs:complexType>
</xs:element>
<xs:element name="Boolean"/>
<xs:element name="String"/>
<xs:element name="Binary">
<xs:complexType>
<xs:attribute name="mimeType" type="xs:normalizedString" use="optional" default="application/octet-stream"/>
<xs:attribute name="maxSize" type="xs:nonNegativeInteger" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="Enumeration">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="Item">
<xs:complexType>
<xs:attribute name="name" type="xs:normalizedString" use="required"/>
<xs:attribute name="value" type="xs:int" use="required"/>
<xs:attribute name="description" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="quantity" type="xs:normalizedString"/>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:sequence>

<xs:complexType name="fmi3TypeDefintionBase" abstract="true">
<xs:attribute name="name" type="xs:normalizedString" use="required"/>
<xs:attribute name="description" type="xs:string"/>
</xs:complexType>

<xs:group name="fmi3TypeDefintion">
<xs:choice>
<xs:element name="Float32">
<xs:complexType>
<xs:complexContent>
<xs:extension base="fmi3TypeDefintionBase">
<xs:attributeGroup ref="fmi3Float32Attributes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Float64">
<xs:complexType>
<xs:complexContent>
<xs:extension base="fmi3TypeDefintionBase">
<xs:attributeGroup ref="fmi3Float64Attributes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Int8">
<xs:complexType>
<xs:complexContent>
<xs:extension base="fmi3TypeDefintionBase">
<xs:attributeGroup ref="fmi3Int8Attributes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="UInt8">
<xs:complexType>
<xs:complexContent>
<xs:extension base="fmi3TypeDefintionBase">
<xs:attributeGroup ref="fmi3UInt8Attributes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Int16">
<xs:complexType>
<xs:complexContent>
<xs:extension base="fmi3TypeDefintionBase">
<xs:attributeGroup ref="fmi3Int16Attributes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="UInt16">
<xs:complexType>
<xs:complexContent>
<xs:extension base="fmi3TypeDefintionBase">
<xs:attributeGroup ref="fmi3UInt16Attributes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Int32">
<xs:complexType>
<xs:complexContent>
<xs:extension base="fmi3TypeDefintionBase">
<xs:attributeGroup ref="fmi3Int32Attributes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="UInt32">
<xs:complexType>
<xs:complexContent>
<xs:extension base="fmi3TypeDefintionBase">
<xs:attributeGroup ref="fmi3UInt32Attributes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Int64">
<xs:complexType>
<xs:complexContent>
<xs:extension base="fmi3TypeDefintionBase">
<xs:attributeGroup ref="fmi3Int64Attributes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="UInt64">
<xs:complexType>
<xs:complexContent>
<xs:extension base="fmi3TypeDefintionBase">
<xs:attributeGroup ref="fmi3UInt64Attributes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Boolean" type="fmi3TypeDefintionBase"/>
<xs:element name="String" type="fmi3TypeDefintionBase"/>
<xs:element name="Binary">
<xs:complexType>
<xs:complexContent>
<xs:extension base="fmi3TypeDefintionBase">
<xs:attribute name="mimeType" type="xs:normalizedString" use="optional" default="application/octet-stream"/>
<xs:attribute name="maxSize" type="xs:nonNegativeInteger" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Enumeration">
<xs:complexType>
<xs:complexContent>
<xs:extension base="fmi3TypeDefintionBase">
<xs:sequence maxOccurs="unbounded">
<xs:element name="Item">
<xs:complexType>
<xs:attribute name="name" type="xs:normalizedString" use="required"/>
<xs:attribute name="value" type="xs:int" use="required"/>
<xs:attribute name="description" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="quantity" type="xs:normalizedString"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:group>
</xs:schema>
12 changes: 3 additions & 9 deletions schema/fmi3Variable.xsd
Original file line number Diff line number Diff line change
@@ -271,16 +271,10 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</xs:complexType>
<xs:complexType name="fmi3VariableBase" abstract="true">
<xs:sequence>
<xs:element name="Dimensions" minOccurs="0">
<xs:element name="Dimension" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="Dimension">
<xs:complexType>
<xs:attribute name="start" type="xs:unsignedInt"/>
<xs:attribute name="valueReference" type="xs:unsignedInt"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="start" type="xs:unsignedInt"/>
<xs:attribute name="valueReference" type="xs:unsignedInt"/>
</xs:complexType>
</xs:element>
<xs:element name="Annotations" type="fmi3Annotation" minOccurs="0"/>
50 changes: 22 additions & 28 deletions schema/fmi3VariableDependency.xsd
Original file line number Diff line number Diff line change
@@ -34,33 +34,27 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
----------------------------------------------------------------------------
</xs:documentation>
</xs:annotation>
<xs:complexType name="fmi3VariableDependency">
<xs:sequence maxOccurs="unbounded">
<xs:element name="Unknown">
<xs:complexType>
<xs:attribute name="valueReference" type="xs:unsignedInt" use="required"/>
<xs:attribute name="dependencies">
<xs:simpleType>
<xs:list itemType="xs:unsignedInt"/>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="dependenciesKind">
<xs:simpleType>
<xs:list>
<xs:simpleType>
<xs:restriction base="xs:normalizedString">
<xs:enumeration value="dependent"/>
<xs:enumeration value="constant"/>
<xs:enumeration value="fixed"/>
<xs:enumeration value="tunable"/>
<xs:enumeration value="discrete"/>
</xs:restriction>
</xs:simpleType>
</xs:list>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:complexType name="fmi3Unknown">
<xs:attribute name="valueReference" type="xs:unsignedInt" use="required"/>
<xs:attribute name="dependencies">
<xs:simpleType>
<xs:list itemType="xs:unsignedInt"/>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="dependenciesKind">
<xs:simpleType>
<xs:list>
<xs:simpleType>
<xs:restriction base="xs:normalizedString">
<xs:enumeration value="dependent"/>
<xs:enumeration value="constant"/>
<xs:enumeration value="fixed"/>
<xs:enumeration value="tunable"/>
<xs:enumeration value="discrete"/>
</xs:restriction>
</xs:simpleType>
</xs:list>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:schema>

0 comments on commit c805050

Please sign in to comment.