XSD; Defining problem; Multimple Elements

R

R.Schuetze

Hallo,
I'm working on an XSD schema for an 3D Point. The XML struktur of the
point is the following:
<Point name="6" target="Retro" type="TP" unit="m">
<param name="X" value="0.000"/>
<param name="Y" value="0.000"/>
<param name="Z" value="0.000"/>
</Point>

The user have to fill use all three coordinates (X,Y,Z). Does somebody
haven an idea how I can implement the schema?
Thanks
Rainer

My first implemention of the Point was, but this would work, the
validation of the XSD failed.

<xs:element name="Point" type="pointCoordType">
...
</xs:element>
<xs:complexType name="pointCoordType">
<xs:all>
<xs:element name="param">
<xs:complexType>
<xs:attribute name="name" use="required" type="xs:string"
fixed="X"/>
<xs:attribute name="value" use="required" type="xs:double" />
...
</xs:complexType>
</xs:element>
<xs:element name="param">
<xs:complexType>
<xs:attribute name="name" use="required" type="xs:string"
fixed="Y"/>
<xs:attribute name="value" use="required" type="xs:double" />
...
</xs:complexType>
</xs:element>
...
</xs:all>
</xs:complexType>
 
J

Johannes Koch

I'm working on an XSD schema for an 3D Point. The XML struktur of the
point is the following:
<Point name="6" target="Retro" type="TP" unit="m">
<param name="X" value="0.000"/>
<param name="Y" value="0.000"/>
<param name="Z" value="0.000"/>
</Point>

Why not make it

<Point name="6" target="Retro" type="TP" unit="m">
<xparam value="0.000"/>
<yparam value="0.000"/>
<zparam value="0.000"/>
</Point>
?
 
H

Henry S. Thompson

Johannes said:
Why not make it

<Point name="6" target="Retro" type="TP" unit="m">
<xparam value="0.000"/>
<yparam value="0.000"/>
<zparam value="0.000"/>
</Point>
?

Something along those lines is certainly the best way to go.

If you R.Schuetze _must_ have the original structure, a verbose
indentity-constraint solution will work -- add the following to the
element declaration for Point

<xs:keyref refer="dims" name="krx">
<xs:selector xpath="."/>
<xs:field xpath="@x"/>
</xs:keyref>
<xs:keyref refer="dims" name="kry">
<xs:selector xpath="."/>
<xs:field xpath="@y"/>
</xs:keyref>
<xs:keyref refer="dims" name="krz">
<xs:selector xpath="."/>
<xs:field xpath="@z"/>
</xs:keyref>
<xs:key name="dims">
<xs:selector xpath="param"/>
<xs:field xpath="@name"/>
</xs:key>

and add the following to the type defintion used for Point:

<xs:attribute name="x" fixed="X"/>
<xs:attribute name="y" fixed="Y"/>
<xs:attribute name="z" fixed="Z"/>

ht
--
Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
Half-time member of W3C Team
2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
Fax: (44) 131 650-4587, e-mail: (e-mail address removed)
URL: http://www.ltg.ed.ac.uk/~ht/
[mail really from me _always_ has this .sig -- mail without it is forged spam]
 
J

JamesSmithMz

Hi Henry S. Thompson,

thanks for the excellent way to go. This works well for me.
Regards
Rainer
 

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

Forum statistics

Threads
473,961
Messages
2,570,131
Members
46,689
Latest member
liammiller

Latest Threads

Top