具有XML Schema本地副本的XML文件

时间:2010-06-16 13:15:18

标签: java xml xsd

我正在尝试一些XML Schema示例,并且必须使用示例XML文件来验证它们。架构是本地文件(someFile.xsd)。我正在使用eclipse并希望在XML文件中包含一个引用来指向这个本地xsd文件,以便eclipse可以向我建议这些元素。

我发现很难提出包含本地文件的语法。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您使用的是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必须在你的类路径中

答案 1 :(得分:0)

这样的事情有用吗?

<?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

复制

答案 2 :(得分:0)

您可以将ResourceResolverLSInput的实施设置为SchemaFactory,以便 LSInput.getCharacterStream()comprehensive example here将提供本地路径的模式。

它试图提供https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/

该方法基本上包括正确实现从

调用的内容
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;
    });