Schema

The following schema constitutes a formal specification of the Args File format. It can be used to validate Args Files, for example by using a command-line tool like xmllint:

$ xmllint --noout --schema /path/to/schema.xsd /path/to/file.args

The <page>, <group>, and <param> elements interpret their attributes as hints, therefore any attribute is valid. In the schema, this is expressed as follows:

<xs:anyAttribute processContents="skip"/>

There are a couple of variants of the Args File format for different purposes, including extensions added by RenderMan and used within the RenderMan for Katana and RenderMan for Maya plug-ins. Elements and attributes applying to a particular variant are indicated through comments.

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">


  <!-- <args> -->
  <xs:element name="args">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="page"/>
        <xs:element ref="param"/>
        <xs:element ref="group"/>
        <xs:element ref="help"/>

        <!-- Begin extensions for materials -->
        <xs:element ref="output"/>
        <!-- End extensions for materials -->

        <!-- Begin extensions for RenderMan materials -->
        <xs:element ref="shaderType"/>
        <xs:element ref="rfmdata"/>
        <!-- End extensions for RenderMan materials -->

      </xs:choice>
      <xs:attribute type="xs:decimal" name="format" use="required"/>

      <!-- Begin extensions for renderer procedurals -->
      <xs:attribute type="xs:string" name="outputStyle"/>
      <!-- End extensions for renderer procedurals -->

      <!-- Begin extensions for GenericAssign -->
      <xs:attribute type="xs:string" name="scope"/>
      <xs:attribute type="xs:string" name="fixedCEL"/>
      <xs:attribute type="xs:string" name="fixedCELExpression"/>
      <xs:attribute type="xs:string" name="baseNodeType"/>
      <xs:attribute type="xs:string" name="claimExclusivity"/>
      <xs:attribute type="xs:string" name="makeInteractive"/>
      <xs:attribute type="xs:string" name="nodeFlavors"/>
      <xs:attribute type="xs:string" name="createGenericAssignNodeType"/>
      <!-- End extensions for GenericAssign -->

    </xs:complexType>
  </xs:element>


  <!-- <group> -->
  <xs:element name="group">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="param"/>
        <xs:element ref="page"/>
        <xs:element ref="group"/>
        <xs:element ref="help"/>
      </xs:choice>
      <xs:attribute type="xs:string" name="name" use="required"/>
      <xs:anyAttribute processContents="skip"/>
    </xs:complexType>
  </xs:element>


  <!-- <page> -->
  <xs:element name="page">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="param"/>
        <xs:element ref="page"/>
        <xs:element ref="group"/>
        <xs:element ref="help"/>
      </xs:choice>
      <xs:attribute type="xs:string" name="name" use="required"/>
      <xs:anyAttribute processContents="skip"/>
    </xs:complexType>
  </xs:element>


  <!-- <param> -->
  <xs:element name="param">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="help"/>
        <xs:element ref="hintdict"/>
        <xs:element ref="hintlist"/>

        <!-- Begin extensions for materials -->
        <xs:element ref="tags"/>
        <!-- End extensions for materials -->
      </xs:choice>
      <xs:attribute type="xs:string" name="name" />
      <xs:anyAttribute processContents="skip"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="string" substitutionGroup="param"/>
  <xs:element name="int" substitutionGroup="param"/>
  <xs:element name="float" substitutionGroup="param"/>


  <!-- <hintdict>, <hintlist> -->
  <xs:element name="hintdict">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="param"/>
      </xs:choice>
      <xs:attribute type="xs:string" name="name" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="hintlist">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="param"/>
      </xs:choice>
      <xs:attribute type="xs:string" name="name" use="required"/>
    </xs:complexType>
  </xs:element>


  <!-- <help> -->
  <xs:element name="help">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
      </xs:sequence>

      <!-- Begin extensions for RenderMan materials -->
      <xs:attribute type="xs:string" name="plugin"/>
      <xs:attribute type="xs:string" name="revision"/>
      <xs:attribute type="xs:string" name="date"/>
      <!-- End extensions for RenderMan materials -->

    </xs:complexType>
  </xs:element>

  <!-- Begin extensions for RenderMan materials -->
  <xs:element name="info" substitutionGroup="help"/>
  <!-- End extensions for RenderMan materials -->


  <!-- Begin extensions for materials -->


  <!-- <output> -->
  <xs:element name="output">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="tags"/>
      </xs:choice>
      <xs:attribute type="xs:string" name="name" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- <tags>, <tag> -->
  <xs:element name="tags">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="tag"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <xs:element name="tag">
    <xs:complexType>
      <xs:attribute type="xs:string" name="value" use="required"/>
      <xs:attribute type="xs:string" name="detail"/>
    </xs:complexType>
  </xs:element>


  <!-- End extensions for materials -->


  <!-- Begin extensions for RenderMan materials -->


  <!-- <shaderType> -->
  <xs:element name="shaderType">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="tag"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <!-- <rfmdata> -->
  <xs:element name="rfmdata">
    <xs:complexType>
      <xs:attribute type="xs:string" name="nodeid" use="required"/>
      <xs:attribute type="xs:string" name="classification" use="required"/>
    </xs:complexType>
  </xs:element>


  <!-- End extensions for RenderMan materials -->


</xs:schema>