JavaTM Platform
Standard Ed. 6

org.xml.sax.ext
인터페이스 EntityResolver2

모든 슈퍼 인터페이스:
EntityResolver
기존의 구현 클래스의 일람:
DefaultHandler2


public interface EntityResolver2
extends EntityResolver

외부 엔티티 참조를 입력 소스에 매핑 하거나 부족하는 외부 부분집합을 제공하거나 하는 확장 인터페이스입니다. XMLReader.setEntityResolver() 메소드를 사용해 퍼서에게 이 인터페이스의 구현을 제공합니다. 퍼서가 이 인터페이스의 메소드를 사용하는 경우, 낡은 SAX 1.0 EntityResolver.resolveEntity() 메소드는 아니고, 이 인터페이스의 EntityResolver2.resolveEntity() 메소드를 사용합니다.

이 모듈은, 원시 코드, 문서 모두 공개 도메인에 놓여져 있습니다. 따라서, 내용에 관한보증은 일절 제공되지 않습니다.

외부 엔티티를 위해서(때문에) 이 인터페이스를 정의하도록(듯이) 커스터마이즈 할 필요가 있는 경우, SAX 어플리케이션은 「true」(기능이 인식되었을 경우의 디폴트 값)로 설정된 「http://xml.org/sax/features/use-entity-resolver2」기능 플래그를 가지는 XMLReader 를 사용할 필요가 있습니다. 그 플래그가 인식되지 않는 경우나 그 값이 false 의 경우, 또는 리절버가 이 인터페이스를 구현하지 않는 경우에는,EntityResolver 메소드만을 사용합니다.

이 인터페이스는 엔티티 해결을 변경하는 3 종류의 어플리케이션을 지원합니다. 「Old Style」어플리케이션은 이 인터페이스에 대해서는 인식하지 않고, EntityResolver 를 제공합니다. 「Transitional Mode」는 EntityResolver2 를 제공해, EntityResolver2 를 지원하는 모든 시스템 (퍼서 또는 그 외의 툴)에 있는 메소드의 이점을 자동적으로 얻을 수 있습니다 (다상성이기 때문에). 「Old Style」어플리케이션도 「Transitional Mode」어플리케이션도 SAX2 퍼서와 함께 동작합니다. 「New style」어플리케이션은, SAX2 퍼서상 이외에서는 이 특정의 기능을 지원할 수 없습니다. 원의 SAX 1.0 스타이르엔티티 해결 메소드가 불려 갔을 경우, 이러한 어플리케이션은 기능 플래그가 「true」의 값을 가지도록(듯이) 요구해, 제공하는 EntityResolver2 구현에 의해 예외를 throw 할 수 있습니다.

도입된 버젼:
SAX 2.0 (extensions 1.1 alpha)
관련 항목:
XMLReader.setEntityResolver(org.xml.sax.EntityResolver)

메소드의 개요
 InputSource getExternalSubset (String  name, String  baseURI)
          어플리케이션은, 명확하게 정의하고 있지 않는 문서의 외부 부분집합을 제공할 수 있습니다.
 InputSource resolveEntity (String  name, String  publicId, String  baseURI, String  systemId)
          어플리케이션은 외부 엔티티 참조를 입력 소스에 매핑 하는지, 일반적인 URI 해결을 사용하도록(듯이) 퍼서에게 통지할 수 있습니다.
 
인터페이스 org.xml.sax. EntityResolver 로부터 상속된 메소드
resolveEntity
 

메소드의 상세

getExternalSubset

InputSource  getExternalSubset(String  name,
                              String  baseURI)
                              throws SAXException ,
                                     IOException 
어플리케이션은, 명확하게 정의하고 있지 않는 문서의 외부 부분집합을 제공할 수 있습니다. 외부 부분집합을 생략 하는 DOCTYPE 선언 첨부의 문서는, 검증, 엔티티의 처리, 속성의 처리 (정규화, 디폴트 설정, ID 를 포함한 형태를 리포트한다)에 사용할 수 있는 선언을 늘릴 수가 있습니다. 이 콜백은, 모든 내부 부분집합 데이터나 에러가 보고되기 전에 행해지기 (위해)때문에, 이 확장 기능은 startDTD() 를 통해 벌써 문서에는 외부 부분집합이 포함되어 있었는지와 같이 보고됩니다.

또, 이 메소드는 DOCTYPE 선언을 가지지 않는 문서에도 사용할 수 있습니다. 루트 요소가 검출되어도 DOCTYPE 선언이 발견되지 않았던 경우에 이 메소드가 불려 갑니다. 외부 부분집합의 값을 돌려주는 경우, 이 루트 요소는 루트 요소로서 선언되어 무효가 되는 문서의 최초로 DOCTYPE 선언을 잇는 효과를 가져옵니다. 그 퍼서 콜백의 순서는 논리적이게는 다음의 케이스와 닮아 있습니다.

 ... comments and PIs from the prolog (as usual)
 startDTD ("rootName", source.getPublicId (), source.getSystemId ());
 startEntity ("[dtd]");
 ... declarations, comments, and PIs from the external subset
 endEntity ("[dtd]");
 endDTD ();
 ... then the rest of the document (as usual)
 startElement (..., "rootName", ...);
 

