Я работаю над автоматизацией тестирования 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?)