|
JavaTM Platform Standard Ed. 6 |
|||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
public interface ContentHandler
문서의 논리 컨텐츠의 통지를 받습니다.
이 모듈은, 원시 코드, 문서 모두 공개 도메인에 놓여져 있습니다. 따라서, 내용에 관한보증은 일절 제공되지 않습니다. 상세한 것에 대하여는,http://www.saxproject.org 를 참조해 주세요.
대부분의 SAX 어플리케이션이, 이 인터페이스를 구현하고 있습니다. 표준의 구문 분석 이벤트의 통지를 받을 필요가 있는 경우, 어플리케이션은 이 인터페이스를 구현해, org.xml.sax.XMLReader#setContentHandler setContentHandler 메소드를 사용해 인스턴스를 SAX 퍼서에게 등록합니다. 퍼서는 이 인스턴스를 사용해, 요소나 문자 데이터의 개시, 종료라고 하는 표준의 문서 관련 이벤트를 보고합니다.
이 인터페이스내의 이벤트의 순서는, 문서 자체에 포함되는 정보의 순서를 밀러화한 것이어, 매우 중요합니다. 예를 들어, 어느 요소의 전컨텐츠 (문자 데이터, 처리 명령, 서브 요소등)는, startElement 이벤트와 이것에 대응하는 endElement 이벤트의 사이에 차례로 늘어놓을 수 있습니다.
이 인터페이스는, 현재는비추천으로 지정되고 있는 SAX 1.0 의 DocumentHandler 인터페이스와 닮아 있습니다만, 새롭게 이름 공간의 지원와 타당성을 검증하지 않는 XML 프로세서로 스킵 된 엔티티의 보고의 지원가 추가되고 있습니다.
구현자는,java.net
패키지에 ContentHandler
클래스가 포함되어 있는 점을 고려해, 다음과 같은 처리는 반드시 피해 주세요.
import java.net. *; import org.xml.sax. *;
일반적으로, 「import ...*」(을)를 사용한 프로그램은, 엉성한 (sloppy) 프로그램이라고 보여집니다. 사용자는, 버그보다 이 점에 주위를 기울일 필요가 있습니다.
XMLReader
,
DTDHandler
,
ErrorHandler
메소드의 개요 | |
---|---|
void |
characters (char[] ch,
int start,
int length)
문자 데이터의 통지를 받습니다. |
void |
endDocument ()
문서의 종료 통지를 받습니다. |
void |
endElement (String uri,
String localName,
String qName)
요소의 종료 통지를 받습니다. |
void |
endPrefixMapping (String prefix)
전치수식자와 URI 의 매핑의 스코프를 종료합니다. |
void |
ignorableWhitespace (char[] ch,
int start,
int length)
요소 컨텐츠에 포함되는 무시할 수 있는 공백 문자의 통지를 받습니다. |
void |
processingInstruction (String target,
String data)
처리 명령의 통지를 받습니다. |
void |
setDocumentLocator (Locator locator)
SAX 문서 이벤트의 발생원을 특정하는 객체를 받습니다. |
void |
skippedEntity (String name)
스킵 된 엔티티의 통지를 받습니다. |
void |
startDocument ()
문서의 개시 통지를 받습니다. |
void |
startElement (String uri,
String localName,
String qName,
Attributes atts)
요소의 개시 통지를 받습니다. |
void |
startPrefixMapping (String prefix,
String uri)
전치수식자와 URI 이름 공간 매핑의 스코프를 개시합니다. |
메소드의 상세 |
---|
void setDocumentLocator(Locator locator)
locator가 필요한 경우는, 필수 조건이 아닙니다만, SAX 퍼서를 사용하는 것을 강하게 추천합니다. SAX 퍼서는, ContentHandler 인터페이스내의 어느 메소드보다 먼저 이 메소드를 호출해, 어플리케이션에 locator를 제공합니다.
어플리케이션은, locator를 이용해, 퍼서가 에러를 보고하지 않는 경우에서도 문서 관련 이벤트의 종료 위치를 특정할 수가 있습니다. 일반적으로, 어플리케이션은 이 정보를 사용해 고유의 에러 (문자 컨텐츠가 어플리케이션의 기능 규칙에 따르지 않은 등)를 보고합니다. 일반적으로, locator로부터 반환되는 정보는 불충분하고, 검색 엔진에서의 사용에 적절하고 있지 않습니다.
locator는,startDocument
가 반환된 뒤,endDocument
가 불려 가기 전의 호출 SAX 이벤트 콜백중에 한해 적정한 정보를 돌려줍니다. 그 이외 때, 어플리케이션으로 locator의 정보를 이용해야 하는 것이 아닙니다.
locator
- SAX 문서 이벤트의 위치를
돌려주는 객체Locator
void startDocument() throws SAXException
SAX 퍼서는, 다른 이벤트가 콜백 되기 전에 1 회만 이 메소드를 호출합니다 (setDocumentLocator
이외).
SAXException
- SAX 예외.
다른 예외를 랩 하고 있을 가능성이 있는endDocument()
void endDocument() throws SAXException
이 메소드의 메뉴얼과 endDocument()
의 메뉴얼과의 사이에는 분명하게 모순이 있습니다. 클라이언트는, 향후의 메이저 릴리스로 이 애매함이 해결되지 않는 한, 퍼서가 fatalError()를 보고하거나 예외를 throw 했을 때에 endDocument()가 불려 갈지 어떨지를 가정하지 않게 할 필요가 있습니다.
SAX 퍼서는, 이 메소드를 구문 분석의 마지막에 1 회만 호출합니다. 회복 불가능한 에러에 의해 구문 분석이 도중에 파기되는지, 입력이 종료할 때까지, 이 메소드는 불려 가지 않습니다.
SAXException
- SAX 예외.
다른 예외를 랩 하고 있을 가능성이 있는startDocument()
void startPrefixMapping(String prefix, String uri) throws SAXException
일반적으로의 이름 공간 처리는 이벤트로부터 제공되는 정보를 필요로 하지 않습니다. SAX 의 XML 리더는,http://xml.org/sax/features/namespaces
기능의 값이 true (디폴트)로 설정되어 있으면(자), 요소 및 속성명의 접두사를 자동적으로 옮겨놓습니다.
그러나, 어플리케이션에 의해 문자 데이터나 속성치 중(안)에서 사용되는 경우, 접두사를 안전하게 전개할 수 없습니다. 이러한 어플리케이션에는, 필요에 따라서, start/endPrefixMapping 이벤트에 의해, 접두사를 어플리케이션 문맥내에서 확장하기 위해서 필요한 정보가 제공됩니다.
start/endPrefixMapping 이벤트가 각각 올바르게 상자로 될지 어떨지는 보증되지 않습니다. 모든 startPrefixMapping 이벤트는, 대응하는 startElement
이벤트의 전에 즉시 발생해, 모든 endPrefixMapping
이벤트는 대응하는 endElement
이벤트의 나중에 발생합니다만, 이러한 차례는 보증되고 있지 않습니다.
「xml」접두사는 사전에 선언되는 불변의 수식자이므로, 그 start/endPrefixMapping 이벤트는 존재하지 않습니다.
prefix
- 선언되는 이름 공간 접두사.
디폴트에 의한 요소의 이름 공간에 사용하는 공문자열
(접두사 없음)uri
- 접두사의 맵 사키나 마에조라간 URI
SAXException
- 처리중에 클라이언트가
예외를 throw 하는 일이 있는endPrefixMapping(java.lang.String)
,
startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
void endPrefixMapping(String prefix) throws SAXException
자세한 것은 startPrefixMapping
를 참조해 주세요. 이러한 이벤트는 항상, 대응하는 endElement
이벤트의 후에 곧 발생합니다만,endPrefixMapping
이벤트의 차례는 보증되고 있지 않습니다.
prefix
- 매핑 된 접두사.
디폴트 매핑의 스코프가 종료하는 경우는 공문자열이 된다
SAXException
- 처리중에 클라이언트가
예외를 throw 하는 일이 있는startPrefixMapping(java.lang.String, java.lang.String)
,
endElement(java.lang.String, java.lang.String, java.lang.String)
void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException
퍼서는 XML 문서내의 각 요소의 전으로 이 메소드를 호출합니다. 각 startElement 이벤트에는 대응하는 endElement
이벤트가 있습니다. 이것은, 요소가 빈 상태(empty)인 경우도 바뀌지 않습니다. 대응하는 endElement 이벤트의 전에, 요소의 컨텐츠 전부가 차례로 보고됩니다.
이 이벤트에서는, 각 요소에 최대 3 개의 이름 컴퍼넌트를 허가합니다.
http://xml.org/sax/features/namespaces 프로퍼티 및 http://xml.org/sax/features/namespace-prefixes 프로퍼티의 값에 의해, 이러한 언젠가, 또는 전부가 제공됩니다.
제공되는 속성 리스트에는, 명시적인 값 (지정된 값 또는 디폴트 값)을 가지는 속성만이 포함됩니다. #IMPLIED 속성은 포함되지 않습니다. 이 리스트에는,http://xml.org/sax/features/namespace-prefixes
프로퍼티이 true (디폴트의 설정은 false. true 의 지원는 옵션)인 경우에 한정해, 이름 공간 정의 (xmlns* 속성)에 사용되는 속성이 포함됩니다.
속성치는,characters()
와 같이 2 개 이상의 char
치를 필요로 하는 캐릭터 라인을 가지는 경우가 있습니다.
uri
- 이름 공간 URI.
요소가 이름 공간 URI 를 가지지 않는 경우,
또는 이름 공간 처리를 하지 않는 경우는 공문자열localName
- 접두사를 가지지 않는 로컬명.
이름 공간 처리를 하지 않는 경우는
공문자열qName
- 접두사를 가지는 수식명.
수식명을 사용할 수 없는 경우는 공문자열atts
- 요소에 추가된 속성. 속성이
존재하지 않는 경우,
빈 상태(empty)의 Attributes 객체. startElement 가 반환된 뒤의
이 객체의 값은 정의되지 않는다
SAXException
- SAX 예외.
다른 예외를 랩 하고 있을 가능성이 있는endElement(java.lang.String, java.lang.String, java.lang.String)
,
Attributes
,
AttributesImpl
void endElement(String uri, String localName, String qName) throws SAXException
SAX 퍼서는, XML 문서내의 각 요소의 마지막에 이 메소드를 호출합니다. 각 endElement 이벤트에는 대응하는 startElement
이벤트가 있습니다. 이것은, 요소가 빈 상태(empty)인 경우도 바뀌지 않습니다.
이름에 대해서는, startElement 를 참조해 주세요.
uri
- 이름 공간 URI.
요소가 이름 공간 URI 를 가지지 않는 경우,
또는 이름 공간 처리를 하지 않는 경우는 공문자열localName
- 접두사를 가지지 않는 로컬명.
이름 공간 처리를 하지 않는 경우는
공문자열qName
- 접두사를 가지는 XML 수식명.
수식명을 사용할 수 없는 경우는 공문자열
SAXException
- SAX 예외.
다른 예외를 랩 하고 있을 가능성이 있다void characters(char[] ch, int start, int length) throws SAXException
퍼서는, 이 메소드를 호출해, 각 문자 데이타체크를 보고합니다. SAX 퍼서는, 연속하는 문자 데이터를 단일의 체크로서 또는 몇개의 체크에 분할해 돌려줍니다. 다만, locator로부터 유익한 정보를 얻기 위해서(때문에)는, 단일의 이벤트에 포함되는 문자가 모두 같은 외부 엔티티의 것이 아니면 안됩니다.
어플리케이션은, 지정된 범위외의 배열을 읽어낼 수 없습니다.
각각의 캐릭터 라인은 2 개 이상의 Java char
치로 구성됩니다. 캐릭터 라인을 16 비트 이내에서 표시할 수 없기 때문에, 2 개(살)의 중요한 케이스가 발생합니다. 1 개(살)은, 캐릭터 라인이 2 개의 Unicode 치를 사용해 「Surrogate Pair」로 나타내지는 것입니다. 이러한 캐릭터 라인은 「Astral Planes」라고 불려 U+FFFF 보다 큰 코드 포인트를 가집니다. 이제(벌써) 1 개(살)은, 1 개(살) 이상의 엑센트 문자에 결합하고 있는 베이스 캐릭터 라인등의 합성 캐릭터 라인이 되는 것입니다.
char
-at-a-time 관용법을 사용하는 알고리즘은 캐릭터 라인을 분할하는 경우도 있으므로, 캐릭터 라인 단위로 처리하고 있으면(자) 상정 해서는 안됩니다. 이것은, XML 가 속성치, 처리 명령 데이터, 코멘트등의 임의의 캐릭터 라인이나, 이 메소드로부터 보고된 데이터내에 있는 임의의 캐릭터 라인을 허가하는 장소에 관련합니다. 또, 일반적으로는 Java 코드가 국제화 된 텍스트를 조작하는 장소에 관련합니다만, 발행은 XML 에 일의의 것이 아닙니다.
일부의 퍼서는, 이 메소드는 아니고 ignorableWhitespace
메소드를 사용해, 요소 컨텐츠에 포함되는 공백 문자를 보고합니다. 이것은, 타당성을 검증하는 퍼서에게 「필수」의 기능입니다.
ch
- XML 문서의 문자start
- 배열내의 개시 위치length
- 배열로부터 읽어내지는 문자수
SAXException
- SAX 예외.
다른 예외를 랩 하고 있을 가능성이 있는ignorableWhitespace(char[], int, int)
,
Locator
void ignorableWhitespace(char[] ch, int start, int length) throws SAXException
타당성을 검증하는 퍼서는, 이 메소드를 사용해, 요소 컨텐츠에 포함되는 공백 문자의 체크를 보고할 필요가 있습니다 (W3C XML 1.0 권고 섹션 2.10 을 참조). 타당성을 검사하지 않는 퍼서도, 컨텐츠 모델의 구문 분석 및 이용이 가능한 경우는, 이 메소드를 사용하는 경우가 있습니다.
SAX 퍼서는, 연속하는 모든 공백 문자를 단일의 체크로서 또는 복수의 체크에 분할해 돌려줍니다. 다만, locator로부터 유익한 정보를 얻기 위해서(때문에)는, 단일의 이벤트에 포함되는 문자가 모두 같은 외부 엔티티의 것이 아니면 안됩니다.
어플리케이션은, 지정된 범위외의 배열을 읽어낼 수 없습니다.
ch
- XML 문서의 문자start
- 배열내의 개시 위치length
- 배열로부터 읽어내지는 문자수
SAXException
- SAX 예외.
다른 예외를 랩 하고 있을 가능성이 있는characters(char[], int, int)
void processingInstruction(String target, String data) throws SAXException
퍼서는, 처리 명령을 검출할 때마다 1 회씩 이 메소드를 호출합니다. 처리 명령은, 메인의 문서 요소의 전후에 존재할 가능성이 있습니다.
SAX 퍼서가, 이 메소드를 사용해 XML 선언을 보고할 것은 없습니다 (XML 1.0, 섹션 2.8). 또, 텍스트 선언을 보고하는 일도 없습니다 (XML 1.0, 섹션 4.3. 1).
처리 명령 데이터는,characters()
와 같이 2 개 이상의 char
치를 필요로 하는 캐릭터 라인을 가지는 경우가 있습니다.
target
- 처리 명령의 타겟data
- 처리 명령을 받는 데이터.
데이터가 제공되지 않는 경우는 null. 데이터에는,
타겟과 자신을 구별하기 위한 공백 문자는 포함되지 않는다
SAXException
- SAX 예외.
다른 예외를 랩 하고 있을 가능성이 있다void skippedEntity(String name) throws SAXException
퍼서는, 엔티티가 스킵 될 때마다 1 회씩 이 메소드를 호출합니다. 타당성을 검증하지 않는 프로세서는, (엔티티가 외부 DTD 부분집합내에 정의되고 있는 등의 이유로써) 선언이 검출되지 않으면 엔티티를 스킵 합니다. 모든 프로세서는,http://xml.org/sax/features/external-general-entities
프로퍼티과 http://xml.org/sax/features/external-parameter-entities
프로퍼티의 값에 의해, 외부 엔티티를 스킵 할 가능성이 있습니다.
name
- 스킵 된 엔티티의 이름. 파라메이타엔티티의 경우,
이 이름은 「%」로 시작된다.
외부 DTD 부분집합의 경우,
캐릭터 라인 「[dtd]」로 시작된다
SAXException
- SAX 예외.
다른 예외를 랩 하고 있을 가능성이 있다
|
JavaTM Platform Standard Ed. 6 |
|||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.