<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Turbo XML 2.3.1.100. Conforms to w3c http://www.w3.org/2001/XMLSchema-->
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
xmlns:CLI="http://www.openmicroscopy.org/XMLschemas/CLI/RC1/CLI.xsd" 
targetNamespace="http://www.openmicroscopy.org/XMLschemas/CLI/RC1/CLI.xsd" 
elementFormDefault="qualified" version="RC1">
 
  <annotation>
    <documentation>
			Open Microscopy Environment
			Command Line Interface XML Schema
			Author:  Josiah Johnston
		</documentation>
  </annotation>
  <attributeGroup name="InputLocation">
    <attribute name="Location" type="string" use="required">
      <annotation>
        <documentation>This specifies where to find a piece of data by FormalInputName and SemanticElementName. i.e. To reference Semantic element 'bar' from Formal Input 'foo', Location="foo.bar" </documentation>
      </annotation>
    </attribute>
  </attributeGroup>
  <attributeGroup name="OutputLocation">
    <attribute name="Location" type="string" use="required">
      <annotation>
        <documentation>This specifies where to find a piece of data by FormalOutputName and SemanticElementName. i.e. To reference Semantic element 'bar' from Formal Output 'foo', Location="foo.bar"</documentation>
      </annotation>
    </attribute>
  </attributeGroup>
  <!--
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (C) 2003 Open Microscopy Environment
#       Massachusetts Institute of Technology,
#       National Institutes of Health,
#       University of Dundee
#
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-->
  <!--
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Written by:  Josiah Johnston <siah@nih.gov>
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-->
  <element name="ExecutionInstructions">
    <annotation>
      <documentation>Tied to DB. Table PROGRAMS Column EXECUTION
			</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:CommandLine" minOccurs="0"/>
        <element ref="CLI:STDIN" minOccurs="0"/>
        <element ref="CLI:STDOUT" minOccurs="0"/>
      </sequence>
      <attribute name="ExecutionPoint" use="required">
        <annotation>
          <documentation>Assigns a execution point for the analysis.
					</documentation>
        </annotation>
        <simpleType>
          <restriction base="string">
            <enumeration value="executeGlobal"/>
            <enumeration value="startDataset"/>
            <enumeration value="startImage"/>
            <enumeration value="startFeature"/>
            <enumeration value="finishFeature"/>
            <enumeration value="finishImage"/>
            <enumeration value="finishDataset"/>
          </restriction>
        </simpleType>
      </attribute>
      <attribute name="MakesNewFeature" type="boolean" default="false"/>
    </complexType>
  </element>
  <element name="CommandLine">
    <annotation>
      <documentation>This describes the string that will be passed to a command line program via command line parameters. The command line handler will perform basic variable substitution on sub elements of this.
Example:
when you use the program, you type: /OME/bin/OME_Image_XYZ_stats Path=[path to repository file] Dims=[X],[Y],[Z],[W],[T],[BytesPerPix]
XML specification of the command line parameters is:
&lt;CommandLine>Path=&lt;RawImageFilePath/> Dims=&lt;sizeX/>,&lt;sizeY/>,&lt;sizeZ/>,&lt;sizeW/>,&lt;sizeT/>,&lt;BPP/>&lt;/CommandLine>
			</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:Parameter" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
    </complexType>
    <unique name="CommandLine_XYPlaneID">
      <selector xpath=".//CLI:XYPlane"/>
      <field xpath="@XYPlaneID"/>
    </unique>
    <keyref name="CommandLine_XYPlaneID_Ref" refer="CLI:CommandLine_XYPlaneID">
      <selector xpath=".//CLI:Match"/>
      <field xpath="@XYPlaneID"/>
    </keyref>
  </element>
  <element name="STDIN">
    <annotation>
      <documentation>This specifies what and how to write to STDIN.
