<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
    xmlns:ssv="http://ssp-standard.org/SSP1/SystemStructureParameterValues"
    xmlns:ssc="http://ssp-standard.org/SSP1/SystemStructureCommon"
    targetNamespace="http://ssp-standard.org/SSP1/SystemStructureParameterValues">
    <xs:annotation>
        <xs:documentation xml:lang="en">
            This is the normative XML Schema 1.0 schema for the MAP SSP
            SystemStructureParameterValues 2.0 format.
                        
            Version: 2.0

            Copyright 2016 -- 2024 Modelica Association Project "SSP"

            Redistribution and use in source and binary forms, with or
            without modification, are permitted provided that the
            following conditions are met:

            1. Redistributions of source code must retain the above
               copyright notice, this list of conditions and the
               following disclaimer.

            2. Redistributions in binary form must reproduce the above
               copyright notice, this list of conditions and the
               following disclaimer in the documentation and/or other
               materials provided with the distribution.

            THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
            CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
            INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
            MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
            DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
            CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
            INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
            (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
            GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
            BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
            LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
            OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
            POSSIBILITY OF SUCH DAMAGE.
        </xs:documentation>
    </xs:annotation>
    
    <xs:import namespace="http://ssp-standard.org/SSP1/SystemStructureCommon" schemaLocation="SystemStructureCommon.xsd"/>
    
    <xs:element name="ParameterSet">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Parameters" type="ssv:TParameters"/>
                <xs:element name="Enumerations" minOccurs="0" type="ssc:TEnumerations"/>
                <xs:element name="Units" minOccurs="0" type="ssc:TUnits"/>
                <xs:group ref="ssc:GMetaData"/>
                <xs:group ref="ssc:GSignature"/>
                <xs:element name="Annotations" minOccurs="0" type="ssc:TAnnotations"/>
            </xs:sequence>
            <xs:attribute name="version" use="required">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        Version of SSV format, 1.0 or 2.0 for this release.
                    </xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:normalizedString">
                        <xs:pattern value="1[.]0"/>
                        <xs:pattern value="2[.]0"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
            <xs:attributeGroup ref="ssc:ABaseElement"/>
            <xs:attribute name="name" type="xs:string" use="required">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        Name of the Parameter Set.
                    </xs:documentation>
                </xs:annotation>
            </xs:attribute>
            <xs:attributeGroup ref="ssc:ATopLevelMetaData"/>
        </xs:complexType>
    </xs:element>
        
    <xs:complexType name="TParameters">
        <xs:sequence>
            <xs:element name="Parameter" minOccurs="0" maxOccurs="unbounded" type="ssv:TParameter"/>
        </xs:sequence>
    </xs:complexType>
        
    <xs:complexType name="TParameter">
        <xs:sequence>
            <xs:choice>
                <xs:element name="Real">
                    <xs:complexType>
                        <xs:attribute name="value" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value(s) of the parameter. Array
                                    values are serialized in row-major order, as defined in FMI.
                                </xs:documentation>
                            </xs:annotation>
                            <xs:simpleType>
                                <xs:list itemType="xs:double"/>
                            </xs:simpleType>
                        </xs:attribute>
                        <xs:attribute name="unit" type="xs:string" use="optional">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the unit of the parameter value and must
                                    reference one of the unit definitions provided in the Units
                                    element of the enclosing file.
                                </xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Float64">
                    <xs:complexType>
                        <xs:attribute name="value" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value(s) of the parameter. Array
                                    values are serialized in row-major order, as defined in FMI.
                                </xs:documentation>
                            </xs:annotation>
                            <xs:simpleType>
                                <xs:list itemType="xs:double"/>
                            </xs:simpleType>
                        </xs:attribute>
                        <xs:attribute name="unit" type="xs:string" use="optional">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the unit of the parameter value and must
                                    reference one of the unit definitions provided in the Units
                                    element of the enclosing file.
                                </xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Float32">
                    <xs:complexType>
                        <xs:attribute name="value" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value(s) of the parameter. Array
                                    values are serialized in row-major order, as defined in FMI.
                                </xs:documentation>
                            </xs:annotation>
                            <xs:simpleType>
                                <xs:list itemType="xs:float"/>
                            </xs:simpleType>
                        </xs:attribute>
                        <xs:attribute name="unit" type="xs:string" use="optional">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the unit of the parameter value and must
                                    reference one of the unit definitions provided in the Units
                                    element of the enclosing file.
                                </xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Integer">
                    <xs:complexType>
                        <xs:attribute name="value" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value(s) of the parameter. Array
                                    values are serialized in row-major order, as defined in FMI.
                                </xs:documentation>
                            </xs:annotation>
                            <xs:simpleType>
                                <xs:list itemType="xs:int"/>
                            </xs:simpleType>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Int8">
                    <xs:complexType>
                        <xs:attribute name="value" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value(s) of the parameter. Array
                                    values are serialized in row-major order, as defined in FMI.
                                </xs:documentation>
                            </xs:annotation>
                            <xs:simpleType>
                                <xs:list itemType="xs:byte"/>
                            </xs:simpleType>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="UInt8">
                    <xs:complexType>
                        <xs:attribute name="value" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value(s) of the parameter. Array
                                    values are serialized in row-major order, as defined in FMI.
                                </xs:documentation>
                            </xs:annotation>
                            <xs:simpleType>
                                <xs:list itemType="xs:unsignedByte"/>
                            </xs:simpleType>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Int16">
                    <xs:complexType>
                        <xs:attribute name="value" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value(s) of the parameter. Array
                                    values are serialized in row-major order, as defined in FMI.
                                </xs:documentation>
                            </xs:annotation>
                            <xs:simpleType>
                                <xs:list itemType="xs:short"/>
                            </xs:simpleType>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="UInt16">
                    <xs:complexType>
                        <xs:attribute name="value" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value(s) of the parameter. Array
                                    values are serialized in row-major order, as defined in FMI.
                                </xs:documentation>
                            </xs:annotation>
                            <xs:simpleType>
                                <xs:list itemType="xs:unsignedShort"/>
                            </xs:simpleType>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Int32">
                    <xs:complexType>
                        <xs:attribute name="value" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value(s) of the parameter. Array
                                    values are serialized in row-major order, as defined in FMI.
                                </xs:documentation>
                            </xs:annotation>
                            <xs:simpleType>
                                <xs:list itemType="xs:int"/>
                            </xs:simpleType>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="UInt32">
                    <xs:complexType>
                        <xs:attribute name="value" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value(s) of the parameter. Array
                                    values are serialized in row-major order, as defined in FMI.
                                </xs:documentation>
                            </xs:annotation>
                            <xs:simpleType>
                                <xs:list itemType="xs:unsignedInt"/>
                            </xs:simpleType>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Int64">
                    <xs:complexType>
                        <xs:attribute name="value" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value(s) of the parameter. Array
                                    values are serialized in row-major order, as defined in FMI.
                                </xs:documentation>
                            </xs:annotation>
                            <xs:simpleType>
                                <xs:list itemType="xs:long"/>
                            </xs:simpleType>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="UInt64">
                    <xs:complexType>
                        <xs:attribute name="value" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value(s) of the parameter. Array
                                    values are serialized in row-major order, as defined in FMI.
                                </xs:documentation>
                            </xs:annotation>
                            <xs:simpleType>
                                <xs:list itemType="xs:unsignedLong"/>
                            </xs:simpleType>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Boolean">
                    <xs:complexType>
                        <xs:attribute name="value" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value(s) of the parameter. Array
                                    values are serialized in row-major order, as defined in FMI.
                                </xs:documentation>
                            </xs:annotation>
                            <xs:simpleType>
                                <xs:list itemType="xs:boolean"/>
                            </xs:simpleType>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="String">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Value" minOccurs="0" maxOccurs="unbounded">
                                <xs:annotation>
                                    <xs:documentation xml:lang="en">
                                        This element gives the value for one array element of the
                                        parameter. If any Value element is present, then the value
                                        attribute on the parent element MUST NOT be used.
                                        Array values are serialized in row-major order, as defined
                                        in FMI.
                                    </xs:documentation>
                                </xs:annotation>
                                <xs:complexType>
                                    <xs:attribute name="value" type="xs:string" use="required"/>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="value" type="xs:string">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value of the parameter, if it is a
                                    scalar parameter. For array parameters requiring more than
                                    one element, Value elements MUST be used. For scalar and one
                                    element array parameters the Value element CAN be used. In
                                    either case, if Value elements are used, then this value
                                    attribute MUST NOT be present.
                                </xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Enumeration">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Value" minOccurs="0" maxOccurs="unbounded">
                                <xs:annotation>
                                    <xs:documentation xml:lang="en">
                                        This element gives the value for one array element
                                        of the parameter as the enumeration item name.
                                        If any Value element is present, then the value
                                        attribute on the parent element MUST NOT be used.
                                        Note that the actual numeric value this value is
                                        mapped to at run time will depend on the item mapping
                                        of the enumeration type of the variables being
                                        parameterized.
                                        Array values are serialized in row-major order, as defined
                                        in FMI.
                                    </xs:documentation>
                                </xs:annotation>
                                <xs:complexType>
                                    <xs:attribute name="value" type="xs:string" use="required"/>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="value" type="xs:string">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value of the parameter as the
                                    enumeration item name, if it is a scalar parameter. For
                                    array parameters requiring more than one element, Value
                                    elements MUST be used. For scalar and one element array
                                    parameters the Value element CAN be used. In either case,
                                    if Value elements are used, then this value attribute MUST
                                    NOT be present.
                                    Note that the actual numeric value this value is mapped to
                                    at run time will depend on the item mapping of the enumeration
                                    type of the variables being parameterized.
                                </xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                        <xs:attribute name="name" type="xs:string" use="optional">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute specifies the name of the enumeration
                                    which references into the set of defined enumerations
                                    of the system structure description, as contained in
                                    the Enumerations element of the root element.
                                    
                                    This attribute is optional; if it is not specified, then
                                    the list of valid enumeration items with their names and
                                    values is not specified, and the interpretation of the
                                    enumeration value is left solely to the variables that
                                    are being parameterized.
                                    
                                    If the attribute is specified, implementations MAY use
                                    that information for user interface purposes, and/or
                                    for additional consistency checking. 
                                </xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Binary">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Value" minOccurs="0" maxOccurs="unbounded">
                                <xs:annotation>
                                    <xs:documentation xml:lang="en">
                                        This element gives the value for one array element of the
                                        parameter. If any Value element is present, then the value
                                        attribute on the parent element MUST NOT be used.
                                        Array values are serialized in row-major order, as defined
                                        in FMI.
                                    </xs:documentation>
                                </xs:annotation>
                                <xs:complexType>
                                    <xs:attribute name="value" type="xs:hexBinary" use="required"/>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="mime-type" type="xs:string" default="application/octet-stream">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This optional attribute specifies the MIME type of the
                                    underlying binary data, which defaults to the non-specific
                                    application/octet-stream type.  This information can be
                                    used by the implementation to detect mismatches between
                                    binary parameters, or provide automatic conversions
                                    between different formats.  It should be noted that the
                                    implementation is not required to provide this service,
                                    i.e. it remains the responsibility of the operator to
                                    ensure only compatible binary connectors/parameters are
                                    connected.
                                </xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                        <xs:attribute name="value" type="xs:hexBinary">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value of the parameter as a hex
                                    encoded binary value, if it is a scalar parameter. For
                                    array parameters requiring more than one element, Value
                                    elements MUST be used. For scalar and one element array
                                    parameters the Value element CAN be used. In either case,
                                    if Value elements are used, then this value attribute MUST
                                    NOT be present.
                                </xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
            </xs:choice>
            <xs:group ref="ssc:GDimensions">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        This optional sequence of elements specifies the dimensions of
                        an array parameter.  If no dimension elements are present in a
                        parameter, it is a scalar parameter. The number of dimension
                        elements in a parameter provides the dimensionality of the
                        parameter.
                    </xs:documentation>
                </xs:annotation>
            </xs:group>
            <xs:element name="Annotations" minOccurs="0" type="ssc:TAnnotations"/>
        </xs:sequence>
        <xs:attributeGroup ref="ssc:ABaseElement"/>
        <xs:attribute name="name" type="xs:string" use="required">
            <xs:annotation>
                <xs:documentation xml:lang="en">
                    This attribute specifies the name of the parameter in the parameter set,
                    which must be unique within in the parameter set.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>
     
</xs:schema>
