
Folks, since this is something that is required for JSDL v1 and I unfortunately did not get Steve's comments on this yet, I decided to give the JSDL community the opportunity to comment on this before tomorrow's telecon. Cheers, Michel Begin forwarded message:
From: Michel Drescher <Michel.Drescher@uk.fujitsu.com> Date: 3 May 2005 17:45:49 BST To: Andrew Stephen McGough <asm@doc.ic.ac.uk> Subject: Re: JSDL action point 17: Extending JSDL
Hi Steve,
thx for the review. I now come up with the following, having added a section for jsdl:other and an example for attribute extension:
Extending JSDL ============== JSDL provides for the overall structure to define jobs. To extend JSDL to best fit to the required needs, JSDL provides two mechanisms for extension: Extending using attributes and extending using elements. In general using extension mechanisms will break interoptability of JSDL consumers and as such these mechanisms should be used spareingly and only where need. It is recommended that people interested in extending the functionality of JSDL should first verify that no other group has provided an extension which meets their requirements.
Attribute based extensions -------------------------- Every JSDL element allows for additional attributes, as many as needed, provided these attributes have a namespace other than the normative namespaces JSDL defines.
Example: This example introduces an order that has to be followed when staging in files (shortened for brevity):
<?xml version="1.0" encoding="UTF-8"?> <jsdl:JobDefinition xmlns="http://www.example.org/" xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/04/jsdl" xmlns:o="http://www.example.org/order-of-execution"> <jsdl:JobDescription> <jsdl:DataStaging o:order="1"> <jsdl:FileName>foo</jsdl:FileName> <jsdl:CreationFlag>overwrite</jsdl:CreationFlag>
<jsdl:Source><jsdl:URL>http://www.nowhere.com/foo-file</jsdl:URL></ jsdl:Source> </jsdl:DataStaging> <jsdl:DataStaging o:order="2"> <jsdl:FileName>bar</jsdl:FileName> <jsdl:CreationFlag>overwrite</jsdl:CreationFlag>
<jsdl:Source><jsdl:URL>http:://www.nowhere.com/bar-file</jsdl:URL></ jsdl:Source> </jsdl:DataStaging> </jsdl:JobDescription> </jsdl:JobDefinition>
Element based extensions ------------------------ Where applicable within the overall structure of the document, JSDL allows for additional elements that are not normatively defined by JSDL. As with attribute extension, these elements must assume a namespace different than any namespace JSDL normatively defines.
Example (shortened for brevity): The following example extends JSDL by introducing reservations: <?xml version="1.0" encoding="UTF-8"?> <jsdl:JobDefinition xmlns="http://www.example.org" xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/04/jsdl"> <jsdl:JobDescription> <jsdl:Resource> <jsdl:CPUCount> <!-- exactly 1 CPU --> <jsdl:Exact>1.0</jsdl:Exact> </jsdl:CPUCount> <jsdl:DiskSpace> <!-- At least 1 GB disk space --> <jsdl:LowerBoundedRange>1073741824.0</jsdl:LowerBoundedRange> </jsdl:DiskSpace> <ug:Reservation xmlns:ug="http://schemas.unigrids.org/2005/05/reservation"> <ug:Ticket>h933fsolenri900wnmd90mm34</ug:Ticket> </ug:Reservation> </jsdl:Resource> </jsdl:JobDescription> </jsdl:JobDefinition>
Semantics of jsdl:other ----------------------- JSDL defines enumerations of values for processor architectures and operating system. Both enumerations are not assumed to be exhaustively complete. These enumerations are embedded in wrapper types to allow for extension, "jsdl:CPUArchitectureType" and "jsdl:OperatingSystemTypeType", respectively.
To extend the enumerations, the special keyword "other" MUST be used for the values of the elements "jsdl:CPUArchitectureName" and "jsdl:OperatingSystemName", respectiveely, and the element extension pattern as described above MUST be used.
Example: Given there exist a CPU that natively executes Java Bytecode named "JavaCPU", this CPU would have to be specified as follows in the resource section of a JSDL instance document: ... <Resource> <CPUArchitecture> <CPUArchitectureName>other</CPUArchitectureName> <ex:NewCPUTypes xmlns:ex="http://www.example.org/NewCPUTypes">JavaCPU</ex:NewCPUTypes> </CPUArchitecture> </Resource>