This parameter is defined in Table 163. A formal BNF definition of the numeric range can be found in Clause A.3. Examples for the use of the parameter are shown in Table 164.

Table 163 – NumericRange

Name

Type

Description

NumericRange

String

A number or a numeric range.

A null or empty string indicates that this parameter is not used.

The syntax for the string contains one of the following two constructs. The first construct is the string representation of an individual integer. For example, “6” is valid, but “6,0” and “3,2” are not. The minimum and maximum values that can be expressed are defined by the use of this parameter and not by this parameter type definition. The second construct is a range represented by two integers separated by the colon (“:”) character. The first integer shall always have a lower value than the second. For example, “5:7” is valid, while “7:5” and “5:5” are not. The minimum and maximum values that can be expressed by these integers are defined by the use of this parameter, and not by this parameter type definition. No other characters, including white-space characters, are permitted.

Multi-dimensional arrays can be indexed by specifying a range for each dimension separated by a ‘,’. For example, a 2x2 block in a 4x4 matrix could be selected with the range “1:2,0:1”. A single element in a multi-dimensional array can be selected by specifying a single number instead of a range. For example, “1,1” selects the [1,1] element in a two dimensional array.

Dimensions are specified in the order that they appear in the ArrayDimensions Attribute. All dimensions shall be specified for a NumericRange to be valid.

All indexes start with 0. The maximum value for any index is one less than the length of the dimension.

When reading a value and any of the lower bounds of the indexes is out of range the Server shall return a Bad_IndexRangeNoData. If any of the upper bounds of the indexes is out of range, the Server shall return partial results. For arrays of the ByteStrings and Strings find more details in the paragraphs below.

Bad_IndexRangeInvalid is only used for invalid syntax of the NumericRange. All other invalid requests with a valid syntax shall result in Bad_IndexRangeNoData.

When writing a value, the size of the array shall match the size specified by the NumericRange. The Server shall return an error if it cannot write all elements specified by the Client.

The NumericRange can also be used to specify substrings for ByteString and String values. Arrays of ByteString and String values are treated as two dimensional arrays where the final index specifies the substring range within the ByteString or String value. The entire ByteString or String value is selected if the final index is omitted. If the last element of the specified IndexRange refers to a substring, the Server shall return partial results accordingly. For any element in the array where the lower and upper bound of the specified IndexRange for the substring are out of bounds, the Server shall return a null or empty value.

Table 164 – NumericRange examples

Value

NumericRange

Result

[ 2, 33, 12, 0, 99 ]

0:2

[ 2, 33, 12 ]

[ 2, 33, 12, 0, 99 ]

3:7

[ 0, 99 ]

[ 2, 33, 12, 0, 99 ]

7:9

Bad_IndexRangeNoData

[ "TestString", "Test", "String" ]

0:1,7:9

[ "ing", [Null String] ]

[ "TestString", "Test", "String" ]

0:1,10:15

Bad_IndexRangeNoData