Nyx Node
Loading...
Searching...
No Matches
XML validation

Functions

bool nyx_validation_initialize ()
 Initialize the XML validation subsystem.
 
bool nyx_validation_finalize ()
 Initialize the XML validation subsystem.
 
bool nyx_validation_check (__NULLABLE__ const nyx_xmldoc_t *xmldoc)
 Validate the provided XML command using the XSD schema extended with INDI and Nyx additions.
 

Detailed Description

XML validation for Nyx / INDI commands.

Function Documentation

◆ nyx_validation_check()

bool nyx_validation_check ( __NULLABLE__ const nyx_xmldoc_t * xmldoc)

Validate the provided XML command using the XSD schema extended with INDI and Nyx additions.

Parameters
xmldocThe provided XML document.
Returns
True if the document is valid, and false if not.
<?xml version="1.0" encoding="UTF-8"?>
<!--
NyxNode
Author: Jérôme ODIER <jerome.odier@lpsc.in2p3.fr>
SPDX-License-Identifier: GPL-2.0-only (Mongoose backend) or GPL-3.0+
-->
<!--suppress XmlDefaultAttributeValue -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<!-- ************************************************************************************************************* -->
<xs:simpleType name="propertyState">
<xs:restriction base="xs:token">
<xs:enumeration value="Idle"/>
<xs:enumeration value="Ok"/>
<xs:enumeration value="Busy"/>
<xs:enumeration value="Alert"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="propertyPerm">
<xs:restriction base="xs:token">
<xs:enumeration value="ro"/>
<xs:enumeration value="wo"/>
<xs:enumeration value="rw"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="switchRule">
<xs:restriction base="xs:token">
<xs:enumeration value="OneOfMany"/>
<xs:enumeration value="AtMostOne"/>
<xs:enumeration value="AnyOfMany"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="blobEnable">
<xs:restriction base="xs:token">
<xs:enumeration value="Never"/>
<xs:enumeration value="Also"/>
<xs:enumeration value="Only"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="streamEnable">
<xs:restriction base="xs:token">
<xs:enumeration value="Never"/>
<xs:enumeration value="Also"/>
<xs:enumeration value="Only"/>
</xs:restriction>
</xs:simpleType>
<!-- ************************************************************************************************************* -->
<!-- Messages -->
<!-- ************************************************************************************************************* -->
<xs:element name="message">
<xs:complexType>
<xs:attribute name="device" type="xs:string" use="optional"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<!-- ************************************************************************************************************* -->
<!-- Properties -->
<!-- ************************************************************************************************************* -->
<xs:element name="getProperties">
<xs:complexType>
<xs:attribute name="version" type="xs:string" use="required"/>
<xs:attribute name="device" type="xs:string" use="optional"/>
<xs:attribute name="name" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="delProperty">
<xs:complexType>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="optional"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="enableBLOB">
<xs:complexType mixed="true">
<xs:attribute name="client" type="xs:string" use="optional"/>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="enableStream">
<xs:complexType mixed="true">
<xs:attribute name="client" type="xs:string" use="optional"/>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<!-- ************************************************************************************************************* -->
<!-- Number Vectors -->
<!-- ************************************************************************************************************* -->
<xs:element name="defNumberVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="defNumber"/>
</xs:sequence>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="label" type="xs:string" use="optional"/>
<xs:attribute name="group" type="xs:string" use="optional"/>
<xs:attribute name="state" type="propertyState" use="required"/>
<xs:attribute name="perm" type="propertyPerm" use="required"/>
<xs:attribute name="timeout" type="xs:decimal" use="optional"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="defNumber">
<xs:complexType mixed="true">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="label" type="xs:string" use="optional"/>
<xs:attribute name="format" type="xs:string" use="required"/>
<xs:attribute name="min" type="xs:decimal" use="required"/>
<xs:attribute name="max" type="xs:decimal" use="required"/>
<xs:attribute name="step" type="xs:decimal" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="setNumberVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="oneNumber"/>
</xs:sequence>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="state" type="propertyState" use="optional"/>
<xs:attribute name="timeout" type="xs:decimal" use="optional"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="newNumberVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="oneNumber"/>
</xs:sequence>
<xs:attribute name="client" type="xs:string" use="optional"/>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="oneNumber">
<xs:complexType mixed="true">
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<!-- ************************************************************************************************************* -->
<!-- Text Vectors -->
<!-- ************************************************************************************************************* -->
<xs:element name="defTextVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="defText"/>
</xs:sequence>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="label" type="xs:string" use="optional"/>
<xs:attribute name="group" type="xs:string" use="optional"/>
<xs:attribute name="state" type="propertyState" use="required"/>
<xs:attribute name="perm" type="propertyPerm" use="required"/>
<xs:attribute name="timeout" type="xs:decimal" use="optional"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="defText">
<xs:complexType mixed="true">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="label" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="setTextVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="oneText"/>
</xs:sequence>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="state" type="propertyState" use="optional"/>
<xs:attribute name="timeout" type="xs:decimal" use="optional"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="newTextVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="oneText"/>
</xs:sequence>
<xs:attribute name="client" type="xs:string" use="optional"/>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="oneText">
<xs:complexType mixed="true">
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<!-- ************************************************************************************************************* -->
<!-- Light Vectors -->
<!-- ************************************************************************************************************* -->
<xs:element name="defLightVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="defLight"/>
</xs:sequence>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="label" type="xs:string" use="optional"/>
<xs:attribute name="group" type="xs:string" use="optional"/>
<xs:attribute name="state" type="propertyState" use="required"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="defLight">
<xs:complexType mixed="true">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="label" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="setLightVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="oneLight"/>
</xs:sequence>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="state" type="propertyState" use="optional"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="oneLight">
<xs:complexType mixed="true">
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<!-- ************************************************************************************************************* -->
<!-- Switch Vectors -->
<!-- ************************************************************************************************************* -->
<xs:element name="defSwitchVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="defSwitch"/>
</xs:sequence>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="label" type="xs:string" use="optional"/>
<xs:attribute name="group" type="xs:string" use="optional"/>
<xs:attribute name="state" type="propertyState" use="required"/>
<xs:attribute name="perm" type="propertyPerm" use="required"/>
<xs:attribute name="rule" type="switchRule" use="required"/>
<xs:attribute name="timeout" type="xs:decimal" use="optional"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="defSwitch">
<xs:complexType mixed="true">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="label" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="setSwitchVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="oneSwitch"/>
</xs:sequence>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="state" type="propertyState" use="optional"/>
<xs:attribute name="timeout" type="xs:decimal" use="optional"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="newSwitchVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="oneSwitch"/>
</xs:sequence>
<xs:attribute name="client" type="xs:string" use="optional"/>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="oneSwitch">
<xs:complexType mixed="true">
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<!-- ************************************************************************************************************* -->
<!-- BLOB Vectors -->
<!-- ************************************************************************************************************* -->
<xs:element name="defBLOBVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="defBLOB"/>
</xs:sequence>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="label" type="xs:string" use="optional"/>
<xs:attribute name="group" type="xs:string" use="optional"/>
<xs:attribute name="state" type="propertyState" use="required"/>
<xs:attribute name="perm" type="propertyPerm" use="required"/>
<xs:attribute name="timeout" type="xs:decimal" use="optional"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="defBLOB">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="label" type="xs:string" use="optional"/>
<xs:attribute name="format" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="setBLOBVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="oneBLOB"/>
</xs:sequence>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="state" type="propertyState" use="optional"/>
<xs:attribute name="timeout" type="xs:decimal" use="optional"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="newBLOBVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="oneBLOB"/>
</xs:sequence>
<xs:attribute name="client" type="xs:string" use="optional"/>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="oneBLOB">
<xs:complexType mixed="true">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="size" type="xs:decimal" use="required"/>
<xs:attribute name="format" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<!-- ************************************************************************************************************* -->
<!-- Stream Vectors -->
<!-- ************************************************************************************************************* -->
<xs:element name="defStreamVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="defStream"/>
</xs:sequence>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="label" type="xs:string" use="optional"/>
<xs:attribute name="group" type="xs:string" use="optional"/>
<xs:attribute name="state" type="propertyState" use="required"/>
<xs:attribute name="timeout" type="xs:decimal" use="optional"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="defStream">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="label" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="setStreamVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="oneStream"/>
</xs:sequence>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="state" type="propertyState" use="optional"/>
<xs:attribute name="timeout" type="xs:decimal" use="optional"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
<xs:attribute name="message" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="newStreamVector">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="oneStream"/>
</xs:sequence>
<xs:attribute name="client" type="xs:string" use="optional"/>
<xs:attribute name="device" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="timestamp" type="xs:dateTime" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="oneStream">
<xs:complexType mixed="true">
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<!-- ************************************************************************************************************* -->
</xs:schema>