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>