20.5 Creating User Data Types with XML Schemas (XSD)

Warning: The XSD option is deprecated and will be removed in a future release. Use IDL or XML inputs instead.

You can describe data types with XML schemas (XSD). The format is based on the standard IDL-to-WSDL mapping described in the OMG document "CORBA to WSDL/SOAP Interworking Specification."

Example Header for XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 xmlns:dds="http://www.omg.org/dds" 
 xmlns:tns="http://www.omg.org/IDL-Mapped/" 
 targetNamespace="http://www.omg.org/IDL-Mapped/">
<xsd:import namespace="http://www.omg.org/dds" 
 schemaLocation="rti_dds_topic_types_common.xsd"/>
...
</xsd:schema>

Table 20.14 Mapping Type System Constructs to XSD describes how to map IDL types to XSD. The Connext code generator, rtiddsgen, will only accept XSD files that follow this mapping.

Table 20.14 Mapping Type System Constructs to XSD

Type/Construct

Example

IDL

XSD

IDL

XSD

char

dds:char 1

struct PrimitiveStruct   

char char_member;

};
<xsd:complexType name= "PrimitiveStruct">

<xsd:sequence>

<xsd:element name="char_member"

minOccurs="1" maxOccurs="1"

type="dds:char">

</xsd:sequence>

</xsd:complexType>

wchar

dds:wchar 2

struct PrimitiveStruct {

wchar wchar_member;

};
<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name="wchar_member"

minOccurs="1" maxOccurs="1"

type="dds:wchar">

</xsd:sequence>

</xsd:complexType>

octet

xsd:

unsignedByte

struct PrimitiveStruct {

octet octet_member;

};
<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name="octet_member"

minOccurs="1" maxOccurs="1"

type="xsd:unsignedByte">

</xsd:sequence>

</xsd:complexType>

int8 3

dds:int8 4

struct PrimitiveStruct {
    int8 int8_member;
};
<xsd:complexType name= "PrimitiveStruct">
  <xsd:sequence>
    <xsd:element name="int8_member"
    minOccurs="1" maxOccurs="1"
    type="dds:int8"/>
  </xsd:sequence>
</xsd:complexType>

uint8 5

dds:uint8 6

struct PrimitiveStruct {
    uint8 uint8_member;
};
<xsd:complexType name= "PrimitiveStruct">
  <xsd:sequence>
    <xsd:element name="uint8_member"
    minOccurs="1" maxOccurs="1"
    type="dds:uint8"/>
  </xsd:sequence>
</xsd:complexType>

int16 or short

xsd:short

struct PrimitiveStruct {

int16 short_member;

};
<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name="short_member"

minOccurs="1" maxOccurs="1"

type="xsd:short"/>

</xsd:sequence>

</xsd:complexType>

uint16 or unsigned short

xsd:

unsignedShort

struct PrimitiveStruct {
  uint16 
  unsigned_short_member;
};
<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name= "unsigned_short_member" minOccurs="1" maxOccurs="1"

type="xsd:unsignedShort"/> </xsd:sequence>

</xsd:complexType>

int32 or long

xsd:int

struct PrimitiveStruct {

int32 long_member;

};
<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name="long_member"

minOccurs="1" maxOccurs="1"

type="xsd:int"/>

</xsd:sequence>

</xsd:complexType>

uint32 or unsigned long

xsd:

unsignedInt

struct PrimitiveStruct {

uint32

unsigned_long_member;

};
<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name= "unsigned_long_member"

minOccurs="1" maxOccurs="1"

type="xsd:unsignedInt"/> </xsd:sequence> </xsd:complexType>

int64 or long long

xsd:long

struct PrimitiveStruct {

int64 long_long_member;

};
<xsd:complexType name="PrimitiveStruct">
<xsd:sequence>

<xsd:elementname= "long_long_member"

minOccurs="1" maxOccurs="1"

type="xsd:long"/>

</xsd:sequence>

</xsd:complexType>

uint64 or unsigned long long

xsd:

unsignedLong

struct PrimitiveStruct {

uint64

unsigned_long_long_member;

};
<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name= "unsigned_long_long_member"

minOccurs="1" maxOccurs="1"

type="xsd:unsignedLong"/>

</xsd:sequence>

</xsd:complexType>

float

xsd:float

struct PrimitiveStruct {

float float_member;

};
<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name="float_member"

minOccurs="1" maxOccurs="1"

type="xsd:float"/> </xsd:sequence>

</xsd:complexType>

double

xsd:double

struct PrimitiveStruct {

double double_member;

};
<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name="double_member"

minOccurs="1" maxOccurs="1"

type="xsd:double"/> </xsd:sequence> </xsd:complexType>

