Существует XML-документ, который определяет порядок оплаты карточками. Этот XML включает в себя список карточек и список бумажных носителей.
Каждой карточке должен быть назначен 1 бумажный носитель (это определяется вложенным XML-элементом карточки, называемым paper_carrier_id). Одному и тому же бумажному носителю можно назначить несколько карточек Не должно быть никаких бумажных носителей, которые не привязаны ни к одной карте.
Я могу сделать ключ / ключ в XSD для назначения 1 бумажного носителя каждой карточке. Но я не могу избежать ненужных XML-элементов paper_carrier. Можно ли вообще обойтись с XSD?
Вот мой XSD и XML:
<!-- XSD: https://pastebin.com/uDgmZyfU -->
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- ROOT element -->
<xs:element name='card_order_request' >
<xs:complexType>
<xs:sequence>
<xs:element name='order_id' type='xs:string' />
<xs:element name='card' type='CardOrderType' maxOccurs='unbounded' />
<xs:element name='paper_carrier' type='PaperCarrierType' maxOccurs='unbounded' />
</xs:sequence>
</xs:complexType>
<!-- KEY REFERENCES -->
<xs:key name='PaperCarrierIdKey'>
<xs:selector xpath='paper_carrier' />
<xs:field xpath='@paper_carrier_id' />
</xs:key>
<xs:keyref name='PaperCarrierIdRefKey' refer='PaperCarrierIdKey'>
<xs:selector xpath='card/paper_carrier_id' />
<xs:field xpath='paper_carrier_id' />
</xs:keyref>
<!-- /KEY REFERENCES -->
</xs:element>
<!-- /ROOT element -->
<xs:complexType name='CardOrderType'>
<xs:sequence>
<xs:element name='card_id' type='xs:long' />
<xs:element name='paper_carrier_id' type='xs:unsignedInt' />
</xs:sequence>
</xs:complexType>
<xs:complexType name='PaperCarrierType'>
<xs:sequence>
<xs:element name='paper_carrier_row1' type='xs:string' />
</xs:sequence>
<xs:attribute name='paper_carrier_id' type='xs:unsignedInt' use="required" />
</xs:complexType>
</xs:schema>
<!-- ############################################################################ -->
<!-- ############################################################################ -->
<!-- XML: https://pastebin.com/JQYRvSS0 -->
<card_order_request>
<order_id>1</order_id>
<card>
<card_id>100</card_id>
<paper_carrier_id>6475</paper_carrier_id>
</card>
<paper_carrier paper_carrier_id="6475">
<paper_carrier_row1>blabla01</paper_carrier_row1>
</paper_carrier>
<paper_carrier paper_carrier_id="6476">
<paper_carrier_row1>blabla02</paper_carrier_row1>
</paper_carrier>
</card_order_request>