Структура многомерного ассоциативного массива в XML-схеме - PullRequest
1 голос
/ 04 января 2012

Я все еще рано изучаю 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.

1 Ответ

2 голосов
/ 04 января 2012

Я думаю, что вам будет проще обрабатывать XML (не только с XSD, но также с XSLT и XQuery), если вы измените дизайн на:

<node key="string">
    <node key="string">
        <value>arbitrary value</value>
    </node>
    <node key="string">
        <value>arbitrary value</value>
    </node>
</node>

Тогда будет легко указатьваша схема, что модель содержимого для узла является выбором: либо последовательность узлов, либо одно значение.

...