Hi Folks,
I am learning the Alloy modelling language. It is so cool. One interesting aspect of Alloy is this rule:
An expression is erroneous if it can be shown
to be redundant, using types alone.A common and simple case of redundancy is an expression that is equal to the empty relation (set). For example, if sets A and B are disjoint, then (A intersect B) is empty and therefore redundant (and therefore erroneous).
I am trying to see if any of the XML technologies have an equivalent rule.
It seems that XSD does not. Consider: the following schema says that an XML instance document can never have a <Foo> element:
<xs:element name="Book">
<xs:complexType>
<xs:sequence>
<xs:element name="Title" type="xs:string"/>
<xs:element name="Author" type="xs:string"/>
<xs:element name="Date" type="xs:string"/>
<xs:element name="Foo" minOccurs="0" maxOccurs="0" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
The Foo element declaration is redundant – it declares an element that can never manifest in XML instances. Redundancy is not an error in XSD.
It also seems that redundancy is not an error in XSLT/XPath. Consider: the following XSLT has an XPath expression that can never be satisfied:
<xsl:template match="/">
<xsl:choose>
<xsl:when test="name(/*[position() eq 0]) eq 'foo'">foo</xsl:when>
<xsl:when test="name(/*[position() eq 1]) eq 'bar'">bar</xsl:when>
<xsl:when test="name(/*[position() eq 1]) eq 'blah'">blah</xsl:when>
</xsl:choose>
</xsl:template>
In the vast universe of XML technologies, is there anywhere a rule that requires redundancy be treated as an error?
/Roger