Currently this is still in development. I would STRONGLY recommend contacting Josiah &lt;siah@nih.gov> before coding against it.
			</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:InputRecord" maxOccurs="unbounded"/>
      </sequence>
    </complexType>
  </element>
  <element name="STDOUT">
    <annotation>
      <documentation>This specifies what and how to read STDOUT.
			</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:OutputRecord" maxOccurs="unbounded"/>
      </sequence>
    </complexType>
  </element>
  <element name="Input">
    <annotation>
      <documentation>References a particular column in a FormalInput. Used for variable substitution.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="CLI:InputLocation"/>
      <attribute name="DivideBy" type="string"/>
      <attribute name="MultiplyBy" type="string"/>
    </complexType>
  </element>
  <element name="Output">
    <annotation>
      <documentation>References a particular column of a FormalOutput.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:OutputTo" maxOccurs="unbounded"/>
      </sequence>
      <attribute name="AccessBy" type="integer" use="required">
        <annotation>
          <documentation>Describes how to access information extracted using a regular expression. Examples are 1, 2, 3, ...</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="theZ">
    <annotation>
      <documentation>Describes how the Z constraints of the XY plane should be produced or acquired.</documentation>
    </annotation>
    <complexType>
      <choice>
        <element ref="CLI:AutoIterate"/>
        <element ref="CLI:UseValue"/>
        <element ref="CLI:IterateRange"/>
        <element ref="CLI:Match"/>
      </choice>
    </complexType>
  </element>
  <element name="theW">
    <annotation>
      <documentation>Describes how the wavenumber constraints of the XY plane should be produced or acquired.</documentation>
    </annotation>
    <complexType>
      <choice>
        <element ref="CLI:AutoIterate"/>
        <element ref="CLI:UseValue"/>
        <element ref="CLI:IterateRange"/>
        <element ref="CLI:Match"/>
      </choice>
    </complexType>
  </element>
  <element name="theT">
    <annotation>
      <documentation>Describes how the time constraints of the XY plane should be produced or acquired.</documentation>
    </annotation>
    <complexType>
      <choice>
        <element ref="CLI:AutoIterate"/>
        <element ref="CLI:UseValue"/>
        <element ref="CLI:IterateRange"/>
        <element ref="CLI:Match"/>
      </choice>
    </complexType>
  </element>
  <element name="XYPlane">
    <annotation>
      <documentation>Describes an XY plane. Used with variable substitution. This will be substituted with a dynamically generated plane.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:theZ"/>
        <element ref="CLI:theT"/>
        <element ref="CLI:theW"/>
      </sequence>
      <attribute name="BPP">
        <annotation>
          <documentation>Specifies bits per pixel (BPP) the module is expecting. If the program can deal with either 8 or 16 bit images, leave this out or specify 16. Both of these result in the BPP of the image being used. That is, if the image is 8 bits, the module will get an 8 bits per pixel. If the image is 16 bits, the module will get 16 bits per pixel.
Currently, only native image pixels are supported.
					</documentation>
        </annotation>
        <simpleType>
          <restriction base="integer">
            <enumeration value="8"/>
            <enumeration value="16"/>
          </restriction>
        </simpleType>
      </attribute>
      <attribute name="Format">
        <annotation>
          <documentation>Specifies the expected format of the plane.
RAW corrosponds to OME repository format of pixel dump.
TIFF corrosponds to TIFF files.
Currently only TIFF is supported.
					</documentation>
        </annotation>
        <simpleType>
          <restriction base="string">
            <enumeration value="RAW"/>
            <enumeration value="TIFF"/>
          </restriction>
        </simpleType>
      </attribute>
      <attribute name="XYPlaneID" type="string">
        <annotation>
          <documentation>Needed if you need another plane to match indexes. Referenced by the Match element.</documentation>
        </annotation>
      </attribute>
      <attribute name="Return">
        <annotation>
          <documentation>Specifies whether to the program needs the FilePath or the FileContents. Currently, only the FilePath is supported.</documentation>
        </annotation>
        <simpleType>
          <restriction base="string">
            <enumeration value="FilePath"/>
            <enumeration value="File"/>
          </restriction>
        </simpleType>
      </attribute>
      <attribute name="Pixels" type="string" use="required">
        <annotation>
          <documentation>References a formal input of semantic type 'Pixels'</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="RawImageFilePath">
    <annotation>
      <documentation>Used with variable substitution. This will be substituted with the path and file of the raw pixel dump image file.
