- From: Costello, Roger L. <costello@mitre.org>
- Date: Sun, 23 Sep 2012 11:55:32 +0000
- To: "xmlschema-dev@w3.org" <xmlschema-dev@w3.org>
Hello Folks,
For this XML document:
<Test xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Rule name="xsd:element" />
</Test>
I want an xs:assert element to test that the name attribute has the QName value xsd:element
I placed the xs:assert inside the element declaration for Rule:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Test">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Rule" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:QName" use="required" />
<xsd:assert test="@name eq xsd:QName('xsd:element')" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
I validated the XML document using SAXON 9.4 and got these two errors:
(1) Namespace prefix {xsd} has not been declared
(2) Element Rule does not satisfy assertion @name eq xsd:QName('xsd:element')
I don't understand those errors. Clearly xsd has been declared and clearly Rule satisfies the XPath expression.
Note that when I move the xs:assert up a level:
<xsd:element name="Test">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Rule" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:QName" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:assert test="Rule/@name eq xsd:QName('xsd:element')" />
</xsd:complexType>
</xsd:element>
then I get no error.
Why is this?
Is it not okay to have an xs:assert at the attribute level? If so, would you please refer me to the section in the specification that says this.
/Roger
Received on Sunday, 23 September 2012 11:55:59 UTC