XML Schema problem...

Andrew (archive)

Usenet Archive
Joined
May 3, 2000
Messages
363
Reaction score
0
Antony (4:26 PM) :
Hello all !

I have a problem with XML schema.

My XML document which I need to be validated
can be one of the following two types:

1st type is

<?xml version="1.0"?>
<response>
<msg_id>100</msg_id>
<command>Command1</command>
<time>100</time>
<b>text</b>
</response>

2nd type is

<?xml version="1.0"?>
<response>
<msg_id>100</msg__id>
<command>Command2</command>
<sometag>content</sometag>
<time>789012</time>
<a>text</a>
</response>

Note that content of the "command" element
is used to determine the rest of elements. Thus
"Command1" means that there should be "time" and "b" elements, and "Command2" means that there should be "sometag", "time", and "a" elements.

When trying to load the schema both xerces and msxml parsers return me error message: "Unique Particle Attribution rule".

How should correct schema look ?
Can anyone help ?

Thanks in advance.
 

Andrew (archive)

Usenet Archive
Joined
May 3, 2000
Messages
363
Reaction score
0
This is my schema:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="response" type="respType"/>

<xs:complexType name="respType">
<xs:choice>
<xs:group ref="g1"/>
<xs:group ref="g2"/>
</xs:choice>
</xs:complexType>

<xs:group name="g1">
<xs:sequence>
<xs:element name="msg_id" type="xs:int"/>
<xs:element name="command" type="xs:string"/>
<xs:element name="time" type="xs:int"/>
<xs:element name="b" type="xs:string"/>
</xs:sequence>
</xs:group>

<xs:group name="g2">
<xs:sequence>
<xs:element name="msg_id" type="xs:int"/>
<xs:element name="command" type="xs:string"/>
<xs:element name="sometag" type="xs:string"/>
<xs:element name="time" type="xs:int"/>
<xs:element name="a" type="xs:string"/>
</xs:sequence>
</xs:group>

</xs:schema>
 

Sean Bright

Usenet Archive
Joined
Dec 16, 2003
Messages
10
Reaction score
0
Andrew said:
Note that content of the "command" element
is used to determine the rest of elements. Thus
"Command1" means that there should be "time" and "b" elements, and "Command2" means that there should be "sometag", "time", and "a" elements.

I'm not sure this type of conditional processing is possible with XML Schemas. See the the following thread in this newsgroup for something slightly similar:

Message ID:
Subject: Schema express that "@a present if and only if @b present", where @a, @b are attributes

The relevant portion of that thread is:
That is not possible with W3C's xml schema.

Apparently something like this is possible with RELAX NG, but I wouldn't know about that.

Hope this helps,
Sean
 

strajan

Usenet Archive
Joined
Sep 17, 2003
Messages
9
Reaction score
0
Please try whether the following work. Just re-arranged a little bit.
<?xml version="1.0" ?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="response" type="respType" />

<xs:complexType name="respType">

<xs:sequence>

<xs:element name="msg_id" type="xs:int" />

<xs:element name="command" type="xs:string" />

<xs:choice>

<xs:group ref="g1" />

<xs:group ref="g2" />

</xs:choice>

</xs:sequence>

</xs:complexType>

<xs:group name="g1">

<xs:sequence>

<xs:element name="time" type="xs:int" />

<xs:element name="b" type="xs:string" />

</xs:sequence>

</xs:group>

<xs:group name="g2">

<xs:sequence>

<xs:element name="sometag" type="xs:string" />

<xs:element name="time" type="xs:int" />

<xs:element name="a" type="xs:string" />

</xs:sequence>

</xs:group>

</xs:schema>
 

Jakob Møbjerg Nielsen

Usenet Archive
Joined
Nov 20, 2003
Messages
7
Reaction score
0
Andrew said:
<xs:element name="command" type="xs:string"/>
<xs:element name="command" type="xs:string"/>

Sorry about the late answer, but why not create your own types with a pattern restriction?

Blatantly stolen from http://www.w3.org/TR/xmlschema-2/#rf-pattern:

<simpleType name=command1>
<restriction base='string'>
<pattern value='Command1'/>
</restriction>
</simpleType>

<simpleType name='command2'>
<restriction base='string'>
<pattern value='Command2'/>
</restriction>
</simpleType>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
548,042
Messages
3,104,223
Members
248,131
Latest member
Tonypshaw1

Latest Threads

Top