long

double

dds:

longDouble

struct PrimitiveStruct {

long double

long_double_member;

};
<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name= "long_double_member"

minOccurs="1" maxOccurs="1"

type="dds:longDouble"/>

</xsd:sequence>

</xsd:complexType>

boolean

xsd:boolean

struct PrimitiveStruct {

boolean boolean_member;

};
<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name="boolean_member"

minOccurs="1" maxOccurs="1"

type="xsd:boolean"/> </xsd:sequence> </xsd:complexType>

unbounded string

xsd:string

struct PrimitiveStruct {

string string_member;

};
<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name="string_member"

minOccurs="1" maxOccurs="1"

type="xsd:string"/>

</xsd:sequence>

</xsd:complexType>

bounded string

xsd:string with restriction

to specify maximum length

struct PrimitiveStruct {

string<20> string_member;

};
<xsd:complexType name=

"PrimitiveStruct_string_member_BoundedString"> <xsd:sequence> <xsd:element name="item" minOccurs="1" maxOccurs="1"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="20" fixed="true"/> </xsd:restriction> </xsd:simpleType>

</xsd:element> </xsd:sequence> </xsd:complexType>

<xsd:complexType name= "PrimitiveStruct"> <xsd:sequence> <xsd:element name="string_member" minOccurs="1" maxOccurs="1" type= "tns:PrimitiveStruct_string_member_BoundedString"/>

</xsd:sequence> </xsd:complexType>

unbounded wstring

dds:wstring 7

struct PrimitiveStruct {

wstring wstring_member;

};
<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name="wstring_member"

minOccurs="1" maxOccurs="1"

type="dds:wstring"/> </xsd:sequence> </xsd:complexType>

bounded wstring

xsd:wstring with restriction

to specify maximum

length

struct PrimitiveStruct {

wstring<20> wstring_member;

};
<xsd:complexType name=
 "PrimitiveStruct_wstring_member_BoundedString"
  <xsd:sequence>
    <xsd:element name="item" 
     minOccurs="1" maxOccurs="1">
     <xsd:simpleType>
       <xsd:restriction base="dds:wstring">
         <xsd:maxLength value="20" 
          fixed="true"/>
         </xsd:restriction>
     </xsd:simpleType>
    </xsd:element>
  </xsd:sequence>
</xsd:complexType>

<xsd:complexType 
 name= "PrimitiveStruct">
  <xsd:sequence>
    <xsd:element 
     name="wstring_member" 
     minOccurs="1" 
     maxOccurs="1" 
     type=
  "tns:PrimitiveStruct_wstring_member_BoundedString"/>
  </xsd:sequence>
</xsd:complexType>

enum

xsd:simpleType with

enumeration

enum PrimitiveEnum {

ENUM1,

ENUM2,

ENUM3

};
<xsd:simpleType name="PrimitiveEnum">
  <xsd:restriction base="xsd:string">
     <xsd:enumeration value="ENUM1"/>
     <xsd:enumeration value="ENUM2"/>
     <xsd:enumeration value="ENUM3"/>
  </xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="PrimitiveEnum">
  <xsd:restriction base="xsd:string">
    <xsd:enumeration value="ENUM1">
      <xsd:annotation>
        <xsd:appinfo>
          <ordinal>10</ordinal>
        </xsd:appinfo>
      </xsd:annotation>
    </xsd:enumeration>
    <xsd:enumeration value="ENUM2">
      <xsd:annotation>
        <xsd:appinfo>
          <ordinal>20</ordinal>
        </xsd:appinfo>
      </xsd:annotation>
    </xsd:enumeration>
    <xsd:enumeration value="ENUM3">
      <xsd:annotation>
        <xsd:appinfo>
          <ordinal>30</ordinal>
        </xsd:appinfo>
      </xsd:annotation>
    </xsd:enumeration>
  </xsd:restriction>
</xsd:simpleType>

 

 

enum PrimitiveEnum {

ENUM1 = 10,

ENUM2 = 20,

ENUM3 = 30

};
<xsd:simpleType name="PrimitiveEnum">
  <xsd:restriction base="xsd:string">
    <xsd:enumeration value="ENUM1">
      <xsd:annotation>
        <xsd:appinfo>
          <ordinal>10</ordinal>
        </xsd:appinfo>
      </xsd:annotation>
    </xsd:enumeration>
    <xsd:enumeration value="ENUM2">
      <xsd:annotation>
        <xsd:appinfo>
          <ordinal>20</ordinal>
        </xsd:appinfo>
      </xsd:annotation>
    </xsd:enumeration>
    <xsd:enumeration value="ENUM3">
      <xsd:annotation>
        <xsd:appinfo>
          <ordinal>30</ordinal>
        </xsd:appinfo>
      </xsd:annotation>
    </xsd:enumeration>
  </xsd:restriction>
