blob: 930cfe228571f929e8223633bf21979e0aa41d55 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2008,2020 Silicon Labs.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:annotation>
<xs:documentation>
This schema describes the format of the XML files, that describe the ZCL specification.
(c) Copyright 2012, 2021, Silicon Laboratories Inc.
</xs:documentation>
</xs:annotation>
<xs:complexType name="access">
<xs:attribute name="op" type="xs:string"/>
<xs:attribute name="role" type="xs:string"/>
<xs:attribute name="privilege" type="xs:string"/>
<xs:attribute name="modifier" type="xs:string"/>
</xs:complexType>
<xs:complexType name="eventField">
<xs:attribute name="id" use="required" type="xs:string"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="type" use="required" type="xs:string"/>
<xs:attribute name="array" use="optional" type="xs:boolean"/>
<xs:attribute name="isNullable" use="optional" type="xs:boolean"/>
</xs:complexType>
<xs:complexType name="tag">
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="description" use="required" type="xs:string"/>
</xs:complexType>
<xs:complexType name="arg">
<xs:attribute name="arrayLength" type="xs:boolean"/>
<xs:attribute name="array" type="xs:boolean"/>
<xs:attribute name="default" type="xs:string"/>
<xs:attribute name="description" type="xs:string"/>
<xs:attribute name="introducedIn" type="zclSpecVersion"/>
<xs:attribute name="removedIn" type="zclSpecVersion"/>
<xs:attribute name="name" use="required"/>
<xs:attribute name="type" use="required"/>
<xs:attribute name="length" type="xs:int"/>
<xs:attribute name="presentIf" type="xs:string"/>
<xs:attribute name="optional" type="xs:integer"/>
<xs:attribute name="fieldId" type="xs:integer"/>
<xs:attribute name="countArg" type="xs:string" use="optional"/>
<xs:attribute name="isNullable" type="xs:boolean"/>
</xs:complexType>
<xs:complexType name="clusterRef">
<xs:attribute name="code" type="xs:string"/>
</xs:complexType>
<xs:complexType name="item">
<xs:attribute name="introducedIn" type="zclSpecVersion"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="value" type="xs:string"/>
<xs:attribute name="array" type="xs:boolean"/>
<xs:attribute name="enum" type="xs:boolean"/>
<xs:attribute name="fieldId" type="xs:integer"/>
<xs:attribute name="isNullable" type="xs:boolean"/>
</xs:complexType>
<xs:complexType name="featureBit" mixed="true">
<xs:attribute name="tag" use="required" type="xs:string"/>
<xs:attribute name="bit" use="required" type="xs:integer"/>
</xs:complexType>
<xs:element name="cli">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="group"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="command"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="defaultAccess">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="access" type="access"/>
</xs:sequence>
<xs:attribute name="type" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="operation">
<xs:complexType>
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="description" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="modifier">
<xs:complexType>
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="description" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="role">
<xs:complexType>
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="description" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="privilege" substitutionGroup="role"/>
<xs:element name="accessControl">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="operation"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="modifier"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="role"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="group">
<xs:complexType>
<xs:sequence>
<xs:element ref="description"/>
</xs:sequence>
<xs:attribute name="id" use="required" type="xs:string"/>
<xs:attribute name="name" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="zap" substitutionGroup="configurator"/>
<xs:element name="configurator">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element ref="callback"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="deviceType"/>
</xs:choice>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="atomic"/>
<xs:element ref="bitmap"/>
<xs:element ref="cluster"/>
<xs:element ref="clusterExtension"/>
<xs:element ref="enum"/>
<xs:element ref="struct"/>
<xs:element ref="domain"/>
<xs:element ref="global"/>
<xs:element ref="tag"/>
<xs:element ref="accessControl"/>
<xs:element ref="defaultAccess"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="deviceType">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="domain"/>
<xs:element ref="typeName"/>
<xs:element ref="profileId"/>
<xs:element ref="deviceId"/>
<xs:element minOccurs="0" ref="channels"/>
<xs:element ref="clusters"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="typeName" type="xs:string"/>
<xs:element name="profileId">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="editable" use="required" type="xs:boolean"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="deviceId">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="editable" use="required" type="xs:boolean"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="channels">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="channel"/>
</xs:sequence>
<xs:attribute name="editable" use="required" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="channel">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="11"/>
<xs:maxInclusive value="26"/>
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="clusters">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="include"/>
</xs:sequence>
<xs:attribute name="lockOthers" use="required" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="include">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="requireAttribute"/>
<xs:element ref="requireCommand"/>
</xs:choice>
<xs:attribute name="client" use="required" type="xs:boolean"/>
<xs:attribute name="clientLocked" use="required" type="xs:boolean"/>
<xs:attribute name="cluster"/>
<xs:attribute name="server" use="required" type="xs:boolean"/>
<xs:attribute name="serverLocked" use="required" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="requireAttribute" type="zclAttributeDefine"/>
<xs:element name="requireCommand" type="zclCommandName"/>
<xs:element name="global">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="command"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="attribute"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="atomic">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="type"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="type">
<xs:complexType>
<xs:attribute name="id" use="required" type="xs:string"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="description" use="required" type="xs:string"/>
<xs:attribute name="size" type="xs:integer"/>
<xs:attribute name="discrete" type="xs:boolean"/>
<xs:attribute name="signed" type="xs:boolean"/>
<xs:attribute name="string" type="xs:boolean"/>
<xs:attribute name="char" type="xs:boolean"/>
<xs:attribute name="long" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="bitmap">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="cluster"/>
<xs:element minOccurs="1" maxOccurs="unbounded" ref="field"/>
</xs:sequence>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="type" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="field">
<xs:complexType>
<xs:attribute name="mask" use="required" type="xs:string"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="introducedIn" type="zclSpecVersion"/>
<xs:attribute name="fieldId" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="globalAttribute">
<xs:complexType mixed="true">
<xs:choice>
<xs:element minOccurs="0" maxOccurs="unbounded" name="featureBit" type="featureBit"/>
</xs:choice>
<xs:attribute name="side" use="required" type="zclSideWithEither"/>
<xs:attribute name="code" use="required" type="xs:string"/>
<xs:attribute name="value" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="cluster">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="domain"/>
<xs:element ref="description"/>
<xs:element ref="code"/>
<xs:element ref="define"/>
<xs:element ref="client"/>
<xs:element ref="server"/>
<xs:element minOccurs="0" ref="generateCmdHandlers"/>
<xs:element minOccurs="0" maxOccurs="unbounded" name="tag" type="tag"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="globalAttribute"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="attribute"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="command"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="event"/>
</xs:sequence>
<xs:attribute name="introducedIn" type="xs:string"/>
<xs:attribute name="manufacturerCode" type="zclCode"/>
<xs:attribute name="singleton" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="code" type="zclCode"/>
<xs:element name="define" type="xs:string"/>
<xs:element name="client">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:boolean">
<xs:attribute name="init" use="required" type="xs:boolean"/>
<xs:attribute name="tick" use="required" type="xs:boolean"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="server">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:boolean">
<xs:attribute name="init" use="required" type="xs:boolean"/>
<xs:attribute name="tick" use="required" type="xs:boolean"/>
<xs:attribute name="tickFrequency" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="generateCmdHandlers" type="xs:boolean"/>
<xs:element name="clusterExtension">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="attribute"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="command"/>
</xs:sequence>
<xs:attribute name="code" use="required" type="xs:string"/>
<xs:attribute name="introducedIn" type="zclSpecVersion"/>
</xs:complexType>
</xs:element>
<xs:element name="enum">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="cluster" type="clusterRef"/>
<xs:element maxOccurs="unbounded" name="item" type="item"/>
</xs:sequence>
<xs:attribute name="description"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="type" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="struct">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="cluster" type="clusterRef"/>
<xs:element minOccurs="0" maxOccurs="unbounded" name="item" type="item"/>
</xs:sequence>
<xs:attribute name="length" type="xs:integer"/>
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="callback">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="function"/>
</xs:sequence>
<xs:attribute name="postfix" type="xs:string"/>
<xs:attribute name="prefix" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="function">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" ref="description"/>
<xs:element minOccurs="0" maxOccurs="unbounded" name="arg" type="arg"/>
<xs:element minOccurs="0" ref="codeForStub"/>
</xs:sequence>
<xs:attribute name="category" type="xs:string"/>
<xs:attribute name="cluster"/>
<xs:attribute name="consumed" type="xs:boolean"/>
<xs:attribute name="id" use="required" type="xs:string"/>
<xs:attribute name="name" use="required"/>
<xs:attribute name="platformType" type="xs:string"/>
<xs:attribute name="returnType" use="required" type="xs:string"/>
<xs:attribute name="side" type="zclSide"/>
<xs:attribute name="stackMacro"/>
</xs:complexType>
</xs:element>
<xs:element name="codeForStub" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="tag" type="tag"/>
<xs:element name="domain">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="older"/>
</xs:sequence>
<xs:attribute name="dependsOn" type="zclSpecVersion"/>
<xs:attribute name="name"/>
<xs:attribute name="spec" type="zclSpecVersion"/>
<xs:attribute name="certifiable" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="older">
<xs:complexType>
<xs:attribute name="dependsOn" use="optional" type="xs:string"/>
<xs:attribute name="spec" use="required" type="xs:string"/>
<xs:attribute name="certifiable" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="event">
<xs:complexType>
<xs:sequence>
<xs:element ref="description"/>
<xs:element minOccurs="0" maxOccurs="unbounded" name="access" type="access"/>
<xs:element minOccurs="0" maxOccurs="unbounded" name="field" type="eventField"/>
</xs:sequence>
<xs:attribute name="code" type="xs:string"/>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="side" use="required" type="zclSide"/>
<xs:attribute name="priority" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="command">
<xs:complexType>
<xs:sequence>
<xs:element ref="description"/>
<xs:element minOccurs="0" maxOccurs="unbounded" name="access" type="access"/>
<xs:element minOccurs="0" maxOccurs="unbounded" name="arg" type="arg"/>
</xs:sequence>
<xs:attribute name="cli"/>
<xs:attribute name="cliFunctionName" type="xs:string"/>
<xs:attribute name="code" type="xs:string"/>
<xs:attribute name="disableDefaultResponse" type="xs:boolean"/>
<xs:attribute name="functionName" type="xs:string"/>
<xs:attribute name="group" type="xs:string"/>
<xs:attribute name="introducedIn" type="zclSpecVersion"/>
<xs:attribute name="noDefaultImplementation" type="xs:boolean"/>
<xs:attribute name="manufacturerCode" type="xs:string"/>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="optional" type="xs:boolean"/>
<xs:attribute name="source" type="xs:string"/>
<xs:attribute name="restriction" type="xs:string"/>
<xs:attribute name="response" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="attribute">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="description"/>
<xs:element minOccurs="0" maxOccurs="unbounded" name="access" type="access"/>
</xs:sequence>
<xs:attribute name="code" use="required" type="zclCode"/>
<xs:attribute name="default"/>
<xs:attribute name="define" use="required" type="zclAttributeDefine"/>
<xs:attribute name="introducedIn" type="zclSpecVersion"/>
<xs:attribute name="length" type="xs:integer"/>
<xs:attribute name="manufacturerCode" type="zclCode"/>
<xs:attribute name="max" type="xs:anySimpleType"/>
<xs:attribute name="min" type="xs:anySimpleType"/>
<xs:attribute name="reportMaxInterval" type="xs:anySimpleType"/>
<xs:attribute name="reportMinInterval" type="xs:anySimpleType"/>
<xs:attribute name="reportableChange" type="xs:anySimpleType"/>
<xs:attribute name="optional" use="required" type="xs:boolean"/>
<xs:attribute name="side" use="required" type="zclSide"/>
<xs:attribute name="type" use="required" type="xs:string"/>
<xs:attribute name="readable" type="xs:boolean"/>
<xs:attribute name="writable" type="xs:boolean"/>
<xs:attribute name="reportable" type="xs:boolean"/>
<xs:attribute name="array" type="xs:boolean"/>
<xs:attribute name="isNullable" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="description">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="arg" type="arg"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="zclAttributeDefine">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="zclCommandName">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="zclSpecVersion">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="zclCode">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="zclSide">
<xs:restriction base="xs:string">
<xs:enumeration value="client"/>
<xs:enumeration value="server"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="zclSideWithEither">
<xs:restriction base="xs:string">
<xs:enumeration value="client"/>
<xs:enumeration value="server"/>
<xs:enumeration value="either"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="mapping">
<xs:complexType>
<xs:attribute name="code" type="xs:string"/>
<xs:attribute name="translation" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="map">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="mapping"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>