我正在尝试一些XML Schema示例,并且必须使用示例XML文件来验证它们。架构是本地文件(someFile.xsd)。我正在使用eclipse并希望在XML文件中包含一个引用来指向这个本地xsd文件,以便eclipse可以向我建议这些元素。
我发现很难提出包含本地文件的语法。有什么建议吗?
答案 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>复制
答案 2 :(得分:0)
您可以将ResourceResolver和LSInput的实施设置为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;
});