Professional Documents
Culture Documents
Ansi Incits 371.3-2003
Ansi Incits 371.3-2003
Ansi Incits 371.3-2003
3-2003
Developed by
ANSI ®
INCITS 371.3-2003
Secretariat
Information Technology Industry Council (ITI)
Abstract
This standard defines an Application Programming Interface for Real Time Locating Systems (RTLS) for
use in asset management. This standard is intended to allow for compatibility and to encourage interop-
erability of products for the growing RTLS market.
Approval of an American National Standard requires review by ANSI that the
American requirements for due process, consensus, and other criteria for approval have
National been met by the standards developer.
CAUTION: The developers of this standard have requested that holders of patents that may be re-
quired for the implementation of the standard disclose such patents to the publisher. However, nei-
ther the developers nor the publisher have undertaken a patent search in order to identify which, if
any, patents may apply to this standard. As of the date of publication of this standard, following
calls for the identification of patents that may be required for the implementation of the standard,
notice of one or more such claims has been received. By publication of this standard, no position
is taken with respect to the validity of this claim or of any rights in connection therewith. The known
patent holder(s) has (have), however, filed a statement of willingness to grant a license under
these rights on reasonable and nondiscriminatory terms and conditions to applicants desiring to ob-
tain such a license. Details may be obtained from the publisher. No further patent search is con-
ducted by the developer or publisher in respect to any standard it processes. No representation is
made or implied that this is the only license that may be required to avoid infringement in the use of
this standard.
Published by
Foreword ................................................................................................................ii
Introduction ............................................................................................................v
1 Scope ........................................................................................................... 1
2 Normative References.................................................................................. 1
3 Terms and Definitions................................................................................... 1
4 Symbols (and Abbreviated Terms) ............................................................... 1
5 The Service .................................................................................................. 2
6 Application Programming Interface (API) ..................................................... 3
7 Subroutine Calls ........................................................................................... 4
8 Data Structures and Data Types ................................................................ 13
Figures
1 Architecture of SOAP-RPC Calls.................................................................. 3
Annex
A XML Schemas for Remote Procedure Calls............................................... 17
i
Foreword (This foreword is not part of American National Standard ANSI INCITS 371.3-2003.)
ANSI INCITS 371.3-2003 is one of a series of standards for Real Time Locating Sys-
tems (RTLS) that provides, in real-time, the physical location and the tracking of as-
sets, human resources, or any other category of mobile items. This series of
standards is intended to foster compatibility and interoperability of RTLS. There are
three standards in the series. Two airwave interface protocols are specified: one is
defined to provide a high-precision system operating at 2.4 GHz and a second to pro-
vide a lower-precision system operating at 433 MHz. A single Application Program-
ming Interface (API) is defined that provides a unifying interface for either of the two
airwave interface protocols.
Requests for interpretation, suggestions for improvement or addenda, or defect re-
ports are welcome. They should be sent to InterNational Committee for Information
Technology Standards (INCITS), ITI, 1250 Eye Street, NW, Suite 200, Washington,
DC 20005.
This standard was processed and approved for submittal to ANSI by INCITS. Com-
mittee approval of this standard does not necessarily imply that all committee mem-
bers voted for its approval. At the time it approved this standard, INCITS had the
following members:
ii
Organization Represented Name of Representative
UCC ............................................................................................Stephen Brown
Frank Sharkey (Alt.)
INCITS T20 Technical Committee on Real Time Locating Systems, which contributed
to the development of this standard, had the following members:
iii
The following members served in the capacity of document coordinators:
Tim Harrington
Sandeep Jain
Chris Zegelin
Mark Buckner
Dan Kimball
Tom Polizzi
iv
Introduction
The INCITS 371 series of standards defines two Air Interface Protocols and a single
Application Programming Interface (API) for Real Time Locating Systems (RTLS) for
use in asset management. This series of standards is intended to allow for compati-
bility and to encourage interoperability of products for the growing RTLS market. The
series consists of the following standards, under the general title “Information Tech-
nology - Real Time Locating Systems.”
ANSI INCITS 371.1 - 2.4-GHz Air Interface Protocol
ANSI INCITS 371.2 - 433-MHz Air Interface Protocol
ANSI INCITS 371.3 - The common API between either 2.4-GHz or 433-MHz Band
RTLS and application programs
This document defines the Application Programming Interface. To be fully compliant
with this standard, Real Time Locating Systems (RTLS) must also comply either with
ANSI INCITS 371.1 or ANSI INCITS 371.2.
An API is a boundary across which application software uses facilities of program-
ming languages to invoke services. These facilities may include procedures or opera-
tions, shared data objects and resolution of identifiers. A wide range of services may
be required at an API to support applications. Different methods may be appropriate
for documenting API specifications for different types of services.
The information flow across the API boundary is defined by the syntax and semantics
of a particular programming language, such that the user of that language may ac-
cess the services provided by the application platform on the other side of the bound-
ary. This implies the specification of a mapping of the functions being made available
by the application platform into the syntax and semantics of the programming lan-
guage.
An API specification documents a service and/or service access method that is avail-
able at an interface between the application and an application platform.
The T20 RTLS API describes the RTLS service and its access methods, to enable
client applications to interface with the RTLS system. This RTLS service is the mini-
mum service that must be provided by a RTLS system to be T20 RTLS API compati-
ble. Other services may be provided in addition to this.
The version of the API standard is signified by x.y, such as 1.0. A major release of
the RTLS API standard would increment the x, such as 2.0. A minor release would
increment the y, such as 1.1.
Client applications using the RTLS API should ignore XML tags that may appear in
future enhancements to the RTLS API standard within a single major release. This
requirement is intended to ensure backward compatibility.
v
AMERICAN NATIONAL STANDARD ANSI INCITS 371.3-2003
2 Normative References
2.1 Referenced Documents
The following standards contain provisions which, through reference in this text, constitute provi-
sions of this American National Standard. At the time of publication, the editions indicated were
valid. All standards are subject to revision, and parties to agreements based on this American
National Standard are encouraged to investigate the possibility of applying the most recent edi-
tions of the standards indicated below.
ISO/IEC 9075:1992(E), Information Technology – Database Language – SQL
EXtensible Markup Language 1.0, as defined at the site: http://www.w3.org/tr/rec-xml
Simple Object Access Protocol, Version 1.1, as defined at the site: http://www.w3.org/tr/soap
2.2 Informative References
ANSI INCITS 371.1-2003, Information technology - Real Time Locating Systems (RTLS) - Part 1:
2.4-GHz Air Interface Protocol
ANSI INCITS 371.2-2003, Information technology - Real Time Locating Systems (RTLS) - Part 2:
433-MHz Air Interface Protocol
1
ANSI INCITS 371.3-2003
5 The Service
5.1 Purpose
The real-time locating service is typically a Web Service. It receives RTLS tag blinks from the
RTLS infrastructure, and delivers those blinks as the response to client requests, over standard
Internet protocols. In addition, it allows filtering and field selection on the contents of those blinks.
5.2 Description
– An RTLS service shall support message exchange using the SOAP 1.1 encoding.
– An RTLS service should listen and respond to client requests using the HTTP network
protocol. It should listen on port 80.
– An RTLS service may take advantage of the Persistent Connections feature, which is
available in HTTP 1.1, but not in HTTP 1.0. This would yield significant performance
benefits for repeated calls to the RTLS Service, as described in 7.4.
– An RTLS service shall maintain state of the last blink of all tags in the RTLS infrastruc-
ture, since it was started. It may maintain state, from before its start time, by using a re-
pository.
– An RTLS service shall support filtering and field selection, as described in 7.2.5 and
7.2.6. An RTLS Service should eliminate extraneous spaces in the content of query pa-
rameters, such as filters.
– An RTLS service shall be able to create a Session, on request from the API, as described
in 7.3.
– The session shall keep the state of the Query parameters.
– Requests to that session shall return all tag blinks that match the filter criteria, and which
occurred subsequent to the last request, as described in the 7.4.
– If no tag blinks match the criteria, an RTLS service may delay response to session-based
requests, until such tag blinks are received.
– An RTLS service should remove the session state, when the CloseSession request is re-
ceived, as described in 7.5.
– An RTLS service may close the session, when a Query request is not received after
some predetermined period.
– An RLTS Service shall limit the length of all string values to a 1000 characters.
5.3 Security
The API uses SOAP, which assumes standard Internetworking protocols (HTTP and TCP/IP).
Security can be handled using existing standards (e.g. HTTP/S) and technologies at the commu-
nication layer, and discussion on it is beyond the scope of this draft standard.
2
ANSI INCITS 371.3-2003
SOAP-RPC calls
Query(...)
Client Application
struct BlinkResponse
RTLS Service
OpenSession Stateless Query
QuerySession(...)
struct BlinkResponse
CloseSession
3
ANSI INCITS 371.3-2003
7 Subroutine Calls
7.1 Overview of SOAP-RPC calls
1) struct QueryResponse* Query(char* queryName, char* string filters, char* fields, char*
sortBy)
2) struct SessionResponse* OpenSession(char* queryName, char* filters, char* fields,
char* sortBy)
3) struct QueryResponse* QuerySession(char* SessionID)
4) void CloseSession(char* SessionID)
“SOAP-RPC” refers to the remote methods provided by the RTLS Service, to client applications.
The function signatures shown above are in the C language syntax, merely to describe them con-
cretely. The SOAP-RPC calls may be bound to any programming language, with corresponding
subroutines. The implementation of each subroutine shall create a well-formatted SOAP mes-
sage, and make an HTTP-POST request to the RTLS Service.
Responses to the request may be a SOAP fault structure, a QueryResponse structure, or a Ses-
sionResponse structure. These structures should be deserialized, only if no error occurred. If an
error occurs, the server should return a SOAP fault structure.
7.2 Remote Procedure Call : Query()
7.2.1 Purpose
This client request retrieves the last blink received by the RTLS Service for all tags that match the
criteria of the query. There is at most 1 blink per tag returned. This is a stateless query. No state
about the query is kept in the RTLS service.
7.2.2 Synopsis
The RPC function signature in C language would look like:
struct QueryResponse* Query(char* queryName, char* filters, char* fields, char* sortBy)
Input parameters:
– queryName
– filters
– fields
– sortBy
Output parameters:
– QueryResponse struct
An underlying requirement is that parameters follow the Query method SOAP schema, as de-
scribed in the annex.
7.2.3 Description
The client application should construct a SOAP request message, which will be deserialized at
the service to invoke the function above. The SOAP request schema for Query RPC is described
in the annex.
The client application is responsible for opening a connection (typically, using HTTP), and send-
ing the SOAP request message - Query, with its associated parameters. The response will con-
4
ANSI INCITS 371.3-2003
sist of either a QueryResponse structure or a SOAP fault structure. The client application, or a
library that implements client-side proxy functions, should parse the response accordingly.
All the parameters discussed below refer to fields of a Tag Blink. These fields are described in the
QueryResponse data structure, in 8.2, and in the XML schema as described in the annex.
7.2.4 Parameter: queryName
This is the simplest parameter. This parameter opens up the opportunity for creating other que-
ries to the RTLS system, in the future.
Requirements:
1) The RTLS Service shall accept “RTLS_Blinks” as the value for the query name.
Example:
<QueryName>RTLS_Blinks</QueryName>
7.2.5 Parameter: filters
This is the most complex parameter.
Requirements:
1) The service shall return only those tag blinks that match the filters criteria, in the Que-
ryResponse structure.
2) The filters shall be expressed as a sum-of-products Boolean expression, with Boolean
operators acting on relational expressions, which in turn contain tag blink fields and their
values.
3) The filters parameter shall use a subset of Boolean and relational operators, as standard-
ized in ISO/IEC 9075:1992(E) Information technology - Database languages - SQL.
4) The relational operators shall not be used for fields with no values, such as parent fields.
Examples of parent fields are <States/> and <TagBlink/>.
5) The service should ignore extraneous blank spaces in nonstring field values.
6) The right-hand side of all relational expressions, except those containing ‘=’ only, shall be
inside a CDATA section, e.g., <TagID><![CDATA[<> 600]]></TagID>.
5
ANSI INCITS 371.3-2003
TagID BatteryLow
</Fields>
TagBlink
</Fields>
Note that the second alternative works, because the <TagBlink/> tag is the parent of all tag blink
fields.
7.2.7 Parameter: sortBy
The order in which tag blinks appear in the QueryResponse structure can be controlled by speci-
fying the sort order in the query.
Requirements:
1) The sortBy parameter shall consist of a single TagBlink property, and its sort order.
2) The sort order shall be either “asc” for ascending, or “desc” for descending.
Example:
<SortBy>
<Field>TagID</Field>
<Order>asc</Order>
</SortBy>
7.2.8 Return value: QueryResponse struct
QueryResponse struct is described in 8.1 and 8.2. Its XML Schema is defined in the annex, in
clauses A.6 and A.7.
7.2.9 Faults
A general structure for faults is described in 8.4. The XML schema is defined in the annex, in
clause A.9. The RTLS standard specifies a minimal set of error codes and error messages for the
<detail> section of the SOAP fault message. An RLTS Service may provide more specific error
messages that describe the specific portion of the request that is invalid. Any such error mes-
sage shall have a unique error code that is greater than 10000.
6
ANSI INCITS 371.3-2003
7.2.10 Examples
The examples below are SOAP request-response messages that follow the corresponding XML
schemas described in the annex.
7.2.10.1 Method Request
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body >
<m:Query xmlns:m="http://www.incits.org/RTLS/">
<QueryName>RTLS_Blinks</QueryName>
<FilterBy>
<TagID><![CDATA[= 1234]]></TagID>
<OR/>
<BatteryLow>=true</BatteryLow>
</FilterBy>
<Fields>TagID Location BatteryLow</Fields>
<SortBy>
<Order>asc</Order>
<Field>TagID</Field>
</SortBy>
</m:Query>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
7.2.10.2 Method Response
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body >
<m:QueryResponse xmlns:m="http://www.incits.org/RTLS/">
<QueryResult>
<NumItems>1</NumItems>
<TagBlinks>
<TagBlink>
<TagID>1234</TagID>
<Location>
<X>23</X>
<Y>34</Y>
<Z>45</Z>
</Location>
<States>
<BatteryLow>true</BatteryLow>
</States>
</TagBlink>
</TagBlinks>
</QueryResult>
</m:QueryResponse>
7
ANSI INCITS 371.3-2003
<SOAP-ENV:Body>
</SOAP-ENV:Envelope>
8
ANSI INCITS 371.3-2003
7.3.6 Faults
A general description and structure for faults is described in 8.4. The XML schema is defined in
the annex, in clause A.9.
7.3.7 Examples
The examples below are SOAP request-response messages that follow the corresponding XML
schemas described in the annex.
7.3.7.1 Method Request
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body >
<m:OpenSession xmlns:m="http://www.incits.org/RTLS/">
<QueryName>RTLS_Blinks</QueryName>
<FilterBy>
<TagID><![CDATA[< 5000]]></TagID>
<OR/>
<BatteryLow>=true</BatteryLow>
</FilterBy>
<Fields />
<SortBy>
<Order>asc</Order>
<Field>TagID</Field>
</SortBy>
</m:OpenSession>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
7.3.7.2 Method Response
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<m:SessionResponse xmlns:m="http://www.incits.org/RTLS/">
<SessionID>ABJ12300KO</SessionID>
<MaxNumBlinks>5000</MaxNumBlinks>
<ExpirationSeconds>1800</ExpirationSeconds>
</m:SessionResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
9
ANSI INCITS 371.3-2003
10
ANSI INCITS 371.3-2003
7.4.6 Faults
A general description and structure for faults is described in 8.4. The XML schema is defined in
the annex, in clause A.9.
7.4.7 Examples
The examples below are SOAP request-response messages that follow the corresponding XML
schemas described in the annex.
7.4.7.1 Method Request
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<m:QuerySession xmlns:m="http://www.incits.org/RTLS/">
<SessionID>
ADJ909123LOPQ
</SessionID>
</m:QuerySession>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
7.4.7.2 Method Response
The method response is exactly the same as described in the example, in 7.2.10.2.
7.5 Remote Procedure Call – CloseSession
7.5.1 Purpose
This client request’s sole purpose is to inform the RTLS Service that the Session and its associ-
ated state are no longer needed by the client application, and that all resources used by that Ses-
sion may be released.
7.5.2 Synopsis
The RPC function signature in C language would look like:
void CloseSession(char* SessionID)
Input Parameter:
– SessionID
Output Parameter:
– None
11
ANSI INCITS 371.3-2003
7.5.3 Description
The client application is responsible for opening a network connection (typically, using HTTP),
and sending the SOAP request message. Unlike the other RPC calls, the response does not
have an output parameter, and therefore, it should always return a SOAP fault structure. A client
application may ignore the response.
7.5.4 Input Parameter : SessionID
Requirements:
1) The client application shall use the same SessionID that it received from OpenSession
RPC.
2) The client application should send the SessionID to the same host/service, from which it
received the SessionID.
7.5.5 Faults
A general description and structure for faults is described in 8.4. The XML schema is defined in
the annex, in clause A.9.
NOTE - If this RPC call executes successfully, error code 4000 (as shown below) will be returned in the
fault structure.
<SOAP-ENV:Body >
<m:CloseSession xmlns:m="http://www.incits.org/RTLS/">
<SessionID>
ADJ909123LOPQ
</SessionID>
</m:CloseSession>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
7.5.6.2 Method Response
Unlike the other RPC calls, the CloseSession RPC always returns a fault structure.
If this RPC call executes successfully, error code 4000 will be returned in the fault structure, as
described in 7.5.5.
12
ANSI INCITS 371.3-2003
13
ANSI INCITS 371.3-2003
14
ANSI INCITS 371.3-2003
A RTLS Service may provide more specific and descriptive error messages than those specified
in this standard. Any such error message shall have a unique error code that is greater than
10000.
8.4.1 Example
Below is an example of the fault structure returned when an error occurs. Note that the example
described a fictitious error code that is greater than 10000, to demonstrate the error reporting
flexibility.
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>
Internal Application Error
</faultstring>
<detail>
<rtls:RTLSFaultDetails xmlns:rtls="http:// www.incits.org/RTLS/">
15
ANSI INCITS 371.3-2003
<ErrorCode>
12345
</ ErrorCode>
< ErrorMsg>
Invalid filter rule
</ ErrorMsg>
</rtls:RTLSFaultDetails>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
16
ANSI INCITS 371.3-2003
Annex A
(normative)
<xsd:include schemaLocation="OpenSession.xsd"/>
<xsd:include schemaLocation="SessionResponse.xsd"/>
<xsd:include schemaLocation="QuerySession.xsd"/>
<xsd:include schemaLocation="CloseSession.xsd"/>
</xsd:schema>
A.2 SOAP Request Schema: Query
<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:rtls="http://www.incits.org/RTLS/"
version="1.0">
<xsd:element name="Query">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="QueryName" type="xsd:string"/>
<xsd:element name="FilterBy" type="FilterType"/>
<xsd:element name="Fields" type="FieldsType" />
<xsd:element name="SortBy" type="SortType" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="FilterType">
<xsd:annotation>
<xsd:documentation>
XML Schema 1.0 does not allow the any particle to be
restricted to a certain type.
Therefore, the client application should validate this nested
boolean expression as follows:
17
ANSI INCITS 371.3-2003
<xsd:sequence minOccurs="0">
<xsd:any namespace="##any" maxOccurs="unbounded" processCon-
tents="skip" />
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="relExp">
<xsd:annotation>
<xsd:documentation>
This represents the type of relational expression in the
nested, boolean expression for the FilterBy field.
<xsd:restriction base="xsd:string">
<xsd:pattern value="(<|<=|>|>=|<>|=)(.)+"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="FieldsType">
<xsd:annotation>
<xsd:documentation>
The client application should validate the list of fields, as
follows:
(a) The list of fields should be a subset of the TagBlink
fields or parent XML tags of those fields.
(b) By definition, an XML list is just a string of space
delimited values.
</xsd:documentation>
</xsd:annotation>
<xsd:list itemType="xsd:string" />
</xsd:simpleType>
<xsd:complexType name="SortType">
<xsd:all>
18
ANSI INCITS 371.3-2003
</xsd:schema>
<xsd:element name="OpenSession">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="QueryName" type="xsd:string"/>
<xsd:element name="FilterBy" type="FilterType"/>
<xsd:element name="Fields" type="FieldsType" />
<xsd:element name="SortBy" type="SortType" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xsd:element name="QuerySession">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="SessionID" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
19
ANSI INCITS 371.3-2003
<xsd:element name="CloseSession">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="SessionID" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xsd:complexType name="TagBlinkType">
<xsd:sequence>
<xsd:annotation>
<xsd:documentation>
The RTLS Service shall provide the fields TagID, Location,
and RTLSBlinkTime for any TagBlink. However, the fields are
optional in the message itself, since the client application
may have filtered out those fields in the query request.
</xsd:documentation>
</xsd:annotation>
20
ANSI INCITS 371.3-2003
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="binaryString">
<xsd:restriction base="xsd:string">
<xsd:pattern value="(0|1)*"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="dateTimeWithTimezone">
<xsd:restriction base="xsd:dateTime">
<xsd:pattern value=".+T.+(Z|[+-].+)" />
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="LocationType">
<xsd:annotation>
<xsd:documentation>
At least 1 location element shall be present.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element name="NoLocate" type="xsd:boolean" minOccurs="0" />
<xsd:sequence>
<xsd:group ref="Coords" minOccurs="0" />
<xsd:group ref="RadialCoords" minOccurs="0" />
<xsd:element name="ZoneID" type="xsd:string" minOccurs="0" />
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
<xsd:group name="Coords">
<xsd:sequence>
<xsd:element name="X" type="xsd:float" />
<xsd:element name="Y" type="xsd:float" />
<xsd:element name="Z" type="xsd:float" minOccurs="0"/>
</xsd:sequence>
</xsd:group>
<xsd:group name="RadialCoords">
21
ANSI INCITS 371.3-2003
<xsd:sequence>
<xsd:element name="Bearing" type="degrees" />
<xsd:element name="Distance" type="xsd:nonNegativeInteger" />
</xsd:sequence>
</xsd:group>
<xsd:simpleType name="degrees">
<xsd:restriction base="xsd:float">
<xsd:minInclusive value="-360.0" />
<xsd:maxInclusive value="360.0" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
<xsd:include schemaLocation="TagBlinkType.xsd"/>
<xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"
schemaLocation="http://schemas.xmlsoap.org/soap/encoding/" />
<xsd:element name="QueryResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="VendorID" type="xsd:string" minOccurs="0" />
<xsd:element name="QueryResult">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="NumItems" type="xsd:nonNegativeInteger"/>
<xsd:element name="TagBlinks" type="TagBlinkArray" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="TagBlinkArray">
<xsd:complexContent>
<xsd:restriction base="SOAP-ENC:Array">
<xsd:sequence>
<xsd:element name="TagBlink" type="TagBlinkType"
maxOccurs="unbounded" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>
22
ANSI INCITS 371.3-2003
<xsd:element name="SessionResponse">
<xsd:complexType>
<xsd:sequence>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xsd:element name="RTLSFaultDetails">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ErrorCode" type="xsd:positiveInteger"/>
<xsd:element name="ErrorMessage" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
23