Вопрос

Я следую в двух схемах. Master.xsd и child.xsd

  1. child.xsd импортируется master.xsd.
  2. Мастер-файл имеет целевой паб пространства имен.
  3. Детский файл Нет такого пространства имен.
  4. Когда я пытаюсь подтвердить XML с Master.xsd, я получаю ошибку

    org.xml.sax.saxparseException: SRC-RESOLVE: не может разрешить имя «автор» на компонент объявления «автор» на (N) ».

    Я также пытался использовать в Master.xsd, на этот раз я получаю аналогичную ошибку:

    org.xml.sax.saxparseException: SRC-RESOLVE: не может разрешить имя «Паб: автор» на компонент объявления элемента (N) ».

    хотя это подтверждается XMLSPY успешно.

    Вот схема, вызывающий код и код проверки:

    master.xsd

    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:pub="http://schema.abc.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://schema.abc.com">
        <xs:import schemaLocation="Child.xsd"/>
        <xs:element name="books">
            <xs:complexType>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element ref="pub:book"/>
                </xs:choice>
            </xs:complexType>
        </xs:element>
        <xs:element name="book">
            <xs:complexType>
                <xs:sequence>
                    <xs:element ref="pub:published_date"/>
                    <xs:element ref="author"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="published_date" type="xs:dateTime"/>
    </xs:schema>
    
    .

    child.xsd

    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="author">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element ref="first_name"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
        <xsd:element name="first_name" type="xsd:string"/>
    </xsd:schema>
    
    .

    thumbs.xml, который должен быть подтвержден:

    <?xml version="1.0" encoding="UTF-8"?>
    <pub:books xsi:schemaLocation="http://schema.abc.com" xmlns:pub="http://schema.abc.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <pub:book>
            <pub:published_date>2001-12-17T09:30:47Z</pub:published_date>
            <author>
                <first_name>Adi</first_name>
            </author>
        </pub:book>
    </pub:books>
    
    .

    код Java для проверки:

    private void validate(final String schema, final String xml) {
            SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
            InputStream is = getClass().getResourceAsStream(schema);
            Schema schema;
            try {
                schema = schemaFactory.newSchema(new StreamSource(is));
                Validator validator = schema.newValidator();
                Source xmlSource = new StreamSource( new StringReader(xml));
    
                validator.validate(xmlSource);
    
            } catch (IOException e) {
                e.printStackTrace();
            } catch (SAXException e) {
                e.printStackTrace();
            }
        }
    
    .

    Вызов код:

    validate(masterXSDPath, "xmlString");
    
    .

    Пожалуйста, скажите, где я пойду не так ??

Это было полезно?

Решение 2

Исправлено его путем внедрения LsresourcereSolver. Child.xsd не найден.

Посмотрите здесь для большего количества детенов https://stackoverflow.com/a/2342859/842210

Другие советы

Я бы представлял, что вы хотите, чтобы обе схемы доступны, таким образом, что-то вроде:

schemaFactory.newSchema(new Source[]{new StreamSource(is1), new StreamSource(is2)});
.

попеременно, вы можете предоставить пользовательский Lsresourcerever для схемы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top