Harvest Policy Schema

The XML schema file for validating policy files follows:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
            jxb:version="2.0">

<xsd:element name="path" type="xsd:string"/>
<xsd:element name="file" type="xsd:string"/>
<xsd:element name="baseUrl" type="xsd:string"/>
<xsd:element name="offset" type="xsd:string"/>
<xsd:element name="serverUrl" type="xsd:string"/>
<xsd:element name="dataTransferType" type="xsd:string"/>
<xsd:element name="modelValue" type="xsd:string"/>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="description" type="xsd:string"/>
<xsd:element name="value" type="xsd:string"/>
<xsd:element name="include" type="xsd:string"/>
<xsd:element name="exclude" type="xsd:string"/>

<xsd:attribute name="objectType" type="xsd:string"/>
<xsd:attribute name="prefix" type="xsd:string"/>
<xsd:attribute name="uri" type="xsd:string"/>
<xsd:attribute name="default" type="xsd:boolean" default="false"/>
<xsd:attribute name="registerFileUrls" type="xsd:boolean" default="false"/>
<xsd:attribute name="appendFilename" type="xsd:boolean" default="false"/>
<xsd:attribute name="appendDir" type="xsd:boolean" default="false"/>
<xsd:attribute name="slotName" type="xsd:string"/>
<xsd:attribute name="slotType" type="xsd:string"/>
<xsd:attribute name="value" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
<xsd:attribute name="generate" type="xsd:boolean" default="false"/>
<xsd:attribute name="basePath" type="xsd:string"/>

<xsd:element name="manifest" type="Manifest"/>
<xsd:complexType name="Manifest">
   <xsd:simpleContent>
      <xsd:extension base="xsd:string">
         <xsd:attribute ref="basePath"/>
      </xsd:extension>
   </xsd:simpleContent>
</xsd:complexType>

<xsd:element name="fileFilter" type="FileFilter"/>
<xsd:complexType name="FileFilter">
   <xsd:choice>
      <xsd:element ref="include" maxOccurs="unbounded"/>
      <xsd:element ref="exclude" maxOccurs="unbounded"/>
   </xsd:choice>
</xsd:complexType>

<xsd:element name="directoryFilter" type="DirectoryFilter"/>
<xsd:complexType name="DirectoryFilter">
   <xsd:sequence>
      <xsd:element ref="exclude" maxOccurs="unbounded"/>
   </xsd:sequence>
</xsd:complexType>

<xsd:element name="elementName" type="ElementName"/>
<xsd:complexType name="ElementName">
   <xsd:simpleContent>
      <xsd:extension base="xsd:string">
         <xsd:attribute ref="slotName"/>
         <xsd:attribute ref="slotType"/>
      </xsd:extension>
   </xsd:simpleContent>
</xsd:complexType>

<xsd:element name="slot" type="Slot"/>
<xsd:complexType name="Slot">
  <xsd:sequence>
    <xsd:element ref="value" maxOccurs="unbounded"/>
  </xsd:sequence>
  <xsd:attribute ref="name" use="required"/>
</xsd:complexType>

<xsd:element name="staticMetadata" type="StaticMetadata"/>
<xsd:complexType name="StaticMetadata">
  <xsd:sequence>
    <xsd:element ref="slot" maxOccurs="unbounded"/>
  </xsd:sequence>
</xsd:complexType>

<xsd:element name="registryPackage" type="RegistryPackage"/>
<xsd:complexType name="RegistryPackage">
   <xsd:sequence>
      <xsd:element ref="name"/>
      <xsd:element ref="description"/>
   </xsd:sequence>
</xsd:complexType>

<xsd:element name="xPath" type="XPath"/>
<xsd:complexType name="XPath">
   <xsd:simpleContent>
      <xsd:extension base="xsd:string">
         <xsd:attribute ref="slotName"/>
      </xsd:extension>
   </xsd:simpleContent>
</xsd:complexType>

<xsd:element name="directories" type="Directory"/>
<xsd:complexType name="Directory">
   <xsd:sequence>
      <xsd:element ref="path" maxOccurs="unbounded"/>
      <xsd:element ref="fileFilter" minOccurs="0" />
      <xsd:element ref="directoryFilter" minOccurs="0" />
   </xsd:sequence>
</xsd:complexType>

<xsd:element name="pds3Directories" type="Pds3Directory"/>
<xsd:complexType name="Pds3Directory">
   <xsd:sequence>
      <xsd:element ref="path" maxOccurs="unbounded"/>
      <xsd:element ref="fileFilter" minOccurs="0" />
      <xsd:element ref="directoryFilter" minOccurs="0" />
   </xsd:sequence>
</xsd:complexType>

<xsd:element name="collections" type="Collection"/>
<xsd:complexType name="Collection">
   <xsd:sequence>
      <xsd:element ref="file" maxOccurs="unbounded"/>
   </xsd:sequence>
</xsd:complexType>

<xsd:element name="namespace" type="Namespace"/>
<xsd:complexType name="Namespace">
   <xsd:attribute ref="prefix" use="required"/>
   <xsd:attribute ref="uri" use="required"/>
   <xsd:attribute ref="default"/>
</xsd:complexType>

<xsd:element name="productMetadata" type="Pds4ProductMetadata"/>
<xsd:complexType name="Pds4ProductMetadata">
   <xsd:sequence>
      <xsd:element ref="xPath" maxOccurs="unbounded"/>
   </xsd:sequence>
   <xsd:attribute ref="objectType" use="required"/>
</xsd:complexType>

