469,600 Members | 2,326 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,600 developers. It's quick & easy.

simple problem trying to specify a unique attribute with XML schema

Hi All,

In the sample schema & document below, I'd like the attribute "name" to
be unique for all function elements under function_list. The tools I'm
using (XML Spy and xmllint) all validate the sample document and do not
pick up that the name is not unique.
Any clues as to what could be going wrong?

Thanks.

-----------------------------------------------------------------------------------------------------------------------------
function_list.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="function_list">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element ref="function"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="unique_fn_name">
<xs:selector xpath="function_list"/>
<xs:field xpath="@name"/>
</xs:unique>
</xs:element>
<xs:element name="function">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<!-- want the above attribute to be unique -->
</xs:complexType>
</xs:element>
</xs:schema>

-----------------------------------------------------------------------------------------------------------------------------
function_list.xml:

<?xml version="1.0" encoding="UTF-8"?>
<function_list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="function_list.xsd">
<function name="fred"/>
<function name="fred"/>
<function name="frog"/>
<function name="fred"/>
</function_list>

Jul 26 '06 #1
2 1551
Hi,

Your unique constrint does not select any nodes because you are in a
function_list element and you select as selector all the cildren
elements that have the name function_list and there are no such
elements in your instance document

<xs:selector xpath="function_list"/>

What you want is probably

<xs:selector xpath="function"/>

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

sm*********@gmail.com wrote:
Hi All,

In the sample schema & document below, I'd like the attribute "name" to
be unique for all function elements under function_list. The tools I'm
using (XML Spy and xmllint) all validate the sample document and do not
pick up that the name is not unique.
Any clues as to what could be going wrong?

Thanks.

-----------------------------------------------------------------------------------------------------------------------------
function_list.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="function_list">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element ref="function"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="unique_fn_name">
<xs:selector xpath="function_list"/>
<xs:field xpath="@name"/>
</xs:unique>
</xs:element>
<xs:element name="function">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<!-- want the above attribute to be unique -->
</xs:complexType>
</xs:element>
</xs:schema>

-----------------------------------------------------------------------------------------------------------------------------
function_list.xml:

<?xml version="1.0" encoding="UTF-8"?>
<function_list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="function_list.xsd">
<function name="fred"/>
<function name="fred"/>
<function name="frog"/>
<function name="fred"/>
</function_list>
Jul 27 '06 #2
Thanks George,

Your advice worked :)
The other thing that was tripping me up is that my real world example
(as opposed to the canonical example I posted here) was using a default
namespace, so I had to some further tweaking to get the xpath expr. to
work correctly.
George Bina wrote:
Hi,

Your unique constrint does not select any nodes because you are in a
function_list element and you select as selector all the cildren
elements that have the name function_list and there are no such
elements in your instance document

<xs:selector xpath="function_list"/>

What you want is probably

<xs:selector xpath="function"/>

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

sm*********@gmail.com wrote:
Hi All,

In the sample schema & document below, I'd like the attribute "name" to
be unique for all function elements under function_list. The tools I'm
using (XML Spy and xmllint) all validate the sample document and do not
pick up that the name is not unique.
Any clues as to what could be going wrong?

Thanks.

-----------------------------------------------------------------------------------------------------------------------------
function_list.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="function_list">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element ref="function"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="unique_fn_name">
<xs:selector xpath="function_list"/>
<xs:field xpath="@name"/>
</xs:unique>
</xs:element>
<xs:element name="function">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<!-- want the above attribute to be unique -->
</xs:complexType>
</xs:element>
</xs:schema>

-----------------------------------------------------------------------------------------------------------------------------
function_list.xml:

<?xml version="1.0" encoding="UTF-8"?>
<function_list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="function_list.xsd">
<function name="fred"/>
<function name="fred"/>
<function name="frog"/>
<function name="fred"/>
</function_list>
Jul 27 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by Maxim | last post: by
2 posts views Thread by pstachy | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.