У меня есть две схемы A и B с циклической зависимостью (это промежуточный шаг). XML-файлы, которые я использую в качестве входных данных, проверяются на соответствие схеме в соответствии с xmllint и Visual Studio. Eclipse сообщает мне, что обе схемы содержат два глобальных компонента с одинаковыми именами.
A.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance"
targetNamespace="http://foo.org/A"
xmlns="http://foo.org/A"
elementFormDefault="unqualified"
attributeFormDefault="unqualified">
<xs:import schemaLocation="b.xsd" />
B.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance"
xmlns:foo="http://foo.org/A"
elementFormDefault="unqualified"
attributeFormDefault="unqualified">
<xs:import namespace="http://foo.org/A" schemaLocation="a.xsd" />
XSD, который я передаю Unmarshaller, — это A.xsd. Когда он встречает элемент, определенный в B.xsd, он жалуется:
org.xml.sax.SAXParseException: cvc-elt.1: не удается найти объявление элемента «foo».
Я установил схему через (псевдо):
InputStream in = .. A.xsd
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
return factory.newSchema(new StreamSource(in);
Кто-нибудь может объяснить, что я делаю неправильно? Спасибо.