Почему имя содержащегося элемента не проверяется при проверке файла xml для нескольких файлов xsd с использованием eclipse? - PullRequest
0 голосов
/ 21 февраля 2020

Я создаю xml схемы с использованием Eclipse, и у меня небольшая проблема с проверкой.

У меня есть две схемы и файл xml.

Main.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/Main"
    xmlns:tns="http://www.example.org/Main"
    elementFormDefault="qualified">

    <complexType name="mainType">
        <sequence>
            <any namespace="##other" processContents="lax" />
        </sequence>
    </complexType>

    <element name="main" type="tns:mainType" />
</schema

Sub.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/Sub"
    xmlns:tns="http://www.example.org/Sub"
    elementFormDefault="qualified">

    <complexType name="subType">
        <attribute name="name" type="string"
            use="required" />
    </complexType>

    <element name="sub" type="tns:subType" />
</schema>

Образец. xml:

<?xml version="1.0" encoding="UTF-8"?>
<tns:main xmlns:tns="http://www.example.org/Main"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sub="http://www.example.org/Sub"
    xsi:schemaLocation="
        http://www.example.org/Main Main.xsd 
        http://www.example.org/Sub Sub.xsd">
    <sub:sub name="test" />
</tns:main>

Если я изменяю атрибут имени подэлемента, проверка завершается неудачно, как и ожидалось :

Validation fails as expected

Но если я изменю имя элемента подэлемента, проверка завершится успешно:

Validation succeeds

Я ожидал, что эта проверка тоже не удастся. Что это не так?

1 Ответ

0 голосов
/ 21 февраля 2020

Полагаю, это потому, что это определение lax из определения схемы XML:

lax: Если для элемента доступно однозначно определенное объявление, оно должно быть · действительным · в отношении этого объявление, то есть, · проверить ·, если можете, не беспокойтесь, если не можете.

Другими словами, поскольку для элемента <sub:subx> нет объявления, оно действительно .

...