David Thielen
David Thielen

Reputation: 33026

XQuery (saxon) failing with a schema (XPath works)

I switched in saxon from XPath to XQuery and on the selects where I have a schema I'm getting the error message:

A typed input document can only be used with a schema-aware query

My setup is:

InputSource xmlSource = new InputSource(xmlData);
SAXSource saxSource = new SAXSource(reader, xmlSource);
Source schemaSource = new StreamSource(schemaFile);
Configuration config = createEnterpriseConfiguration();
config.addSchemaSource(schemaSource);
Processor processor = new Processor(config);
SchemaValidator validator = new SchemaValidatorImpl(processor);

DocumentBuilder doc_builder = processor.newDocumentBuilder();
if(!preserveWhiteSpace)
    doc_builder.setWhitespaceStrippingPolicy(WhitespaceStrippingPolicy.ALL);
doc_builder.setSchemaValidator(validator);
XdmNode root_node = doc_builder.build(saxSource);
XQueryCompiler compiler = processor.newXQueryCompiler();

Is there something additional I need to do on queries where there is a schema?

thanks - dave

Upvotes: 1

Views: 55

Answers (1)

Michael Kay
Michael Kay

Reputation: 163625

Call XQueryCompiler.setSchemaAware(true);

This isn't the default because it's good for the optimizer to know whether the data is likely to be typed or untyped, and it's inefficient to generate schema-aware code if the data is untyped (conversely, when the data is typed, schema-aware code is typically faster -- though the savings can be eaten up by the extra cost of validating the input).

Upvotes: 1

Related Questions