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>