syntax = "proto3"; option java_package = "ucar.nc2.stream"; option java_outer_classname = "NcStreamProto"; message Attribute { enum Type { // < 5.0 STRING = 0; BYTE = 1; SHORT = 2; INT = 3; LONG = 4; FLOAT = 5; DOUBLE = 6; } string name = 1; Type type = 2; // < 5.0 uint32 len = 3; bytes data = 4; // not needed if len == 0, Attribute with name but no value repeated string sdata = 5; // used for string data bool unsigned = 6; // not used DataType dataType = 7; // 5.0: cant use STRUCTURE or SEQUENCE or OPAQUE or ENUM; CHAR deprecated, use STRING } enum DataType { CHAR = 0; BYTE = 1; SHORT = 2; INT = 3; LONG = 4; FLOAT = 5; DOUBLE = 6; STRING = 7; STRUCTURE = 8; SEQUENCE = 9; ENUM1 = 10; ENUM2 = 11; ENUM4 = 12; OPAQUE = 13; UBYTE = 14; USHORT = 15; UINT = 16; ULONG = 17; } message Dimension { string name = 1; // short name - optional when private uint64 length = 2; // optional when vlen, may be zero (unlimited no data yet) bool isUnlimited = 3; // is this needed ?? bool isVlen = 4; bool isPrivate = 5; } message Variable { string name = 1; // short name DataType dataType = 2; repeated Dimension shape = 3; // actual dimension instead of reference repeated Attribute atts = 4; bool unsigned = 5; // not used >= 5 bytes data = 6; // "immediate" - store small data in header string enumType = 7; // EnumTypedef name, only for enum types } message Structure { string name = 1; // short name DataType dataType = 2; // STRUCTURE or SEQUENCE repeated Dimension shape = 3; // actual dimension instead of reference repeated Attribute atts = 4; repeated Variable vars = 5; // members repeated Structure structs = 6; // struct members } message EnumTypedef { message EnumType { uint32 code = 1; string value = 2; } string name = 1; repeated EnumType map = 2; } message Group { string name = 1; // short name repeated Dimension dims = 2; repeated Variable vars = 3; repeated Structure structs = 4; repeated Attribute atts = 5; repeated Group groups = 6; repeated EnumTypedef enumTypes = 7; } message Header { string location = 1; string title = 2; // ?? string id = 3; // ?? Group root = 4; uint32 version = 5; } ////////////////////////////////// message Error { string message = 1; uint32 code = 2; } enum Compress { NONE = 0; DEFLATE = 1; } message Range { uint64 start = 1; uint64 size = 2; uint64 stride = 3; } message Section { repeated Range range = 1; } //////////////////////////////////////////////////////// // Data version 1 message Data { string varName = 1; // full escaped name. DataType dataType = 2; Section section = 3; // not required for SEQUENCE oneof bigend_present { bool bigend = 4; // [default=true] in proto2 } uint32 version = 5; // version=2 for proto2, >=3 for proto3 (v5.0+) Compress compress = 6; bool vdata = 7; uint32 uncompressedSize = 8; } message StructureData { repeated uint32 member = 1; // list of members present, if none then all, these are the index in Structure bytes data = 2; // fixed length data repeated uint32 heapCount = 3; // heap String count repeated string sdata = 4; // Strings uint64 nrows = 5; // [default = 1] number of rows in this message uint32 rowLength = 6; // length in bytes of each row } ////////////////////////////////// // Data version 2 - col oriented message DataCol { string name = 1; // fullname for top, shortname for member DataType dataType = 2; Section section = 3; bool bigend = 4; uint32 version = 5; bool isVlen = 7; uint32 nelems = 9; // oneof bytes primdata = 10; // rectangular, primitive array repeated string stringdata = 11; // string dataType repeated uint32 vlens = 12; // isVlen true repeated bytes opaquedata = 13; // opaque dataType // structures ArrayStructureCol structdata = 14; // structure/seq dataType } message ArrayStructureCol { repeated DataCol memberData = 1; } ////////////////////////////////// // Data version 2 - row oriented message DataRow { string fullName = 1; DataType dataType = 2; Section section = 3; bool bigend = 4; uint32 version = 5; bool isVlen = 7; uint32 nelems = 9; bytes primdata = 10; // rectangular, primitive array repeated string stringdata = 11; // string dataType repeated uint32 vlens = 12; // vlen lengths repeated bytes opaquedata = 13; // opaque dataTypes ArrayStructureRow structdata = 14;// structure/seq dataType } message Member { string shortName = 1; DataType dataType = 2; repeated uint32 shape = 3; // or section? bool isVlen = 4; } message ArrayStructureRow { repeated Member members = 1; uint64 nrows = 5; // number of rows in this message uint32 rowLength = 6; // length in bytes of each row bytes fixdata = 10; // fixed data repeated string stringdata = 11; // string dataType repeated bytes bytedata = 13; // opaque dataType and vlens repeated ArrayStructureRow structdata = 14; // structure/seq dataType } ////////////////////////////////// // cd netcdf-java/cdm/src/main/java // protoc --proto_path=. --java_out=. ucar/nc2/stream/ncStream.proto