Registry Component - Background
Architecture
The Registry Component (RC) encompasses three main layers: the Registry Core Component (RCC), the Registry Management Facility (RMF) and the Registry Database Connectivity (RDC).
The RDC provides a collection of interfaces for accessing and storing XML data as well as managing users and access rules on the underlying database. These interfaces are implemented using a specialised database connection. Currently the preferred implementation is based on an XML:DB API[1] connection.

Architecture of the registry component
The RCC includes interfaces for registration and discovery of XML documents, an interface for the Registry Domain Model (RDM) as well as an OWL-based implementation of this interface, and an implementation of the XML-based query language ooXmlQL.
The RDM specifies the concepts and relationship between these concepts that can be used by a specific registry instance. XML documents are stored and can be retrieved with respect to these concepts. Relationships define dependencies between concepts that can be used for specifying join queries and sub queries. A special is-a relationship is introduced for specifying hierarchies of concepts. Sub concepts inherit relationships from their super concepts. Currently only simple inheritance is supported by the RDM[2].
ooXmlQL is a query language designed to support join queries and sub queries based on the underlying RDM. Thereby the selection and filter statements are language independent, and can for instance be defined by XPath or XQuery. For execution, ooXmlQL queries will be translated to a language supported by the RDC. In the current realisation this is XQuery. However, ooXmlQL is not limited to XQuery.
The configuration of a concrete registry instance is done by the RMF. This module provides interfaces for configuration and for user management. User management encompass creation and deletion of users as well as groups, users can belong to. The configuration interface allows setting up the RDM as well as to dynamically adding new concepts and relationships. Furthermore it supports the registration of predefined queries that can be executed by name through the discovery interface of the RCC[3].
Interfaces
In the following we give a brief overview of the different interfaces used by the RC.
Registration

Registration interface
Method description:
- registerEntity: allows the user to register an entity under a specific concept.
- deleteEntity: removes an entity from a given concept.
- deleteAllEntities: removes all entities accessible by the user.
- insertRelationship: creates a relationship between two entities. Precondition: the used relationship is defined within the RDM between the concepts the two entities belong to. If the relationship has an inverse relationship (owl:inverseOf) the inverse relationship will be automatically added.
Discovery

Discovery interface
Method description:
- getRegistryDomainModel: return the RDM of the registry.
- lookup: looks up an entity by its concept and identifier.
- lookupByConcept: looks up entities by a specified concept.
- getIdentifier: returns the identifier of a document/entity.
- query: queries the registry using a Java class (XmlQuery.java) representing ooXmlQL queries (see appendix).
- queryBySpecificQL: queries the registry using a specified query language. If the query language is not supported by the concrete registry, an exception will be thrown.
- executePredefinedQuery: executes a predefined query, stored in the registry.
Configuration

Configuration interface
Method description:
- setRegistryDomainModel: sets up the RDM of the registry and configures the registry accordingly.
- getRegistryDomainModel: return the RDM of the registry.
- createConcept: creates a new concept in the RDM and updates the registry.
- insertBidirectionalRelationship: adds a new bidirectional relationship between two concepts (using owl:inverseOf).
- insertRelationship: adds a new relationship between two concepts.
- registerPredefinedQuery: registeres a new predefined query under a concrete name.
- setPredefinedQueries: registers a set of predefined queries using the XML representation of predefined queries (see appendix).
User Management

User Management interface
Method description:
- addUser: adds a new user to the list of registry users.
- removeUser: removes a user from the list of registry users.
- addGroupToUser: adds a new group to the list of groups a user belongs to.
- removeGroupFromUser: removes a group from the list of groups a user belongs to.
- listUsers: lists all users of the registry.
- listGroups: lists all groups used within the registry.
Implementation Details - Constants
Several interfaces provides constants used within the registry component. The following list summarises these interfaces.
- PropertyConstants: general identifiers used in ‘registry.properties’ file, e.g. ‘registry.conf.dir’ (package uk.ac.soton.itinnovation.registry.icomponent.util)
- QueryLanagueNS: namespaces of query languages (package uk.ac.soton.itinnovation.registry.icomponent.namespace)
- XmlPropertyConstants: identifiers used in ‘registry.properties’ file, specific for an XML based implementation of the registry (package uk.ac.soton.itinnovation.registry.component.xml.util)
- XmlDatabaseConstants: constants used internally like queries.xml for predefined queries (uk.ac.soton.itinnovation.registry.component.xml.db)
- XmlPropertyConstantsXmlDb: constants used within the XML:DB connector implementation of the registry (package uk.ac.soton.itinnovation.registry.component.xml.db.xmldb)
[1] XML:DB Initiative: API for XML Databases, http://xmldb-org.sourceforge.net/xapi/
[2] Future enhancements could contain multiple inheritance and restrictions on relationships like arity.
[3] In the current realisation only XQuery queries can be stored and executed. In future the specification of predefined queries should support different query languages, and the query processor should evaluate if it can process a predefined query. Especially ooXmlQL queries should be supported.
