Я создаю 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>
Если я изменяю атрибут имени подэлемента, проверка завершается неудачно, как и ожидалось :
Но если я изменю имя элемента подэлемента, проверка завершится успешно:
Я ожидал, что эта проверка тоже не удастся. Что это не так?
Полагаю, это потому, что это определение lax из определения схемы XML:
lax: Если для элемента доступно однозначно определенное объявление, оно должно быть · действительным · в отношении этого объявление, то есть, · проверить ·, если можете, не беспокойтесь, если не можете.
Другими словами, поскольку для элемента <sub:subx> нет объявления, оно действительно .
<sub:subx>