e.g. /OME/repository/1-tinyTest.ori
			</documentation>
    </annotation>
    <complexType>
      <attribute name="Pixels" type="string" use="required">
        <annotation>
          <documentation>References a formal input of semantic type 'Pixels'</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="InputRecord">
    <annotation>
      <documentation>Groups a set of inputs into records.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:Index" maxOccurs="unbounded"/>
        <choice>
          <element ref="CLI:DelimitedRecord"/>
          <element ref="CLI:CustomRecord"/>
        </choice>
      </sequence>
    </complexType>
    <unique name="InputRecord_XYPlaneID">
      <selector xpath=".//CLI:XYPlane"/>
      <field xpath="@XYPlaneID"/>
    </unique>
    <keyref name="InputRecord_XYPlaneID_Ref" refer="CLI:InputRecord_XYPlaneID">
      <selector xpath=".//CLI:Match"/>
      <field xpath="@XYPlaneID"/>
    </keyref>
  </element>
  <element name="OutputRecord">
    <annotation>
      <documentation>Groups a set of outputs into records.</documentation>
    </annotation>
    <complexType>
      <attribute name="RepeatCount" type="positiveInteger">
        <annotation>
          <documentation>RepeatCount specifies how many times to read a record. If it is not specified, reading will continue until it reaches the end of the output stream.
If used in conjuction with TerminateAt, reading will stop after RepeatCount or TerminateAt, whichever comes first.
					</documentation>
        </annotation>
      </attribute>
      <attribute name="TerminateAt" type="string">
        <annotation>
          <documentation>TerminateAt specifies a regular expression. When a match to this is found, reading will stop.
If used in conjuction with RepeatCount, reading will stop after RepeatCount or TerminateAt, whichever comes first.
					</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="pat" type="string">
    <annotation>
      <documentation>Contains a regular expression. Checked for compilation when the module is imported.</documentation>
    </annotation>
  </element>
  <element name="Match">
    <annotation>
      <documentation>Used to reference the index method used by another XYplane. Effectively syncs the planes on certain dimensions. Use with caution. Unsynced dimensions need to be compatible.</documentation>
    </annotation>
    <complexType>
      <attribute name="XYPlaneID" type="string" use="required">
        <annotation>
          <documentation>References another Plane.</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="UseValue">
    <annotation>
      <documentation>Use an input value. References an input, does not produce an output.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="CLI:InputLocation"/>
    </complexType>
  </element>
  <element name="AutoIterate">
    <annotation>
      <documentation>Iterates a dimension over its entire range. Produces outputs.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:OutputTo" maxOccurs="unbounded"/>
      </sequence>
    </complexType>
  </element>
  <element name="IterateRange">
    <annotation>
      <documentation>Iterate this dimension over a range of values. Produces outputs.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:Start"/>
        <element ref="CLI:End"/>
        <element ref="CLI:OutputTo" maxOccurs="unbounded"/>
      </sequence>
    </complexType>
  </element>
  <element name="End">
    <annotation>
      <documentation>Specifies an end point of iteration.
Not currently supported.
			</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="CLI:InputLocation"/>
    </complexType>
  </element>
  <element name="Start">
    <annotation>
      <documentation>Specifies a starting point of iteration. 
Not currently supported.
			</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="CLI:InputLocation"/>
    </complexType>
  </element>
  <element name="OutputTo">
    <annotation>
      <documentation>Specifies location to write output. One data chunk that the Output element references may be written to one or more places.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="CLI:OutputLocation"/>
    </complexType>
  </element>
  <element name="RawText" type="string"/>
  <element name="InputSubString">
    <complexType>
      <choice>
        <element ref="CLI:Input"/>
        <element ref="CLI:XYPlane"/>
        <element ref="CLI:RawImageFilePath"/>
        <element ref="CLI:RawText"/>
      </choice>
    </complexType>
  </element>
  <element name="Index">
    <annotation>
      <documentation>This specifies what semantic elements of the attributes should be used to merge them into records. Every formalInput in a record should be included in this.