</xsd:simpleType>

constant

IDL constants are mapped by substituting their value directly in the generated file

struct

xsd:complexType

with xsd:sequence

struct PrimitiveStruct {

short short_member;

};

<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name="short_member"

minOccurs="1" maxOccurs="1" type="xsd:short"/> </xsd:sequence>

</xsd:complexType>

union

xsd:complexType

with xsd:choice

union PrimitiveUnion

switch (long) {

case 1:

short short_member;

default:

long long_member; };
<xsd:complexType name="PrimitiveUnion">
  <xsd:sequence>
    <xsd:element name="discriminator" 
     type="xsd:int"/>
    <xsd:choice>
      <!-- case 1 -->8
      <xsd:element name="short_member"

minOccurs="0" maxOccurs="1"

type="xsd:short"> <xsd:annotation> <xsd:appinfo> <case>1</case> </xsd:appinfo> </xsd:annotation> </xsd:element> <!-- case default --> <xsd:element name="long_member"

minOccurs="0" maxOccurs="1"

type="xsd:int"> <xsd:annotation> <xsd:appinfo> <case>default</case> </xsd:appinfo> </xsd:annotation> </xsd:element> </xsd:choice> </xsd:sequence> </xsd:complexType>

value-type

xsd:complexType

with @valuetype annotation

valuetype BaseValueType {

public long long_member; }; valuetype DerivedValueType: BaseValueType { public long long_member2; public long long_member3; };
<xsd:complexType name="BaseValueType">
  <xsd:sequence>

<xsd:element name=”long_member"

maxOccurs="1" minOccurs="1"

type="xs:int"/> <!-- @visibility public --> </xsd:sequence> </xs:complexType> <!-- @valuetype true --> <xs:complexType name="DerivedValueType">

<xs:complexContent>

<xs:extension base="BaseValueType">

<xs:sequence>

<xs:element name="long_member2"

maxOccurs="1" minOccurs="1"

type="xs:int"/>

<!-- @visibility public -->

<xs:element name="long_member3" maxOccurs="1" minOccurs="1"

type="xs:int"/>

<!-- @visibility public -->

</xs:sequence>

</xs:extension>

</xs:complexContent>

</xs:complexType>

<!-- @valuetype true -->

typedef

Type definitions are

mapped to XML schema

type restrictions

typedef short ShortType;
struct PrimitiveStruct {
  short short_member;
};

typedef PrimitiveType = 
  PrimitiveStructType;
<xsd:simpleType name="ShortType">
  <xsd:restriction base="xsd:short"/>
</xsd:simpleType>

<!—- Struct definition -->
<xsd:complexType name="PrimitiveStruct">

<xsd:sequence>

<xsd:element name="short_member"

minOccurs="1" maxOccurs="1"

type="xsd:short"/> </xsd:sequence>

</xsd:complexType> <!—- Typedef definition --> <xsd:complexType

name="PrimitiveTypeStructType">

<xsd:complexContent>

<xsd:restriction base=”PrimitiveStruct”>

<xsd:sequence>

<xsd:element name="short_member"

minOccurs="1" maxOccurs="1"

type="xsd:short"/>

</xsd:sequence>

</xsd:restriction> </xsd:complexContent> </xsd:complexType>

arrays

n xsd:complexType with

sequence containing one

element with

min & max occurs

There is one xsd:complexType

per array dimension

struct 
OneArrayStruct {
  short short_array[2];
};
<!-- Array type -->
<xsd:complexType name=
 "OneArrayStruct_short_array_ArrayOfShort">
  <xsd:sequence>
    <xsd:element name="item" minOccurs="2"
     maxOccurs="2" type="xsd:short">
    </xsd:element>
  </xsd:sequence>
</xsd:complexType>

<!-- Struct w unidimensional array member -->
<xsd:complexType name="OneArrayStruct">
  <xsd:sequence>
    <xsd:element name="short_array"
     minOccurs="1" maxOccurs="1"
     type=
   "OneArrayStruct_short_array_ArrayOfShort"/>
  </xsd:sequence>
</xsd:complexType>

arrays (cont’d)

n xsd:complexType with

sequence containing one

element with min & max

occurs

There is one

xsd:complexType per array dimension

struct 
TwoArrayStruct {
  short short_array[2][1];
};
<!--Second dimension array type -->
<xsd:complexType name=
 "TwoArrayStruct_short_array_ArrayOfShort">
  <xsd:sequence>
    <xsd:element name="item" 
     minOccurs="2" maxOccurs="2" 
     type="xsd:short">
    </xsd:element>
  </xsd:sequence>
