Схема XSD: элемент, уникальный внутри узла, не повторяющиеся значения

#xml #xsd #unique #validation #field

#xml #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>
  

Математика невозможна более одного раза.

Как я могу проверить это с помощью схемы XSD?

Большое вам спасибо

Ответ №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>
  

тогда определение <unique> внутри элемента <person> может быть:

     <unique name="su">
        <selector xpath="subject" />
        <field xpath="name"/>
    </unique>
  

Комментарии:

1. Действительно. Использование вами имен элементов, содержащих суффикс -1, -2, -3 и т. Д., Похоже, делает написание разумной схемы XSD практически невозможным. Это также значительно усложнит любую обработку XML (например, с использованием XSLT или XPath). Это очень плохой дизайн.

2. Я написал только небольшой пример, но я изменил свой дизайн, следуя нашим рекомендациям, и теперь я могу правильно проверять. Большое вам спасибо, ребята