Mike came up with a solid solution to the problem I posted previously.  While not quite as elegant as adding the “dfdl:ignoreElementCase=yes” property that I would prefer, it’s good enough.  Thanks, Mike!

 

Here’s the relevant parts:

 

    <xsd:complexType name="MimeTypeType">
       
<xsd:sequence>
           
<xsd:sequence dfdl:hiddenGroupRef="MixedCaseMimeTypeGroup"/>
           
<!-- logical representation of the type and subtype, where xPath is used to convert all the characters to lower case -->
           
<xsd:element name="Type" dfdl:inputValueCalc="{ fn:lower-case(../MixedCaseType) }">
               
<xsd:annotation>
                   
<xsd:appinfo source="http://www.ogf.org/dfdl/dfdl-1.0/">
                       
<dfdl:assert test="{ dfdl:checkConstraints(.) }"
                            message="The type must match one of the values on the enumerated list."/>
                   
</xsd:appinfo>
               
</xsd:annotation>
               
<xsd:simpleType>
                   
<xsd:restriction base="xsd:string">
                       
<xsd:enumeration value="application"/>
                       
<xsd:enumeration value="multipart"/>
                       
<xsd:enumeration value="message"/>
                       
<xsd:enumeration value="text"/>
                   
</xsd:restriction>
               
</xsd:simpleType>
           
</xsd:element>
            
<xsd:element name="Subtype" dfdl:inputValueCalc="{ fn:lower-case(../MixedCaseSubtype) }">
               
<xsd:annotation>
                   
<xsd:appinfo source="http://www.ogf.org/dfdl/dfdl-1.0/">
                       
<dfdl:assert test="{ dfdl:checkConstraints(.) }"
                            message="The subtype must match one of the values on the enumerated list."/>
                   
</xsd:appinfo>
               
</xsd:annotation>
               
<xsd:simpleType>
                   
<xsd:restriction base="xsd:string">
                       
<xsd:enumeration value="pdf"/>
                       
<xsd:enumeration value="ms-tnef"/> <!-- outlook -->
                       
<xsd:enumeration value="alternative"/>
                       
<xsd:enumeration value="mixed"/>
                       
<xsd:enumeration value="rfc822"/>
                       
<xsd:enumeration value="plain"/>
                       
<xsd:enumeration value="html"/>
                   
</xsd:restriction>
               
</xsd:simpleType>
           
</xsd:element>
       
</xsd:sequence>
   
</xsd:complexType>

   
<!-- physical representation of the type and subtype, which can contain upper and lowercase characters -->
   
<xsd:group name="MixedCaseMimeTypeGroup">
       
<xsd:sequence dfdl:separator="/">
           
<xsd:element name="MixedCaseType" type="xsd:string"/>
           
<xsd:element name="MixedCaseSubtype" type="xsd:string"/>
       
</xsd:sequence>
   
</xsd:group>