</xsd:complexType>

<!-- First dimension array type -->
<xsd:complexType name=
 "TwoArrayStruct_short_array_ArrayOfArrayOfShort">
    <xsd:sequence>
      <xsd:element name="item" 
       minOccurs="1" maxOccurs="1" 

type=

"TwoArrayStruct_short_array_ArrayOfShort"> </xsd:element> </xsd:sequence> </xsd:complexType> <!--Struct containing a bidimensional array

member --> <xsd:complexType name="TwoArrayStruct"> <xsd:sequence> <xsd:element name="short_array" minOccurs="1" maxOccurs="1" type= "TwoArrayStruct_short_array_ArrayOfArrayOfShort"/> </xsd:sequence> </xsd:complexType>

bounded sequence

xsd:complexType with

sequence containing one element

with min & max occurs

struct 
SequenceStruct {

sequence<short,4>

short_sequence; };
<!-- Sequence type -->

<xsd:complexType name= "SequenceStruct_short_sequence_SequenceOfShort">

<xsd:sequence>

<xsd:element name="item" minOccurs="0"

maxOccurs="4" type="xsd:short">

</xsd:element>

</xsd:sequence>

</xsd:complexType> <!-- Struct containing a bounded sequence

member --> <xsd:complexType name="SequenceStruct"> <xsd:sequence> <xsd:element name="short_sequence" minOccurs="1" maxOccurs="1" type= "SequenceStruct_short_sequence_SequenceOfShort"/> </xsd:sequence> </xsd:complexType>

unbounded sequence

xsd:complexType with sequence

containing one element with

min & max occurs

struct 
SequenceStruct {

sequence<short> short_sequence; };
<!-- Sequence type -->
<xsd:complexType name=
  "SequenceStruct_short_sequence_SequenceOfShort">
  <xsd:sequence>
    <xsd:element name="item" 

minOccurs="0" maxOccurs="unbounded"

type="xsd:short"/> </xsd:sequence> </xsd:complexType> <!-- Struct containing unbounded sequence member --> <xsd:complexType name="SequenceStruct"> <xsd:sequence> <xsd:element name="short_sequence" minOccurs="1" maxOccurs="1"

type= "SequenceStruct_short_sequence_SequenceOfShort"/> </xsd:sequence> </xsd:complexType>

array of sequences

n + 1 xsd:complexType with

sequence containing one element

with min & max occurrences.

There is one xsd:complexType per

array dimension and one

xsd:complexType for the sequence.

struct 
ArrayOfSequencesStruct {
  sequence<short,4>
  sequence_sequence[2];
};

<!-- Sequence declaration -->

<xsd:complexType name=

"ArrayOfSequencesStruct_sequence_array_SequenceOfShort">

<xsd:sequence>

<xsd:element name="item"

minOccurs="0" maxOccurs="4"

type="xsd:short">

</xsd:element>

</xsd:sequence>

</xsd:complexType>

<!-- Array declaration -->

<xsd:complexType name=

"ArrayOfSequencesStruct_sequence_array_ArrayOf

SequenceOfShort"> <xsd:sequence> <xsd:element name="item" minOccurs="2" maxOccurs="2" type= "ArrayOfSequencesStruct_sequence_array_SequenceOfShort"> </xsd:element> </xsd:sequence> </xsd:complexType> <!-- Structure containing a member that is an array of sequences --> <xsd:complexType name="ArrayOfSequencesStruct"> <xsd:sequence> <xsd:element name="sequence_array" minOccurs="1" maxOccurs="1" type= "ArrayOfSequencesStruct_sequence_array_ArrayOf

SequenceOfShort"/> </xsd:sequence> </xsd:complexType>

sequence of arrays

Sequences of arrays must be

implemented using an explicit

type definition (typedef) for

the array

typedef 
short ShortArray[2];

struct 
SequenceOfArraysStruct {
  sequence<ShortArray,2> 
  arrays_sequence;
};
<!-- Array declaration -->

<xsd:complexType name="ShortArray">

<xsd:sequence> <xsd:element name="item" minOccurs="2" maxOccurs="2"

type="xsd:short"> </xsd:element> </xsd:sequence> </xsd:complexType> <!-- Sequence declaration --> <xsd:complexType name= "SequencesOfArraysStruct_array_sequence_SequenceOfShortArray"> <xsd:sequence>

<xsd:element name="item" minOccurs="0" maxOccurs="2" type="ShortArray"> </xsd:element> </xsd:sequence>

</xsd:complexType>



<!-- Struct containing a sequence of arrays -->

<xsd:complexType name="SequenceOfArraysStruct">