<xsd:element name="lidContents" type="LidContents"/>
<xsd:complexType name="LidContents">
  <xsd:sequence>
     <xsd:element ref="offset" minOccurs="0"/>
     <xsd:element ref="elementName" minOccurs="0" maxOccurs="unbounded"/>
  </xsd:sequence>
  <xsd:attribute ref="prefix" use="required"/>
  <xsd:attribute ref="appendFilename"/>
  <xsd:attribute ref="appendDir"/>
</xsd:complexType>

<xsd:element name="titleContents" type="TitleContents"/>
<xsd:complexType name="TitleContents">
   <xsd:sequence>
      <xsd:element ref="elementName" minOccurs="0" maxOccurs="unbounded"/>
   </xsd:sequence>
   <xsd:attribute ref="appendFilename"/>
</xsd:complexType>

<xsd:element name="pds3ProductMetadata" type="Pds3ProductMetadata"/>
<xsd:complexType name="Pds3ProductMetadata">
   <xsd:all>
      <xsd:element ref="lidContents"/>
      <xsd:element ref="titleContents" minOccurs="0"/>
      <xsd:element ref="staticMetadata" minOccurs="0"/>
      <xsd:element ref="ancillaryMetadata" minOccurs="0"/>
      <xsd:element ref="includePaths" minOccurs="0"/>
   </xsd:all>
   <xsd:attribute ref="objectType"/>
</xsd:complexType>

<xsd:element name="includePaths" type="IncludePath"/>
<xsd:complexType name="IncludePath">
   <xsd:sequence>
      <xsd:element ref="path" maxOccurs="unbounded"/>
   </xsd:sequence>
</xsd:complexType>

<xsd:element name="candidates" type="Candidate"/>
<xsd:complexType name="Candidate">
   <xsd:sequence>
      <xsd:element ref="pds3ProductMetadata" minOccurs="0"/>
      <xsd:element ref="namespace" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element ref="productMetadata" minOccurs="0" maxOccurs="unbounded"/>
   </xsd:sequence>
</xsd:complexType>

<xsd:element name="referenceTypeMap" type="ReferenceTypeMap"/>
<xsd:complexType name="ReferenceTypeMap">
   <xsd:sequence>
      <xsd:element ref="modelValue" maxOccurs="unbounded"/>
   </xsd:sequence>
   <xsd:attribute ref="value" use="required"/>
</xsd:complexType>

<xsd:element name="references" type="References"/>
<xsd:complexType name="References">
   <xsd:sequence>
      <xsd:element ref="referenceTypeMap" maxOccurs="unbounded"/>
   </xsd:sequence>
</xsd:complexType>

<xsd:element name="fileTypeMap" type="FileTypeMap"/>
<xsd:complexType name="FileTypeMap">
   <xsd:sequence>
      <xsd:element ref="modelValue" maxOccurs="unbounded"/>
   </xsd:sequence>
   <xsd:attribute ref="value" use="required"/>
</xsd:complexType>

<xsd:element name="fileTypes" type="FileTypes"/>
<xsd:complexType name="FileTypes">
   <xsd:sequence>
      <xsd:element ref="fileTypeMap" maxOccurs="unbounded"/>
   </xsd:sequence>
</xsd:complexType>

<xsd:element name="ancillaryMetadata" type="AncillaryMetadata"/>
<xsd:complexType name="AncillaryMetadata">
   <xsd:sequence>
      <xsd:element ref="elementName" maxOccurs="unbounded"/>
   </xsd:sequence>
</xsd:complexType>

<xsd:element name="storageIngestion" type="StorageIngestion"/>
<xsd:complexType name="StorageIngestion">
   <xsd:sequence>
      <xsd:element ref="serverUrl"/>
      <xsd:element ref="dataTransferType" minOccurs="0"/>
   </xsd:sequence>
</xsd:complexType>

<xsd:element name="accessUrls" type="AccessUrls"/>
<xsd:complexType name="AccessUrls">
   <xsd:sequence>
      <xsd:element ref="accessUrl" minOccurs="0" maxOccurs="unbounded"/>
   </xsd:sequence>
   <xsd:attribute ref="registerFileUrls"/>
</xsd:complexType>

<xsd:element name="accessUrl" type="AccessUrl"/>
<xsd:complexType name="AccessUrl">
   <xsd:sequence>
      <xsd:element ref="baseUrl"/>
      <xsd:element ref="offset" minOccurs="0" maxOccurs="unbounded"/>
   </xsd:sequence>
</xsd:complexType>

<xsd:element name="checksums" type="Checksums"/>
<xsd:complexType name="Checksums">
   <xsd:sequence>
      <xsd:element ref="manifest" minOccurs="0" maxOccurs="1"/>
   </xsd:sequence>
   <xsd:attribute ref="generate"/>
</xsd:complexType>

<xsd:element name="policy">
  <xsd:complexType>
     <xsd:all>
        <xsd:element ref="registryPackage" minOccurs="0"/>
        <xsd:element ref="collections" minOccurs="0"/>
        <xsd:element ref="directories" minOccurs="0"/>
        <xsd:element ref="pds3Directories" minOccurs="0"/>
        <xsd:element ref="storageIngestion" minOccurs="0"/>
        <xsd:element ref="accessUrls" minOccurs="0"/>
        <xsd:element ref="checksums" minOccurs="0"/>
        <xsd:element ref="candidates"/>
        <xsd:element ref="references" minOccurs="0"/>
        <xsd:element ref="fileTypes" minOccurs="0"/>
     </xsd:all>
  </xsd:complexType>
</xsd:element>
</xsd:schema>