2011-08-02 4 views
4

HTML5ドラフトspecifies(現時点では少なくとも)、about:legacy-compatというURIは、XML準拠のdoctypeに依存する文書(<!DOCTYPE html> isn 't)。私はXalanのかサクソンのような任意のXSLTプロセッサと、このようなXHTML5文書を使用する場合XSLTプロセッサーでHTML5の "about:"プロトコルを使用する方法

<!DOCTYPE html SYSTEM "about:legacy-compat"> 

残念ながら、彼らは自然にしてみてください:

は、だから私はで始まるHTML5、妥当性を検証するXMLファイル、の束を持って起こります(解決不可能な)URIを解決する。

URIを無視したり、偽装したりする方法はありますか?それを解決しようとするとこれらの文書の早い段階で起こるので、例えばSaxonの-dtd:offスイッチはここでは何の効果もありません。

編集:私は別のXHTML5ファイルをロードするためにdocument() XPath関数の使用を開始するまで低レベルのアプローチsed -n '2,$p' <htmlfile> | otherappは残念ながらのみ動作します。

編集2:私はXML catalogsで遊んで、彼らはサクソンとXalanの両方で動作するようにしました。しかし、その後、私はいつも受け取ります

java.net.MalformedURLException: unknown protocol: about 

これは驚くことではありませんが、どうすればこの問題を回避できますか? URLは解析されるべきではなく、ただ破棄されるべきではありません。程度/

package foo.about; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.StringBufferInputStream; 
import java.net.URL; 
import java.net.URLConnection; 

public class Handler extends java.net.URLStreamHandler { 

@Override 
protected URLConnection openConnection(URL url) throws IOException {    
    URLConnection res = new URLConnection(url) { 

     @Override 
     public void connect() throws IOException { 
      connected = true; 
     } 
     @Override 
     public InputStream getInputStream() throws IOException { 
      return new StringBufferInputStream("<!ELEMENT html ANY>"); 
     } 
    }; 
    return res; 
} 
} 

/$のsomepath/fooのには、このJavaファイルを入れ

+0

xsltで何を達成しようとしていますか?あなたはhtml5から..へ行くつもりですか? – Wivani

+0

...何か、基本的には。特定のケースでは、FOP(Xalan)で処理し、* more * HTML5をXSLT2とSaxonで分割するXSL-FO – Boldewyn

+0

しかし、私は「about:URL」の場合のURI解決を取り除く方法を、特定のXSLT質問よりも基本的なものにもっと興味があります。これは私の使用例です。 – Boldewyn

答えて

4

は今の$ somepathに行くと、それをコンパイルしますサクソンを呼び出すとき

javac foo/about/Handler.java 

は、JVMに次の引数を追加します。

修正されたシェルスクリプトスクリプト(* nixシステム用ですが、Windowsでは非常に似ています):

#!/bin/sh 

exec java -Djava.protocol.handler.pkgs=foo -classpath /usr/share/java/saxonb.jar:"$somepath" net.sf.saxon.Transform "[email protected]" 

ローカルのsaxonb-xsltスクリプトを使用しても問題が解決しない場合があります。

+0

'無効なオプション:-Djava.protocol.handler.pkgs = foo'エラーが発生しました。 Javaのバージョンは1.6.0_22、OpenJDKです。それに応じてクラスパスが設定されます。コンパイル時に、 '注:foo/about/Handler.javaは廃止予定のAPIを使用またはオーバーライドします.'これは基本的に' java.io.StringBufferInputStream'の使用に関する苦情です。 。 – Boldewyn

+0

あなたはどのようにプログラムを起動していますか? "saxonb-xslt --Djava.protocol.handler.pkgs = foo -cp $ somepath whataver"を実行してはいけません。 saxonb-xsltスクリプトを変更/コピーする必要があります – ysdx

+0

'java -cp" $ somepath:/usr/share/java/xalan2.jar "org.apache.xalan.xslt.Process -Djava.protocol.handler.pkgs = foo -indent 2 -xsl stylesheet.xsl -in in.xml -out out.xml' – Boldewyn

関連する問題