A BSKCategory object contains zero or more "null" objects or objects of type BSKRule, BSKThing and BSKCategory. It is used in the database to categorize things. Items in a BSKCategory object may also be obtained by index (as an array) or randomly, using a weighting system where each item has a weight that determines its likelihood of being chosen.
Internally, a BSKCategory object contains a list of BSKCategoryEntry objects, each of which contains either a null (0), or a pointer to a BSKCategory, BSKThing, or BSKRule.
A BSKCategory object may also be treated as a set, and set operators (union, intersection, and subtraction) may be used on them.