2011-10-17 2 views
1

Java/Xalan과 공식 Docbook XSL 파일 (https://sourceforge.net/projects/docbook/files/docbook-xsl/1.76.1/)을 혼합하여 일부 Docbook XSL을 HTML로 변환하려고 시도 중입니다. 일부 사용자 정의 및 재정의를 제공하는 일부 로컬 xsl 파일이 있습니다.URIResolver, Docbook 및 XSL Transform

내 응용 프로그램이 외부 리소스를 다운로드하거나 로컬 파일에 액세스하지 못하도록하고 싶습니다. 그래서 URIResolver 인터페이스를 확장 한 클래스를 구현했습니다.

문제는 resolve(final String href, final String base) 함수가 요청 된 특정 파일을 식별하는 데 충분한 정보를 제공하지 않는다는 것입니다.

예를 들어 로컬 대체 파일 중 하나는 <xsl:import href="../../../xsl/html.xsl"/>을 사용하여 xsl 파일에서 가져옵니다. 이 경우 내 해결 자 클래스의 href 매개 변수는 ../../../xsl/html.xsl로 설정됩니다. html.xsl 파일은 defaults.xsl이라는 파일을 가져옵니다. href 매개 변수는 defaults.xsl로만 설정되고 기본 매개 변수는 null로 설정됩니다.

이 경우 가져 오기가 http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl 일 수 있습니다.이 경우 href 매개 변수는 http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl으로 설정됩니다. 그러나 docbook.xsl이 defaults.xsl이라는 파일을 가져 오는 경우 href 매개 변수도 defaults.xsl로 설정되고 base는 null로 설정됩니다.

문제는 href 및 기본 매개 변수가 리소스를 고유하게 식별하지 않으며 이전 href의 순서를 보면서 어떤 파일이 요청되는지 추측 할 수 없다는 것입니다. 어떤 컨텍스트에서 파일이 요청되는지 정확히 알아내는 방법이 있습니까?

답변

2

변환을 생성하는 소스에 시스템 ID가 있습니까? 그렇지 않다면 URI 해석자에서베이스가 항상 null 인 이유 일 수 있습니다.

입력 스트림에서 변환을 만드는 경우 소스에 시스템 ID를 수동으로 할당 할 수 있습니다. 필요한 경우 인위적인 URI를 생성하고 URI 분석기에서이 인공 URI를 사용하여 기본 URI로 다시 매핑 할 수 있습니다. 또한 URI 분석기에서 작성한 소스에 시스템 ID가 있거나 해당 파일에서 가져온 리소스로 동일한 문제가 발생하는지 확인하십시오.

+0

그게 문제였습니다. 내 URIResolver에서 데이터베이스에 저장된 문자열에서 새 StreamSource 개체를 만들었지 만 시스템 ID를 설정하지 않았습니다. StreamSource 객체에서 시스템 ID가 URL이나 파일 위치로 설정되면, 기본 매개 변수가 resolve 함수에서 설정되고 올바른 리소스를 구분할 수 있습니다. 고마워. – Phyxx

+0

"시스템 ID"는 무엇입니까? – Kalanamith

+0

@SansaKirov http://www.w3.org/TR/REC-xml/#dt-sysid https://en.wikipedia.org/wiki/System_identifier – prunge