Re: Simple assert on descendant nodes does not throw error

It's working for me when I run with

java com.saxonica.Validate -xsd:test.xsd -s:test.xml -xsdversion:1.1

It gives confusing error messages if you leave out the -xsdversion:1.1. That's because the use of vc:minVersion effectively means that when you run with a 1.0 processor (if it recognizes vc:minVersion) you are validating against an empty schema.

Haven't tried with oXygen but it has a configuration checkbox to enable 1.1 somewhere.

Michael Kay
Saxonica


> On 12 Sep 2016, at 07:24, Christophe Marchand <cmarchand@oxiane.com> wrote:
> 
> Following your suggests, I still can not manage to make it run correctly.
> 
> Attached is a simplified schema and a XML file that contains 4 samples : the 3 first are expected to be valid, the last one to be invalid.
> 
> I use oXygen 17.0 on dev side, & xerces 2.12-beta-r1667115 on prod side.
> 
> Thanks in advance for your help...
> 
> Christophe
> 
> 
> 
> Le 07/09/2016 à 10:55, Michael Kay a écrit :
>> 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>
>>> 
>>> 
>>> 
>> 
>> 
> 
> <gaulois-pipe_config.xsd><java-initial-step-ok.xml>

Received on Monday, 12 September 2016 08:05:09 UTC