1. A computer program product having program code which program code is stored on a computer-readable storage medium and which, when executed on a processor is adapted to provide a database of information objects and a database engine for managing said information objects, wherein each information object comprises metadata for describing the information object and for defining a hierarchical structure of branches which constitutes said information object and which includes relations to other information objects, wherein an individual branch has: a metadata type, which is selected from a predetermined and limited set of n different metadata types, said predetermined and limited set being independent of content in or type of the information object, and which metadata type represents one respective hierarchical level in said hierarchical structure; a metadata value; and an arbitrary number of other branches, of any hierarchical level strictly subordinate to the hierarchical level of said individual branch, connected to said individual branch as children thereof, said arbitrary number including zero branches; wherein said database comprises a branch table having a fixed structure of columns that correspond to the n different metadata types and each information object is stored in said database in the form of an n-field data structure is stored as a row in said branch table, said fixed structure being independent of content in or type of the information object; and a query function for searching said database, wherein said query function is adapted to: accept a search query which is specified in a declarative language in accordance with said hierarchical structure of information objects in said database and which thus defines a branch hierarchy to search for; search said database so as to find information objects, if any, which contain a branch hierarchy that makes the one specified in said declarative language; and further adapted to comprise the steps of: a) receiving a search query; b) transforming the search query into a search hierarchy of row searches and joins, said joins occurring within said branch table, by: b1) generating a top join for joining all results at a metadata type object; b2) traversing the branches of the search query top-down by b′1) if a particular branch has no children, creating a row search with the metadata values of all branches from the root down to the particular branch as conditions on metadata values in the row search; b′2) if a particular branch has more than one child, creating a join for joining row searches and joins at the metadata type of the particular branch; b′3) adding a row search created in step b′1) or a join created in step b′2), respectively, as a child of a preceding join; c) performing all the row searches from step b) so as to result in a set of rows in said branch table; d) performing the joins in a search hierarchy successfully starting from the bottom of the search hierarchy and ending with the top of the search hierarchy; and e) producing a result of the search query by retrieving all unique information objects from the outcome of step d).