Re: Simple assert on descendant nodes does not throw error

Hi,

In your schema

  <xs:attribute name="traceActive" type="xs:boolean" fixed="true" 
use="optional"/>
***
The fixed attribute indicates that the attribute value if present must 
equal the supplied constraint value, and if absent receives the supplied 
value as for default.
***

will force the traceActive attribute to be available with the value 
"true", even if it is not added explicitly to the XML document, thus the 
assertion will fail on the first pipe element.

Best Regards,
George
--
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com

On 12/09/16 09:24, Christophe Marchand 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>
>>>
>>>
>>>
>>
>>
>

Received on Monday, 12 September 2016 08:02:39 UTC