<?xml version="1.0" encoding="UTF-8"?>
  <!-- PDS4 XML/Schema for Name Space Id:proc  Version:1.2.1.0 - Thu Jun 02 19:14:00 UTC 2022 -->
  <!-- Generated from the PDS4 Information Model Version 1.18.0.0 - System Build 12.1 -->
  <!-- *** This PDS4 product schema is an operational deliverable. *** -->
  <!--                                                                           -->
  <!--               Dictionary Stack                                            -->
  <!-- 1.18.0.0 - pds: - Common Dictionary                                       -->
  <!-- 1.2.1.0 - proc: - Processing_Information                                  -->
  <!--                                                                           -->
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://pds.nasa.gov/pds4/proc/v1"
    xmlns:proc="http://pds.nasa.gov/pds4/proc/v1"
    xmlns:pds="http://pds.nasa.gov/pds4/pds/v1"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified"
    version="1.2.1.0">
 
    <xs:import namespace="http://pds.nasa.gov/pds4/pds/v1" schemaLocation="https://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1I00.xsd"/>
 
  <xs:annotation>
    <xs:documentation>
 The Processing_Information dictionary contains detailed information regarding the history 
        of processing performed on data product(s) in order to produce the current product.
                
        ## CHANGE LOG ##
        1.2.0.0, T.Hare
        - upgraded to v1.13.0.0 of the IM
        - Allow Software to be many (unbounded) to allow for many applictions to be listed for one process.
    
        1.2.1.0 T.Hare
        - update for 1.E.0.0 and 1.F.0.0 and new github C.I. environment
        - Changed all class local_identifier to identifier_reference per v1900 IM update
    
    
    </xs:documentation>
  </xs:annotation>
 
  <xs:element name="Processing_Information" type="proc:Processing_Information"> </xs:element>

  <xs:complexType name="Input_Product">
    <xs:annotation>
      <xs:documentation>The Input_Product class describes one of the
        product most directly used as input to software for product
        creation, including raw, partially-processed, calibrated, or
        derived products.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="pds:local_identifier" minOccurs="0" maxOccurs="unbounded"> </xs:element>
      <xs:choice minOccurs="1" maxOccurs="1">
        <xs:element ref="pds:Internal_Reference"> </xs:element>
        <xs:element ref="pds:Local_Internal_Reference"> </xs:element>
        <xs:element ref="pds:External_Reference"> </xs:element>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Input_Product_List">
    <xs:annotation>
      <xs:documentation>The Input_Product_List class describes all of
        the product(s) most directly used as input to software for
        product creation, including raw, partially-processed,
        calibrated, or derived products. These Input Products can be
        explicitly described in this label using the Input_Product
        class, and/or a list of products can be specified in another
        product referenced by the Internal_Reference or
        Local_Internal_Reference.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:choice minOccurs="1" maxOccurs="unbounded">
        <xs:element ref="pds:Internal_Reference"> </xs:element>
        <xs:element ref="pds:Local_Internal_Reference"> </xs:element>
        <xs:element name="Input_Product" type="proc:Input_Product"> </xs:element>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Parameter">
    <xs:annotation>
      <xs:documentation>The Parameter class describes any information
        about software program execution. Examples of information that
        can be captured here are software input arguments, software
        output arguments, log information, and references to specific
        data products. This class is intended to be freeform to allow
        data providers the ability to specify information they determine
        applicable and useful for their data processing software and
        data products.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="name" type="pds:name" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:element name="parameter_type" type="proc:parameter_type" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="value" type="pds:value" minOccurs="1" maxOccurs="unbounded"> </xs:element>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="pds:Internal_Reference"> </xs:element>
        <xs:element ref="pds:Local_Internal_Reference"> </xs:element>
        <xs:element ref="pds:External_Reference"> </xs:element>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Process">
    <xs:annotation>
      <xs:documentation>The Process class describes one of the software
        processes used to produce the data product referenced in the
        parent Processing_Information class. This class includes
        descriptions of the process owner as well as the data processing
        software used to create the data product.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="name" type="pds:name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="description" type="pds:description" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="process_owner_name" type="proc:process_owner_name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="process_owner_institution_name" type="proc:process_owner_institution_name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Software" type="proc:Software" minOccurs="0" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Processing_Information">
    <xs:annotation>
      <xs:documentation>The Processing_Information class contains
        detailed information regarding the history of processing of the
        data product(s) described in the label. Information that can be
        specified using this class includes input products used to
        create a specific data product and the software and processes
        used to produce that product.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="pds:Local_Internal_Reference" minOccurs="1" maxOccurs="1"> </xs:element>
      <xs:choice minOccurs="1" maxOccurs="unbounded">
        <xs:element name="Input_Product_List" type="proc:Input_Product_List"> </xs:element>
        <xs:element name="Process" type="proc:Process"> </xs:element>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Software">
    <xs:annotation>
      <xs:documentation>The Software class describes the data processing
        software used in order to produce the data
        product.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="name" type="pds:name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="software_id" type="pds:software_id" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="software_version_id" type="pds:software_version_id" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="software_type" type="pds:software_type" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="description" type="pds:description" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element ref="pds:Internal_Reference" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Software_Program" type="proc:Software_Program" minOccurs="0" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Software_Program">
    <xs:annotation>
      <xs:documentation>The Software_Program class describes the
        specific components or tasks of the Software executed in
        producing the data product.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="name" type="pds:name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="program_type_name" type="proc:program_type_name" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="program_user" type="proc:program_user" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="program_hostname" type="proc:program_hostname" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="program_path" type="proc:program_path" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="program_version" type="proc:program_version" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="program_start_date_time" type="proc:program_start_date_time" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="program_stop_date_time" type="proc:program_stop_date_time" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="description" type="pds:description" minOccurs="0" maxOccurs="1"> </xs:element>
      <xs:element name="Software_Program_Parameters" type="proc:Software_Program_Parameters" minOccurs="0" maxOccurs="1"> </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Software_Program_Parameters">
    <xs:annotation>
      <xs:documentation>The Software_Program_Parameters class specifies
        the set of 1 or more parameters for the software program. These
        parameters can be input, output, or log information. The premise
        being a way to capture as much information as possible about the
        software program execution.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Parameter" type="proc:Parameter" minOccurs="1" maxOccurs="unbounded"> </xs:element>
    </xs:sequence>
  </xs:complexType>

    <xs:annotation>
      <xs:documentation>This section contains the simpleTypes that provide more constraints
        than those at the base data type level. The simpleTypes defined here build on the base data
        types. This is another component of the common dictionary and therefore falls within the
        common namespace.
      </xs:documentation>
    </xs:annotation>

  <xs:simpleType name="parameter_type">
    <xs:annotation>
      <xs:documentation>The parameter_type attribute specifies the type
        of software parameter. Valid values: 'Input' - this parameter
        specifies input data, 'Output' - this parameter specifies output
        data, 'Log' - this parameter specifies log
        data</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="process_owner_institution_name">
    <xs:annotation>
      <xs:documentation>The pprocess_owner_institution_name attribute
        specifies the name of the institution that owns the software
        process.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="process_owner_name">
    <xs:annotation>
      <xs:documentation>The pprocess_owner_name attribute specifies the
        name of the person or organization that owns the software
        process.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="program_hostname">
    <xs:annotation>
      <xs:documentation>The program_hostname attribute specifies the
        machine hostname where the software program was
        executed.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="program_path">
    <xs:annotation>
      <xs:documentation>The program_path attribute specifies the file
        path to the software program. This path can be absolute or
        relative depending on the desired usage.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="program_start_date_time">
    <xs:annotation>
      <xs:documentation>The program_start_date_time specifies the
        datetime for the start of the software program
        execution.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Date_Time_YMD_UTC">
  <!-- format="YYYY-MM-DDTHH:MM:SS.SSSSSSZ" -->
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="program_stop_date_time">
    <xs:annotation>
      <xs:documentation>The program_start_date_time attribute specifies
        the datetime for the end of the software program
        execution.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Date_Time_YMD_UTC">
  <!-- format="YYYY-MM-DDTHH:MM:SS.SSSSSSZ" -->
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="program_type_name">
    <xs:annotation>
      <xs:documentation>The program_type_name attribute specifies the
        type of software program used for this software processing. Some
        examples include: VICAR, ISIS, GDAL.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="program_user">
    <xs:annotation>
      <xs:documentation>The program_user attribute specifies the
        username of the person responsible for running the software
        prgoram.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="program_version">
    <xs:annotation>
      <xs:documentation>The program_version attribute specifies the
        version of the software program.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pds:ASCII_Short_String_Collapsed">
     <xs:minLength value="1"/>
     <xs:maxLength value="255"/>
	   </xs:restriction>
  </xs:simpleType>
</xs:schema>
