[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
Re: [xml-dev] Problem using <xsd:all>
- From: Paul Stepowski <paul.stepowski@intient.com>
- To: George Cristian Bina <george@oxygenxml.com>
- Date: Tue, 02 Oct 2007 22:45:45 +1000
"Looking at your instance I see that you have a wrong URL for the schema
location:"
This was the problem. It was made more complicated due to the design of
the wrapper library around the JAXB validation code.
I now have a correct schema that validates the document as expected.
Many thanks George and Dennis for your help.
:-)
Thanks,
Paul
George Cristian Bina wrote:
> 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]