Further development on schematron
This should cover W3C XML Schema, Relax NG and DTD related problems.
-
- Posts: 280
- Joined: Thu Nov 28, 2013 9:32 am
- Location: Hamburg/Germany
- Contact:
Further development on schematron
I have some ideas/requirements on improvement for schematron. However, it seems there is no more any development ongoing since the latest news on http://www.schematron.com/index.html is 5 years old and the mailing lists appear to be dead as well.
I there any clean way to make adjustments to the schematron files (I guees it would be xslt stylesheets) and distribute them to my collegues (similar to custom document types) and possibly even back to oxygen?
Thanks and regards
Patrik
I there any clean way to make adjustments to the schematron files (I guees it would be xslt stylesheets) and distribute them to my collegues (similar to custom document types) and possibly even back to oxygen?
Thanks and regards
Patrik
-
- Posts: 2879
- Joined: Tue May 17, 2005 4:01 pm
Re: Further development on schematron
Hello,
There is a relatively clean way of making adjustments, but you do need to patch Oxygen's builtin stylesheets. So with any change you make to the stylesheets you will most likely need to restart the application.
A copy of the Schematron stylesheets that Oxygen uses can be found in "Oxygen\frameworks\schematron\impl". So if you want to make any changes, you can use these as the base template.
Since this is just a copy, not the actual stylesheets that Oxygen uses when validating with Schematron, you will have to deploy them in the Oxygen folder after making changes. Navigate to "Oxygen/lib" and create a folder named "endorsed" and inside it another folder named "builtin". Place the modified stylesheets there, so they should all be located in "Oxygen/lib/endorsed/builtin".
Regards,
Adrian
There is a relatively clean way of making adjustments, but you do need to patch Oxygen's builtin stylesheets. So with any change you make to the stylesheets you will most likely need to restart the application.
A copy of the Schematron stylesheets that Oxygen uses can be found in "Oxygen\frameworks\schematron\impl". So if you want to make any changes, you can use these as the base template.
Since this is just a copy, not the actual stylesheets that Oxygen uses when validating with Schematron, you will have to deploy them in the Oxygen folder after making changes. Navigate to "Oxygen/lib" and create a folder named "endorsed" and inside it another folder named "builtin". Place the modified stylesheets there, so they should all be located in "Oxygen/lib/endorsed/builtin".
Regards,
Adrian
Adrian Buza
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
-
- Posts: 280
- Joined: Thu Nov 28, 2013 9:32 am
- Location: Hamburg/Germany
- Contact:
Re: Further development on schematron
Thanks Adrian. It works.
Regards,
Patrik
Regards,
Patrik
-
- Posts: 280
- Joined: Thu Nov 28, 2013 9:32 am
- Location: Hamburg/Germany
- Contact:
Re: Further development on schematron
I successfully modified the iso-schematron-message.xsl. And the changes are in effect even without restarting oxygen.
However, modifying the schematronDispatcher.xsl or XSD2Schtrn.xsl didn't have any effect so far - even after restarting oxygen.
For instance in XSD2Schtrn.xsl I replaced line 80 (in template named "outputXSD")
with the following test-code:
Still I got the actual messages from my xsd embedded schematron rules. Any ideas what I did wrong?
Thanks and regards,
Patrik
However, modifying the schematronDispatcher.xsl or XSD2Schtrn.xsl didn't have any effect so far - even after restarting oxygen.
For instance in XSD2Schtrn.xsl I replaced line 80 (in template named "outputXSD")
Code: Select all
<xsl:apply-templates select="$schemas//xs:appinfo/iso:pattern" mode="copyAndAddLocationAttributes"/>
Code: Select all
<iso:pattern>
<iso:rule context="*">
<iso:assert test="false()">
TEST
</iso:assert>
</iso:rule>
</iso:pattern>
Thanks and regards,
Patrik
-
- Posts: 2879
- Joined: Tue May 17, 2005 4:01 pm
Re: Further development on schematron
Hi,
If one works, so should the other. Check the names of the files (including the extension), they should have the same upper/lower casing as the builtin files:
- schematronDispatcher.xsl
- XSD2Schtrn.xsl
If it still doesn't work, zip the builtin folder with the files and change its extension to .jar. Leave the .jar in the Oxygen/lib/endorsed folder and restart Oxygen.
Regards,
Adrian
If one works, so should the other. Check the names of the files (including the extension), they should have the same upper/lower casing as the builtin files:
- schematronDispatcher.xsl
- XSD2Schtrn.xsl
If it still doesn't work, zip the builtin folder with the files and change its extension to .jar. Leave the .jar in the Oxygen/lib/endorsed folder and restart Oxygen.
Regards,
Adrian
Adrian Buza
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
-
- Posts: 280
- Joined: Thu Nov 28, 2013 9:32 am
- Location: Hamburg/Germany
- Contact:
Re: Further development on schematron
I did as you told me - all without any effect. :(
Maybe you could give me a file (xsl, zip, jar or whatever is necessary) with any(!) noticable modification in schematronDispatcher that you tested successfully?
Thanks and regards,
Patrik
Maybe you could give me a file (xsl, zip, jar or whatever is necessary) with any(!) noticable modification in schematronDispatcher that you tested successfully?
Thanks and regards,
Patrik
-
- Posts: 2879
- Joined: Tue May 17, 2005 4:01 pm
Re: Further development on schematron
Hi,
Did you copy all the files from "Oxygen/frameworks/schematron/impl" to "Oxygen/lib/endorsed/builtin"? Or just the modified files? I mistakenly mislead you when I said to "place the modified stylesheets there", you need to copy all the files there, not just the modified ones.
Since it's a hierarchy of stylesheets with a patched module referred from another stylesheet, you need to place there the entire hierarchy, because the references between master and modules are relative and there are two possible locations for the resources (one in the "oxygen.jar/builtin" and the other "Oxygen/lib/endorsed/builtin"). So you can't make relative references to resources that are placed in the other location.
Please let me know if that wasn't it.
Regards,
Adrian
Did you copy all the files from "Oxygen/frameworks/schematron/impl" to "Oxygen/lib/endorsed/builtin"? Or just the modified files? I mistakenly mislead you when I said to "place the modified stylesheets there", you need to copy all the files there, not just the modified ones.
Since it's a hierarchy of stylesheets with a patched module referred from another stylesheet, you need to place there the entire hierarchy, because the references between master and modules are relative and there are two possible locations for the resources (one in the "oxygen.jar/builtin" and the other "Oxygen/lib/endorsed/builtin"). So you can't make relative references to resources that are placed in the other location.
Please let me know if that wasn't it.
Regards,
Adrian
Adrian Buza
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
-
- Posts: 280
- Joined: Thu Nov 28, 2013 9:32 am
- Location: Hamburg/Germany
- Contact:
Re: Further development on schematron
I did copy all the xsl files, so it needs to be something else...
For testing I modified the files in the oxygen.jar/builtin and I worked - wouldn't be my preferred solution though.
Regards,
Patrik
For testing I modified the files in the oxygen.jar/builtin and I worked - wouldn't be my preferred solution though.
Regards,
Patrik
-
- Posts: 280
- Joined: Thu Nov 28, 2013 9:32 am
- Location: Hamburg/Germany
- Contact:
Re: Further development on schematron
I figured out why it was not working with schematronDispatcher.xsl:
When doing schematron validation oxygen does not use the file schematronDispatcher.xsl directly but oXygenSchematronDispatcher.xsl. And this file imports schematronDispatcher.xsl with a relative path and, thus, within the oxygen.jar.
After adding a file oXygenSchematronDispatcher.xsl in the lib/endorsed/builtin folder it did overwrite the one from oxygen.jar.
And when just placing an <xsl:include href="urn:..."/> in it I can maintain and distribute my modified files in any folder distributed to my colleagues via version control system. :)
Regards,
Patrik
When doing schematron validation oxygen does not use the file schematronDispatcher.xsl directly but oXygenSchematronDispatcher.xsl. And this file imports schematronDispatcher.xsl with a relative path and, thus, within the oxygen.jar.
After adding a file oXygenSchematronDispatcher.xsl in the lib/endorsed/builtin folder it did overwrite the one from oxygen.jar.
And when just placing an <xsl:include href="urn:..."/> in it I can maintain and distribute my modified files in any folder distributed to my colleagues via version control system. :)
Regards,
Patrik
-
- Posts: 2879
- Joined: Tue May 17, 2005 4:01 pm
Re: Further development on schematron
Hello,
You are, of course, correct. I was out of the loop on this one. oXygenSchematronDispatcher.xsl has been introduced starting with v15.2 for a better line/column location of the Schematron warnings/errors. This is the master XSL (instead of schematronDispatcher.xsl) used by Oxygen, that's why the patch did not work.
If you haven't already, you can extract oxygen.jar/builtin/oXygenSchematronDispatcher.xsl to Oxygen/lib/endorsed/builtin to make it work and not lose any functionality.
Regards,
Adrian
You are, of course, correct. I was out of the loop on this one. oXygenSchematronDispatcher.xsl has been introduced starting with v15.2 for a better line/column location of the Schematron warnings/errors. This is the master XSL (instead of schematronDispatcher.xsl) used by Oxygen, that's why the patch did not work.
If you haven't already, you can extract oxygen.jar/builtin/oXygenSchematronDispatcher.xsl to Oxygen/lib/endorsed/builtin to make it work and not lose any functionality.
Regards,
Adrian
Adrian Buza
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
-
- Posts: 72
- Joined: Thu Mar 26, 2015 4:57 pm
Re: Further development on schematron
Post by steve.cuzner »
We have IT policies that prevent us from modifying code in c:\Program Files, so putting the customized files in Oxygen/lib/endorsed/builtin is not an option. Is there a way to store these files outside of the program installation area and append the classpath to point to this new location?adrian wrote:
...
Since it's a hierarchy of stylesheets with a patched module referred from another stylesheet, you need to place there the entire hierarchy, because the references between master and modules are relative and there are two possible locations for the resources (one in the "oxygen.jar/builtin" and the other "Oxygen/lib/endorsed/builtin"). So you can't make relative references to resources that are placed in the other location.
...
Steve
-
- Posts: 280
- Joined: Thu Nov 28, 2013 9:32 am
- Location: Hamburg/Germany
- Contact:
Re: Further development on schematron
Hi Steve,
assuming that there is no easy solution with classpath or anything, this might be an acceptable workaround:
1. Create the file oXygenSchematronDispatcher.xsl at some folder where you are allowed to modify files.
2. Create another oXygenSchematronDispatcher.xsl file that only includes the first file.
3. Add the second file to the builtin folder once (with administration rights)
This way you have to modify only once code within the program files folder and can still modify the schematron behavior at any time.
Regards,
Patrik
assuming that there is no easy solution with classpath or anything, this might be an acceptable workaround:
1. Create the file oXygenSchematronDispatcher.xsl at some folder where you are allowed to modify files.
2. Create another oXygenSchematronDispatcher.xsl file that only includes the first file.
3. Add the second file to the builtin folder once (with administration rights)
This way you have to modify only once code within the program files folder and can still modify the schematron behavior at any time.
Regards,
Patrik
-
- Posts: 2879
- Joined: Tue May 17, 2005 4:01 pm
Re: Further development on schematron
Hi,
I'm afraid that for jar patches only the "Oxygen/lib/endorsed" folder can be used. A patch must override existing code from the builtin jars, so adding additional jars to the classpath would not be sufficient, the patch must come first.
However, if you can't use a jar patch, you can try a different approach which may actually be simpler, use an XML catalog with entries like this one for each XSL:
Place the XML catalog relative to your patched XSL files (they can be stored anywhere) and Configure the catalog in Options > Preferences, XML > XML Catalog.
Regards,
Adrian
I'm afraid that for jar patches only the "Oxygen/lib/endorsed" folder can be used. A patch must override existing code from the builtin jars, so adding additional jars to the classpath would not be sufficient, the patch must come first.
However, if you can't use a jar patch, you can try a different approach which may actually be simpler, use an XML catalog with entries like this one for each XSL:
Code: Select all
<uriSuffix uriSuffix="oxygen.jar!/builtin/oXygenSchematronDispatcher.xsl " uri="oXygenSchematronDispatcher.xsl"/>
Regards,
Adrian
Adrian Buza
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
-
- Posts: 2879
- Joined: Tue May 17, 2005 4:01 pm
Re: Further development on schematron
Hi,
I've tested this and double checked and unfortunately it doesn't work for the particular example that I provided. oXygenSchematronDispatcher.xsl cannot be patched with XML catalogs, it simply does not pass through the XML catalog resolver.
However, you can patch the other stylesheets from the hierarchy that are imported or included in it.
For those, it works like this:
This allows you to patch schematronDispatcher.xsl (the import from oXygenSchematronDispatcher.xsl).
Regards,
Adrian
I've tested this and double checked and unfortunately it doesn't work for the particular example that I provided. oXygenSchematronDispatcher.xsl cannot be patched with XML catalogs, it simply does not pass through the XML catalog resolver.
However, you can patch the other stylesheets from the hierarchy that are imported or included in it.
For those, it works like this:
Code: Select all
<uri name="schematronDispatcher.xsl" uri="schematronDispatcher.xsl"/>
Regards,
Adrian
Adrian Buza
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
Jump to
- Oxygen XML Editor/Author/Developer
- ↳ Feature Request
- ↳ Common Problems
- ↳ DITA (Editing and Publishing DITA Content)
- ↳ SDK-API, Frameworks - Document Types
- ↳ DocBook
- ↳ TEI
- ↳ XHTML
- ↳ Other Issues
- Oxygen XML Web Author
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Content Fusion
- ↳ Feature Request
- ↳ Common Problems
- Oxygen JSON Editor
- ↳ Feature Request
- ↳ Common Problems
- Oxygen PDF Chemistry
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Feedback
- ↳ Feature Request
- ↳ Common Problems
- Oxygen XML WebHelp
- ↳ Feature Request
- ↳ Common Problems
- XML
- ↳ General XML Questions
- ↳ XSLT and FOP
- ↳ XML Schemas
- ↳ XQuery
- NVDL
- ↳ General NVDL Issues
- ↳ oNVDL Related Issues
- XML Services Market
- ↳ Offer a Service