Как определить дочерние элементы XML-элемента на основе значения атрибута - PullRequest
0 голосов
/ 31 августа 2018

Я использую Eclipse IDE для построения XML-схемы для обработки JAXB, но получаю ошибку проверки следующего:

    <xsd:element name="testEl">
        <xsd:complexType>
            <xsd:choice>
                <xsd:sequence>
                    <xsd:element name="testElChild">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="tec1"/>
                                <xsd:element name="tec2"/>
                            </xsd:sequence>
                            <xsd:attribute name="type" use="required" fixed="yes"/>
                        </xsd:complexType>
                    </xsd:element>
                </xsd:sequence>
                <xsd:sequence>
                    <xsd:element name="testElChild">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="tec3"/>
                                <xsd:element name="tec4"/>
                            </xsd:sequence>
                            <xsd:attribute name="type" use="required" fixed="no"/>
                        </xsd:complexType>
                    </xsd:element>
                </xsd:sequence>
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>

В основном я пытаюсь указать, что если атрибут type элемента testElChild имеет значение "yes", то он должен содержать дочерние элементы tec1 и tec2, но если атрибут type имеет значение «нет», то он должен содержать дочерние элементы tec3 и tec4.

Что не так с вышеуказанной схемой и / или как мне выполнить намерение с помощью действующей схемы XML?

1 Ответ

0 голосов
/ 02 сентября 2018

Очень помогло бы, если бы вы показали ошибку проверки , которую вы получили. Я могу только предположить, что у вас одинаковое имя элемента testElChild в обоих вариантах.

Чтобы исправить это, я рекомендую вам следовать двум лучшим рекомендациям при написании XML-схем:

  • Избегайте анонимных типов : проще устранить неполадки, если вы начинаете с именованных типов вместо анонимных типов; затем, когда все работает, и вы все еще решили использовать анонимные типы, вы можете переводить с анонимными типами (если используется только один раз);
  • Используйте полиморфизм вместо xsd: choice : вы определяете абстрактный тип TestElChild, например, и один тип расширения для каждого варианта, который вы имели, например, NoTypeTestElChild и YesTypeTestElChild.

Поначалу это может быть утомительно, но в долгосрочной перспективе у вас будут проблемы. Если у вас есть проблемы с написанием XSD в соответствии с этими практиками, сообщите нам.

...