This wiki is locked. Future workgroup activity and specification development must take place at our new wiki. For more information, see this blog post about the new governance model and this post about changes to the website.

Architecture Management Topic: Resource Type Discovery

Owner: Jim Conallen

As AM service providers offer customer defined resource types it would be useful for clients to be able to find out exactly what types of resources a provider manages, as well as allow the creation of. Presently a client must navigate all the service discovery documents looking at all creation and query services and the resource type and shapes associated with them. It is not clear how a client would know that a provider can manage a given type outside of creation/query.

Scenario

An organization uses multiple OSLC providers to manage architecture resources. Each AM provider manages many different types of resources, some of which may be custom defined.

A client wants to create and start working with a particular type of resources, or determine which types of resources it can manage so as to provide the user with a list of resource types they can choose from.

The client goes to each service provider, walks the service catalog and provider documents. It examines each service provider document an looks at all the query base and creation factory services defined in it. For each of these it collects the resource shapes and resource types associated with it. The client now has a map of all the publicly declared resource types that the provider manages.

<rdf:RDF 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dcterms="http://purl.org/dc/terms" 
   xmlns:oslc="http://open-services.net/ns/core#">

   <oslc:ServiceProvider rdf:about="http://example.com/am-provider/Project+X">

      <dcterms:title>Project X AM Provider</dcterms:title>
      <dcterms:description>Example AM Provider for Project X</dcterms:description>

      <dcterms:publisher>
         <oslc:Publisher>
            <dcterms:title>Acme AM Providers - Project X</dcterms:title>
            <oslc:label>Acme - Project X</oslc:label>
            <dcterms:identifier>urn:inet:example.com:oslcam/Project+X</dcterms:identifier>
            <oslc:icon rdf:resource="http://example.com/icons/icon1.png" />
         </oslc:Publisher>
      </dcterms:publisher>

      <oslc:prefixDefinition> ... </oslc:prefixDefinition>

      <oslc:service>
         <oslc:Service>
            <oslc:domain rdf:resource="http://open-services.net/ns/am#" />

            <oslc:creationFactory>
               <oslc:CreationFactory>
                  <dcterms:title>Creation Factory for OSLC AM Resources</dcterms:title>
                  <oslc:label>OSLC AM Resource Creation Factory</oslc:label>
                  <oslc:creation
                     rdf:resource="http://example.com/am-provider/Project+X/oslc-factory" />
                  <oslc:resourceShape
                     rdf:resource="http://example.com/am-provider/shapes/am/resource" />
                  <oslc:resourceType rdf:resource="http://open-services.net/ns/am#Resource"/>
                  <oslc:resourceShape
                     rdf:resource="http://example.com/am-provider/shapes/am/resource2" />
                  <oslc:resourceType rdf:resource="http://open-services.net/ns/am#Resource2"/>

                  <oslc:usage rdf:resource="http://open-services.net/ns/core#default" />
               </oslc:CreationFactory>
            </oslc:creationFactory>

            <oslc:creationFactory>
               <oslc:CreationFactory>
                  <dcterms:title>Creation Factory for AM Resources
                  </dcterms:title>
                  <oslc:label>AM Resource Creation Factory</oslc:label>
                  <oslc:creation rdf:resource="http://example.com/am-provider/Project+X/factory" />
                  <oslc:resourceShape
                     rdf:resource="http://example.com/am-provider/shapes/am/resource" />
                  <oslc:resourceType rdf:resource="http://open-services.net/ns/am#Resource"/>
                  <oslc:usage rdf:resource="http://vendor.com/ns/usage/nonrdf" />
               </oslc:CreationFactory>
            </oslc:creationFactory>

            <oslc:queryCapability>
               <oslc:QueryCapability>
                  <dcterms:title>Resource Query Service</dcterms:title>
                  <oslc:label>AM Query Service</oslc:label>
                  <oslc:queryBase rdf:resource="http://example.com/am-provider/Project+X/query" />
                  <oslc:resourceType rdf:resource="http://open-services.net/ns/am#Resource"/>
                  <oslc:resourceShape rdf:resource="http://example.com/am-provider/shapes/am/resource" />
               </oslc:QueryCapability>
            </oslc:queryCapability>

            <oslc:queryCapability>
               <oslc:QueryCapability>
                  <dcterms:title>Link Type Query Service</dcterms:title>
                  <oslc:label>Link Type Query</oslc:label>
                  <oslc:queryBase rdf:resource="http://example.com/am-provider/Project+X/linktypes" />
                  <oslc:resourceType rdf:resource="http://open-services.net/ns/am#LinkType"/>
                  <oslc:resourceShape rdf:resource="http://example.com/am-provider/shapes/am/linktype" />
               </oslc:QueryCapability>
            </oslc:queryCapability>

            <oslc:selectionDialog>
               <oslc:Dialog>
                  <dcterms:title>OSLC AM Resource Selector</dcterms:title>
                  <oslc:label>AM Picker</oslc:label>
                  <oslc:dialog
                     rdf:resource="https://example.com/am-provider/resourcePicker?projectId=Project%20X" />
                  <oslc:hintWidth>400px</oslc:hintWidth>
                  <oslc:hintHeight>500px</oslc:hintHeight>
                  <oslc:resourceType rdf:resource="http://open-services.net/ns/am#resource" />
                  <oslc:usage rdf:resource="http://open-services.net/ns/core#default" />
               </oslc:Dialog>
            </oslc:selectionDialog>

            <oslc:creationDialog>
               <oslc:Dialog>
                  <dcterms:title>OSLC AM Resource Creation UI</dcterms:title>
                  <oslc:label>AM Creator</oslc:label>
                  <oslc:dialog
                     rdf:resource="https://example.com/am-provider/resourceCreator?projectId=Project%20X" />
                  <oslc:hintWidth>400px</oslc:hintWidth>
                  <oslc:hintHeight>500px</oslc:hintHeight>
                  <oslc:resourceType rdf:resource="http://open-services.net/ns/am#resource" />
                  <oslc:usage rdf:resource="http://open-services.net/ns/core#default" />
               </oslc:Dialog>
            </oslc:creationDialog>

         </oslc:Service>
      </oslc:service>

   </oslc:ServiceProvider>
</rdf:RDF> 

This scenario requires that the provider document all resources that it can manage as resource shapes associated with query base or creation factories (often the same url).

Issues

Are we versioning types? If so, how does a client know which version of a resource type/shape they use?

Can a service provider manage a resource type that does not have either a query base or creation factory? What about resource types that are independent resources, but never created directly, only indirectly.

For custom (dynamically defined) resource types is the expectation that each one will have its own query base and creation factory?

Topic revision: r3 - 01 Sep 2011 - 14:07:07 - JimConallen
 
This site is powered by the TWiki collaboration platform Copyright � by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Contributions are governed by our Terms of Use
Ideas, requests, problems regarding this site? Send feedback