Схема XSD: Уникален елемент вътре във възел, без повтарящи се стойности

Бих искал да валидирам XML файл със схема за това, че стойностите в същия възел не могат да се повтарят. Важен е редът на подписите. Моят невалиден XML е:

   <person>
      <name>Peter Petrelli</name>
      <subject1>Mathematics</subject1>
      <note1>8.5</note1>
      <subject2>Natural Science</subject2>
      <note2>4.5</note2>
      <subject3>Mathematics</subject3>
      <note3>7</note3>
   </person>
</school>

It's not possible Mathematics is more than once.

Как мога да потвърдя това с XSD схема?

Благодаря ти много


person rspaz16    schedule 29.09.2011    source източник


Отговори (1)


С по-разумен дизайн няма да има проблем:

<person>
<name>Peter Petrelli</name>
<subject>
    <name>Mathematics</name>
    <note>2</note>
</subject>
<subject>
    <name>Natural Sciences</name>
    <note>2.5</note>
</subject>
<subject>
    <name>Mathematics</name>
    <note>4</note>
</subject>

then the <unique> definition inside the <person> element could be:

    <unique name="su">
        <selector xpath="subject" />
        <field xpath="name"/>
    </unique>
person forty-two    schedule 29.09.2011
comment
Наистина. Вашето използване на имена на елементи, съдържащи наставката -1, -2, -3 и т.н., изглежда прави писането на разумна XSD схема практически невъзможно. Това също така ще направи обработката на XML (напр. използване на XSLT или XPath) значително по-трудна. Това е много лош дизайн. - person Michael Kay; 29.09.2011
comment
Написах само малък пример, но промених дизайна си, следвайки нашите препоръки и от сега мога да валидирам правилно. Благодаря ви много, хора - person rspaz16; 30.09.2011