<xsd:sequence>

<xsd:element name="arrays_sequence"

minOccurs="1" maxOccurs="1" type=

"SequencesOfArraysStruct_arrays_sequence_SequenceOfShortArray"/>

</xsd:sequence>

</xsd:complexType>

sequence of sequences

Sequences of sequences must

be implemented using an

explicit type definition (typedef)

for the second sequence

typedef sequence<short,4> 
  ShortSequence;

struct 
SequenceOfSequences {

sequence<ShortSequence,2> sequences_sequence;

};
<!-- Internal sequence declaration -->
<xsd:complexType name="ShortSequence">
  <xsd:sequence>
    <xsd:element name="item" 
     minOccurs="0" maxOccurs="4"
     type="xsd:short">
    </xsd:element>
    </xsd:sequence>
</xsd:complexType>

<!-- External sequence declaration -->

<xsd:complexType name=

"SequencesOfSequences_sequences_sequence_SequenceOfShortSequence"> <xsd:sequence> <xsd:element name="item"

minOccurs="0" maxOccurs="2" type="ShortSequence"> </xsd:element> </xsd:sequence> </xsd:complexType> <!--Struct containing sequence of sequences --> <xsd:complexType name="SequenceOfSequences"> <xsd:sequence> <xsd:element name="sequences_sequence" minOccurs="1" maxOccurs="1" type="SequencesOfSequences_ sequences_sequence_SequenceOfShortSequence"/> </xsd:sequence> </xsd:complexType>

module

Modules are mapped adding the

name of the module before the

name of each type inside the module

module PackageName {
  struct PrimitiveStruct {
    long long_member;
  };

};
<xsd:complexType name=

"PackageName.PrimitiveStruct"> <xsd:sequence> <xsd:element name="long_member"

minOccurs="1" maxOccurs="1"

type="xsd:int"/>

</xsd:sequence> </xsd:complexType>

include

xsd:include

#include "PrimitiveType.idl"
<xsd:include schemaLocation=

"PrimitiveType.xsd"/>

@key

annotation9

<!--

@key <true|false|1|0>

-->

Default (if not specified): false

struct
KeyedPrimitiveStruct
{ 
  @key short 
    short_member; 
};
<xsd:complexType 
 name="KeyedPrimitiveStruct">

<xsd:sequence>

<xsd:element name="long_member"

minOccurs="1" maxOccurs="1"

type="xsd:int"/> <!-- @key true --> </xsd:sequence>

</xsd:complexType>

@external or pointer

<!-- @external

<true|false|1|0>

-->

Default if not specified: false

struct PrimitiveStruct {
  @external long 
  long_member;
};
<xsd:complexType 
 name="PrimitiveStruct">
    <xsd:sequence>
      <xsd:element 
       name="long_member"
       minOccurs="1" 
       maxOccurs="1"
       type="xsd:int"/>
       <!-- @external true -->
    </xsd:sequence>
</xsd:complexType>

@optional annotation

minOccurs attribute set to 0 or 1

Default (if not present): 1

struct Point {
  long x;
  long y;
  @optional long z;
};
<xsd:complexType name= "Point">
  <xsd:sequence>
    <xsd:element name="x" minOccurs="1" maxOccurs="1" type="xsd:int"/>
    <xsd:element name="y" minOccurs="1" maxOccurs="1" type="xsd:int"/>
    <xsd:element name="z" minOccurs="0" maxOccurs="1" type="xsd:int"/>
  </xsd:sequence>
</xsd:complexType>
<!-- @struct true -->

@id annotation

<!-- @id <value> -->

Default (if not present): id calculated based on the @autoid value of the enclosing type and module(s)

@mutable
struct Point {
  @id(56) long x;
  @id(57) long y;
  long z;
};
<xsd:complexType name= "Point">
  <xsd:sequence>
    <xsd:element name="x" minOccurs="1" maxOccurs="1" type="xsd:int"/>
    <!-- @id 56 -->
    <xsd:element name="y" minOccurs="1" maxOccurs="1" type="xsd:int"/>
    <!-- @id 57 -->
    <xsd:element name="z" minOccurs="1" maxOccurs="1" type="xsd:int"/>
  </xsd:sequence>
</xsd:complexType>
<!-- @struct true -->
<!-- @extensibility mutable-->

@hashid annotation

<!-- @hashid [<value>] →

Default (if not present). id calculated based on the @autoid value of the enclosing type and module(s)

@mutable
struct Point {
  @hashid long x;
  @hashid(“other_y”) 
  long y;
};
<xsd:complexType name= "Point">
  <xsd:sequence>
    <xsd:element name="x" minOccurs="1" maxOccurs="1" type="xsd:int"/>
    <!-- @hashid -->
    <xsd:element name="y" minOccurs="1" maxOccurs="1" type="xsd:int"/>
    <!-- @hashid other_y-->
  </xsd:sequence>
