У меня есть XSD, который описывает пользовательскую схему и импортирует XLink (другая схема).Как создать XML-документ с несколькими схемами в Java?
Импорт производится с помощью следующей декларации его основного XSD:
<xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="xlink.xsd"/>
xlink.xsd
файла на самом деле находятся рядом с главным XSD.
Затем я настраиваю строителей со следующим кодом
static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
static final String MY_SCHEMA_FILENAME = "mydir/myfile.xsd";
static final String MY_DATA_FILENAME = "mydir/myfile.xml";
factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
try {
factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
factory.setAttribute(JAXP_SCHEMA_SOURCE, new File(MY_SCHEMA_FILENAME));
}
catch (IllegalArgumentException e) {
throw new AssertionError(e);
}
try {
builder = factory.newDocumentBuilder();
}
catch(ParserConfigurationException e) {
throw new AssertionError(e);
}
, когда я готовлю документ в памяти, я установил атрибут следующим образом
imageElement.setAttribute("xlink:href", mypathvariable);
я ожидаю, это создаст тег, который описан следующим образом в XSD
<xs:element name="image">
<xs:complexType>
<xs:attribute ref="xlink:href" use="required"/>
</xs:complexType>
</xs:element>
При создании ev erything работает без ошибок, но при сохранении с кодом
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(MY_DATA_FILENAME));
transformer.transform(source, result);
следующее сообщение об ошибке:
ERROR: 'Namespace for prefix 'xlink' has not been declared.'
Где моя ошибка?
У вас есть пространство имен, объявленное в xlink.xsd? – Keerthivasan