Hi there. A few points:

* Not sure this list is really an appropriate place to ask questions
  about the W3C XML Schema Language.

* Why are you using it, anyway? (I generally advise against using any
  constraint language other than DSDL (i.e., RELAX NG, ISO
  Schematron, et al.) unless circumstances absolutely require it.)

* To be honest, I don't know how to do this in XSD. But the following
  Schematron schema checks for uniqueness of the eye-dee= attribute.
  (I just couldn't bring myself to put a "/" into an attribute named
  "id", sorry :-)

  <?xml version="1.0" encoding="UTF-8"?>
  <schema xmlns="http://purl.oclc.org/dsdl/schematron";>
    <pattern>
      <rule context="*...@eye-dee]">
        <report test="./@eye-dee = //*[generate-id(.) != 
generate-id(current())]/@eye-dee">
          eye-dee= values must be unique
        </report>
      </rule>
    </pattern>
  </schema>

> I'am trying to write a xml schema which must validate that a given
> attribute is unique.
> 
> A (valid) simple example of the problem could look like this:
> <root xmlns="http://ns2"; >
>   <a id="a/1" />
>   <a id="a/2" >
>     <a id="a/3" />
>     <a id="a/4"/>
>   </a>
> </root>
> 
> An invalid example (where the ID field is not unique) could look like this:
> <root xmlns="http://ns2"; >
>   <a id="a/1" />
>   <a id="a/2" >
>     <a id="a/1" />
>     <a id="a/4"/>
>   </a>
> </root>
> 
> The schema I have been experimenting with looks like this:
> 
> <xsd:schema
>   xmlns:xsd="http://www.w3.org/2001/XMLSchema";
>   xmlns:ptt="http://ns2";
>   targetNamespace="http://ns2";
>   elementFormDefault="qualified" >
> 
>   <xsd:element name="root" type="ptt:myList">
>     <xsd:unique name="myId">
>       <xsd:selector xpath="ptt:*"/>
>       <xsd:field xpath="@id"/>
>     </xsd:unique>
>   </xsd:element>
> 
>   <xsd:complexType name="myList">
>     <xsd:sequence minOccurs="1">
>       <xsd:element name="a" minOccurs="1" maxOccurs="unbounded"
> type="ptt:asdf" />
>     </xsd:sequence>
>   </xsd:complexType>
> 
>   <xsd:complexType name="asdf">
>     <xsd:sequence minOccurs="1">
>       <xsd:element name="a" minOccurs="0" maxOccurs="unbounded"
> type="ptt:asdf" />
>     </xsd:sequence>
>     <xsd:attribute name="id" type="xsd:string"/>
>   </xsd:complexType>
> </xsd:schema>
> 
> I belive my problem is, that I can not figure out the correct xpath
> to write in the selector.
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
[email protected]
http://mail.gnome.org/mailman/listinfo/xml

Reply via email to