</xsd:complexType>
<!-- @struct true -->
<!-- @extensibility mutable-->

@value annotation

<!-- @ordinal <value>-->

Default (if not present): the value of the previous enumerator plus 1

enum PrimitiveEnum {
  @value (10) ENUM1,
  @value (20) ENUM2,
  ENUM3
} 
<xsd:simpleType name="PrimitiveEnum">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="ENUM1">
          <xsd:annotation>
            <xsd:appinfo>
              <ordinal>10</ordinal>
            </xsd:appinfo>
          </xsd:annotation>
        </xsd:enumeration>
        <!-- @ordinal 10-->
        <xsd:enumeration value="ENUM2">
          <xsd:annotation>
            <xsd:appinfo>
              <ordinal>20</ordinal>
            </xsd:appinfo>
          </xsd:annotation>
        </xsd:enumeration>
        <!-- @ordinal 20-->
        <xsd:enumeration value="ENUM3">
        </xsd:enumeration>
    </xsd:restriction>
</xsd:simpleType> 

@default_literal annotation

default_literal appinfo annotation with values true, false, 0, or 1

Default (if not present): 0"

enum MyEnum {
  ENUM1,
  @default_literal
  ENUM2
};
<xsd:simpleType name="MyEnum">
  <xsd:restriction base="xsd:string">
    <xsd:enumeration value="ENUM1">
    </xsd:enumeration>
    <xsd:enumeration value="ENUM2">
      <xsd:annotation>
        <xsd:appinfo>
          <default_literal>true</default_literal>
        </xsd:appinfo>
      </xsd:annotation>
    </xsd:enumeration>
  </xsd:restriction>
</xsd:simpleType>

@default annotation

default attribute for elements inside a structure, default appinfo annotation for type definitions

Default (if not present in this member or its alias types): 0, the empty string, or whichever enumerator is the default_literal

@default(24)
typedef long MyLongTypedefWithDefault;
struct Point {
  @default(42)
  long x;
 MyLongTypedefWithDefault y;
};
<xsd:simpleType name="MyLongTypedefWithDefault">
  <xsd:restriction base="xsd:int">
    <xsd:annotation>
      <xsd:appinfo>
        <default>24</default>
      </xsd:appinfo>
    </xsd:annotation>
  </xsd:restriction>
</xsd:simpleType>
<xsd:complexType name= "Point">
  <xsd:sequence>
    <xsd:element name="x" minOccurs="1" maxOccurs="1" type="xsd:int" default="42"/>
    <xsd:element name="y" minOccurs="1" maxOccurs="1" type="tns:MyLongTypedefWithDefault"/>
  </xsd:sequence>
</xsd:complexType>

@default annotation (strings)

default attribute for alias elements inside a structure, default appinfo annotation for type definitions and regular strings inside a structure

Default (if not present in this member or its alias types): 0, the empty string, or whichever enumerator is the default_literal

@default("myDefault")
typedef string MyStringTypedefWithDefault;
struct DefaultString {
  @default("string")
  string x;
MyStringTypedefWithDefault y;
  @default("myDefaultDefault")
MyStringTypedefWithDefault z;
};
<xsd:simpleType name="MyStringTypedefWithDefault">
  <xsd:restriction base="xsd:string">
    <xsd:annotation>
      <xsd:appinfo>
        <default>"myDefault"</default>
      </xsd:appinfo>
    </xsd:annotation>
    <xsd:maxLength value="255" fixed="true"/>
   </xsd:restriction>
</xsd:simpleType>
  <xsd:complexType name="DefaultString_x_BoundedString">
    <xsd:sequence>
      <xsd:element name="item" minOccurs="1" maxOccurs="1">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:maxLength value="255" fixed="true"/>
          </xsd:restriction>
        </xsd:simpleType>
       </xsd:element>
     </xsd:sequence>
   </xsd:complexType>
  <xsd:complexType name= "DefaultString">
  <xsd:sequence>
    <xsd:element name="x" minOccurs="1" maxOccurs="1" type=""tns:DefaultString_x_BoundedString"">
      <xsd:annotation>
        <xsd:appinfo>
          <default>"string"</default>
          </xsd:appinfo>
      </xsd:annotation>
    </xsd:element>
    <xsd:element name="y" minOccurs="1" maxOccurs="1" type="tns:MyStringTypedefWithDefault"/>
     <xsd:element name="z" minOccurs="1" maxOccurs="1" type="tns:MyStringTypedefWithDefault" default="myDefaultDefault"/>
  </xsd:sequence>