For records with multiple indexes, (Stack Statistics for example has theT and theC), specify two indexes. The records will be sorted based on the index order.
This means a stack statistics record that specifies theC as an index before theT will be sorted first on theC, then on theT.
			</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:Input" maxOccurs="unbounded"/>
      </sequence>
    </complexType>
  </element>
  <element name="DelimitedRecord">
    <annotation>
      <documentation>Use this to construct a Delimited Record. (i.e. tab delimitted, comma delimitted, etc). At some point this will be expanded to include XYPlanes and RawImageFilePath.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:Input" maxOccurs="unbounded"/>
      </sequence>
      <attribute name="FieldDelimiter" type="string" use="required">
        <annotation>
          <documentation>This string will be used to separate fields in this record.</documentation>
        </annotation>
      </attribute>
      <attribute name="RecordDelimiter" type="string" default="\n">
        <annotation>
          <documentation>This will be used to separate Records. Defaults to a newline (a newline as interpretted by perl).</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="CustomRecord">
    <annotation>
      <documentation>Used to construct an arbitrarily formatted record. Not currently supported. email Josiah &lt;siah@nih.gov> if you need this implemented.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:InputSubString" maxOccurs="unbounded"/>
      </sequence>
    </complexType>
  </element>
  <element name="Parameter">
    <annotation>
      <documentation>All Formal Inputs referenced within this scope should have a count of 0 or 1.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:InputSubString" maxOccurs="unbounded"/>
      </sequence>
    </complexType>
  </element>
  <element name="TempFile">
    <annotation>
      <documentation>Will be substituted with the full path of the file created. The OutputTo feature is not implemented yet.</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:OutputTo" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
      <attribute name="FileID" type="string">
        <annotation>
          <documentation>Should uniquely identify this tempFile. It is used to retrieve the path as a variable.</documentation>
        </annotation>
      </attribute>
      <attribute name="Repository" type="string">
        <annotation>
          <documentation>If specified, the temporary file will be located in the repository. This specifies where to find a repository attribute by FormalInputName and SemanticElementName(s). Following references is valid. e.g. Location="PixelInput.Repository"</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="PixelOutput">
    <annotation>
      <documentation>Allows SemanticTypes Pixels and PixelsPlane to be outputs. The subelements specify locations for the population of data. 
