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>