Как последовательно перечислить XML элементов, которые должны быть встроены в другой элемент XML? - PullRequest
0 голосов
/ 23 марта 2020

Я хотел бы создать базу данных XML. У меня есть два варианта интерпретации моих данных:

(A)

<database>
    <source tag="78Smith">
        <segment tag="78Smith_S1"></segment>
        <segment tag="78Smith_S2"></segment>
        <line tag="78Smith_S1.1" value="1"/>
        <line tag="78Smith_S2.2" value="2"/>
        <line tag="78Smith_S1.3" value="3"/>
        <line tag="78Smith_S2.4" value="4"/>
    </source>
    <source tag="..."></source>
    <source tag="..."></source>
</database>

(B)

<database>
    <source tag="78Smith">
        <segment tag="78Smith_S1">
            <line tag="78Smith_S1.1" value="1"/>
            <line tag="78Smith_S1.3" value="3"/>
        </segment>
        <segment tag="78Smith_S2">
            <line tag="78Smith_S2.2" value="2"/>
            <line tag="78Smith_S2.4" value="4"/>
        </segment>
    </source>
    <source tag="..."></source>
    <source tag="..."></source>
</database>

Вариант A был бы наиболее полезным для меня, потому что элементы <line> приходят один за другим из источника данных "78Smith", и было бы гораздо проще перепроверить данные, если список элементов <line> может быть сохранен последовательно, а не разделен сегментами, как в варианте B . (Конечно, для сегментов определенная роль есть, но здесь нет места для ее объяснения.)

Однако один из моих коллег предупредил меня, что вариант А имеет анти-XML структуру потому что элементы <line> должны быть подчинены элементам <segment>, а не элементам <source>. Он также добавил, что в случае варианта А из этого XML нельзя создавать файлы XSE и XSD и выполнять в них запросы. В результате я должен заменить вариант A на вариант B.

Моя цель состоит в том, чтобы найти структуру, в которой

(a) элементы <line> могут быть представлены последовательно ( то есть, не встроенные в соответствующие сегменты)

(b) элементы <line> сегментов 78Smith_S1 и 78Smith_S2 можно каким-либо образом запрашивать (например, по тегам) в средах XSE и XSD.

У вас есть идеи, как выполнить эту задачу, или я должен отказаться от "спасения" последовательного перечисления элементов <line> в данном элементе <source>?

...