Metadata 1.2 Design Guide
Introduction to the Technical Guide
Overview of the Guide
Brief overview of this developer's guide.
Document Text Conventions
The following table shows various typefaces to differentiate between regular text and menu commands, keyboard keys, and text that you type. This illustrates how conventions are represented in this guide.
| Convention | Description | Example |
|---|---|---|
| Bold & Capitalized Command Capitalized command > Capitalized command |
Indicates a Menu command Indicates Sequential Menu commands |
Admin > Refresh |
| text in small caps | Keyboard key that you press | Press enter |
| text in small caps + text in small caps | Keyboard keys that you press simultaneously | Press shift + ctrl and then release both. |
| Special typestyle |
Used for filenames, directory names, commands, file listings, source code examples and anything that would appear in a Java program, such as methods, variables, and classes. | URL_definition ::= url_string |
| Boldface type | Options that you select in dialog boxes or drop-down menus. Buttons or icons that you click. | In the Open dialog box, select the file and click the Open button. |
| Italics | Used to reference other documents, sections, figures, and tables. | caCORE Software Development Kit 1.0 Programmer's Guide |
| Italic boldface type | Text that you type | In the New Subset text box, enter Proprietary Proteins. |
| Note: | Highlights a concept of particular interest | Note: This concept is used throughout the installation manual. |
| Warning! | Highlights information of which you should be particularly aware. | Warning! Deleting an object will permanently delete it from the database. |
| {} | Curly brackets are used for replaceable items. | Replace {root directory} with its proper value such as c:\cabio |
caGrid Metadata Infrastructure Overview
Introduction
Extending beyond the basic grid infrastructure, caBIG specializes these technologies to better support the needs of the cancer research community. A primary distinction between basic grid infrastructure and the requirements identified in caBIG and implemented in caGrid is the attention given to data modeling and semantics. caBIG adopts a model-driven architecture best practice and requires that all data types used on the grid are formally described, curated, and semantically harmonized. These efforts result in the identification of common data elements, controlled vocabularies, and object-based abstractions for all cancer research domains. caGrid leverages existing NCI data modeling infrastructure to manage, curate, and employ these data models. Data types are defined in caCORE UML and converted into ISO/IEC 11179 Administered Components, which are in turn registered in the Cancer Data Standards Repository (caDSR). The definitions draw from vocabulary registered in the Enterprise Vocabulary Services (EVS), and their relationships are thus semantically described.
In caGrid, both the client and service APIs are object oriented, and operate over well-defined and curated data types. Clients and services communicate through the grid using respectively Globus grid clients and service infrastructure. The grid communication protocol is XML, and thus the client and service APIs must transform the transferred objects to and from XML. This XML serialization of caGrid objects is restricted in that each object that travels on the grid must do so as XML which adheres to an XML schema registered in the Global Model Exchange (GME). As the caDSR and EVS define the properties, relationships, and semantics of caBIG data types, the GME defines the syntax of the XML serialization of them. Furthermore, Globus services are defined by the Web Service Description Language (WSDL). The WSDL describes the various operations the service provides to the grid. The inputs and outputs of the operations, among other things, in WSDL are defined by XML schemas (XSDs). As caBIG requires that the inputs and outputs of service operations use only registered objects, these input and output data types are defined by the XSDs which are registered in GME. In this way, the XSDs are used both to describe the contract of the service and to validate the XML serialization of the objects which it uses. Figure 1 details the various services and artifacts related to the description of and process for the transfer of data objects between client and service.
Figure 1 : Data Description Overview
caGrid Metadata
Cancer Data Standards Repository (caDSR)
Semantic Annotation of UML Domain Models
Proper semantic integration requires that each class and it's attributes from the UML domain model gets mapped to appropriate concepts in a controlled terminology. The caCORE SDK utilizes the NCI Thesaurus as its primary terminology source, but any well structured, concept-based description logics terminology should in principle be suitable. The concept selection process can be entirely manual, or it can be partially automated using the Semantic Connector, a tool supplied by the caCORE SDK. The Semantic Connector uses the UML domain Model expressed in XMI as input and uses the caCORE EVS APIs hosted at the NCI to search the NCI Thesaurus for appropriate concepts. Semantic annotations for classes and attributes are specified using tagged values in the UML domain model.
UML Domain Model Loader
The UML domain model, annotated with semantic concept codes, contains a considerable amount of metadata about the ultimate system - both data and analytical services - that will be deployed to the grid. However, it is not in a form that is amenable to query and retrieval in a runtime environment nor easily queried by humans to make use of this information for other purposes. UML domain model loader addresses these limitations by transforming and loading the models into the caDSR, which provides APIs that support runtime access to metadata.
UML domain model annotated with semantic concept information is exported to XMI format using a UML modeling tool such as Enterprise Architect. It is then used as an input to the UML domain model loader, which uses a set of mapping rules to load metadata represented by Classes, Attributes and Associations into entities of caDSR. Following section contains the details of the UML to caDSR mapping rules.
UML to caDSR Mapping
Metadata represented in UML domain model is mapped to caDSR administered component types, illustrated in Figure 2 and using the following mapping rules:
- A UML Class is mapped to an Object Class, which according to ISO 11179 specification represents a thing in real-world.
- An attribute of a UML Class is mapped to a Property, which according ISO 11179 specification represents an attribute of a real-world thing
- Combination of a UML Class and one of it's attributes is mapped to a Data Element Concept.
- Combination of UML Class, one of it's attributes and data type of the attribute is mapped to a Data Element, commonly referred to as a Common Data Element (CDE).
- Project to which the UML domain model belongs to is mapped to a Classification Scheme.
- Packages in the UML model - which may represent sub-projects within a project - are mapped to Classification Scheme Items
- Association between two classes is mapped to Object Class Relationship
Refer to "Registration of Metadata in the caDSR" chapter of caCORE SDK Programmer's guide for complete details on loading UML domain models to caDSR
Figure 2 : UML to caDSR mapping
caGrid Reliance on caDSR
After a UML domain model is transformed, loaded and curated in caDSR, the model is ready to be used as the basis of an object oriented grid client and service. All data movement in caGrid between client and service is done so using instances of Classes registered in the caDSR. caGrid requires that all data types used in the grid are registered in caDSR, and come from a given Project version. That is, even though Attributes and other items in caDSR can be versioned individually, in order to use those types on the grid, they need to be associated with a specific Project version.
Several components of caGrid make use of the wealth of information in the caDSR. As mentioned above, grid services use registered data models as their information model. By doing so, they are able to advertise both the syntax and semantics of the model by exposing an export of the relevant caDSR information as service metadata. The details of the model used to expose this information are shown in the section below. Once the information is exposed in this model, caGrid leverages for grid service advertisement and discovery. These processes are described in detail in Chapter 4. Finally, the information models registered in caDSR are used as the conceptual foundation for the actual communication format used to exchange data on the grid. This process of serializing and deserializeing data instances on the grid, is detailed in Chapter 5.
caGrid Standard Metadata Model
All caGrid Services are expected to publish a set of standard metadata which draws heavily from the metadata registered in caDSR and EVS; it details the functionality of the service, and the institution providing it. The following sections describe these models.
Standard Metadata Model (gov.nih.nci.cagrid.metadata)
metadata::ServiceMetadata
public Class:
metadata::ServiceMetadata Connections
| Connector | Source | Target | Notes |
| Association source > target |
ServiceMetadata +serviceMetadata 1, unordered |
Service +serviceDescription 0..1, unordered |
|
| Association source > target |
ServiceMetadata +serviceMetadata 1, unordered |
ResearchCenter +hostingResearchCenter 0..1, unordered |
|
Common Components (gov.nih.nci.cagrid.metadata.common)
metadata::ServiceMetadata
public Class:
metadata::ServiceMetadata Connections
| Connector | Source | Target | Notes |
| Association source > target |
ServiceMetadata +serviceMetadata 1, unordered |
Service +serviceDescription 0..1, unordered |
|
| Association source > target |
ServiceMetadata +serviceMetadata 1, unordered |
ResearchCenter +hostingResearchCenter 0..1, unordered |
|
common::Address
public Class:
common::Address Connections
| Connector | Source | Target | Notes |
| Association source > target |
ResearchCenter +researchCenter 1, unordered Tagged Values anonymousRole = true |
Address +address 0..1, unordered |
|
common::Address Attributes
| Attribute | Type | Notes |
| country«XSDattribute» | public : java.lang.String | |
| locality«XSDattribute» | public Range:0 to 1: java.lang.String | |
| postalCode«XSDattribute» | public Range:0 to 1: java.lang.String | |
| stateProvince«XSDattribute» | public Range:0 to 1: java.lang.String | |
| street1«XSDattribute» | public : java.lang.String | |
| street2«XSDattribute» | public Range:0 to 1: java.lang.String |
common::Enumeration
public Class:
common::Enumeration Connections
| Connector | Source | Target | Notes |
| Association source > target |
Enumeration +enumeration 1, unordered Tagged Values anonymousRole = true |
SemanticMetadata +semanticMetadataCollection 0..*, unordered |
|
| Association source > target |
ValueDomain +valueDomain 1, unordered |
Enumeration +enumerationCollection 0..*, unordered |
|
common::Enumeration Attributes
| Attribute | Type | Notes |
| valueMeaning«XSDattribute» | public : java.lang.String | |
| permissibleValue«XSDattribute» | public : java.lang.String |
common::PointOfContact
public Class: For the static model, instances of these should be the POCs associated with the design and implementation of the service itself (not deployments of it, e.g. not system support staff)The "role" attribute should probably be an enumeration of known types
common::PointOfContact Connections
| Connector | Source | Target | Notes |
| Association source > target |
Service +service 1, unordered |
PointOfContact +pointOfContactCollection 0..*, unordered |
|
| Association source > target |
ResearchCenter +researchCenter 1, unordered |
PointOfContact +pointOfContactCollection 0..*, unordered |
|
common::PointOfContact Attributes
| Attribute | Type | Notes |
| affiliation«XSDattribute» | public : java.lang.String | |
| email«XSDattribute» | public : java.lang.String | |
| firstName«XSDattribute» | public : java.lang.String | |
| lastName«XSDattribute» | public : java.lang.String | |
| phoneNumber«XSDattribute» | public Range:0 to 1: java.lang.String | |
| role«XSDattribute» | public : java.lang.String |
common::ResearchCenter
public Class:
common::ResearchCenter Connections
| Connector | Source | Target | Notes |
| Association source > target |
ResearchCenter +researchCenter 1, unordered Tagged Values anonymousRole = true |
Address +address 0..1, unordered |
|
| Association source > target |
ServiceMetadata +serviceMetadata 1, unordered |
ResearchCenter +hostingResearchCenter 0..1, unordered |
|
| Association source > target |
ResearchCenter +researchCenter 1, unordered Tagged Values anonymousRole = true |
ResearchCenterDescription +researchCenterDescription 0..1, unordered |
|
| Association source > target |
ResearchCenter +researchCenter 1, unordered |
PointOfContact +pointOfContactCollection 0..*, unordered |
|
common::ResearchCenter Attributes
| Attribute | Type | Notes |
| displayName«XSDattribute» | public : java.lang.String | |
| shortName«XSDattribute» | public : java.lang.String |
common::ResearchCenterDescription
public Class:
common::ResearchCenterDescription Connections
| Connector | Source | Target | Notes |
| Association source > target |
ResearchCenter +researchCenter 1, unordered Tagged Values anonymousRole = true |
ResearchCenterDescription +researchCenterDescription 0..1, unordered |
|
common::ResearchCenterDescription Attributes
| Attribute | Type | Notes |
| description«XSDattribute» | public : java.lang.String | |
| homepageURL«XSDattribute» | public : java.lang.String | |
| imageURL«XSDattribute» | public Range:0 to 1: java.lang.String | |
| rssNewsURL«XSDattribute» | public Range:0 to 1: java.lang.String |
common::SemanticMetadata
public Class:
common::SemanticMetadata Connections
| Connector | Source | Target | Notes |
| Association source > target |
Service +service 1, unordered Tagged Values anonymousRole = true |
SemanticMetadata +semanticMetadataCollection 0..*, unordered |
|
| Association source > target |
Operation +operation 1, unordered Tagged Values anonymousRole = true |
SemanticMetadata +semanticMetadataCollection 0..*, unordered |
|
| Association source > target |
UMLAttribute +umlAttribute 1, unordered Tagged Values anonymousRole = true |
SemanticMetadata +semanticMetadataCollection 0..*, unordered |
|
| Association source > target |
Enumeration +enumeration 1, unordered Tagged Values anonymousRole = true |
SemanticMetadata +semanticMetadataCollection 0..*, unordered |
|
| Association source > target |
ValueDomain +valueDomain 1, unordered Tagged Values anonymousRole = true |
SemanticMetadata +semanticMetadataCollection 0..*, unordered |
|
| Association source > target |
UMLClass +umlClass 1, unordered Tagged Values anonymousRole = true |
SemanticMetadata +semanticMetadataCollection 0..*, unordered |
|
common::SemanticMetadata Attributes
| Attribute | Type | Notes |
| conceptCode«XSDattribute» | public : java.lang.String | |
| conceptDefinition«XSDattribute» | public : java.lang.String | |
| conceptName«XSDattribute» | public : java.lang.String | |
| order«XSDattribute» | public Range:0 to 1: int | |
| orderLevel«XSDattribute» | public Range:0 to 1: int |
common::UMLAttribute
public Class: caDSR-relatedRepresents a UML attribute of the parent UML Class. Indication of isRequired=false means the operation will function without the existence of this attribute.
common::UMLAttribute Connections
| Connector | Source | Target | Notes |
| Association source > target |
UMLAttribute +umlAttribute 1, unordered Tagged Values anonymousRole = true |
ValueDomain +valueDomain 0..1, unordered |
|
| Association source > target |
UMLClass +umlClass 1, unordered |
UMLAttribute +umlAttributeCollection 0..*, unordered |
|
| Association source > target |
UMLAttribute +umlAttribute 1, unordered Tagged Values anonymousRole = true |
SemanticMetadata +semanticMetadataCollection 0..*, unordered |
|
common::UMLAttribute Attributes
| Attribute | Type | Notes |
| dataTypeName«XSDattribute» | public : java.lang.String | |
| description«XSDattribute» | public : java.lang.String | |
| name«XSDattribute» | public : java.lang.String | |
| publicID«XSDattribute» | public : long | |
| version«XSDattribute» | public : float |
common::UMLClass
public Class: caDSR-relatedRepresents the UML Class of the given input or output.
common::UMLClass Connections
| Connector | Source | Target | Notes |
| Association source > target |
UMLClass +umlClass 1, unordered |
UMLAttribute +umlAttributeCollection 0..*, unordered |
|
| Association source > target |
Output +output 1, unordered Tagged Values anonymousRole = true |
UMLClass +umlClass 0..1, unordered Notes This must be present for compliance, but is allowed to be absent so a partially created model will still validate. |
|
| Association source > target |
UMLClass +umlClass 1, unordered Tagged Values anonymousRole = true |
SemanticMetadata +semanticMetadataCollection 0..*, unordered |
|
| Association source > target |
InputParameter +inputParameter 1, unordered Tagged Values anonymousRole = true |
UMLClass +umlClass 0..1, unordered Notes This must be present for compliance, but is allowed to be absent so a partially created model will still validate. |
|
| Generalization source > target |
UMLClass Child |
UMLClass Parent |
|
common::UMLClass Attributes
| Attribute | Type | Notes |
| className«XSDattribute» | public : java.lang.String | |
| description«XSDattribute» | public : java.lang.String | |
| id«XSDattribute» | public : java.lang.String | This is used soley for the purposes of referencing this class in associations. It does not represent any caDSR identifier. |
| packageName«XSDattribute» | public : java.lang.String | |
| projectName«XSDattribute» | public : java.lang.String | |
| projectVersion«XSDattribute» | public : java.lang.String |
common::ValueDomain
public Class:
common::ValueDomain Connections
| Connector | Source | Target | Notes |
| Association source > target |
UMLAttribute +umlAttribute 1, unordered Tagged Values anonymousRole = true |
ValueDomain +valueDomain 0..1, unordered |
|
| Association source > target |
ValueDomain +valueDomain 1, unordered Tagged Values anonymousRole = true |
SemanticMetadata +semanticMetadataCollection 0..*, unordered |
|
| Association source > target |
ValueDomain +valueDomain 1, unordered |
Enumeration +enumerationCollection 0..*, unordered |
|
common::ValueDomain Attributes
| Attribute | Type | Notes |
| longName«XSDattribute» | public : java.lang.String | |
| unitOfMeasure«XSDattribute» | public Range:0 to 1: java.lang.String |
Standard Data Service Metadata Model (gov.nih.nci.cagrid.metadata.data)
data::DomainModel
public Class:
data::DomainModel Connections
| Connector | Source | Target | Notes |
| Association source > target |
DomainModel +domainModel 1, unordered |
UMLClass +exposedUMLClassCollection 0..*, unordered |
Tagged Values modelGroup: all |
| Association source > target |
DomainModel +domainModel 1, unordered |
UMLAssociation +exposedUMLAssociationCollection 0..*, unordered |
|
| Association source > target |
DomainModel +domainModel 1, unordered |
UMLGeneralization +umlGeneralizationCollection 0..*, unordered |
|
data::DomainModel Attributes
| Attribute | Type | Notes |
| projectDescription«XSDattribute» | public : java.lang.String | |
| projectLongName«XSDattribute» | public : java.lang.String | |
| projectShortName«XSDattribute» | public : java.lang.String | |
| projectVersion«XSDattribute» | public : java.lang.String |
data::UMLAssociation
public Class:
data::UMLAssociation Connections
| Connector | Source | Target | Notes |
| Association source > target |
UMLAssociation +umlAssociation 1, unordered |
UMLAssociationEdge +sourceUMLAssociationEdge 1, unordered |
|
| Association source > target |
UMLAssociation +umlAssociation 1, unordered |
UMLAssociationEdge +targetUMLAssociationEdge 1, unordered |
|
| Association source > target |
DomainModel +domainModel 1, unordered |
UMLAssociation +exposedUMLAssociationCollection 0..*, unordered |
|
data::UMLAssociation Attributes
| Attribute | Type | Notes |
| bidirectional«XSDattribute» | public : boolean |
data::UMLAssociationEdge
public Class:
data::UMLAssociationEdge Connections
| Connector | Source | Target | Notes |
| Association source > target |
UMLAssociation +umlAssociation 1, unordered |
UMLAssociationEdge +sourceUMLAssociationEdge 1, unordered |
|
| Association source > target |
UMLAssociationEdge +umlAssociation 1, unordered Tagged Values anonymousRole = true |
UMLClassReference +umlClassReference 1, unordered |
|
| Association source > target |
UMLAssociation +umlAssociation 1, unordered |
UMLAssociationEdge +targetUMLAssociationEdge 1, unordered |
|
data::UMLAssociationEdge Attributes
| Attribute | Type | Notes |
| maxCardinality«XSDattribute» | public : int | |
| minCardinality«XSDattribute» | public : int | |
| roleName«XSDattribute» | public : java.lang.String |
data::UMLClass
public ClassExtends: UMLClass. :
data::UMLClass Connections
| Connector | Source | Target | Notes |
| Association source > target |
DomainModel +domainModel 1, unordered |
UMLClass +exposedUMLClassCollection 0..*, unordered |
Tagged Values modelGroup: all |
| Generalization source > target |
UMLClass Child |
UMLClass Parent |
|
data::UMLClass Attributes
| Attribute | Type | Notes |
| allowableAsTarget«XSDattribute» | public : boolean | Initial Value: true; |
data::UMLClassReference
public Class: Represents a "pointer/reference" to a UMLClass exposed by this DomainModel. The refid attribute must share the value of an UMLClass.id on the exposedClassCollection of this model. This exists solely as an optimization for not duplicating the UMLClass (in XML) everywhere it is associated (which is a significant savings).
data::UMLClassReference Connections
| Connector | Source | Target | Notes |
| Association source > target |
UMLGeneralization +umlGeneralization 1, unordered Tagged Values anonymousType = true |
UMLClassReference +subClassReference 1, unordered |
|
| Association source > target |
UMLAssociationEdge +umlAssociation 1, unordered Tagged Values anonymousRole = true |
UMLClassReference +umlClassReference 1, unordered |
|
| Association source > target |
UMLGeneralization +umlGeneralization 1, unordered Tagged Values anonymousType = true |
UMLClassReference +superClassReference 1, unordered |
|
data::UMLClassReference Attributes
| Attribute | Type | Notes |
| refid«XSDattribute» | public : java.lang.String | Must be the value of the UMLClass.id for the "referenced" UMLClass |
data::UMLGeneralization
public Class:
data::UMLGeneralization Connections
| Connector | Source | Target | Notes |
| Association source > target |
UMLGeneralization +umlGeneralization 1, unordered Tagged Values anonymousType = true |
UMLClassReference +subClassReference 1, unordered |
|
| Association source > target |
UMLGeneralization +umlGeneralization 1, unordered Tagged Values anonymousType = true |
UMLClassReference +superClassReference 1, unordered |
|
| Association source > target |
DomainModel +domainModel 1, unordered |
UMLGeneralization +umlGeneralizationCollection 0..*, unordered |
|
Service Description Components (gov.nih.nci.cagrid.metadata.service)
service::CaDSRRegistration
public Class:
service::CaDSRRegistration Connections
| Connector | Source | Target | Notes |
| Association source > target |
Service +service 1, unordered Tagged Values anonymousRole = true |
CaDSRRegistration +caDSRRegistration 0..1, unordered |
|
service::CaDSRRegistration Attributes
| Attribute | Type | Notes |
| registrationStatus«XSDattribute» | public : java.lang.String | |
| workflowStatus«XSDattribute» | public : java.lang.String |
service::ContextProperty
public Class: This represents an exposed property of a service context's state.This is manifested as a resource property in the grid.
service::ContextProperty Connections
| Connector | Source | Target | Notes |
| Association source > target |
ServiceContext +serviceContext 1, unordered |
ContextProperty +contextPropertyCollection 0..*, unordered |
|
service::ContextProperty Attributes
| Attribute | Type | Notes |
| description«XSDattribute» | public : java.lang.String | |
| name«XSDattribute» | public : java.lang.String |
service::Fault
public Class: This represents an error that could occur during the execution of the operation.This is manifested as an operation fault in the grid.
service::Fault Connections
| Connector | Source | Target | Notes |
| Association source > target |
Operation +operation 1, unordered |
Fault +faultCollection 0..*, unordered |
|
service::Fault Attributes
| Attribute | Type | Notes |
| description«XSDattribute» | public : java.lang.String | |
| name«XSDattribute» | public : java.lang.String |
service::InputParameter
public Class: Represents an input parameter to an operation.This is manifested as a parameter of a service request in the grid.
service::InputParameter Connections
| Connector | Source | Target | Notes |
| Association source > target |
Operation +operation 1, unordered |
InputParameter +inputParameterCollection 0..*, unordered |
|
| Association source > target |
InputParameter +inputParameter 1, unordered Tagged Values anonymousRole = true |
UMLClass +umlClass 0..1, unordered Notes This must be present for compliance, but is allowed to be absent so a partially created model will still validate. |
|
service::InputParameter Attributes
| Attribute | Type | Notes |
| dimensionality«XSDattribute» | public : int | Only valid if isArray is true; represents the dimensionality of the array |
| index«XSDattribute» | public : int | This is the 0-based index of the parameter in the operation's signature |
| isArray«XSDattribute» | public : boolean | |
| isRequired«XSDattribute» | public : boolean | Whether the given parameter is allowed to be null or not |
| name«XSDattribute» | public : java.lang.String | |
| qName«XSDattribute» | public : QName |
service::Operation
public Class: This represents a method/operation/function in a service context. Its input parameters are described by its InputParameter associations, its output by its Output association, and any errors it produces by its Fault associations.This is manifested as an operation of a service in the grid.
service::Operation Connections
| Connector | Source | Target | Notes |
| Association source > target |
Operation +operation 1, unordered |
Fault +faultCollection 0..*, unordered |
|
| Association source > target |
Operation +operation 1, unordered Tagged Values anonymousRole = true |
Output +output 0..1, unordered |
|
| Association source > target |
Operation +operation 1, unordered Tagged Values anonymousRole = true |
SemanticMetadata +semanticMetadataCollection 0..*, unordered |
|
| Association source > target |
Operation +operation 1, unordered |
InputParameter +inputParameterCollection 0..*, unordered |
|
| Association source > target |
ServiceContext +serviceContext 1, unordered |
Operation +operationCollection 0..*, unordered |
|
service::Operation Attributes
| Attribute | Type | Notes |
| description«XSDattribute» | public : java.lang.String | |
| name«XSDattribute» | public : java.lang.String |
service::Output
public Class: Represents the result/output of an operation. Its non-existence represents the operation produces no result.This is manifested as the value of an operation response in the grid.
service::Output Connections
| Connector | Source | Target | Notes |
| Association source > target |
Operation +operation 1, unordered Tagged Values anonymousRole = true |
Output +output 0..1, unordered |
|
| Association source > target |
Output +output 1, unordered Tagged Values anonymousRole = true |
UMLClass +umlClass 0..1, unordered Notes This must be present for compliance, but is allowed to be absent so a partially created model will still validate. |
|
service::Output Attributes
| Attribute | Type | Notes |
| dimensionality«XSDattribute» | public : int | Only valid if isArray is true; indicates number of dimensions in the array |
| isArray«XSDattribute» | public : boolean | |
| qName«XSDattribute» | public : QName |
service::Service
public Class: A service is a "conceptual" definition of a collection of functional contexts.This has no physical manifestation in the grid.
service::Service Connections
| Connector | Source | Target | Notes |
| Association source > target |
Service +service 1, unordered Tagged Values anonymousRole = true |
SemanticMetadata +semanticMetadataCollection 0..*, unordered |
|
| Association source > target |
Service +service 1, unordered Tagged Values anonymousRole = true |
CaDSRRegistration +caDSRRegistration 0..1, unordered |
|
| Association source > target |
Service +service 1, unordered |
PointOfContact +pointOfContactCollection 0..*, unordered |
|
| Association source > target |
Service +service 1, unordered |
ServiceContext +serviceContextCollection 1..*, unordered |
|
| Association source > target |
ServiceMetadata +serviceMetadata 1, unordered |
Service +serviceDescription 0..1, unordered |
|
service::Service Attributes
| Attribute | Type | Notes |
| description«XSDattribute» | public : java.lang.String | |
| name«XSDattribute» | public : java.lang.String | |
| version«XSDattribute» | public : java.lang.String |
service::ServiceContext
public Class: This is a functional collection of operations that work over a common collection of stateful resources.A service without stateful resources would have a single context.This is manifested as an actual service in the grid.
service::ServiceContext Connections
| Connector | Source | Target | Notes |
| Association source > target |
Service +service 1, unordered |
ServiceContext +serviceContextCollection 1..*, unordered |
|
| Association source > target |
ServiceContext +serviceContext 1, unordered |
ContextProperty +contextPropertyCollection 0..*, unordered |
|
| Association source > target |
ServiceContext +serviceContext 1, unordered |
Operation +operationCollection 0..*, unordered |
|
service::ServiceContext Attributes
| Attribute | Type | Notes |
| description«XSDattribute» | public : java.lang.String | |
| name«XSDattribute» | public : java.lang.String |
Metadata APIs
This section describes the high-level API which can be used to access and manipulate instances of the metadata described above. All the standard metadata models have Java Bean representations which can be used to programmatically interact with the models. The APIs described herein can be used access these models from services, and serialize and deserialize them to and from XML. These methods complement the Discovery API (described later), as once an EPR (End Point Reference) is returned from the Discovery API, these methods can be used access and inspect the full metadata. There are also more detailed methods provided for examining DomainModel metadata in the data service utility API: gov.nih.nci.cagrid.data.utilities.DomainModelUtils.
The MetadataUtils class is a simple class with static methods that provide stand-alone capability to retrieve standardized metadata from remote services, and serialize and serialize those (or other) instances. The ResourcePropertyHelper API not detailed here, is the lower level API which can be used to directly gather information about ResourceProperties (which is how metadata is exposed in caGrid). The MetadataUtils, described herein and shown above in Figure 7, leverage this API, and expose some of its exceptions. The possible exceptions generated by the metadata utility methods are detailed below in Figure 8. A non discerning client may simple opt to catch ResourcePropertyRetrievalException, as it is the base checked exception. An additional non-checked exception, InternalRuntimeException, can also be thrown, but it is solely used to represent an internal logic error in the APIs and so it is not expected clients can "recover" from such an exception. As such, client should not attempt to catch this runtime exception for any other reason than to mask the problem. QueryInvalidException, is thrown if an invalid XPath query is issued. Problems originating from remote services are thrown in the subclass, RemoteResourcePropertyRetrievalException. In general use of the metadata utilities, this is the most likely exception clients may see, as it is thrown if a service is not properly exposing the proper metadata. Clients leveraging the lower level resource property APIs should take care to appropriately address each type of exception if they are communicating with services. For example, even though it is a caBIG requirement to expose the standard service metadata, clients should properly handle the case where it is not present. Asking for specific metadata that a service does not provide would yield an InvalidResourcePropertyException. Detailed examples and API overview can be found in the caGrid Programmer's Guide.
Figure 8 Metadata Exceptions
Advertisement and Discovery
Introduction
As caBIG aims to connect data and tools from 50+ disparate cancer centers, a critical requirement of its infrastructure is that it supports the ability of researchers to discover these resources. caGrid enables this ability by taking advantage of the rich structural and semantic descriptions of data models and services that are available. Each service is required to describe itself using caGrid standard service metadata. When a grid service is connected to the caBIG grid, it registers its availability and service metadata with a central indexing registry service (Index Service). This service can be thought of as the "yellow pages" and "white pages" of caBIG. A researcher can then discover services of interest by looking them up in this registry. caGrid provides a series of high-level APIs and user applications for performing this lookup which greatly facilitate the process.
As the Index Service contains the service metadata of all the currently advertised and available services in caBIG, the expressivity of service discovery scenarios is limited only by the expressivity of the service metadata. For this reason, caGrid provides standards for service metadata, as described in the previous chapter, to which all services must adhere.
As shown in Figure 9, the caGrid discovery API and tools allow researchers to query the Index Service for services satisfying a query over the service metadata. That is, researchers can lookup services in the registry using any of the information used to describe the services. For instance, all services from a given cancer center can be located, data services exposing a certain domain model or objects based on a given semantic concept can be discovered, as can analytical services that provide operations that take a given concept as input.
Requirements
The Globus Information Services are a major aspect of the infrastructure needed to satisfy the caBIG requirements for Advertisement and Discovery. These requirements specify what is needed to support the basic use cases of advertising the availability and function of a grid service by a service provider, and the discovery of said information by a user, respectively. The general use cases are explained below.
Advertisement:
The caGrid Grid Service Owner (Actor) composes service metadata describing the service to the grid and publishes it to grid. The service metadata describes properties of the grid services that caGrid users and other grid services may query.
Discovery:
A caGrid Researcher (Actor) specifies search criteria describing a service. The research submits the discovery request to a discovery service, which identifies a list of services matching the criteria, and returns the list to the researcher.
These general themes specify that the caBIG infrastructure must support the following use cases:
- Publish advertisement a Grid Service
- Remove advertisement of a Grid Service
- Update advertisement of a Grid Service
- Discover advertisement a Grid Service
Globus Information Services
The Globus Information Services component, realized as the Monitoring and Discovery System (MDS) is a suite of web services to monitor and discover resources and services on Grids. This system allows users to discover what resources are considered part of a Virtual Organization (VO) and to monitor those resources. MDS services provide query and subscription interfaces to arbitrarily detailed resource data and a trigger interface that can be configured to take action when pre-configured trouble conditions are met. MDS is composed of the following three main components:
- WS MDS Index Service - This service contains a registry of grid resources and collects information from them, making it accessible and queryable from one location. Generally, a virtual organization deploys one or more index services, which then collect data on all of the grid resources available within that VO.
- WS MDS Trigger Service - This service collects data from grid resources and passes the data to appropriate programs to perform various actions in response to events. (not currently used by the caGrid metadata infrastructure).
- WS MDS Aggregator - This is the infrastructure on which the previous services are built. It collects, manages, and indexes data from an aggregator source and sends that data to an aggregator sink for processing.
WSRF Resource Properties
The section provides a brief recap of information about WSRF and the Globus implementation of it. More details can be found in the Globus documentation.
The Globus 4 toolkit provides a toolkit for create WSRF grid services. The WS-Resource Framework (WSRF) is a set of six Web services specifications that define what is termed the WS-Resource approach to modeling and managing state in a Web services context. In this approach, a resource is an entity that encapsulates the state of a stateful web service. Generally, each resource is a separate object but in certain cases it might be a singleton. A resource may just be a front end for state kept in an external entity, such as a file in a file system, a row in a database or an entity bean in a J2EE container.
Figure 10 : Globus Resource Framework
A resource key is represented by a ResourceKey interface. It is a combination of a key name and the actual key value. A resource is represented by a Resource interface. It is a marker interface without any method defined. All resource objects must implement this interface. Resources are managed by an object that implements the ResourceHome interface. The ResourceHome interface provides methods for finding and removing resources as well as methods for identifying the SOAP header element and class for the resource key. In addition to the methods specified by the interface, ResourceHome implementations will generally provide an implementation-specific create() call or any other methods that operate on a set of resources.
Resources may have resource properties. Resource properties are declared in the WSDL of the service as elements of a resource property document. The ResourceProperties interface contains a single accessor method for retrieving the ResourcePropertySet from a resource. It must be implemented by all resources that want to expose resource properties. The ResourcePropertySet is the representation of the resource property document associated with the resource. It contains methods for managing the set of resource properties, e.g. adding and removing resource properties, and for discovering properties of the document itself, e.g. its name. The ResourceProperty interface needs to be implemented by all resource properties. It contains methods for: managing the set of values associated with the resource property, discovering properties of the resource property element, and serializing the resource property to a array of SOAP or DOM elements. The ResourcePropertyMetaData interface contains metadata information about a ResourceProperty such as resource property name, cardinality, etc.
Figure 11 : Globus Resource Property Framework
Once metadata items are exposed as ResourceProperties, they can be queried using standard web service operations defined by the WS-ResourceProperties specification. Consult the specification for more details, but a synopsis of the operations are provided here:
- GetResourceProperty: allows access to the value of any resource property given its QName.
- GetMultipleResourceProperties: allows access to the value of several resource properties at once, given each of t





