[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
Re: [xml-dev] Problem using <xsd:all>
- From: George Cristian Bina <george@oxygenxml.com>
- To: Paul Stepowski <paul.stepowski@intient.com>
- Date: Tue, 02 Oct 2007 15:23:26 +0300
Hi Paul,
I added a few element declarations to the schema to make it valid as below:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.intient.com/irukandji"
xmlns:tasklist="http://www.intient.com/irukandji"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xsd:element name="tasklist">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="tasklist:prerequisites" minOccurs="0"
maxOccurs="1" />
<xsd:element ref="tasklist:task" minOccurs="1"
maxOccurs="unbounded" />
<xsd:choice>
<xsd:sequence>
<xsd:element ref="tasklist:success" />
<xsd:element ref="tasklist:failure" />
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="tasklist:failure" />
<xsd:element ref="tasklist:success" />
</xsd:sequence>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
<xsd:element name="prerequisites"/>
<xsd:element name="task"/>
<xsd:element name="success"/>
<xsd:element name="failure"/>
</xsd:schema>
I named it test.xsd and created a test.xml in the same folder with the
following content:
<?xml version="1.0"?>
<tasklist xmlns="http://www.intient.com/irukandji"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.intient.com/irukandji test.xsd"
id="tasklist-loadTest1">
<task id="dns-lookup">
<command id="1" type="native">
<name>nslookup</name>
<argument genericlist-id="1"></argument>
<success>
<rule operator="regexp">
<stdout>(.+)Address: (.+)</stdout>
</rule>
</success>
<failure>
<rule operator="true" />
</failure>
</command>
<success>
<rule operator="equals">
<result command-id="1" success="true" />
</rule>
</success>
<failure>
<rule operator="true" />
</failure>
</task>
<success>
<rule operator="equals">
<result task-id="dns-lookup" success="true" />
</rule>
</success>
<failure>
<rule operator="true" />
</failure>
<failure>
<rule operator="true" />
</failure>
<failure>
<rule operator="true" />
</failure>
</tasklist>
When I validate that with Xerces for instance I get:
SystemID: C:\george\test\p6\test.xml
Location: 37:4
Description: cvc-complex-type.2.4.d: Invalid content was found starting
with element 'failure'. No child element is expected at this point.
URL: http://www.w3.org/TR/xmlschema-1/#cvc-complex-type
Looking at your instance I see that you have a wrong URL for the schema
location:
file://C:/Documents and
Settings/Admin/workspace/itsml/bin/com/intient/spx/resolver/irukandji-istml-tasklist.xsd"
In this case C: is considered the host, you need file:///C:/...etc and
you also need to have the spaces URL-escaped because the value of the
schemaLocation attribute is a list of pairs of the form
namespace schemaLocation
all separated by whitespaces, so for instance "and" is considered the
second namespace and
"Settings/Admin/workspace/itsml/bin/com/intient/spx/resolver/irukandji-istml-tasklist.xsd"
is considered the location of the second schema file.
Therefore it looks like you are not performing validation against the
schema, probably the document is only checked to be wellformed.
Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina - http://aboutxml.blogspot.com/
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
Paul Stepowski wrote:
> Hi George
>
> Here's the example I'm testing with.
>
> Excerpt from XSD with your suggested mods:
>
> ---snip---
> <?xml version="1.0"?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> targetNamespace="http://www.intient.com/irukandji"
> xmlns:tasklist="http://www.intient.com/irukandji"
> elementFormDefault="qualified" attributeFormDefault="unqualified">
>
> <xsd:element name="tasklist">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element ref="tasklist:prerequisites" minOccurs="0"
> maxOccurs="1" />
> <xsd:element ref="tasklist:task" minOccurs="1"
> maxOccurs="unbounded" />
> <xsd:choice>
> <xsd:sequence>
> <xsd:element ref="tasklist:success" />
> <xsd:element ref="tasklist:failure" />
> </xsd:sequence>
> <xsd:sequence>
> <xsd:element ref="tasklist:failure" />
> <xsd:element ref="tasklist:success" />
> </xsd:sequence>
> </xsd:choice>
> </xsd:sequence>
> <xsd:attribute name="id" type="xsd:string" use="required" />
> </xsd:complexType>
> </xsd:element>
> ...
> </xsd:schema>
> ---snip---
>
> Complete XML document I'm validating against the XSD (Note that it
> contains multiple <failure> tags, which should fail):
>
> ---snip---
> <?xml version="1.0"?>
> <tasklist xmlns="http://www.intient.com/irukandji"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://www.intient.com/irukandji
> file://C:/Documents and
> Settings/Admin/workspace/itsml/bin/com/intient/spx/resolver/irukandji-istml-tasklist.xsd"
>
> id="tasklist-loadTest1">
>
> <task id="dns-lookup">
> <command id="1" type="native">
> <name>nslookup</name>
> <argument genericlist-id="1"></argument>
> <success>
> <rule operator="regexp">
> <stdout>(.+)Address: (.+)</stdout>
> </rule>
> </success>
> <failure>
> <rule operator="true" />
> </failure>
> </command>
> <success>
> <rule operator="equals">
> <result command-id="1" success="true" />
> </rule>
> </success>
> <failure>
> <rule operator="true" />
> </failure>
> </task>
> <success>
> <rule operator="equals">
> <result task-id="dns-lookup" success="true" />
> </rule>
> </success>
> <failure>
> <rule operator="true" />
> </failure>
> <failure>
> <rule operator="true" />
> </failure>
> <failure>
> <rule operator="true" />
> </failure>
> </tasklist>
> ---snip---
>
> This XML document is successfully validated using JAXB.
>
> Any ideas?
>
> Thanks,
>
> Paul
>
>
> George Cristian Bina wrote:
>> Hi Paul,
>>
>> The code fragment I posted allows only
>>
>> <success/>
>> <failure/>
>>
>> and
>>
>> <failure/>
>> <success/>
>>
>> How did you get to the conclusion that it allows multiple instances of
>> failure? It may be possible that you are embedding that code fragment
>> in another particle that can appear multiple times. A short but
>> complete schema should help to identify exactly what is wrong, in
>> general you will identify that yourself while creating the short but
>> complete example.
>>
>> Best Regards,
>> George
>> ---------------------------------------------------------------------
>> George Cristian Bina - http://aboutxml.blogspot.com/
>> <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
>> http://www.oxygenxml.com
>>
>>
>> Paul Stepowski wrote:
>>> Hi George,
>>>
>>> This seems closer but still allows multiple <success> or <failure> tags.
>>>
>>> That is, I require either:
>>>
>>> <tasklist>
>>> <success/>
>>> <failure/>
>>> </tasklist>
>>>
>>> or:
>>>
>>> <tasklist>
>>> <failure/>
>>> <success/>
>>> </tasklist>
>>>
>>> But your suggested schema still allows:
>>>
>>> <tasklist>
>>> <success/>
>>> <failure/>
>>> <failure/>
>>> <failure/>
>>> <failure/>
>>> </tasklist>
>>>
>>> etc.
>>>
>>> I've tried experimenting with various combinations of minOccurs and
>>> maxOccurs but I still can't nail this.
>>>
>>> Thanks,
>>>
>>> Paul
>>>
>>>
>>> George Cristian Bina wrote:
>>>> Hi Paul,
>>>>
>>>> Use a choice
>>>> (success,failure)|(failure,success)
>>>>
>>>> in XML Schema:
>>>>
>>>> <xsd:choice>
>>>> <xsd:sequence>
>>>> <xsd:element ref="tasklist:success"/>
>>>> <xsd:element ref="tasklist:failure"/>
>>>> </xsd:sequence>
>>>> <xsd:sequence>
>>>> <xsd:element ref="tasklist:failure"/>
>>>> <xsd:element ref="tasklist:success"/>
>>>> </xsd:sequence>
>>>> </xsd:choice>
>>>>
>>>> Best Regards,
>>>> George
>>>> ---------------------------------------------------------------------
>>>> George Cristian Bina - http://aboutxml.blogspot.com/
>>>> <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
>>>> http://www.oxygenxml.com
>>>>
>>>>
>>>> Paul Stepowski wrote:
>>>>> Dennis Sterzenbach wrote:
>>>>>> Hi Paul!
>>>>>>
>>>>>> Paul Stepowski wrote:
>>>>>> <snip />
>>>>>>> <xsd:element name="task">
>>>>>>> <xsd:complexType>
>>>>>>> <xsd:sequence>
>>>>>>> <xsd:element ref="tasklist:prerequisites" minOccurs="0"
>>>>>>> maxOccurs="1" />
>>>>>>> <xsd:all>
>>>>>>> <xsd:element ref="tasklist:success" minOccurs="1"
>>>>>>> maxOccurs="1" />
>>>>>>> <xsd:element ref="tasklist:failure" minOccurs="1"
>>>>>>> maxOccurs="1" />
>>>>>>> </xsd:all>
>>>>>>> </xsd:sequence>
>>>>>>> <xsd:attribute name="id" type="xsd:string" use="required" />
>>>>>>> </xsd:complexType>
>>>>>>> </xsd:element>
>>>>>> <snip />
>>>>>>> "The content of 'sequence' must match (annotation?, (element |
>>>>>>> group | choice |
>>>>>>> sequence | any)*). A problem was found starting at: all."
>>>>>>>
>>>>>>> According to the w3c, all is a valid tag. Can anyone shed some
>>>>>>> light on this error?
>>>>>> These are valid tags, but unfortunately not in that order.
>>>>>> As far as I know you can't use <xsd:all> inside a sequence:
>>>>>>
>>>>>> "Parent elements: group, complexType, restriction (both simpleContent
>>>>>> and complexContent), extension (both simpleContent and
>>>>>> complexContent)"
>>>>>>
>>>>>> Best regards
>>>>>> -- Dennis Sterzenbach
>>>>>
>>>>> Thanks Dennis,
>>>>>
>>>>> My next question is then, can I achieve the same effect with a
>>>>> different syntax?
>>>>> I need to specify <success> AND <failure> both occuring once each
>>>>> (in any
>>>>> order).
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Paul
>>>>>
>>>>> _______________________________________________________________________
>>>>>
>>>>>
>>>>> XML-DEV is a publicly archived, unmoderated list hosted by OASIS
>>>>> to support XML implementation and development. To minimize
>>>>> spam in the archives, you must subscribe before posting.
>>>>>
>>>>> [Un]Subscribe/change address: http://www.oasis-open.org/mlmanage/
>>>>> Or unsubscribe: xml-dev-unsubscribe@lists.xml.org
>>>>> subscribe: xml-dev-subscribe@lists.xml.org
>>>>> List archive: http://lists.xml.org/archives/xml-dev/
>>>>> List Guidelines: http://www.oasis-open.org/maillists/guidelines.php
>>>>>
>>>
>>> _______________________________________________________________________
>>>
>>> XML-DEV is a publicly archived, unmoderated list hosted by OASIS
>>> to support XML implementation and development. To minimize
>>> spam in the archives, you must subscribe before posting.
>>>
>>> [Un]Subscribe/change address: http://www.oasis-open.org/mlmanage/
>>> Or unsubscribe: xml-dev-unsubscribe@lists.xml.org
>>> subscribe: xml-dev-subscribe@lists.xml.org
>>> List archive: http://lists.xml.org/archives/xml-dev/
>>> List Guidelines: http://www.oasis-open.org/maillists/guidelines.php
>>>
>
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]