use of com.helger.schematron.pure.xpath.XQueryAsXPathFunctionConverter in project ph-schematron by phax.
the class SchematronResourcePureTest method testFunctXAreDistinctValuesWithXSD.
@Test
public void testFunctXAreDistinctValuesWithXSD() throws Exception {
final String sTest = "<?xml version='1.0' encoding='iso-8859-1'?>\n" + "<schema xmlns='http://purl.oclc.org/dsdl/schematron'>\n" + " <ns prefix=\"xs\" uri=\"http://www.w3.org/2001/XMLSchema\"/>\n" + " <ns prefix='fn' uri='http://www.w3.org/2005/xpath-functions' />\n" + " <ns prefix='functx' uri='http://www.functx.com' />\n" + " <pattern name='toto'>\n" + " <title>A very simple pattern with a title</title>\n" + " <rule context='chapter'>\n" + " <assert test='fn:count(fn:distinct-values(para)) = fn:count(para)'>Should have distinct values</assert>\n" + " </rule>\n" + " </pattern>\n" + "</schema>";
final MapBasedXPathFunctionResolver aFunctionResolver = new XQueryAsXPathFunctionConverter().loadXQuery(ClassPathResource.getInputStream("xquery/functx-1.0-nodoc-2007-01.xq"));
final Schema aSchema = XMLSchemaCache.getInstance().getSchema(new ClassPathResource("issues/20141124/chapter.xsd"));
final Document aTestDoc = DOMReader.readXMLDOM("<?xml version='1.0'?>" + "<chapter>" + " <title />" + " <para>09</para>" + " <para>9</para>" + "</chapter>", new DOMReaderSettings().setSchema(aSchema));
final IXPathConfig aXPathConfig = new XPathConfigBuilder().setXPathFunctionResolver(aFunctionResolver).build();
final SchematronOutputType aOT = SchematronResourcePure.fromByteArray(sTest.getBytes(StandardCharsets.UTF_8)).setXPathConfig(aXPathConfig).applySchematronValidationToSVRL(aTestDoc, null);
assertNotNull(aOT);
if (SVRLHelper.getAllFailedAssertions(aOT).isNotEmpty()) {
LOGGER.info(SVRLHelper.getAllFailedAssertions(aOT).get(0).getText());
}
assertTrue(SVRLHelper.getAllFailedAssertions(aOT).isEmpty());
}
use of com.helger.schematron.pure.xpath.XQueryAsXPathFunctionConverter in project ph-schematron by phax.
the class SchematronResourcePureTest method testResolveXQueryFunctions.
@Test
public void testResolveXQueryFunctions() throws Exception {
final String sTest = "<?xml version='1.0' encoding='iso-8859-1'?>\n" + "<iso:schema xmlns='http://purl.oclc.org/dsdl/schematron' \n" + " xmlns:iso='http://purl.oclc.org/dsdl/schematron' \n" + " xmlns:sch='http://www.ascc.net/xml/schematron'\n" + " queryBinding='xslt2'\n" + " schemaVersion='ISO19757-3'>\n" + " <iso:title>Test ISO schematron file. Introduction mode</iso:title>\n" + " <iso:ns prefix='dp' uri='http://www.dpawson.co.uk/ns#' />\n" + " <iso:ns prefix='functx' uri='http://www.functx.com' />\n" + " <iso:pattern >\n" + " <iso:title>A very simple pattern with a title</iso:title>\n" + " <iso:rule context='chapter'>\n" + " <iso:assert test='title'>Chapter should have a title</iso:assert>\n" + " <iso:report test='count(para) = 2'>\n" + " Node kind: <iso:value-of select='functx:node-kind(para)'/> - end</iso:report>\n" + " </iso:rule>\n" + " </iso:pattern>\n" + "\n" + "</iso:schema>";
final MapBasedXPathFunctionResolver aFunctionResolver = new XQueryAsXPathFunctionConverter().loadXQuery(ClassPathResource.getInputStream("xquery/functx-1.0-nodoc-2007-01.xq"));
// Test with variable and function resolver
final Document aTestDoc = DOMReader.readXMLDOM("<?xml version='1.0'?>" + "<chapter>" + "<title />" + "<para>First para</para>" + "<para>Second para</para>" + "</chapter>");
final IXPathConfig aXPathConfig = new XPathConfigBuilder().setXPathFunctionResolver(aFunctionResolver).build();
final SchematronOutputType aOT = SchematronResourcePure.fromByteArray(sTest.getBytes(StandardCharsets.UTF_8)).setXPathConfig(aXPathConfig).applySchematronValidationToSVRL(aTestDoc, null);
assertNotNull(aOT);
assertEquals(0, SVRLHelper.getAllFailedAssertions(aOT).size());
assertEquals(1, SVRLHelper.getAllSuccessfulReports(aOT).size());
// Note: the text contains all whitespaces!
assertEquals("\n Node kind: element - end".trim(), SVRLHelper.getAllSuccessfulReports(aOT).get(0).getText());
}
use of com.helger.schematron.pure.xpath.XQueryAsXPathFunctionConverter in project ph-schematron by phax.
the class SchematronResourcePureTest method testResolveFunctXAreDistinctValuesQueryFunctions.
@Test
public void testResolveFunctXAreDistinctValuesQueryFunctions() throws Exception {
final String sTest = "<?xml version='1.0' encoding='iso-8859-1'?>\n" + "<iso:schema xmlns='http://purl.oclc.org/dsdl/schematron' \n" + " xmlns:iso='http://purl.oclc.org/dsdl/schematron' \n" + " xmlns:sch='http://www.ascc.net/xml/schematron'\n" + " queryBinding='xslt2'\n" + " schemaVersion='ISO19757-3'>\n" + " <iso:title>Test ISO schematron file. Introduction mode</iso:title>\n" + " <iso:ns prefix='dp' uri='http://www.dpawson.co.uk/ns#' />\n" + " <iso:ns prefix='fn' uri='http://www.w3.org/2005/xpath-functions' />\n" + " <iso:ns prefix='functx' uri='http://www.functx.com' />\n" + " <iso:pattern >\n" + " <iso:title>A very simple pattern with a title</iso:title>\n" + " <iso:rule context='chapter'>\n" + " <iso:assert test='functx:are-distinct-values(para)'>Should have distinct values</iso:assert>\n" + " </iso:rule>\n" + " </iso:pattern>\n" + "</iso:schema>";
final MapBasedXPathFunctionResolver aFunctionResolver = new XQueryAsXPathFunctionConverter().loadXQuery(ClassPathResource.getInputStream("xquery/functx-1.0-nodoc-2007-01.xq"));
// Test with variable and function resolver
final Document aTestDoc = DOMReader.readXMLDOM("<?xml version='1.0'?>" + "<chapter>" + "<title />" + "<para>100</para>" + "<para>200</para>" + "</chapter>");
final CollectingPSErrorHandler aErrorHandler = new CollectingPSErrorHandler(new LoggingPSErrorHandler());
final IXPathConfig aXPathConfig = new XPathConfigBuilder().setXPathFunctionResolver(aFunctionResolver).build();
final SchematronOutputType aOT = SchematronResourcePure.fromByteArray(sTest.getBytes(StandardCharsets.UTF_8)).setXPathConfig(aXPathConfig).setErrorHandler(aErrorHandler).applySchematronValidationToSVRL(aTestDoc, null);
assertNotNull(aOT);
// XXX fails :(
if (false)
assertTrue(aErrorHandler.getAllErrors().toString(), aErrorHandler.isEmpty());
assertEquals(0, SVRLHelper.getAllFailedAssertions(aOT).size());
}
use of com.helger.schematron.pure.xpath.XQueryAsXPathFunctionConverter in project ph-schematron by phax.
the class Issue20150128Test method testEq.
@Test
public void testEq() throws Exception {
final String sTest2 = "<?xml version='1.0' encoding='iso-8859-1'?>\n" + "<schema xmlns='http://purl.oclc.org/dsdl/schematron'>\n" + " <ns prefix='functx' uri='http://www.functx.com' />\n" + " <pattern >\n" + " <title>A very simple pattern with a title</title>\n" + " <rule context='chapter'>\n" + " <assert test='aaa eq 1'>aaa equals 1></assert>\n" + " </rule>\n" + " </pattern>\n" + "\n" + "</schema>";
final CollectingPSErrorHandler aErrorHandler = new CollectingPSErrorHandler();
final MapBasedXPathFunctionResolver aFunctionResolver = new XQueryAsXPathFunctionConverter().loadXQuery(ClassPathResource.getInputStream("xquery/functx-1.0-nodoc-2007-01.xq"));
final SchematronResourcePure resource = SchematronResourcePure.fromString(sTest2, StandardCharsets.ISO_8859_1);
resource.setErrorHandler(aErrorHandler);
IXPathConfig aXPathConfig = new XPathConfigBuilder().setXPathFunctionResolver(aFunctionResolver).build();
resource.setXPathConfig(aXPathConfig);
assertTrue(resource.isValidSchematron());
assertEquals(1, aErrorHandler.getErrorList().size());
}
Aggregations