</xsd:complexType>

@min annotation

minInclusive attribute for elements inside a structure, min appinfo annotation for type definitions

Default (if not present in this member or its alias types): the minimum possible value of the type

@min(-32)
typedef long myLongDefault;
struct Point {
  @min(-32)
  long x;
  long y;
  myLongDefault myX;
};
<xsd:simpleType name="myLongDefault">
  <xsd:restriction base="xsd:int">
    <xsd:annotation>
      <xsd:appinfo>
        <min>-32</min>
      </xsd:appinfo>
    </xsd:annotation>
  </xsd:restriction>
</xsd:simpleType>
<xsd:complexType name= "Point">
  <xsd:sequence>
    <xsd:element name="x" minOccurs="1" maxOccurs="1">
      <xsd:simpleType>
        <xsd:restriction base="xsd:int">
          <xsd:minInclusive value="-32"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:element>
    <xsd:element name="y" minOccurs="1" maxOccurs="1" type="xsd:int"/>
    <xsd:element name="myX" minOccurs="1" maxOccurs="1" type="tns:myLongDefault"/>
  </xsd:sequence>
</xsd:complexType>

@max annotation

maxInclusive attribute for elements inside an structure, max appinfo annotation for types definitions

Default (if not present in this member or its alias types): the maximum possible value of the type

@max(31)
typedef long myLongDefault;
struct Point {
  @max(31)
  long x;
  long y;
  myLongDefault myX;
};
<xsd:simpleType name="myLongDefault">
  <xsd:restriction base="xsd:int">
    <xsd:annotation>
      <xsd:appinfo>
        <max>31</max>
      </xsd:appinfo>
    </xsd:annotation>
  </xsd:restriction>
</xsd:simpleType>
<xsd:complexType name= "Point">
  <xsd:sequence>
    <xsd:element name="x" minOccurs="1" maxOccurs="1">
      <xsd:simpleType>
        <xsd:restriction base="xsd:int">
          <xsd:maxInclusive value="31"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:element>
    <xsd:element name="y" minOccurs="1" maxOccurs="1" type="xsd:int"/>
    <xsd:element name="myX" minOccurs="1" maxOccurs="1" type="tns:myLongDefault"/>
  </xsd:sequence>
</xsd:complexType>

@range annotation

Not supported. Use min and max attributes instead

@range(min = -32, max = 31)
typedef long myLongDefault;
struct Point {
  @range(min = -32, max = 31)
  long x;
  long y;
  myLongDefault myX;
};
<xsd:simpleType name="myLongDefault">
  <xsd:restriction base="xsd:int">
    <xsd:annotation>
      <xsd:appinfo>
        <min>-32</min>
        <max>31</max>
      </xsd:appinfo>
    </xsd:annotation>
  </xsd:restriction>
</xsd:simpleType>
<xsd:complexType name= "Point">
  <xsd:sequence>
    <xsd:element name="x" minOccurs="1" maxOccurs="1">
      <xsd:simpleType>
        <xsd:restriction base="xsd:int">
          <xsd:minInclusive value="-32"/>
          <xsd:maxInclusive value="31"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:element>
    <xsd:element name="y" minOccurs="1" maxOccurs="1" type=""xsd:int""/>
    <xsd:element name="myX" minOccurs="1" maxOccurs="1" type="tns:myLongDefault"/>
  </xsd:sequence>
</xsd:complexType>

@autoid annotation

<!-- @autoid [<hash|sequential>] -->

Default (if not present): the @autoid value in ancestor module(s) or sequential if not specified.

@mutable
@autoid(HASH)
struct Point {
  long x;
  long y;
};
<xsd:complexType name= "Point">
  <xsd:sequence>
    <xsd:element name="x" minOccurs="1" maxOccurs="1" type="xsd:int"/>
    <xsd:element name="y" minOccurs="1" maxOccurs="1" type="xsd:int"/>
  </xsd:sequence>
</xsd:complexType>
<!-- @struct true -->
<!-- @autoid hash-->
<!-- @extensibility mutable-->

@nested or @top-level annotation

<!--

@topLevel <true|false|1|0>

-->

Default (if not specified): true

@nested 
struct
TopLevelPrimitiveStruct {
    short short_member;
};

or

@top-level(false)
struct
TopLevelPrimitiveStruct {
    short short_member;
}; 
<xsd:complexType
  name="TopLevelPrimitiveStruct">
  <xsd:sequence> 
    <xsd:element name="short_member"
     minOccurs="1" maxOccurs="1"
     type="xsd:short"/>
  </xsd:sequence>
</xsd:complexType>
<!-- @nested true-->

@default_nested and @topic annotations

