XML-файл с локальной копией XML-схемы - PullRequest
5 голосов
/ 16 июня 2010

Я пробую некоторые примеры XML-схемы и должен проверить их с помощью образца XML-файла. Схема является локальным файлом (someFile.xsd). Я использую eclipse и хочу включить ссылку в файл XML, чтобы указать на этот локальный xsd-файл, чтобы eclipse могла предложить мне элементы.

Мне сложно придумать синтаксис для включения локального файла. Есть предложения?

Ответы [ 3 ]

2 голосов
/ 16 июня 2010

Используете ли вы атрибут xsi:schemaLocation?

Пример:

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://foo/target/Namespace"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:someNamespace="someFile"     
       xsi:schemaLocation="
       someFile someFile.xsd" >
...
</root>

Я считаю, someFile.xsd должно быть в вашем classpath

0 голосов
/ 26 января 2018

Вы можете установить собственную реализацию ResourceResolver и LSInput для SchemaFactory , так что вызов LSInput.getCharacterStream () предоставит схему из локального пути.

Попытка предоставить подробный пример здесь .

Подход в основном состоит из правильной реализации того, что вызывается из

getSchemaAsStream(input.getSystemId(), input.getBaseURI(), localPath)));

в конце следующего кода.На этом этапе вы должны подключить свой собственный механизм поиска, чтобы найти файлы схемы по вашему локальному пути.

public void validate(InputStream xmlStream, InputStream schemaStream, String baseUri, String localPath)
                throws SAXException, IOException {
    Source xmlFile = new StreamSource(xmlStream);
    SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    factory.setResourceResolver((type, namespaceURI, publicId, systemId, baseURI) -> {
        LSInput input = new DOMInputImpl();
        input.setPublicId(publicId);
        input.setSystemId(systemId);
        input.setBaseURI(baseUri);
        input.setCharacterStream(new InputStreamReader(
                        getSchemaAsStream(input.getSystemId(), input.getBaseURI(), localPath)));
        return input;
    });
0 голосов
/ 16 июня 2010

Работает ли что-то подобное?

<?xml version="1.0"?>
<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

Скопировано из http://www.w3schools.com/Schema/schema_howto.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...