Czy relaxng może określić nieuporządkowany zestaw elementów o tej samej nazwie, ale różnych atrybutach?

Pracuję nad zautomatyzowaniem testowania API, które pobiera i zwraca XML, więc chcę przetłumaczyć udokumentowane dane powrotu API na schemat, na ile to możliwe. Wybrałem RelaxNG do tego zadania w oparciu o łatwość użycia i nauki.

Zanim wrzucę wszystkie informacje, oto pytanie:

Czy można opisać „nieuporządkowany zestaw elementów o tej samej nazwie, ale różnych atrybutach”?

Oto przykładowy obiekt, który mam problem z opisem:

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

Obiekty łączące są tym, na czym się rozłączam. Oto problem:

Kolejność elementów wewnątrz elementu nie jest gwarantowana, więc próbuję umieścić wszystkie elementy<interleave> Struktura.Będzie wiele<link> elementy wewnątrz<item>, z różnymi zestawami atrybutów (tj.<item> MUSI mieć link „własny”, link „pobierz” i link „relatedData”, aby był ważny).Wymagany jest jeden typ każdego łącza, ale kolejność nie jest gwarantowana.

Próbowałem opisać schemat w ten sposób:

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

odniesienia „link” są zdefiniowane gdzie indziej tak:

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

Parser nie jest z tego zadowolony - od jinga dostajęerror: the element "link" can occur in more than one operand of "interleave". Widzę, co się dzieje, ale miałem nadzieję, że poradzi sobie z ideą „elementów o tej samej nazwie, ale różnych atrybutach” jako unikalnych przedmiotów.

Przeniesienie odnośników z przeplotu powoduje, że jest ono analizowane, ale będę czekał, aż walidator wysadzi, gdy kolejność zmieni się w zwróconych danych.

Jakieś pomysły, czy to niemożliwe? Czy istnieje problem związany z XML, który przetwarzam, który będzie wymagał przeniesienia niektórych z nich do wyższej logiki przetwarzania w mojej aplikacji testowej (ręczne sprawdzenie każdego typu łącza po uruchomieniu bardziej ogólnej weryfikacji XML?)

questionAnswers(2)

yourAnswerToTheQuestion