da73ea74 by Kyle Greenwell

Add initial specs in expected layout and added license

1 parent 185951ff
TensorCommon/V1.0.0/TensorCommon.xid
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright (c) 2017, TeleCommunication Systems, Inc.,
a wholly-owned subsidiary of Comtech Telecommunications Corp.
and/or affiliates of TeleCommunication Systems, Inc.
All rights reserved.
TeleCommunication Systems, Inc. PROPRIETARY/CONFIDENTIAL.
Use is subject to license terms included in the distribution.
-->
<specification xmlns="http://xid.location.studio/XID/XtensibleInterfaceDefinition.xsd"
xmlns:xid="http://xid.location.studio/XID/XtensibleInterfaceDefinition.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xid.location.studio/XID/XtensibleInterfaceDefinition.xsd XtensibleInterfaceDefinition.xsd"
identity="TensorCommmon.xid">
<title>Tensor Commmon Defitions</title>
<title>Tensor Commmon Definitions</title>
<comment></comment>
<artifact></artifact>
<import ref="http://xid.location.studio/XID/TensorDefinitions.xid" local="TensorDefinitions.xid" />
<import ref="TensorDefinitions/V1.0.0/TensorDefinitions.xid" local="TensorDefinitions.xid" />
<namespace name="Tensor">
<struct name="NameValue" >
......
TensorDefinitions/V1.0.0/TensorDefinitions.xid
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright (c) 2017, TeleCommunication Systems, Inc.,
a wholly-owned subsidiary of Comtech Telecommunications Corp.
and/or affiliates of TeleCommunication Systems, Inc.
All rights reserved.
TeleCommunication Systems, Inc. PROPRIETARY/CONFIDENTIAL.
Use is subject to license terms included in the distribution.
-->
<specification xmlns="http://xid.location.studio/XID/XtensibleInterfaceDefinition.xsd"
xmlns:xid="http://xid.location.studio/XID/XtensibleInterfaceDefinition.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xid.location.studio/XID/XtensibleInterfaceDefinition.xsd XtensibleInterfaceDefinition.xsd"
identity="TensorDefinitions.xid">
<title>Tensor Common Defitions</title>
<comment>
Defines fundamental types mappings.
</comment>
<artifact></artifact>
<tag name="package" value="com.comtechtel"/>
<namespace name="Tensor">
<type name="void" size="0">
<comment>represents nothing. &lt;br/&gt;Useful in &lt;operation&gt; with no &lt;input&gt;</comment>
<lang name="c" type="void"/>
<lang name="cpp" type="void"/>
<lang name="java" type="void"/>
<lang name="node" type="void"/>
</type>
<type name="bool" size="1">
<comment>represents true/false</comment>
<lang name="c" type="bool" include="stdbool.h"/>
<lang name="cpp" type="bool"/>
<lang name="java" type="XidBool" include="com.comtechtel.tensor.xid.XidBool"/>
<lang name="node" type="XidBool"/>
</type>
<type name="uint8" size="1">
<comment>8-bit, unsigned value</comment>
<lang name="c" type="uint8_t" include="stdint.h"/>
<lang name="cpp" type="uint8_t" include="cstdint"/>
<lang name="java" type="XidByte" include="com.comtechtel.tensor.xid.XidByte" />
<lang name="node" type="XidUInt8"/>
</type>
<type name="uint16" size="2">
<comment>16-bit, unsigned value</comment>
<lang name="c" type="uint16_t" include="stdint.h"/>
<lang name="cpp" type="uint16_t" include="cstdint"/>
<lang name="java" type="XidShort" include="com.comtechtel.tensor.xid.XidShort"/>
<lang name="node" type="XidUShort"/>
</type>
<type name="uint24" size="3">
<comment>24-bit, unsigned value</comment>
<lang name="c" type="uint24_t" include="Tensor/CXMF/int24.h"/>
<lang name="cpp" type="uint24_t" include="Tensor/Types/int24.h"/>
<lang name="java" type="XidInt24" include="com.comtechtel.tensor.xid.XidInt24"/>
<lang name="node" type="XidUInt24"/>
</type>
<type name="uint32" size="4">
<comment>32-bit, unsigned value</comment>
<lang name="c" type="uint32_t" include="stdint.h"/>
<lang name="cpp" type="uint32_t" include="cstdint"/>
<lang name="java" type="XidInt" include="com.comtechtel.tensor.xid.XidInt"/>
<lang name="node" type="XidUInt"/>
</type>
<type name="uint64" size="8">
<comment>64-bit, unsigned value</comment>
<lang name="c" type="uint64_t" include="stdint.h"/>
<lang name="cpp" type="uint64_t" include="cstdint"/>
<lang name="java" type="XidLong" include="com.comtechtel.tensor.xid.XidLong"/>
<lang name="node" type="XidULong"/>
</type>
<type name="int8" size="1">
<comment>8-bit, signed value</comment>
<lang name="c" type="int8_t" include="stdint.h"/>
<lang name="cpp" type="int8_t" include="cstdint"/>
<lang name="java" type="XidByte" include="com.comtechtel.tensor.xid.XidByte"/>
<lang name="node" type="XidInt8"/>
</type>
<type name="int16" size="2">
<comment>16-bit, signed value</comment>
<lang name="c" type="int16_t" include="stdint.h"/>
<lang name="cpp" type="int16_t" include="cstdint"/>
<lang name="java" type="XidShort" include="com.comtechtel.tensor.xid.XidShort" />
<lang name="node" type="XidShort"/>
</type>
<type name="int24" size="3">
<comment>24-bit, unsigned value</comment>
<lang name="c" type="int24_t" include="Tensor/CXMF/int24.h"/>
<lang name="cpp" type="int24_t" include="Tensor/Types/int24.h"/>
<lang name="java" type="XidInt24" include="com.comtechtel.tensor.xid.XidInt24"/>
<lang name="node" type="XidInt24"/>
</type>
<type name="int32" size="4">
<comment>32-bit, signed value</comment>
<lang name="c" type="int32_t" include="stdint.h"/>
<lang name="cpp" type="int32_t" include="cstdint"/>
<lang name="java" type="XidInt" include="com.comtechtel.tensor.xid.XidInt"/>
<lang name="node" type="XidInt"/>
</type>
<type name="int64" size="8">
<comment>64-bit, signed value</comment>
<lang name="c" type="int64_t" include="stdint.h"/>
<lang name="cpp" type="int64_t" include="cstdint"/>
<lang name="java" type="XidLong" include="com.comtechtel.tensor.xid.XidLong"/>
<lang name="node" type="XidLong"/>
</type>
<!--
<type name="float16" size="4">
<comment>32-bit, IEEE 754 binary16</comment>
<comment>C/cpp usually a "float"</comment>
<artifact>https://en.wikipedia.org/wiki/Half-precision_floating-point_format</artifact>
</type>
-->
<type name="float32" size="4">
<comment>32-bit, IEEE 754 binary32</comment>
<artifact>https://en.wikipedia.org/wiki/Single-precision_floating-point_format</artifact>
<lang name="c" type="float"/>
<lang name="cpp" type="float"/>
<lang name="java" type="XidFloat" include="com.comtechtel.tensor.xid.XidFloat"/>
<lang name="node" type="XidFloat"/>
</type>
<type name="float64" size="8">
<comment>64-bit, IEEE 754 binary64</comment>
<artifact>https://en.wikipedia.org/wiki/Double-precision_floating-point_format</artifact>
<lang name="c" type="double"/>
<lang name="cpp" type="double"/>
<lang name="java" type="XidDouble" include="com.comtechtel.tensor.xid.XidDouble"/>
<lang name="node" type="XidDouble"/>
</type>
<!--
<type name="float128" size="8">
<comment>128-bit, IEEE 754 binary128</comment>
<artifact>https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format</artifact>
<lang name="cpp" type="long double"/>
</type>
-->
<type name="byte" size="1">
<comment>A single byte</comment>
<lang name="c" type="uint8_t" include="stdint.h"/>
<lang name="cpp" type="uint8_t" include="cstdint"/>
<lang name="java" type="XidByte" include="com.comtechtel.tensor.xid.XidByte"/>
<lang name="node" type="XidUInt8"/>
</type>
<type name="raw">
<comment>Variable sized collection of bytes</comment>
<!-- may change this type -->
<lang name="c" type="CAtom" include="Tensor/CXMF/CXMF.h"/>
<lang name="cpp" type="::Tensor::XMF::Atom" include="Tensor/XMF/Atom.h"/>
<lang name="java" type="Atom" include="com.comtechtel.tensor.xmf.Atom"/>
<lang name="node" type="Atom"/>
</type>
<type name="string">
<comment>Variable sized collection of characters</comment>
<lang name="c" type="CXMFString" include="Tensor/CXMF/CXMFString.h"/>
<lang name="cpp" type="std::string" include="string"/>
<lang name="java" type="XidString" include="com.comtechtel.tensor.xid.XidString"/>
<lang name="node" type="XidString"/>
</type>
<type name="datetime" size="8">
<comment>nanoseconds since Jan 1, 1970.</comment>
<lang name="c" type="uint64_t" include="stdint.h"/>
<lang name="cpp" type="::Tensor::Types::DateTime" include="Tensor/Types/DateTime.h"/>
<lang name="java" type="XidDateTime" include="com.comtechtel.tensor.xid.XidDateTime"/>
<lang name="node" type="XidDateTime"/>
</type>
<type name="UUID" size="16">
<comment>16 byte UUID</comment>
<lang name="c" type="UUID" include="Tensor/CXMF/uuid.h"/>
<lang name="cpp" type="::Tensor::Types::UUID" include="Tensor/Types/uuid.h"/>
<lang name="java" type="XidUuid" include="com.comtechtel.tensor.xid.XidUuid"/>
<lang name="node" type="XidUuid"/>
</type>
<type name="uri">
<comment>Standard Universal Resource Identifier (URI)</comment>
<tag name="TODO" value="Define uri as a custom type. Use string for now."/>
<lang name="c" type="CXMFString" include="Tensor/CXMF/CXMFString.h"/>
<lang name="cpp" type="std::string" include="string"/>
<lang name="java" type="XidString" include="com.comtechtel.tensor.xid.XidString"/>
<lang name="node" type="XidString"/>
</type>
<type name="json">
<comment>JSON formatted/encoded string</comment>
<tag name="TODO" value="Define json as a custom type. Use string for now."/>
<lang name="c" type="CXMFString" include="Tensor/CXMF/CXMFString.h"/>
<lang name="cpp" type="std::string" include="string"/>
<lang name="java" type="XidString" include="com.comtechtel.tensor.xid.XidString"/>
<lang name="node" type="XidString"/>
</type>
<!--
*******************************************************
Encoding Data Types
*******************************************************
-->
<!-- Encoding format type spec.-->
<type name="EncodingFormat" size="2">
<comment>
The encoding format determines how element data is run-time encoded within a particular element independent of the
transport encoding.
These values are specified in the "encoding" attribute for elements. Not all encoding formats
are supported by every wireline protocol implementation. Additionally, custom encodings may be
defined to support application defined encodings. Any non-standard encodings must be registered (to avoid collision)
and approved by the appropriate approving authority (e.g. Comtech). Values from 0 to 255 are reserved
for standard-encodings. Custom encodings start at 256(0x0100) and extend to 65535 (0xFFFF).\n
\n
This is not the same as defining in XID a raw datatype or json datatype which are NOT changeable are run-time.
\n
Example: \n
\t The message XMF but a field is defined to be encoded as JSON.\n
\t Likewise, the message is JSON, but a field is run-time encoded to be XMF.\n
\n
Data encoding format type. If 0, value is not encoded. See ResrvedEncodingFormats
for a list of standard format specifiers.
</comment>
<lang name="c" type="uint16_t" include="stdint.h" />
<lang name="cpp" type="uint16_t" include="cstdint" />
<lang name="java" type="XidShort" include="com.comtechtel.tensor.xid.XidShort" />
<lang name="node" type="XidUShort" />
</type>
<!-- ReservedEncodingFormats standard encoding formats.-->
<enum name="ReservedEncodingFormats" type="Tensor.uint16" default="native">
<comment>
Reserved encoding formats define standard encodings known to all implementations.
</comment>
<literal name="native" value="0">
<comment>
Data is not encoded, information is in the default format for the particular wireline interface.\n
This is the default value if not defined explicitly.
</comment>
</literal>
<literal name="raw" value="1">
<comment>
Data is in an unspecified binary format. The interpretation of the data is
falls to the producer and consumer of the information.
For textual wireline encodings like JSON, the data will be valid within the representation.
</comment>
</literal>
<literal name="xmf" value="2">
<comment>
Data is XMF binary format. The binary data is structured using atoms and atom lists.
For textual wireline encodings like JSON, this is XMF base64 encoded.
</comment>
</literal>
<literal name="json" value="3">
<comment>
Data is formatted as JSON compliant ascii text.
</comment>
</literal>
</enum>
</namespace>
</specification>
TensorLogging/V1.0.0/TensorLogging.xid
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright (c) 2017, TeleCommunication Systems, Inc.,
a wholly-owned subsidiary of Comtech Telecommunications Corp.
and/or affiliates of TeleCommunication Systems, Inc.
All rights reserved.
TeleCommunication Systems, Inc. PROPRIETARY/CONFIDENTIAL.
Use is subject to license terms included in the distribution.
-->
<specification xmlns="http://xid.location.studio/XID/XtensibleInterfaceDefinition.xsd"
xmlns:xid="http://xid.location.studio/XID/XtensibleInterfaceDefinition.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
......@@ -12,7 +21,7 @@
as needed to support various types of information.
</comment>
<import ref="http://xid.location.studio/XID/TensorDefinitions.xid" local="TensorDefinitions.xid" />
<import ref="TensorDefinitions/V1.0.0/TensorDefinitions.xid" local="TensorDefinitions.xid" />
<namespace name="Logging">
<using namespace="Tensor"/>
......@@ -136,13 +145,13 @@
<comment>
Structure captures the file and line number information for Trace Messages. This provides information about where the trace message was sent.
</comment>
<elem name="file" type="Tensor.string" multiplicity="1">
<elem name="file" type="Tensor.string" multiplicity="1" ord="64">
<comment>File name where this message was logged.</comment>
</elem>
<elem name="line" type="Tensor.uint32" multiplicity="1">
<elem name="line" type="Tensor.uint32" multiplicity="1" ord="65">
<comment>Line number in file where this message is logged.</comment>
</elem>
<elem name="thid" type="Tensor.uint64" multiplicity="1" default="0">
<elem name="thid" type="Tensor.uint64" multiplicity="1" default="0" ord="66">
<comment>Optional Thread ID, if not specified, default value is 0.</comment>
</elem>
......@@ -167,40 +176,40 @@
</enum>
<struct name="Metric">
<elem name="metricType" type="MetricType" multiplicity="1" rttd="true">
<elem name="metricType" type="MetricType" multiplicity="1" rttd="true" ord="64">
<comment>This specifies the type of the reported metric.</comment>
</elem>
<elem name="name" type="string" multiplicity="1">
<elem name="name" type="string" multiplicity="1" ord="65">
<comment>Name of the reported metric.</comment>
</elem>
</struct>
<struct name="PegCount" type="Metric" rttkey="Logging.MetricType.PegCount">
<elem name="value" type="uint32" multiplicity="1">
<elem name="value" type="uint32" multiplicity="1" ord="80">
<comment>Value of peg count since last reporting.</comment>
</elem>
</struct>
<struct name="AppMetrics" type="Metric" rttkey="Logging.MetricType.AppMetrics">
<elem name="totalCount" type="uint32" multiplicity="1">
<elem name="totalCount" type="uint32" multiplicity="1" ord="80">
<comment>Total count of invocations since last reporting.</comment>
</elem>
<elem name="currentCount" type="uint32" multiplicity="1">
<elem name="currentCount" type="uint32" multiplicity="1" ord="81">
<comment>concurrent invocations at time of reporting.</comment>
</elem>
<elem name="peakCount" type="uint32" multiplicity="1">
<elem name="peakCount" type="uint32" multiplicity="1" ord="82">
<comment>Peak concurrent invocations since last reporting.</comment>
</elem>
<elem name="totalTime" type="uint64" multiplicity="1">
<elem name="totalTime" type="uint64" multiplicity="1" ord="83">
<comment>Total time spent on invocations in nanoseconds since last reporting.</comment>
</elem>
<elem name="peakTime" type="uint64" multiplicity="1">
<elem name="peakTime" type="uint64" multiplicity="1" ord="84">
<comment>Peak time for an invocation in nanoseconds since last reporting.</comment>
</elem>
<elem name="successCount" type="uint32" multiplicity="1">
<elem name="successCount" type="uint32" multiplicity="1" ord="85">
<comment>Count of successful invocations since last reporting.</comment>
</elem>
<elem name="failureCount" type="uint32" multiplicity="1">
<elem name="failureCount" type="uint32" multiplicity="1" ord="86">
<comment>Count of failed invocations since last reporting.</comment>
</elem>
</struct>
......@@ -220,22 +229,22 @@
if messages are related to logging but do not require the standard fields. It is recommended that most specializations
should start with Message as the base type.
</comment>
<elem name="type" type="MessageType" multiplicity="1" rttd="true">
<elem name="type" type="MessageType" multiplicity="1" rttd="true" ord="64">
<comment> This specifies the type of message.</comment>
</elem>
<elem name="date" type="datetime" multiplicity="1">
<elem name="date" type="datetime" multiplicity="1" ord="65">
<comment>The date/time the message occured.</comment>
</elem>
<elem name="source" type="Tensor.uri" multiplicity="1">
<elem name="source" type="Tensor.uri" multiplicity="1" ord="66">
<comment>URI Identifying name of the component or process logging the message.</comment>
</elem>
<elem name="info" type="string" multiplicity="0..1">
<elem name="info" type="string" multiplicity="0..1" ord="67">
<comment>Optional free form string data.</comment>
</elem>
<elem name="data" type="Tensor.json" multiplicity="0..1">
<elem name="data" type="Tensor.json" multiplicity="0..1" ord="68">
<comment>Optional structured data.</comment>
</elem>
<elem name="debug" type="DebugInfo" multiplicity="0..1">
<elem name="debug" type="DebugInfo" multiplicity="0..1" ord="69">
<comment>Optional debug information for message.</comment>
</elem>
</struct>
......@@ -246,19 +255,19 @@
Basic logging message data common to all types of logging. This specializes MessageBase and is the standard logging message. Create custom message types as needed; however, consider
specializing from the core defined sub-types of ActionMsg, Trace, or Usage depending upon need. In most cases, you should not use this message directly.
</comment>
<elem name="tid" type="Tensor.UUID" multiplicity="1">
<elem name="tid" type="Tensor.UUID" multiplicity="1" ord="80">
<comment>Unique ID identifying the internal transaction related to the message.</comment>
</elem>
<elem name="etid" type="string" multiplicity="0..1">
<elem name="etid" type="string" multiplicity="0..1" ord="81">
<comment>Optional externally defined transaction ID.</comment>
</elem>
<elem name="acctid" type="string" multiplicity="0..1">
<elem name="acctid" type="string" multiplicity="0..1" ord="82">
<comment>Optional externally defined account/group identifier.</comment>
</elem>
<elem name="devid" type="string" multiplicity="0..1">
<elem name="devid" type="string" multiplicity="0..1" ord="83">
<comment>Optional externally defined device identifier.</comment>
</elem>
<elem name="appid" type="string" multiplicity="0..1">
<elem name="appid" type="string" multiplicity="0..1" ord="84">
<comment>Optional externally defined application (or application key) identifier.</comment>
</elem>
......@@ -269,15 +278,14 @@
<comment>
A message that requires another system/user to respond with some action.
</comment>
<elem name="id" type="Tensor.uint32" multiplicity="1">
<elem name="id" type="Tensor.uri" multiplicity="1" ord="96">
<comment>Error code identifying the fault type</comment>
</elem>
<elem name="severity" type="Severity" multiplicity="1"/>
<elem name="category" type="Category" multiplicity="1"/>
<elem name="iid" type="Tensor.uri" multiplicity="0..1">
<comment>Optional incident identifier. Should uniquely define the action issue for future reference.</comment>
<elem name="severity" type="Severity" multiplicity="1" ord="97"/>
<elem name="category" type="Category" multiplicity="1" ord="98"/>
<elem name="iid" type="Tensor.uri" multiplicity="0..1" ord="99">
<comment>Optional incident identifier used to identify an action instance uniquely. This is needed when there are stateful clearing events.</comment>
</elem>
</struct>
<!-- TraceMsg type -->
......@@ -285,7 +293,7 @@
<comment>
Trace message for general logging and reporting of information
</comment>
<elem name="level" type="TraceLevel" multiplicity="1">
<elem name="level" type="TraceLevel" multiplicity="1" ord="96">
<comment>Indicates the level of the trace: overview is the highest level and debug is the lowest</comment>
</elem>
</struct>
......@@ -296,21 +304,21 @@
Message capturing usage information for reporting statistical, transactional, edge, location, or other useful information generated in the normal
operation of the system.
</comment>
<elem name="uri" type="Tensor.uri" multiplicity="1" rttd="true">
<elem name="uri" type="Tensor.uri" multiplicity="1" rttd="true" ord="96">
<comment> Usage id specific to a type of usage information. Can be general or application specific.</comment>
</elem>
</struct>
<!-- MetricMsg type -->
<struct name="MetricMsg" type="MessageBase" rttkey="Logging.MessageType.MetricMsg">
<elem name="start" type="datetime" multiplicity="1">
<elem name="start" type="datetime" multiplicity="1" ord="80">
<comment>The date/time of the start of the report interval. date is end the end of the report interval.</comment>
</elem>
<elem name="duration" type="uint16" multiplicity="1">
<elem name="duration" type="uint16" multiplicity="1" ord="81">
<tag name="unit" value="sec"/>
<comment>The interval in seconds for the metric report.</comment>
</elem>
<elem name="metrics" type="Metric" multiplicity="1..*">
<elem name="metrics" type="Metric" multiplicity="1..*" polymorphic="true" ord="82">
<comment>List of metrics being reported.</comment>
</elem>
</struct>
......@@ -328,25 +336,25 @@
that is deemed to have a specific beginning and end. This is a fairly generic
definition making the usage report suitable for a variety of applications.
</comment>
<elem name="taskid" type="string" multiplicity="1">
<elem name="taskid" type="string" multiplicity="1" ord="112">
<comment>
The unique tasks identifier. A source may have multiple tasks, this field assigns
an identifier that uniquely characterizes what the task was that was accomplished.
</comment>
</elem>
<elem name="start" type="datetime" multiplicity="1">
<elem name="start" type="datetime" multiplicity="1" ord="113">
<comment>
The start time at which the processor is used.
</comment>
</elem>
<elem name="duration" type="uint32" multiplicity="1">
<elem name="duration" type="uint32" multiplicity="1" ord="114">
<tag name="unit" value="usec"/>
<comment>
The duration of the processing in microseconds. This is not meant to be a high
resolution duration monitoring, implement a metric counter for precise timing data.
</comment>
</elem>
<elem name="status" type="ResultCode" multiplicity="1">
<elem name="status" type="ResultCode" multiplicity="1" ord="115">
<comment>The task result code.</comment>
</elem>
</struct>
......
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright (c) 2016, 2017, TeleCommunication Systems, Inc.,
a wholly-owned subsidiary of Comtech Telecommunications Corp.
and/or affiliates of TeleCommunication Systems, Inc.
All rights reserved.
TeleCommunication Systems, Inc. PROPRIETARY/CONFIDENTIAL.
Use is subject to license terms included in the distribution.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xid.location.studio/XID/XtensibleInterfaceDefinition.xsd"
xmlns="http://xid.location.studio/XID/XtensibleInterfaceDefinition.xsd"
elementFormDefault="qualified">
<xs:annotation>
<xs:documentation xml:lang="en">
XtensibleInterfaceDefinition XML Schema Definition.
</xs:documentation>
</xs:annotation>
<xs:element name="specification" type="Specification"/>
<xs:complexType name="Specification">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="1" name="title" type="xs:normalizedString"/>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element maxOccurs="unbounded" minOccurs="0" name="comment" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="artifact" type="xs:anyURI"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="tag" type="Tag"/>
</xs:choice>
<xs:element maxOccurs="unbounded" minOccurs="0" name="import" type="Import"/>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element name="using" maxOccurs="unbounded" minOccurs="0" type="Using"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="namespace" type="Namespace"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="identity" use="required" type="NSName">
<xs:annotation>
<xs:documentation xml:lang="en">
Unique name for this spec (e.g. com.company.spec-name)
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="Element">
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element maxOccurs="unbounded" minOccurs="0" name="comment" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="artifact" type="xs:anyURI"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="tag" type="Tag"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="Import">
<xs:complexContent>
<xs:extension base="Element">
<xs:attribute name="ref" use="required" type="xs:anyURI" />
<xs:attribute name="local" use="optional" type="xs:normalizedString" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:simpleType name="NSName">
<xs:restriction base="xs:token">
<xs:pattern value="([a-zA-Z][a-zA-Z0-9_]*.)*[a-zA-Z][a-zA-Z0-9_]*">
<xs:annotation>
<xs:documentation xml:lang="en">
Fully qualified name (e.g. "SomeNamespace.SomeName" ) or base name (e.g. "SomeName").
</xs:documentation>
</xs:annotation>
</xs:pattern>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="PName">
<xs:restriction base="NSName">
<xs:pattern value="[a-zA-Z][a-zA-Z0-9_]*">
<xs:annotation>
<xs:documentation xml:lang="en">
base name (e.g. "SomeName").
</xs:documentation>
</xs:annotation>
</xs:pattern>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="DeclarationBase">
<xs:complexContent>
<xs:extension base="Element">
<xs:sequence>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element name="using" maxOccurs="unbounded" minOccurs="0" type="Using"/>
<xs:element name="enum" maxOccurs="unbounded" minOccurs="0" type="Enumeration"/>
<xs:element name="type" maxOccurs="unbounded" minOccurs="0" type="Type"/>
<xs:element name="array" maxOccurs="unbounded" minOccurs="0" type="Array"/>
<xs:element name="struct" maxOccurs="unbounded" minOccurs="0" type="Structure"/>
</xs:choice>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Namespace">
<xs:complexContent>
<xs:extension base="DeclarationBase">
<xs:sequence>
<xs:element name="interface" maxOccurs="unbounded" minOccurs="0" type="Interface"/>
</xs:sequence>
<xs:attribute name="name" use="required" type="NSName" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Using">
<xs:complexContent>
<xs:extension base="Element">
<xs:attribute name="namespace" use="required" type="NSName"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="TypeBase">
<xs:complexContent>
<xs:extension base="Element">
<xs:attribute name="name" use="required" type="PName" />
<xs:attribute name="size" default="-1" type="Size">
<xs:annotation>
<xs:documentation xml:lang="en">
"size" is used to denote fixed sized types.
Only fixed size types can be used in array and packed struct.
Array with a fixed size (dimension) is a fixed sized type,
and can be further used in an array or packed struct.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Type">
<xs:complexContent>
<xs:extension base="TypeBase">
<xs:sequence>
<xs:element name="lang" maxOccurs="unbounded" minOccurs="0" type="TypeLang"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="TypeLang">
<xs:complexContent>
<xs:extension base="Element">
<xs:attribute name="name" use="required" type="xs:string" />
<xs:attribute name="type" use="required" type="xs:string" />
<xs:attribute name="include" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation xml:lang="en">
"include" content is dependent on the language.
"size" is used to denote fixed sized types.
Only fixed size types can be used in array and packed struct.
Array with a fixed size (dimension) is a fixed sized type,
and can be further used in an array or packed struct.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="DeclarationTypeBase">
<xs:complexContent>
<xs:extension base="TypeBase">
<xs:sequence>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element name="using" maxOccurs="unbounded" minOccurs="0" type="Using"/>
<xs:element name="enum" maxOccurs="unbounded" minOccurs="0" type="Enumeration"/>
<xs:element name="type" maxOccurs="unbounded" minOccurs="0" type="Type"/>
<xs:element name="array" maxOccurs="unbounded" minOccurs="0" type="Array"/>
<xs:element name="struct" maxOccurs="unbounded" minOccurs="0" type="Structure"/>
</xs:choice>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Structure">
<xs:complexContent>
<xs:extension base="DeclarationTypeBase">
<xs:sequence>
<xs:element name="elem" maxOccurs="unbounded" minOccurs="0" type="Elem"/>
</xs:sequence>
<xs:attribute name="type" use="optional" type="NSName"/>
<xs:attribute name="rttkey" use="optional" type="xs:string">
<xs:annotation>
<xs:documentation xml:lang="en">
rttkey defines the key value used to identify this
type from other types in the inheritance chain.
This key value is used to generate and register a type
specific factory.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="pack" default="false" type="xs:boolean">
<xs:annotation>
<xs:documentation xml:lang="en">
Inherited "pack" takes prescedence.
If "pack" is true, all elems must be a fixed sized type and "ord" on elems are ignored.
"pack" impacts the XMF encoding.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ExtStruct">
<xs:complexContent>
<!-- This will eventually be a Structure derivative -->
<!-- Structure requires <elem> and has attribute "inherit" ... which should change to "type" -->
<xs:extension base="Structure">
<xs:attribute name="sid" use="optional" default="0" type="IntegerOrHex" />
<xs:attribute name="encoding" use="optional" default="native" type="Encoding">
<xs:annotation>
<xs:documentation xml:lang="en">
Document this.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ExtStyle">
<xs:complexContent>
<!-- This will eventually be a Structure derivative -->
<!-- Structure requires <elem> and has attribute "type" -->
<xs:extension base="ExtStruct">
<xs:attribute name="style" use="optional" default="callback" type="OutputStyle">
<xs:annotation>
<xs:documentation xml:lang="en">
Document this.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:simpleType name="OutputStyle">
<xs:restriction base="xs:token">
<xs:pattern value="callback|arg|return">
<xs:annotation>
<xs:documentation xml:lang="en">
native=native format (xmf, json, etc.), same as index=0.
raw=codec defined outside encoding, same as index=1.
xmf=always XMF, same as index=2.
json=always json, same as index=3.
number=index into encoding table (first 255 are reserved).
PName=dynamic, name of element that holds the encoding value.
</xs:documentation>
</xs:annotation>
</xs:pattern>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Size">
<xs:restriction base="xs:integer">
<xs:minInclusive value="-1"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Array">
<xs:annotation>
<xs:documentation xml:lang="en">
An Array with a fixed "size" can be used as a fixed sized type.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="TypeBase">
<xs:attribute name="type" use="required" type="NSName">
<xs:annotation>
<xs:documentation xml:lang="en">
Must be a type with a fixed "size".
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Enumeration">
<xs:complexContent>
<xs:extension base="TypeBase">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="1" name="literal" type="EnumerationLiteral"/>
</xs:sequence>
<xs:attribute name="type" use="required" type="EnumerationType"/>
<xs:attribute name="default" use="required" type="PName"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:simpleType name="EnumerationType">
<xs:restriction base="NSName">
<xs:enumeration value="Tensor.int8"/>
<xs:enumeration value="Tensor.uint8"/>
<xs:enumeration value="Tensor.int16"/>
<xs:enumeration value="Tensor.uint16"/>
<xs:enumeration value="Tensor.int32"/>
<xs:enumeration value="Tensor.uint32"/>
<xs:enumeration value="int8"/>
<xs:enumeration value="uint8"/>
<xs:enumeration value="int16"/>
<xs:enumeration value="uint16"/>
<xs:enumeration value="int32"/>
<xs:enumeration value="uint32"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="EnumerationLiteral">
<xs:complexContent>
<xs:extension base="Element">
<xs:attribute name="name" use="required" type="PName" />
<xs:attribute name="value" use="required" type="IntegerOrHex"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:simpleType name="IntegerOrHex">
<xs:restriction base="xs:token">
<xs:pattern value="((0)|([-]?[1-9][0-9]*)|(0x([0-9a-fA-F]{2})+))"/>
</xs:restriction>
</xs:simpleType>
<!--
<xs:complexType name="Tag">
<xs:complexContent>
<xs:extension base="Element">
<xs:attribute name="name" use="required" type="xs:normalizedString" />
<xs:attribute name="value" use="required" type="xs:normalizedString" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
-->
<xs:complexType name="Tag">
<xs:attribute name="name" use="required" type="xs:normalizedString" />
<xs:attribute name="value" use="required" type="xs:normalizedString" />
</xs:complexType>
<xs:complexType name="Elem">
<xs:complexContent>
<xs:extension base="Element">
<xs:attribute name="name" use="required" type="PName" />
<xs:attribute name="type" use="required" type="NSName" />
<xs:attribute name="polymorphic" default="false" type="xs:boolean"/>
<xs:attribute name="multiplicity" default="1" type="Multiplicity"/>
<xs:attribute name="default" use="optional" type="xs:normalizedString"/>
<xs:attribute name="ord" default="L" type="LPGIntegerOrHex" />
<xs:attribute name="rttd" default="false" type="xs:boolean">
<xs:annotation>
<xs:documentation xml:lang="en">
rttd identified this element in the struct as
being the RTT Designator.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="encoding" use="optional" default="native" type="Encoding">
<xs:annotation>
<xs:documentation xml:lang="en">
rttkey defines the key value used to identify this
type from other types in the inheritance chain.
This key value is used to generate and register a type
specific factory.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:simpleType name="LPGIntegerOrHex">
<xs:restriction base="xs:token">
<xs:pattern value="(([LPG])|(0)|([1-9][0-9]*)|(0x([0-9a-fA-F]{2})+))"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Multiplicity">
<xs:restriction base="xs:token">
<xs:enumeration value="0..1">
<xs:annotation>
<xs:documentation xml:lang="en">
Optional.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="1">
<xs:annotation>
<xs:documentation xml:lang="en">
Required.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="0..*">
<xs:annotation>
<xs:documentation xml:lang="en">
Zero or more.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="1..*">
<xs:annotation>
<xs:documentation xml:lang="en">
Atleast one.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Encoding">
<xs:restriction base="xs:token">
<xs:pattern value="((native)|(raw)|(xmf)|(json)|(0)|([1-9][0-9]*)|(0x([0-9a-fA-F]{2}))|(0x([0-9a-fA-F]{4}))|([a-zA-Z][a-zA-Z0-9_]*))">
<xs:annotation>
<xs:documentation xml:lang="en">
native=native format (xmf, json, etc.), same as index=0.
raw=codec defined outside encoding, same as index=1.
xmf=always XMF, same as index=2.
json=always json, same as index=3.
number=index into encoding table (first 255 are reserved).
PName=dynamic, name of element that holds the encoding value.
</xs:documentation>
</xs:annotation>
</xs:pattern>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Interface">
<xs:complexContent>
<xs:extension base="DeclarationBase">
<xs:choice maxOccurs="unbounded" minOccurs="1">
<xs:element maxOccurs="unbounded" minOccurs="0" name="operation" type="Operation"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="event" type="Event"/>
</xs:choice>
<xs:attribute name="name" use="required" type="PName" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Operation">
<xs:complexContent>
<xs:extension base="DeclarationBase">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" name="input" type="ExtStruct"/>
<xs:element maxOccurs="1" minOccurs="0" name="output" type="ExtStyle"/>
</xs:sequence>
<xs:attribute name="name" use="required" type="PName" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Event">
<xs:complexContent>
<xs:extension base="DeclarationBase">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" name="data" type="ExtStruct"/>
</xs:sequence>
<xs:attribute name="name" use="required" type="PName" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
# SDK Source
An open-source style license for the SDK source code is covered under:
[LocationStudioSDKLicense.md](https://git.location.studio/location.studio/ilpsdk/blob/master/licenses/LocationStudioSDKLicense.md)
# Protocols
The API protocol (design, content and usage) is covered under:
[LocationStudioAPILicense.md](https://git.location.studio/location.studio/ilpsdk/blob/master/licenses/LocationStudioAPILicense.md)
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!