<?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 1.0 format.
                        
            Version: 1.0

            Copyright 2016 -- 2019 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: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 for this release.
                    </xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:normalizedString">
                        <xs:pattern value="1[.][0-9]+(-.*)?"/>
                    </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" type="xs:double" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value of the parameter.
                                </xs:documentation>
                            </xs:annotation>
                        </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" type="xs:int" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value of the parameter.
                                </xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Boolean">
                    <xs:complexType>
                        <xs:attribute name="value" type="xs:boolean" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value of the parameter.
                                </xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="String">
                    <xs:complexType>
                        <xs:attribute name="value" type="xs:string" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value of the parameter.
                                </xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Enumeration">
                    <xs:complexType>
                        <xs:attribute name="value" type="xs:string" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value of the parameter as 
                                    the enumeration item name.  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: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" use="required">
                            <xs:annotation>
                                <xs:documentation xml:lang="en">
                                    This attribute gives the value of the parameter as a
                                    hex encoded binary value.
                                </xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
            </xs:choice>
            <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>
