Saxon命令行模式下如何通过HTTPS实现xsl:include?
我来帮你搞定这个问题!你碰到的unknown protocol: https错误,本质是Saxon依赖的Java运行环境没正确启用HTTPS支持——毕竟Saxon HE是基于Java开发的,网络协议的支持全靠Java的底层配置。下面给你几个靠谱的解决办法:
1. 先检查Java版本,不行就升级
Saxon 9.7版本推荐用Java 8及以上版本,如果你装的是Java 6或者更早的版本,大概率会出HTTPS相关的问题。赶紧把Java更到8或更高版本,新版本Java默认就带完善的HTTPS支持,很多老版本的协议缺陷直接就修复了。
2. 别用默认的transform脚本,直接用Java命令启动
有时候默认的transform.bat(Windows)或transform.sh(Linux)脚本可能没配置好Java的类路径,导致HTTPS协议加载失败。你可以直接用Java命令手动调用Saxon,这样能确保所有必要的库都被正确加载:
java -cp "你实际的Saxon路径/saxon9he.jar" net.sf.saxon.Transform -xsl:https://raw.githubusercontent.com/VladimirAlexiev/LODE/master/src/main/webapp/extraction.xsl -s:ebg-ontology.rdf -o:index.html
比如你装在C:\Program Files\SaxonHE9-7-0-21N,那路径就改成"C:\Program Files\SaxonHE9-7-0-21N\saxon9he.jar"。
3. 处理SSL证书信任问题(如果升级Java后还是报错)
要是升级Java后还是不行,可能是GitHub的SSL证书在你的Java环境里不被信任。这里有两个办法:
临时禁用证书验证(只用来测试,别在生产环境用)
在Java命令里加几个参数,强制Java信任所有证书:
java -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStore="你的Java路径/jre/lib/security/cacerts" -Djavax.net.ssl.trustStorePassword=changeit -cp "saxon9he.jar" net.sf.saxon.Transform -xsl:https://raw.githubusercontent.com/VladimirAlexiev/LODE/master/src/main/webapp/extraction.xsl -s:ebg-ontology.rdf -o:index.html
默认的信任库密码是changeit,如果你改过就换成自己的密码。
手动导入GitHub的证书到Java信任库
这个是更安全的长期解决方案:
- 用浏览器打开
https://raw.githubusercontent.com,导出网站的SSL证书(选DER格式)。 - 用Java自带的
keytool命令把证书导入信任库:
keytool -import -alias githubraw -file 你导出的证书路径/github-cert.der -keystore "你的Java路径/jre/lib/security/cacerts"
按照提示输入密码(默认changeit),确认导入就行。
4. 本地缓存XSL文件(应急备选)
如果上面的方法都搞不定,你可以把extraction.xsl和它引用的swrl-module.xsl等文件都下载到本地,然后修改extraction.xsl里的xsl:include路径为本地相对路径,再运行转换:
transform -xsl:./extraction.xsl -s:ebg-ontology.rdf -o:index.html
这个方法直接绕开了HTTPS的问题,适合临时应急用。
内容的提问来源于stack exchange,提问作者Vladimir Alexiev

