A data set (C++, Go, Python) represents an in-memory cache of records that is structured similarly to information defined in a database. The data set object consists of a collection of data table (C++, Go, Python) objects.
Data tables define of collection of data columns (C++, Go, Python) where each data column defines a name and data type (C++, Go, Python). Data columns can also be computed where its value would be derived from other columns and functions defined in an expression.
Data tables also define a set of data rows (C++, Go, Python) where each data row defines a record of information with a field value for each defined data column. Each field value can be
null regardless of the defined data column type.
A data set schema and associated records can be read from and written to XML documents. The XML specification used for serialization is the standard for W3C XML Schema Definition Language (XSD). See the ReadXml and WriteXml functions.
The STTP data set functionality is modeled after, and generally interoperable with, the .NET DataSet. Serialized XML schemas and data saved from a .NET DataSet can be successfully parsed from an STTP data set and vice versa. Note that STTP requires that the schema be included with serialized XML data sets, see XmlWriteMode.WriteSchema. The STTP API does not attempt to infer a schema from the data. Interoperability with .NET XML schemas also includes DataColumn expression functionality, however, STTP defines more functions than the .NET implementation, so a serialized STTP data set that includes column expressions using functions not available to a .NET DataColumn will fail to evaluate when accessed from within .NET. Another difference from .NET is that the STTP implementation is always case-insensitive for table and column name lookups as the primary use-case for STTP data sets is for use with filter expressions.