This data population is useful for a Plane projection algorithm that has the same X and Y dimensions as the Pixels it is operating on.
Alternately, these fields may be filled by ouput from STDOUT.
The FileSHA1 subelement is automatically calculated for the pixel dump file. 
			</documentation>
    </annotation>
    <complexType>
      <sequence>
        <element ref="CLI:SizeX" minOccurs="0"/>
        <element ref="CLI:SizeY" minOccurs="0"/>
        <element ref="CLI:SizeZ" minOccurs="0"/>
        <element ref="CLI:SizeC" minOccurs="0"/>
        <element ref="CLI:SizeT" minOccurs="0"/>
        <element ref="CLI:PixelType" minOccurs="0"/>
        <element ref="CLI:BitsPerPixel" minOccurs="0"/>
        <element ref="CLI:Repository" minOccurs="0"/>
        <element ref="CLI:Path" minOccurs="0"/>
      </sequence>
      <attribute name="type">
        <simpleType>
          <restriction base="string">
            <enumeration value="Pixels"/>
            <enumeration value="PixelsPlane"/>
          </restriction>
        </simpleType>
      </attribute>
      <attribute name="FormalOutput" type="string"/>
      <attribute name="UseBase" type="string">
        <annotation>
          <documentation>Unimplemented. Will subsume all subelements except &lt;Repository> and &lt;Path>. This will reference a formal input. That input be used for copying all possible data that has not been filled by other means. </documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="SizeX">
    <annotation>
      <documentation>Specifies an input data location for populating the semantic element</documentation>
    </annotation>
    <complexType>
      <attribute name="Location" type="string" use="required">
        <annotation>
          <documentation>This specifies where to find a piece of data by FormalOutputName and SemanticElementName. i.e. To reference Semantic element 'bar' from Formal Output 'foo', Location="foo.bar"</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="SizeY">
    <annotation>
      <documentation>Specifies an input data location for populating the semantic element</documentation>
    </annotation>
    <complexType>
      <attribute name="Location" type="string" use="required">
        <annotation>
          <documentation>This specifies where to find a piece of data by FormalOutputName and SemanticElementName. i.e. To reference Semantic element 'bar' from Formal Output 'foo', Location="foo.bar"</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="SizeZ">
    <annotation>
      <documentation>Specifies an input data location for populating the semantic element</documentation>
    </annotation>
    <complexType>
      <attribute name="Location" type="string" use="required">
        <annotation>
          <documentation>This specifies where to find a piece of data by FormalOutputName and SemanticElementName. i.e. To reference Semantic element 'bar' from Formal Output 'foo', Location="foo.bar"</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="SizeC">
    <annotation>
      <documentation>Specifies an input data location for populating the semantic element</documentation>
    </annotation>
    <complexType>
      <attribute name="Location" type="string" use="required">
        <annotation>
          <documentation>This specifies where to find a piece of data by FormalOutputName and SemanticElementName. i.e. To reference Semantic element 'bar' from Formal Output 'foo', Location="foo.bar"</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="SizeT">
    <annotation>
      <documentation>Specifies an input data location for populating the semantic element</documentation>
    </annotation>
    <complexType>
      <attribute name="Location" type="string" use="required">
        <annotation>
          <documentation>This specifies where to find a piece of data by FormalOutputName and SemanticElementName. i.e. To reference Semantic element 'bar' from Formal Output 'foo', Location="foo.bar"</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="PixelType">
    <annotation>
      <documentation>Specifies an input data location for populating the semantic element</documentation>
    </annotation>
    <complexType>
      <attribute name="Location" type="string" use="required">
        <annotation>
          <documentation>This specifies where to find a piece of data by FormalOutputName and SemanticElementName. i.e. To reference Semantic element 'bar' from Formal Output 'foo', Location="foo.bar"</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="BitsPerPixel">
    <annotation>
      <documentation>Specifies an input data location for populating the semantic element</documentation>
    </annotation>
    <complexType>
      <attribute name="Location" type="string" use="required">
        <annotation>
          <documentation>This specifies where to find a piece of data by FormalOutputName and SemanticElementName. i.e. To reference Semantic element 'bar' from Formal Output 'foo', Location="foo.bar"</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="Repository">
    <annotation>
      <documentation>Specifies an input data location for populating the semantic element</documentation>
    </annotation>
    <complexType>
      <attribute name="Location" type="string" use="required">
        <annotation>
          <documentation>This specifies where to find a piece of data by FormalOutputName and SemanticElementName. i.e. To reference Semantic element 'bar' from Formal Output 'foo', Location="foo.bar"</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="Path">
    <annotation>
      <documentation>Specifies a data location for populating the semantic element</documentation>
    </annotation>
    <complexType>
      <attribute name="FileID" type="string">
        <annotation>
          <documentation>Refers to a TempFile</documentation>
        </annotation>
      </attribute>
    </complexType>
  </element>
  <element name="PixelsInput">
    <annotation>
      <documentation>Grants file path to Pixels input. Future plans include dumping pixel file contents as well.</documentation>
    </annotation>
    <complexType>
      <attributeGroup ref="CLI:InputLocation"/>
      <attribute name="SubstituteWith" use="required">
        <simpleType>
          <restriction base="string">
            <enumeration value="path"/>
          </restriction>
        </simpleType>
      </attribute>
    </complexType>
  </element>
</schema>
