Можно ли в Relaxng указать неупорядоченный набор элементов с одинаковыми именами, но разными атрибутами?

Я работаю над автоматизацией тестирования API, который принимает и возвращает XML, поэтому я хочу максимально перевести задокументированные возвращаемые данные API в схему. Я выбрал RelaxNG для этой задачи из-за простоты использования и обучения.

Прежде чем я напишу всю информацию, вот вопрос:

Можно ли описать «неупорядоченный набор элементов с одинаковым именем, но разными атрибутами»?

Вот пример объекта, описание которого мне не удается:

<item>
    <id>d395136e-d060-4a6e-887c-c0337dd7ad09</id>
    <name>The item has a name</name>
    <link rel="self" type="type1" href="url" />
    <link rel="download" type="type2" href="url" />
    <link rel="relatedData" type="type3" href="url" />
</item>

Объекты ссылок - это то, на чем я зацикливаюсь. Вот проблема:

  • Порядок элементов внутри элемента не гарантируется,поэтому я пытаюсь поместить все элементы в структуру <interleave>.
  • Внутри <item>будет несколько элементов <link>с разными наборами атрибутов (, т. е. <item>ДОЛЖЕН иметь ссылку «self», ссылку «download» и ссылку «relatedData», чтобы быть действительным ).
  • Требуется по одной ссылке каждого типа, но опять же порядок не гарантируется.

Я попытался описать схему так:

<element name="item">
    <interleave>
        <element name="id"><text/></element>
        <element name="name"><text/></element>
        <ref name="selfLink"/>
        <ref name="launchLink"/>
        <ref name="thumbnailLink"/>
    </interleave>
</element>

ссылки на «ссылки» определены в другом месте, например:

 <define name="selfLink">
 <element name="link">
     <attribute name="href"><text/></attribute>
     <attribute name="rel"><value>self</value></attribute>
     <attribute name="type"><value>type1</value></attribute>
 </element>
 </define>

Парсер не доволен этим -от jing я получаю error: the element "link" can occur in more than one operand of "interleave". Я понимаю, к чему это приводит, но я надеялся, что он сможет справиться с идеей «элементов с одинаковым именем, но разными атрибутами» как уникальных элементов.

Перемещение ссылок из interleave приводит к их синтаксическому анализу, но я буду ждать, когда валидатор взорвется всякий раз, когда порядок в возвращаемых данных изменится.

Есть идеи или это невозможно? Есть ли неотъемлемая проблема с XML, который я обрабатываю, который потребует от меня перенести некоторые из них на более высокую логику обработки в моем тестовом приложении (вручную проверять каждый тип ссылки после выполнения более общей проверки XML?)

5
задан Pshemo 3 August 2012 в 18:42
поделиться