You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@vxquery.apache.org by Vinayak Borkar <vb...@yahoo.com> on 2012/05/06 08:48:56 UTC

Data format for XQuery Data Model Items

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
}