스키마 분석기 등록
XSchemaResolver 인터페이스는 구현 가능하며 구현은 기본 스키마 분석 동작을 대체하도록 XFactory에 등록됩니다. 여기에는 xsl:import-schema 선언을 사용하여 XSLT 스타일시트에 가져온 스키마 분석 및 registerSchema 메소드를 사용하여 XFactory에 등록된 스키마에 대한 가져오기 분석이 포함됩니다.
이 태스크 정보
스키마에서 가져오기 분석에 대한 기본 동작은 가져온 스키마의 위치를 분석하기 위해 스키마의 기본 URI를 사용하는 것입니다. XSLT 스키마 가져오기의 기본 동작은 선언에 지정된 위치를 분석하기 위해 xsl:import-schema 선언의 기본 URI를 사용하는 것입니다.
프로시저
XFactory 클래스에서 setSchemaResolver 메소드를 사용하여 스키마 분석기를 등록하십시오.
getSchema 메소드는 java.util.List 인터페이스의 인스턴스를 리턴합니다. 이는 특정 네임스페이스에 대한 스키마 컴포넌트의 정의를 여러 개별 스키마 문서에서 분할할 수 있기 때문입니다. getSchema 메소드를 사용하여 지정된 모든 위치 힌트와 연관된 특정 대상 네임스페이스의 모든 스키마 문서를 리턴할 수 있습니다.
예
다음은 스키마 분석기를 사용하는 기본 예제입니다.
XFactory factory = XFactory.newInstance();
// Set validating to true.
factory.setValidating(true);
// Create the schema resolver and register it with the factory.
factory.setSchemaResolver(new ASchemaResolver(replacementBase));
// Prepare the stylesheet.
XSLTExecutable executable = factory.prepareXSLT(new StreamSource(stylesheetFile));
// Execute the transformation.
Source source = new StreamSource(inputFile);
Result result = new StreamResult(System.out);
executable.execute(source, result);
다음은
XSchemaResolver 구현의 기본 예제입니다.
class ASchemaResolver implements XSchemaResolver
{
String _replacementBase;
public ASchemaResolver(String replacementBase)
{
_replacementBase=replacementBase;
}
// Resolve URI, returning the Source that URI represents.
// Implements the "rebase:" pseudo-scheme.
public List<? extends Source> getSchema(String namespace, List<String> locations, String baseURI) {
String rebasePrefix="rebase:";
List<StreamSource> list = new ArrayList<StreamSource>();
for (int i = 0; i < locations.size(); i++) {
String href = locations.get(i);
String base = baseURI;
if(href.startsWith(rebasePrefix)) {
href=href.substring(rebasePrefix.length());
base=_replacementBase;
}
java.net.URI uri;
StreamSource source=null;
try {
// Get base URI object
uri = new java.net.URI(base);
// Resolved relative reference against base URI
URI resolvedURI = uri.resolve(href);
// Try to read...
source = new StreamSource(resolvedURI.toString());
} catch (java.net.URISyntaxException use) {
throw new RuntimeException(use);
}
list.add(source);
}
return list;
}
}