Я все еще рано изучаю XML-схему, так что, надеюсь, это не слишком простой или наивный вопрос.
( Я изучаю спецификации и другие различные ресурсы, ноесли кто-то может предложить дальнейшее чтение, я более чем открыт для предложения )
В любом случае, то, что я ищу, не представляется возможным с моим начинающим пониманием, поэтому я 'я надеюсь, что кто-то может исправить меня (, что доказывает возможность )
Я пытаюсь создать сложный тип, который может содержать любой простой тип или другой узел, содержащий сложный тип, но не оба ;таким образом ( с добавлением строкового атрибута «ключ» ), имитирующего многомерный ассоциативный массив.
Проблема в том, что я не могу понять, как разрешить выбор между двумя( конечно, я тоже не могу понять, возможно ли это, хотя мое чтение заставляет меня не верить )
Итак, по сути, что бы мне нужно было сделатьчтобы получить целевой документ для проверки с помощью:
<node key="string">
<node key="string">
arbitrary value
</node>
<node key="string">
arbitrary value
</node>
</node>
, но недействительным с:
<node key="string">
<node key="string">
arbitrary value
<node key="string">
arbitrary value
</node>
</node>
</node>
( Обратите внимание на узел смешанного содержимого, I не хочу разрешить это )
Вот где я нахожусь:
<xs:attribute name="key">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse" />
<xs:pattern value="[a-zA-Z_][a-zA-Z0-9_]*" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:complexType name="data">
<!-- what do i do? -->
<xs:attribute ref="key" use="required" />
</xs:complexType>
Если это на самом деле невозможно, полагаю, это тоже хорошо, но этоПохоже, что это довольно распространенная структура данных, которую, я думаю, мог бы приспособить XML.