default_nested marks all the types inside of a module as nested

topic overrides this behavior, marking a type as not nested

@default_nested
module nested_module{
    struct NestedStruct {
        short m1;
    };

 

    @topic
    struct NotNestedStruct {
        short m2;
    };
};
<xsd:complexType name= "nested_module.NestedStruct">
  <xsd:sequence>
    <xsd:element name="m1" minOccurs="1" maxOccurs="1" type="xsd:short"/>
  </xsd:sequence>
</xsd:complexType>
<!-- @nested true -->
<!-- @struct true -->
<xsd:complexType name= "nested_module.NotNestedStruct">
  <xsd:sequence>
    <xsd:element name="m2" minOccurs="1" maxOccurs="1" type="xsd:short"/>
  </xsd:sequence>
</xsd:complexType>
<!-- @struct true -->

@extensibility, @mutable, @appendable, or @final annotation

<!-- @extensibility <final|appendable|mutable> →

Default (if not present): appendable

@mutable
struct Point {
    long x;
    long y;
};
<xsd:complexType name= "Point">
  <xsd:sequence>
    <xsd:element name="x" minOccurs="1" maxOccurs="1" type="xsd:int"/>
    <xsd:element name="y" minOccurs="1" maxOccurs="1" type="xsd:int"/>
    </xsd:sequence>
  </xsd:complexType>
<!-- @struct true -->
<!-- @extensibility mutable-->

@data_representation 10

<!-- @data_representation <xcdr|xcdr2|xml> -->

Default (if not present): xcdr2 for flat data language binding; the @data_representation value in ancestor module(s) or (xcdr|xcdr2) for plain language

@data_representation(XCDR2)
@mutable
struct Point {
  long x;
  long y;
};
<xsd:complexType name= "Point">
  <xsd:sequence>
    <xsd:element name="x" minOccurs="1" maxOccurs="1" type="xsd:int"/>
    <xsd:element name="y" minOccurs="1" maxOccurs="1" type="xsd:int"/>
  </xsd:sequence>
</xsd:complexType>
<!-- @struct true -->
<!-- @data_representation xcdr2-->
<!-- @extensibility mutable-->

@use_vector annotation

<!-- @use_vector <true|false|1|0> -->

Default (if not present): false unless code generated with -alwaysUseStdVector

@use_vector

sequence<boolean,5> myBooleanSeq;
<xsd:element name="myBooleanSeq" 
 minOccurs="1" maxOccurs="1" 
 type=
"tns:SequenceType_myBooleanSeq_SequenceOfboolean"/>
<!-- @use_vector true -->

@language_binding annotation

<!-- @languageBinding <plain|flat_data> -->

Default (if not present): the @language_binding value in ancestor module(s) or plain if not specified

@language_binding
(FLAT_DATA)
@final
struct Point {
  long x;
  long y;
};
<xsd:complexType name= "Point">
    <xsd:sequence>
      <xsd:element name="x" minOccurs="1" 
          maxOccurs="1" type="xsd:int"/>
      <xsd:element name="y" minOccurs="1" 
          maxOccurs="1" type="xsd:int"/>
  </xsd:sequence>
</xsd:complexType>
<!-- @struct true -->
<!-- @language_binding flat_data-->
<!-- @extensibility final-->

@transfer_ mode annotation

<!-- @transferMode <inband|shmem_ref> -->

Default (if not present): the @transfer_mode value in ancestor module(s) or inband if not specified

@language_binding
(SHMEM_REF)
struct Point {
  long x;
  long y;
};
<xsd:complexType name= "Point">
    <xsd:sequence>
      <xsd:element name="x" minOccurs="1" 
          maxOccurs="1" type="xsd:int"/>
      <xsd:element name="y" minOccurs="1" 
          maxOccurs="1" type="xsd:int"/>
  </xsd:sequence>
</xsd:complexType>
<!-- @struct true -->
<!-- @transfer_mode shmem_ref-->

@resolve_name annotation

<!--

@resolveName

<true|false|1|0>

-->

Default (if not specified): @resolve_name of the parent type or false if not specified on parent

struct 
UnresolvedPrimitiveStruct {

@resolve_name(false) PrimitiveStruct primitive_member; };
<xsd:complexType 
  name="UnresolvedPrimitiveStruct">

<xsd:sequence>

<xsd:element name="primitive_member"

minOccurs="1" maxOccurs="1"

type="PrimitiveStruct"/>

<!-- @resolveName false --> </xsd:sequence>

</xsd:complexType>

other annotations

<!--

@<directive kind>

<value>

-->

//@copy This text will be 
  copied in the generated 
  files
<!--@copy This text will be copied in the generated files -->