InputSource 에서는 더 이상의 해결은 취득되지 않습니다. 이 메소드를 구현하는 것으로 resolveEntity() 를 호출해 DTD 엔티티의 로컬 캐쉬를 사용하는 등의 이점을 얻을 수 있습니다. 또, 타당성을 검증하지 않고, 외부 파라메이타엔티티를 포함하지 않은 프로세서에서는 이 메소드를 사용할 수 없습니다.

외부 엔티티에 대해서 바람직하지 않은 네트워크 액세스를 항상 요구하는 XML 프로세서와 호환성이 있는 경우, 이 메소드에 사용하면(자) 데이터의 검증도 용이하게 됩니다. 또, 다른 이유에는 DTD 이외의 정책를 임포트 합니다. 타당성을 검증할 수 없는 원인에는, 문서에 DTD 를 포함하도록(듯이) 요구합니다. 이것에 의해 속성이 마을 없게 처리됩니다. 예를 들어, XPath 프로세서는, 넓게 사용되고 있는 참조의 형태를 처리하기 전에 형태 「ID」를 가지는 속성을 인식할 필요가 있습니다.

경고: 외부 부분집합을 돌려주면(자) 입력 문서가 변경됩니다. 일반의 엔티티에 정의를 주는 것에 의해 부정한 문서를 정형할 수 있습니다.

파라미터:
name - 문서의 루트 요소의 식별. 이용 가능한 DOCTYPE 선언 또는 실제의 루트 요소로부터의 이름
baseURI - 문서의 기저 URI. 외부 서브 텍스트를 선택하는 추가 힌트로서 기능한다. XMLReader 에는 InputSource 만이 지정되었기 때문에 null 가 아닌 한 항상 절대 URI 이다
반환값:
퍼서에 의해 사용되는 새로운 외부 부분집합을 기술하는 InputSource 객체. 외부 부분집합이 제공되지 않는 경우는 null 가 나타난다
예외:
SAXException - SAX 예외. 다른 예외를 랩 하고 있을 가능성이 있다
IOException - 새로운 InputStream 나 Reader, 또는 부정한 URL 의 작성 실패를 나타내고 있을 가능성이 있다

resolveEntity

InputSource  resolveEntity(String  name,
                          String  publicId,
                          String  baseURI,
                          String  systemId)
                          throws SAXException ,
                                 IOException 
어플리케이션은 외부 엔티티 참조를 입력 소스에 매핑 하는지, 일반적인 URI 해결을 사용하도록(듯이) 퍼서에게 통지할 수 있습니다. 이 메소드는, 올바르게 선언된 외부 엔티티인 만큼 요구됩니다. 이 메소드는 EntityResolver 인터페이스에 비해 유연성이 있어,OASIS XML Catalogs 스펙으로 정의되었던 것보다 복잡한 카탈로그 schema의 구현을 지원합니다.

이 리절버 메소드를 사용하도록(듯이) 설정된 퍼서는, 리절버 메소드를 호출해 XML 텍스트의 참조에 의해 포함되어 있는 외부 엔티티에 사용하는 입력 소스를 결정합니다. 그 경우, 문서 엔티티와 getExternalSubset() 에 의해 반환된 외부 엔티티는 제외됩니다. 타당성을 검증할 수 없는 프로세서가 기능 플래그를 사용해 엔티티 (파라메이타엔티티 또는 일반 엔티티)의 클래스를 포함하지 않게 설정되어 있으면(자), 이 메소드는 그러한 엔티티에서는 불려 가지 않습니다.

여기서 사용되는 엔티티 명명 schema는,LexicalHandler 또는 ContentHandler.skippedEntity() 메소드로 사용되는 것 것과 같습니다.

파라미터:
name - 해결되는 외부 엔티티의 식별. 외부 부분집합의 「[dtd]」나 파라메이타엔티티를 나타내는 「%」로 개시되는 이름, 또는 그 이외의 일반 엔티티의 이름. SAX2 퍼서에 의해 불려 가는 경우는 null 가 아닌
publicId - 참조되는 외부 엔티티의 공개 식별자 (XML 스펙으로 요구되도록(듯이) 정규화되고 있다). 제공되지 않았던 경우는 null
baseURI - 상대적인 systemID 를 기준으로 한 URI 의 해석. XMLReader 는 InputSource 로 지정된 가능성이 있으므로, null 가 아닌 한 항상 절대 URI. 이 URI 는, 관련하는 선언을 개시하는 「<」에 관련지을 수 있고 있는 XML 스펙에 의해 정의되는
systemId - 참조되는 외부 엔티티의 시스템 식별자. 상대 또는 절대 URI. SAX2 퍼서에 의해 불려 가는 경우는 null 는 아니고, 선언된 엔티티와 외부 부분집합만이, 그러한 퍼서에 의해 해결된다
반환값:
퍼서에 의해 사용되는 새로운 입력 소스를 기술하는 InputSource 객체. null 를 돌려주는 것에 의해, 기저 URI 에 대한 시스템 ID 를 해결해, 결과적으로 얻을 수 있는 URI 에 연결하도록(듯이) 퍼서에게 지시한다
예외:
SAXException - SAX 예외. 다른 예외를 랩 하고 있을 가능성이 있다
IOException - 새로운 InputStream 나 Reader, 또는 부정한 URL 의 작성 실패를 나타내고 있을 가능성이 있다

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.