the invention is illustrated by way of example and not by way of limitation in the figures of the accompanying drawings in which like references indicate similar elements . it should be noted that references to “ an ” or “ one ” embodiment in this disclosure are not necessarily to the same embodiment , and such references mean at least one . in the following description , various aspects of the present invention will be described . however , it will be apparent to those skilled in the art that the present invention may be practiced with only some or all aspects of the present invention . for purposes of explanation , specific numbers , materials and configurations are set forth in order to provide a thorough understanding of the present invention . however , it will be apparent to one skilled in the art that the present invention may be practiced without the specific details . in other instances , well - known features are omitted or simplified in order not to obscure the present invention . parts of the description will be presented in data processing terms , such as data , selection , retrieval , generation , and so forth , consistent with the manner commonly employed by those skilled in the art to convey the substance of their work to others skilled in the art . as well understood by those skilled in the art , these quantities take the form of electrical , magnetic , or optical signals capable of being stored , transferred , combined , and otherwise manipulated through electrical and / or optical components of a processor and its subsystems . various operations will be described as multiple discrete steps in turn , in a manner that is most helpful in understanding the present invention , however , the order of description should not be construed as to imply that these operations are necessarily order dependent . in particular , these operations need not be performed in the order of presentation . various embodiments will be illustrated in terms of exemplary classes and / or objects in an object - oriented programming paradigm . it will be apparent to one skilled in the art that the present invention can be practiced using any number of different classes / objects , not merely those included here for illustrative purposes . furthermore , it will also be apparent that the present invention is not limited to any particular software programming language or programming paradigm . [ 0029 ] fig1 is an illustration of a virtual content management framework in one embodiment of the invention . a content repository 108 is a searchable data store . such systems can relate structured content and unstructured content ( e . g ., digitally scanned paper documents , extensible markup language , portable document format , hypertext markup language , electronic mail , images , video and audio streams , raw binary data , etc .) into a searchable corpus . content repositories can be coupled to or integrated with content management systems . content management systems provide for content life cycle management ( e . g . versioning ), content review and approval , automatic content classification , event - driven content processing , process tracking and content delivery to other systems . for example , if a user fills out a loan application on a web portal , the web portal can forward the application to a content repository which , in turn , can contact a bank system , receive notification of loan approval , update the loan application in the repository and notify the user by rendering the approval information in a format appropriate for the web portal . a virtual or federated content repository ( hereinafter referred to as “ vcr ”) 100 is a logical representation of one or more individual content repositories 108 such that they appear and behave as a single content repository from an application program &# 39 ; s standpoint . this is accomplished in part by use of an api ( application program interface ) 104 and an spi ( service provider interface ) 102 . an api describes how an application program , library or process can interface with some program logic or functionality . by way of a non - limiting illustration , a process can include a thread , a server , a servlet , a portlet , a distributed object , a web browser , or a lightweight process . an spi describes how a service provider ( e . g ., a content repository ) can be integrated into a system of some kind . spi &# 39 ; s are typically specified as a collection of classes / interfaces , data structures and functions that work together to provided a programmatic means through which a service can be accessed and utilized . by way of a non - limiting example , apis and spis can be specified in an object - oriented programming language , such as java ™ ( available from sun microsystems , inc . of mountain view , calif .) and c # ( available from microsoft corp . of redmond , wash .). the api and spi can be exposed in a number of ways , including but not limited to static libraries , dynamic link libraries , distributed objects , servers , class / interface instances , etc . in one embodiment , the api presents a unified view of all repositories to application programs and enables them to navigate , perform crud ( create , read , update , and delete ) operations , and search across multiple content repositories as though they were a single repository . content repositories that implement the spi can “ plug into ” the vcr . the spi includes a set of interfaces and services that repositories can implement and extend including schema management , hierarchy operations and crud operations . the api and spi share a content model 106 that represents the combined content of all repositories 108 as a hierarchical namespace of nodes ( or hierarchy ). given a node n , nodes that are hierarchically inferior to n are referred to as children of n whereas nodes that are hierarchically superior to n are referred to as parents of n . the top - most level of the hierarchy is called the federated root . there is no limit to the depth of the hierarchy . in one embodiment , content repositories can be children of the federated root . each content repository can have child nodes . nodes can represent hierarchy information or content . hierarchy nodes serve as a container for other nodes in the hierarchy akin to a file subdirectory in a hierarchical file system . content nodes can have properties . in one embodiment , a property associates a name with a value of some kind . by way of a non - limiting illustration , a value can be a text string , a number , an image , an audio / visual presentation , binary data , etc . either type of node can have a schema associated with it . a schema describes the data type of one or more of a node &# 39 ; s properties . [ 0033 ] fig2 is an illustration of functional layers in one embodiment of the invention . api 200 is layered on top of spi 202 . the spi layer isolates direct interaction with repositories 212 from the api . in one embodiment , this can be accomplished at run - time wherein the api library dynamically links to or loads the spi library . in another embodiment , the spi can be part of a server process such that the api and the spi can communicate over a network . the spi can communicate with the repositories using any number of means including , but not limited to , shared memory , remote procedure calls and / or via one or more intermediate server processes . referring again to fig2 and by way of a non - limiting example , content mining facilities 204 , portlets 206 , tag libraries 208 , applications 210 , and other libraries 218 can all utilize the api to interact with a vcr . content mining facilities can include services for automatically extracting content from the vcr based on parameters . portlet and java serverpages ™ tag libraries enable portals to interact with the vcr and surface its content on web pages . ( java serverpages is available from sun microsystems , inc .) in addition , application programs and other libraries can be built on top of the api . in one embodiment , the api can include optimizations to improve the performance of interacting with the vcr . one or more content caches 216 can be used to buffer search results and recently accessed nodes . content caches can include node caches and binary caches . a node cache can be used to provide fast access to recently accessed nodes . a binary cache can be used to provide fast access to the data associated with each node in a node cache . the api can also provide a configuration facility 214 to enable applications , tools and libraries to configure content caches and the vcr . in one embodiment , this facility can be implemented as a java management extension ( available from sun microsystems , inc .). exemplary configuration parameters are provided in table 1 . [ 0036 ] fig3 is an illustration of objects used in connecting a repository to a vcr in one embodiment of the invention . in one embodiment , objects implementing api interface repositorymanager 302 can serve as an representation of a vcr from an application program &# 39 ; s standpoint . a repositorymanager connect ( ) method attempts to connect all available repositories with a current user &# 39 ; s credentials to the vcr . by way of a non - limiting example , credentials in one embodiment can based on the java ™ authentication and authorization service ( available from sun microsystems , inc .). those of skill in the art will recognize that many authorization schemes are possible without departing from the scope and spirit of the present embodiment . each available content repository is represented by an spi repository object 306 - 310 . the repositorymanager object invokes a connect ( ) method on a set of repository objects . in one embodiment , a repositorysession object ( not shown ) can be instantiated for each content repository to which a connection is attempted . in one embodiment , the repositorymanager connect ( ) method can return an array of the repositiorysessions to the application program , one for each repository for which a connection was attempted . any error in the connection procedure can be described by the repositorysession object &# 39 ; s state . in another embodiment , the repositorymanager connect ( ) method can connect to a specific repository using a current user &# 39 ; s credentials and a given repository name . in one embodiment , the name of a repository can be a uri ( uniform resource identifier ). [ 0037 ] fig4 is an exemplary content model in one embodiment of the invention . the content model is shared between the api and the spi . each box in fig2 represents a class or an interface . hollow tipped arrows connecting boxes indicate inheritance relationships wherein the class / interface from which the arrows emanate inherit from the class / interface to which the arrows point . solid tipped arrows indicate that the objects of the class / interface from which the arrows emanate can contain or have references ( e . g ., pointers or addresses ) to objects of the class / interface to which the arrows point . in one embodiment , each object in a vcr has an identifier that uniquely identifies it . an identifier can be represented by an id 400 ( or id ). an id can contain the name of a content repository and a unique id provided to it by the repository . in one embodiment , the id class / interface can be made available through a common super class / interface 414 that can provide services such as serialization , etc . in one embodiment , content and hierarchy nodes can be represented by a node 402 ( or node ). a node has a name , an id , and can also include a path that uniquely specifies an the node &# 39 ; s location in the vcr hierarchy . by way of a non - limiting example , the path can be in a unix - like directory path format such as ‘/ a / b / c ’ where ‘/’ is a federated root , ‘ a ’ is a repository , ‘ b ’ is a node in the ‘ a ’ repository , and ‘ c ’ is the node &# 39 ; s name . the node class provides methods by with a node &# 39 ; s parent and children can be obtained . this is useful for applications and tools that need to traverse the vcr hierarchy ( e . g ., browsers ). nodes can be associated with zero or more property 404 objects ( or properties ). a property can have a name and zero or more values 406 . in one embodiment , a property &# 39 ; s name is unique relative to the node to which the property is associated . a value 406 can represent any value , including but not limited to binary , boolean , date / time , floating point , integer or string values . if a property has more than one value associated with it , it is referred to as “ multi - valued ”. a node &# 39 ; s properties can be described by a schema . a schema can be referred to as “ metadata ” since it does not constitute the content ( or “ data ”) of the vcr per se . schemas can be represented by an objectclass 408 object and zero or more propertydefinition 410 objects . an objectclass has a schema name that uniquely identifies it within a content repository . a node can refer to a schema using the objectclass name . in another embodiment , a content node can define its own schema by referencing an objectclass object directly . in one embodiment , there is one propertydefinition object for each of a node &# 39 ; s associated property objects . propertydefinition objects define the shape or type of properties . schemas can be utilized by repositories and tools that operate on vcrs , such as hierarchical browsers . by way of a non - limiting example , a hierarchy node &# 39 ; s schema could be used to provide information regarding its children or could be used to enforce a schema on them . by way of a further non - limiting example , a vcr browser could use a content node &# 39 ; s schema in order to properly display the node &# 39 ; s values . in one embodiment , a propertydefinition can have a name and can describe a corresponding property &# 39 ; s data type ( e . g ., binary , boolean , string , double , calendar , long , reference to an external data source , etc . ), whether it is required , whether it is read - only , whether it provides a default value , and whether it specifies a property choice type . a property choice can indicate if a property is a single unrestricted value , a single restricted value , a multiple unrestricted value , or a multiple restricted value . properties that are single have only one value whereas properties that are multiple can have more than one value . if a property is restricted , its value ( s ) are chosen from a finite set of values . but if a property is unrestricted , any value ( s ) can be provided for it . propertychoice objects 412 can be associated with a propertydefinition object to define a set of value choices in the case where the propertydefinition is restricted . a choice can be designated as a default value , but only one choice can be a default for a given propertydefinition . a propertydefinition object may also be designated as a primary property . by way of a non - limiting example , when a schema is associated with a node , the primary property of a node can be considered its default content . the isprimary ( ) method of the propertydefinition class returns true if a propertydefinition object is the primary propertydefinition . by way of a further non - limiting example , if a node contained a binary property to hold an image , it could also contain a second binary property to represent a thumbnail view of the image . if the thumbnail view was the primary property , software applications such as browser could display it by default . [ 0042 ] fig5 is an exemplary service model in one embodiment of the invention . each box in fig5 represents a class or an interface . a dashed arrow indicates that the interface from which the arrow emanates can produce at run - time objects implementing the classes to which the arrow points . a content repository &# 39 ; s implementation of the spi is responsible for mapping operations on the content model to the particulars of a given content repository . repository interface 500 represents a content repository and facilitates connecting to it . the repository has a connect ( ) method that returns an object of type ticket 502 ( or ticket ) if a user is authenticated by the repository . in one embodiment , tickets are intended to be light - weight objects . as such , one or more may be created and possibly cached for each client / software application accessing a given repository . a ticket can utilize a user &# 39 ; s credentials to authorize a service . in one embodiment , a ticket can be the access point for the following service interfaces : nodeops 508 , objectclassops 506 , and searchops 510 . an application program can obtain , objects that are compatible with these interfaces through the api repositorymanager class . the nodeops interface provides crud methods for nodes in the vcr . nodes can be operated on based on their id or through their path in the node hierarchy . table 2 summarizes nodeop class functionality exposed in the api . [ 0044 ] fig6 is an illustration of nopeops service interaction in one embodiment of the invention . application 600 utilizes a nodeops object 602 provided by the api which in turn utilizes one or more nodeops objects 606 - 610 provided by an spi ticket . each repository 612 - 616 is represented by a nodeops object . when the api nodeops 602 receives a request to perform an action , it maps the request to one or more spi nodeops objects 606 - 610 which in turn fulfill the request using their associated repositories . in this way , applications and libraries utilizing the api see a the vcr rather than individual content repositories . as with the nodeops service , there is one spi objectclassops object per repository and a single api objectclassops object . the api objectclassops object maps requests to one or more spi objectclassops which in turn fulfill the requests using their respective repositories . through this service , objectclass and propertydefinition objects can be operated on based on their id or through their path in the node hierarchy . table 3 summarizes objectclassops class functionality exposed in the api . as with the nodeops and objectclassops services , there is one spi searchops object per repository and a single api searchops object . the api searchops object maps requests to one or more spi searchops which in turn fulfill the requests using their respective repositories . among other things , the searchops services allows applications and libraries to search for properties and / or values throughout the entire vcr . in one embodiment , searches can be conducted across all property , value , binaryvalue , objectclass , propertychoice and propertydefinitions objects in the vcr . search expressions can include but are not limited to one or more logical expressions , boolean operators , nested expressions , object names , function calls , mathematical functions , mathematical operators , string operators , image operators , and structured query language ( sql ). table 4 summarizes searchops class functionality exposed in the api . [ 0047 ] fig7 is an illustration of a vcr browser in one embodiment of the invention . a vcr browser 700 can include one or more tools built atop the api and has a graphical user interface ( gui ). in one embodiment , the browser can be rendered using microsoft windows ® ( available from microsoft , corp .). in yet another embodiment , the browser can be implemented as a web portal . browser window 700 includes a navigation pane 702 and a context - sensitive editor window 704 . the navigation pane displays a hierarchical representation of a vcr having one content repository (“ bea repository ”) which itself has four hierarchy nodes (“ hr ”, “ images ”, “ marketing ”, and “ products ”). selection of a hierarchy node can cause its children to be rendered beneath it in the navigation pane and cause an appropriate editor to be displayed in the editor window . selection may be accomplished by any means , including but not limited to mouse or keyboard input , voice commands , physical gestures , etc . in this case , the vcr 706 is selected and a repository configuration editor is displayed in the editor window . the editor allows a user to change the configuration parameters ( see table 1 ) of the vcr . in one embodiment , configuration parameters are manipulated via java management extensions ( see fig1 ). [ 0048 ] fig8 is an illustration of a content editor in one embodiment of the invention . navigation pane 802 is in “ content ” mode 812 such that it selectively filters out nodes that define only schemas . content node 806 (“ laptop ”) has been selected . node 806 is a child of hierarchy node “ products ”, which itself is a child of repository “ bea repository ”. selection of node 806 causes a corresponding content node editor to be rendered in editor window 804 . the editor displays the current values for the selected node . the content type 814 indicates that the schema for this node is named “ product ”. in this example , the node has five properties : “ style ”, “ description ”, “ color ”, “ sku ” and “ image ”. a user is allowed to change the value associated with these properties and update the vcr ( via the update button 808 ), or remove the node from the vcr ( via the remove button 810 ). [ 0049 ] fig9 is an illustration of a schema editor in one embodiment of the invention . navigation pane 902 is in “ type ” mode 910 such that it only displays nodes that have schemas but no content . schema node 906 (“ product ”) has been selected . node 906 is a child of repository “ bea repository ”. selection of node 906 causes a corresponding schema editor to be rendered in editor window 904 . the editor displays the current schema for the selected node ( e . g ., derived from objectclass , propertydefinition , propertychoice objects ). in this example , the node has five property definitions : “ style ”, “ description ”, “ color ”, “ sku ” and “ image ”. for each property , the editor displays an indication of whether it is the primary property , its data type , its default value , and whether it is required . a property can be removed from a schema by selecting the property &# 39 ; s delete button 912 . a property can be added by selecting the “ add property ” button 908 . a property &# 39 ; s attributes can be changed by selecting its name 914 in the editor window or the navigation pane 906 ( see fig1 ). [ 0050 ] fig1 is an illustration of a property editor in one embodiment of the invention . the schema named “ product ” is being edited . schema properties definitions are listed beneath their schema name in the navigation pane 1002 . schema property 1008 (“ color ”) has been selected . the editor window 1004 displays the property &# 39 ; s current attributes . the name of the attribute ( e . g ., “ color ”), whether the attribute is required or not , whether it is read - only , whether it is the primary property , its data type , default value ( s ), and whether the property is single / multiple restricted / unrestricted can be modified . changes to the a property &# 39 ; s attributes can be saved by selecting the update button 1006 . one embodiment may be implemented using a conventional general purpose or a specialized digital computer or microprocessor ( s ) programmed according to the teachings of the present disclosure , as will be apparent to those skilled in the computer art . appropriate software coding can readily be prepared by skilled programmers based on the teachings of the present disclosure , as will be apparent to those skilled in the software art . the invention may also be implemented by the preparation of integrated circuits or by interconnecting an appropriate network of conventional component circuits , as will be readily apparent to those skilled in the art . one embodiment includes a computer program product which is a storage medium ( media ) having instructions stored thereon / in which can be used to program a computer to perform any of the features presented herein . the storage medium can include , but is not limited to , any type of disk including floppy disks , optical discs , dvd , cd - roms , microdrive , and magneto - optical disks , roms , rams , eproms , eeproms , drams , vrams , flash memory devices , magnetic or optical cards , nanosystems ( including molecular memory ics ), or any type of media or device suitable for storing instructions and / or data . stored on any one of the computer readable medium ( media ), the present invention includes software for controlling both the hardware of the general purpose / specialized computer or microprocessor , and for enabling the computer or microprocessor to interact with a human user or other mechanism utilizing the results of the present invention . such software may include , but is not limited to , device drivers , operating systems , execution environments / containers , and user applications . the foregoing description of the preferred embodiments of the present invention has been provided for the purposes of illustration and description . it is not intended to be exhaustive or to limit the invention to the precise forms disclosed . many modifications and variations will be apparent to the practitioner skilled in the art . embodiments were chosen and described in order to best describe the principles of the invention and its practical application , thereby enabling others skilled in the art to understand the invention , the various embodiments and with various modifications that are suited to the particular use contemplated . it is intended that the scope of the invention be defined by the following claims and their equivalents .