Dan Sanderson wrote:
Hi all -

I have two questions regarding Ant, Xerces 2, and XInclude. I'm using Ant 1.6.5, and have upgraded its xercesImpl.jar and xml-apis.jar to Xerces 2.8.0.

The first question is regarding XmlValidate. My understanding is that I can turn on the XInclude feature with an <attribute> in the <xmlvalidate> task:

 <attribute name="http://apache.org/xml/features/xinclude"; value="true" />

When I try to validate, however, it fails on the <include> elements, as if XInclude were not working.

My first guess was that I wasn't turning on the feature correctly, but I noticed this in the Xerces 2 FAQ: "If the validation feature is turned on then DTD validation will be performed on each source document (to the XInclude processor) against their respective DTDs."

My Ant target for validation:

  <target
      name="validate-xerces"
      >
    <java classname="org.apache.xerces.impl.Version" />
    <xmlvalidate
    failonerror="yes"
    warn="yes"
    lenient="no">
<attribute name="http://apache.org/xml/features/xinclude"; value="true" />
      <xmlcatalog>
    <catalogpath>
      <pathelement location="../schemas/docbook-4.4/catalog.xml"/>
    </catalogpath>
      </xmlcatalog>
      <fileset
      dir="${book.dir}"
      includes="${book.file}" />
    </xmlvalidate>
  </target>

Is my task defined correctly to turn on XInclude? Is Xerces refusing to do XInclude prior to DTD validation as a normal behavior? What is the correct way for me to perform DTD validation with a document that uses XInclude? (Must my DTD explicitly accommodate XInclude?)


My second question is regarding the Xslt task. I would like to turn on the same Xerces feature for the purposes of XSLT processing (with Xalan). I'm not clear on how to do this. I tried:

  <target
      name="xslt-xerces"
      description="test XSLT with Xerces XInclude"
      >
    <java classname="org.apache.xerces.impl.Version" />
    <xslt
    in="${book.dir}/${book.file}"
    out="${temp.dir}/test-xsl-out.txt"
    style="test.xsl"
    >
      <factory>
<attribute name="http://apache.org/xml/features/xinclude"; value="true" />
      </factory>
    </xslt>
  </target>

but got:

BUILD FAILED
/workplace/sandersd/Projects/NewAWSDocTools/AWSDocTools/tools/TEMP/build.xml:89: java.lang.IllegalArgumentException: Not supported: http://apache.org/xml/features/xinclude

What is the correct way to turn on XInclude with Xerces with the Xslt task?


Thanks for any assistance you can provide! Let me know if I should post more complete examples.


I think you are pushing the envelope with what the xml tasks do, so there is no guarantee that things will work as expected.

Do make sure that you are using xalan for <xslt>, and not anything built into the JVM; there is a processor attribute in <Xslt> for that; the classname attribute in <xmlvalidate>.

Other than that, you are probably on your own, though patches to fix things are welcome. Know that Ant1.7's version of xmlvalidate was tweaked to create a new parser for every file on a bulk validate, as the one parser-many-files process didnt work for XSD validation.

-steve

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to