Re: Simple assert on descendant nodes does not throw error

The fact that you use cfg:TPipe to refer to the type is a clue that the schema has a targetNamespace which you haven't shown us. This would suggest that the pipe element is also in a namespace which you haven't shown us, and if this is the case then my guess is that the xslt element is also in a namespace, in which case the XPath expression in the assertion needs to use a prefixed name to refer to it (or to declare a default XPath namespace).

Michael Kay
Saxonica

> On 6 Sep 2016, at 17:21, Christophe Marchand <cmarchand@oxiane.com> wrote:
> 
> Hello,
> 
> I've just added a simple assert to my schema, and I can not get errors validating wrong documents. I can nto find why.
> Any help will be much appreciated...
> 
> Best,
> Christophe
> 
> My schema :
>    <xs:complexType name="TPipe">
>        <xs:sequence>
>            <xs:choice maxOccurs="unbounded">
>                <xs:element name="xslt" />
>                ...
>            </xs:choice>
>        </xs:sequence>
>        <xs:attribute name="nbThreads" type="xs:integer" default="1" use="optional"/>
>        <xs:attribute name="mutiThreadMaxSourceSize"/>
>        <xs:attribute name="traceOutput" type="xs:string"/>
>        <xs:assert test="if(not(./@traceOutput)) then empty(descendant::xslt[@traceActive='true']) else true()"/>
>    </xs:complexType>
>    <xs:element name="pipe" type="cfg:TPipe"/>
> 
> The document I expect an error to be thrown for :
>    <pipe nbThreads="1" mutiThreadMaxSourceSize="" >
>                <xslt href="src/test/resources/identity.xsl" traceActive="true"/>
>                <output id="pipe1" >
>                    <folder absolute="./target/generated-test-files"/>
>                    <fileName name="${basename}-pipe1.xml"/>
>                </output>
>    </pipe>
> 
> 
> 

Received on Wednesday, 7 September 2016 08:56:01 UTC