Here is a fragment of a proposal for representing XQuery Data for elements, attributes, and sequence in byte form. More data type will follow later.

These byte representations would be used by all the functions to interpret data and implement XQuery functionality.

Element {
  ElementHeader header;
  Metadata md?;
  NamePtr namePtr;
  NodeId nodeId?;
  NamePtr typePtr?;
  NamespaceChunk nsChunk?;
  AttributesChunk attrChunk?;
  ChildrenChunk childrenChunk?;
}

ElementHeader (padded) {
  bit[2] mdChunkSizeSize;
  bit[2] nodeIdSizeSize;
  bit[2] nsChunkSizeSize;
  bit[2] attrChunkSizeSize;
  bit[2] childrenChunkSizeSize;
  bit typeExists;
}

Metadata {
  MetadataSize mdSize;
  // TBD: metadata data
}

NamePtr {
  byte[2] ptr;
}

NodeId {
  byte[size] id; // size = decode(ElementHeader.nodeIdSizeSize)
}

NamespaceChunk {
byte[size] chunkSizeInBytes; // size = decode(ElementHeader.nsChunkSizeSize)
  NamePtr[2][chunkSizeInBytes / (sizeof(NamePtr) * 2)] namespaces;
}

AttributeChunk {
byte[size] chunkSizeInBytes; // size = decode(ElementHeader.attrChunkSizeSize)
  Attribute* attributes;
}

Attribute {
  NamePtr name;
  varInt dataLen;
  byte[dataLen] data;
}

ChildrenChunk {
byte[size] chunkSizeInBytes; // size = decode(ElementHeader.childrenChunkSizeSize)
  Sequence children;
}

Sequence {
  SequenceItem* items; // list ends when itemLenInBytes = 0
}

SequenceItem {
  varInt itemLenInBytes;
  byte[itemLenInBytes] item
}

Reply via email to