Files
destinet-xsd/schema.xsd

415 lines
16 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="https://www.destinus.com/schema/family"
targetNamespace="https://www.destinus.com/schema/family"
elementFormDefault="qualified">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="library">
<xsd:annotation><xsd:documentation>Root element for library.xml files</xsd:documentation></xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element type="ExternalLib" name="external-lib" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute type="xsd:string" name="name" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="ExternalLib">
<xsd:attribute type="xsd:string" name="name" use="required"/>
</xsd:complexType>
<xsd:element name="family">
<xsd:annotation><xsd:documentation>Root element for family definition files</xsd:documentation></xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element type="xsd:string" name="description"/>
<xsd:element name="constant-list" minOccurs="0">
<xsd:complexType>
<xsd:sequence>
<xsd:element type="Constant" name="constant" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="enum-list" minOccurs="0">
<xsd:complexType>
<xsd:sequence>
<xsd:element type="Enum" name="enum" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="bitfield-list" minOccurs="0">
<xsd:complexType>
<xsd:sequence>
<xsd:element type="Bitfield" name="bitfield" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="struct-list" minOccurs="0">
<xsd:complexType>
<xsd:sequence>
<xsd:element type="Struct" name="struct" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="message-list" minOccurs="0">
<xsd:complexType>
<xsd:sequence>
<xsd:element type="Message" name="message" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute type="xsd:string" name="name" use="required"/>
<xsd:attribute type="xsd:string" name="short" use="required"/>
<xsd:attribute type="xsd:string" name="siw-id" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="Constant">
<xsd:sequence>
<xsd:element type="xsd:string" name="description"/>
</xsd:sequence>
<xsd:attribute type="xsd:string" name="name" use="required"/>
<xsd:attribute type="Type" name="type"/>
<xsd:attribute type="xsd:string" name="value"/>
</xsd:complexType>
<xsd:complexType name="Enum">
<xsd:sequence>
<xsd:element type="xsd:string" name="description" minOccurs="0"/>
<xsd:element type="ItemList" name="item-list" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute type="xsd:string" name="name" use="required"/>
<xsd:attribute type="xsd:boolean" name="noCount"/>
</xsd:complexType>
<xsd:complexType name="Bitfield">
<xsd:sequence>
<xsd:element type="xsd:string" name="description" minOccurs="0"/>
<xsd:element type="BitfieldItemList" name="item-list" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute type="xsd:string" name="name" use="required"/>
<xsd:attribute type="xsd:int" name="size"/>
</xsd:complexType>
<xsd:complexType name="Struct">
<xsd:complexContent>
<xsd:extension base="BaseType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Message">
<xsd:complexContent>
<xsd:extension base="BaseType">
<xsd:attribute type="HexInt8" name="siw-id" use="required"/>
<xsd:attribute type="xsd:boolean" name="can"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="BaseType">
<xsd:sequence>
<xsd:choice minOccurs="1" maxOccurs="unbounded">
<xsd:element type="xsd:string" name="description" minOccurs="0"/>
<xsd:element type="Field" name="field" minOccurs="0"/>
<xsd:element type="Array" name="array" minOccurs="0"/>
<xsd:element type="Ref" name="struct-ref" minOccurs="0"/>
<xsd:element type="Vector" name="vector" minOccurs="0"/>
<xsd:element type="Status" name="status" minOccurs="0"/>
<xsd:element type="RefWithDefaultRequired" name="enum-ref" minOccurs="0"/>
<xsd:element type="RefWithDefaultOptional" name="bitfield-ref" minOccurs="0"/>
</xsd:choice>
</xsd:sequence>
<xsd:attribute type="xsd:string" name="name" use="required"/>
</xsd:complexType>
<xsd:complexType name="ItemList">
<xsd:sequence>
<xsd:element type="Item" name="item" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="BitfieldItemList">
<xsd:sequence>
<xsd:choice minOccurs="1" maxOccurs="unbounded">
<xsd:element type="Item" name="item" minOccurs="0"/>
<xsd:element type="RefWithSize" name="enum-ref" minOccurs="0"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Item">
<xsd:sequence>
<xsd:element type="xsd:string" name="description" minOccurs="0"/>
<xsd:element type="xsd:string" name="label" minOccurs="0">
<xsd:annotation>
<xsd:documentation><![CDATA[
Human readable name for this item.
]]></xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
<xsd:attribute type="xsd:string" name="name"/>
<xsd:attribute type="xsd:int" name="value"/>
<xsd:attribute type="xsd:int" name="size"/>
<xsd:attribute type="xsd:string" name="type"/>
</xsd:complexType>
<xsd:complexType name="BaseCollection">
<xsd:sequence>
<xsd:element type="xsd:string" name="description" minOccurs="0"/>
<xsd:choice>
<xsd:element type="UnnamedField" name="field"/>
<xsd:element type="UnnamedRef" name="struct-ref"/>
<xsd:element type="UnnamedRefWithDefaultRequired" name="enum-ref"/>
<xsd:element type="Status" name="status"/>
</xsd:choice>
</xsd:sequence>
<xsd:attribute type="xsd:string" name="name" use="required"/>
</xsd:complexType>
<xsd:complexType name="Array">
<xsd:complexContent>
<xsd:extension base="BaseCollection">
<xsd:choice>
<xsd:element type="UnnamedRef" name="size"/>
</xsd:choice>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="ArrayList">
<xsd:sequence>
<xsd:element type="Array" name="array" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Vector">
<xsd:complexContent>
<xsd:extension base="BaseCollection">
<xsd:choice>
<xsd:element type="UnnamedRef" name="max-size"/>
</xsd:choice>
<xsd:attribute type="xsd:boolean" name="string"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="VectorList">
<xsd:sequence>
<xsd:element type="Vector" name="vector" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="LocalRef">
<xsd:annotation>
<xsd:documentation><![CDATA[
Reference a locally defined element.
]]></xsd:documentation>
</xsd:annotation>
<xsd:attribute type="xsd:string" name="ref" use="required"/>
</xsd:complexType>
<xsd:complexType name="FamilyRef">
<xsd:annotation>
<xsd:documentation><![CDATA[
Reference an element defined in another family.
]]></xsd:documentation>
</xsd:annotation>
<xsd:attribute type="xsd:string" name="family" use="required"/>
<xsd:attribute type="xsd:string" name="ref" use="required"/>
</xsd:complexType>
<xsd:complexType name="UnnamedRef">
<xsd:sequence>
<xsd:choice>
<xsd:element type="LocalRef" name="local-ref"/>
<xsd:element type="FamilyRef" name="family-ref"/>
</xsd:choice>
<xsd:element type="xsd:string" name="description" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Ref">
<xsd:complexContent>
<xsd:extension base="UnnamedRef">
<xsd:attribute type="xsd:string" name="name" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="RefWithSize">
<xsd:complexContent>
<xsd:extension base="Ref">
<xsd:attribute type="xsd:int" name="size" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="RefWithDefaultOptional">
<xsd:sequence>
<xsd:choice>
<xsd:element type="LocalRefWithDefault" name="local-ref"/>
<xsd:element type="FamilyRefWithDefault" name="family-ref"/>
</xsd:choice>
<xsd:element type="xsd:string" name="description" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute type="xsd:string" name="name" use="required"/>
</xsd:complexType>
<xsd:complexType name="LocalRefWithDefault">
<xsd:annotation>
<xsd:documentation><![CDATA[
Reference a locally defined element.
]]></xsd:documentation>
</xsd:annotation>
<xsd:attribute type="xsd:string" name="ref" use="required"/>
<xsd:attribute type="xsd:string" name="default"/>
</xsd:complexType>
<xsd:complexType name="FamilyRefWithDefault">
<xsd:annotation>
<xsd:documentation><![CDATA[
Reference an element defined in another family.
]]></xsd:documentation>
</xsd:annotation>
<xsd:attribute type="xsd:string" name="family" use="required"/>
<xsd:attribute type="xsd:string" name="ref" use="required"/>
<xsd:attribute type="xsd:string" name="default"/>
</xsd:complexType>
<xsd:complexType name="RefWithDefaultRequired">
<xsd:sequence>
<xsd:choice>
<xsd:element type="LocalRefWithDefaultRequired" name="local-ref"/>
<xsd:element type="FamilyRefWithDefaultRequired" name="family-ref"/>
</xsd:choice>
<xsd:element type="xsd:string" name="description" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute type="xsd:string" name="name" use="required"/>
</xsd:complexType>
<xsd:complexType name="LocalRefWithDefaultRequired">
<xsd:annotation>
<xsd:documentation><![CDATA[
Reference a locally defined element.
]]></xsd:documentation>
</xsd:annotation>
<xsd:attribute type="xsd:string" name="ref" use="required"/>
<xsd:attribute type="xsd:string" name="default" use="required"/>
</xsd:complexType>
<xsd:complexType name="FamilyRefWithDefaultRequired">
<xsd:annotation>
<xsd:documentation><![CDATA[
Reference an element defined in another family.
]]></xsd:documentation>
</xsd:annotation>
<xsd:attribute type="xsd:string" name="family" use="required"/>
<xsd:attribute type="xsd:string" name="ref" use="required"/>
<xsd:attribute type="xsd:string" name="default" use="required"/>
</xsd:complexType>
<xsd:complexType name="UnnamedRefWithDefaultRequired">
<xsd:sequence>
<xsd:choice>
<xsd:element type="LocalRefWithDefaultRequired" name="local-ref"/>
<xsd:element type="FamilyRefWithDefaultRequired" name="family-ref"/>
</xsd:choice>
<xsd:element type="xsd:string" name="description" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Status">
<xsd:sequence>
<xsd:element type="xsd:string" name="description" minOccurs="0"/>
<xsd:choice>
<xsd:element type="UnnamedField" name="field" minOccurs="0"/>
<xsd:element type="UnnamedRef" name="struct-ref" minOccurs="0"/>
</xsd:choice>
</xsd:sequence>
<xsd:attribute type="xsd:string" name="name"/>
</xsd:complexType>
<xsd:complexType name="StatusList">
<xsd:sequence>
<xsd:element type="Status" name="status" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="EnumList">
<xsd:sequence>
<xsd:element type="RefWithDefaultRequired" name="enum-ref" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="StructList">
<xsd:sequence>
<xsd:element type="Ref" name="struct-ref" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="BitfieldList">
<xsd:sequence>
<xsd:element type="RefWithDefaultOptional" name="bitfield-ref" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="UnnamedField">
<xsd:sequence>
<xsd:element type="xsd:string" name="description" minOccurs="0"/>
<xsd:element type="UnnamedRef" name="default-ref" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute type="Type" name="type" use="required"/>
<xsd:attribute type="xsd:string" name="unit"/>
</xsd:complexType>
<xsd:complexType name="Field">
<xsd:complexContent>
<xsd:extension base="UnnamedField">
<xsd:attribute type="xsd:string" name="name" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:simpleType name="Type">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="bool"/>
<xsd:enumeration value="int8"/>
<xsd:enumeration value="uint8"/>
<xsd:enumeration value="int16"/>
<xsd:enumeration value="uint16"/>
<xsd:enumeration value="int32"/>
<xsd:enumeration value="uint32"/>
<xsd:enumeration value="int64"/>
<xsd:enumeration value="uint64"/>
<xsd:enumeration value="float"/>
<xsd:enumeration value="double"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="HexInt8">
<xsd:restriction base="xsd:string">
<xsd:pattern value="0x[0-9A-Fa-f]{2}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="FieldList">
<xsd:sequence>
<xsd:element type="Field" name="field" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>