JavaTM Platform
Standard Ed. 6

org.xml.sax.helpers
클래스 NamespaceSupport

java.lang.Object 
  상위를 확장 org.xml.sax.helpers.NamespaceSupport


public class NamespaceSupport
extends Object

SAX 를 사용하는 어플리케이션에 의하고, 또 내부적으로는 SAX 드라이버에 의해 사용하는 이름 공간 논리를 캡슐화합니다.

이 모듈은, 원시 코드, 문서 모두 공개 도메인에 놓여져 있습니다. 따라서, 내용에 관한보증은 일절 제공되지 않습니다. 상세한 것에 대하여는,http://www.saxproject.org 를 참조해 주세요.

이 클래스는 이름 공간 처리의 논리를 캡슐화합니다. 이 클래스를 사용해, 각 문맥으로 현재 유효한 선언을 추적해, XML 수식명으로부터 자동적으로 이름 공간 부분을 생성할 수 있습니다. 이름 공간을 생성원의 XML qname 에 되돌릴 수도 있습니다.

이름 공간 지원 객체는 재사용 가능합니다만, 다음의 세션까지의 사이에 reset 메소드를 호출할 필요가 있습니다.

다음에, 단순한 세션의 예를 나타냅니다.

 String parts[] = new String[3];
 NamespaceSupport support = new NamespaceSupport();

 support.pushContext();
 support.declarePrefix("", "http://www.w3.org/1999/xhtml");
 support.declarePrefix("dc", "http://www.purl.org/dc#");

 parts = support.processName("p", parts, false);
 System.out.println("Namespace URI:" + parts[0]);
 System.out.println("Local name:" + parts[1]);
 System.out.println("Raw name:" + parts[2]);

 parts = support.processName("dc:title", parts, false);
 System.out.println("Namespace URI:" + parts[0]);
 System.out.println("Local name:" + parts[1]);
 System.out.println("Raw name:" + parts[2]);

 support.popContext();
 

이 클래스는, 이름 공간 선언을 포함한 요소가 거의 없는 것을 상정해 최적화되고 있습니다. 따라서, 모든 문맥으로 동일한 접두사와 URI 의 매핑이 반복해지는 것 같은 경우는, 효율이 낮아질 가능성이 있습니다.

SAX 드라이버 (퍼서)는 이 클래스를 선택해 이름 공간 처리를 구현하는 경우가 있습니다만, 이것은 요구되지 않습니다. 어플리케이션이 이름 공간 정보를 사용하는 경우는, 어플리케이션 자체가 이름 공간 정보를 추적할 필요가 있습니다.

도입된 버젼:
SAX 2.0

필드의 개요
static String NSDECL
          정수로서의 이름 공간 선언 URI 를 나타냅니다.
static String XMLNS
          정수로 XML 이름 공간 URI 를 나타냅니다.
 
생성자 의 개요
NamespaceSupport ()
          새로운 이름 공간 지원 객체를 작성합니다.
 
메소드의 개요
 boolean declarePrefix (String  prefix, String  uri)
          이름 공간앞치수식자를 선언합니다.
 Enumeration getDeclaredPrefixes ()
          이 문맥내에 선언 떠날 수 있어 모든 전치수식자의 열거를 돌려줍니다.
 String getPrefix (String  uri)
          이름 공간 URI 에 매핑 되고 있기 전치수식자를 1 개 돌려줍니다.
 Enumeration getPrefixes ()
          현재의 문맥내에서 선언이 액티브한, 모든 접두사의 열거를 돌려줍니다.
 Enumeration getPrefixes (String  uri)
          현재의 문맥내에서 선언이 액티브하게 되어 있는 지정된 URI 의 모든 접두사의 열거를 돌려줍니다.
 String getURI (String  prefix)
          전치수식자를 검색해, 현재 매핑 되고 있는 이름 공간 URI 를 가져옵니다.
 boolean isNamespaceDeclUris ()
          이름 공간 선언의 속성이 이름 공간에 배치되었을 경우는 true 를 돌려줍니다.
 void popContext ()
          이전의 이름 공간 문맥에 되돌립니다.
 String [] processName (String  qName, String [] parts, boolean isAttribute)
          현재의 문맥내의 모든 선언이 declarePrefix() 에 의해 처리된 뒤, raw XML 의 수식명을 처리합니다.
 void pushContext ()
          새로운 이름 공간 문맥을 개시합니다.
 void reset ()
          이 이름 공간 지원 객체를 재사용하기 위해(때문에), 리셋 합니다.
 void setNamespaceDeclUris (boolean value)
          이름 공간 선언의 속성이 processName() 에 의해 NSDECL 이름 공간에 배치될지 어떨지를 제어합니다.
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 

필드의 상세

XMLNS

public static final String  XMLNS
정수로 XML 이름 공간 URI 를 나타냅니다. 「Namespaces in XML*」권고로 정의되고 있는 값은 http://www.w3.org/XML/1998/namespace 입니다.

이것은, 「xml」접두사에 자동적으로 매핑 되는 이름 공간 URI 입니다.

관련 항목:
정수 필드치

NSDECL

public static final String  NSDECL
정수로서의 이름 공간 선언 URI 를 나타냅니다. 「Namespaces in XML」권고에 대해서 하위 호환성이 없는 정오표로 정의되고 있는 값은 http://www.w3.org/xmlns/2000/ 입니다. 이 정오표는 SAX2 이후의 것이므로, SAX2 는 원의 권고에는 디폴트로 설정해, 일반적으로은 이 URI 는 사용하지 않습니다.

이것은, 「xmlns」속성과 「xmlns:*」속성에 옵션으로 적용되는 이름 공간 URI 입니다. 이름 공간 선언에 사용합니다.

도입된 버젼:
SAX 2.1alpha
관련 항목:
setNamespaceDeclUris(boolean) , isNamespaceDeclUris() , 정수 필드치
생성자 의 상세

NamespaceSupport

public NamespaceSupport()
새로운 이름 공간 지원 객체를 작성합니다.

메소드의 상세

reset

public void reset()
이 이름 공간 지원 객체를 재사용하기 위해(때문에), 리셋 합니다.

이름 공간 지원 객체를 새로운 세션으로 재사용하기 전에, 이 메소드를 호출할 필요가 있습니다. 이름 공간 선언 URI 를 지원하는 경우는, 그 플래그도 디폴트 이외의 값으로 설정할 필요가 있습니다.

관련 항목:
setNamespaceDeclUris(boolean)

pushContext

public void pushContext()
새로운 이름 공간 문맥을 개시합니다. 새로운 문맥은 친문맥의 선언을 자동적으로 상속합니다만, 이 문맥내에서 작성된 선언도 계속해 추적합니다.

이벤트 콜백 코드는, 요소 마다 한 번만 새로운 문맥을 개시할 필요가 있습니다. 즉, 2 개소중 어느 쪽인지로 이것을 호출할 준비를 합니다. 이름 공간 선언을 포함하지 않는 요소의 경우, 「ContentHandler.startElement()」콜백이 올바른 장소입니다. 이러한 선언을 가지는 요소의 경우, 최초의 「ContentHandler.startPrefixMapping()」콜백으로 행해집니다. 문맥이 벌써 개시되었는지 어떠했는지는 boolean 플래그를 사용해 추적할 수 있습니다. 메소드의 어느 쪽인지가 불려 갔을 경우, 플래그를 체크해, 새로운 문맥을 개시할 필요가 있을지 어떨지를 봅니다. 개시할 필요가 있는 경우는, 문맥을 개시해 플래그를 설정합니다. 「ContentHandler.startElement()」는, 이것을 실시한 뒤 반드시 플래그를 클리어 합니다.

일반적으로, SAX 드라이버는, 새로운 문맥을 각 XML 요소의 선두에 푸쉬 합니다. 그리고, 최초로 속성의 패스를 실행해 모든 이름 공간 선언을 처리해, 「ContentHandler.startPrefixMapping()」콜백을 실시합니다. 다음에, 2 번째의 패스로 모든 속성 및 요소명의 이름 공간 수식명을 결정합니다. 이것에 의해, 「ContentHandler.startElement()」콜백의 모든 정보를 사용할 수 있어 실행 가능하게 됩니다.

이름 공간 지원 객체는, 벌써 유효하게 되어 있는 베이스 문맥으로 개시합니다. 이 문맥에 선언되고 있는 것은 「xml」접두사 뿐입니다.

관련 항목:
ContentHandler , popContext()

popContext

public void popContext()
이전의 이름 공간 문맥에 되돌립니다.

일반적으로은, 각 XML 요소의 끝나에 문맥을 팝 할 필요가 있습니다. 문맥을 팝 하면(자), 이전에 유효했던 모든 이름 공간 접두사 매핑이 복원됩니다.

문맥을 팝 한 뒤, 새롭게 이름 공간 접두사를 선언할 필요가 있는 경우는, 그 전에 반드시 다른 문맥을 푸쉬 해 주세요.

관련 항목:
pushContext()

declarePrefix

public boolean declarePrefix(String  prefix,
                             String  uri)
이름 공간앞치수식자를 선언합니다. 모든 접두사는 참조되기 전에 선언될 필요가 있습니다. 예를 들어, SAX 드라이버 (퍼서)는 2 살의 패스의 요소의 속성을 스캔 합니다. 최초의 패스는 이름 공간 선언의 패스로, 이제(벌써) 1 개(살)은 processName() 를 사용해, 재정의될 가능성이 있는 접두사에 대해서 접두사를 해석하는 패스입니다.

이 메소드는, 현재의 이름 공간 문맥내에 접두사를 선언합니다. 이 접두사는, 하위 문맥으로 그림자화 되지 않는 한, 현재의 문맥이 팝 될 때까지 유효합니다.

디폴트에 의한 요소의 이름 공간을 선언하려면 , 공문자열을 접두사로서 사용합니다.

이 라이브러리에는 비대칭성이 있습니다. 디폴트에 의한 요소의 이름 공간을 선언해도,getPrefix 는 접두사 "" 를 돌려주지 않습니다. 디폴트의 이름 공간을 확인할 필요가 있는 경우는,getURI 를 사용해 명시적으로 검색을 실시해 주세요. 이 비대칭성에 의해, 디폴트의 접두사를 사용할 수 없는 환경에서도, 속성명으로부터 접두사를 검색하기 쉬워지고 있습니다.

파라미터:
prefix - 선언하는 접두사, 또는 디폴트에 의한 요소의 이름 공간을 나타내는 공문자열. 값 「xml」또는 「xmlns」를 가지지 않는 경우가 있는
uri - 전치수식자에 관련짓는 이름 공간 URI
반환값:
전치수식자가 정당한 경우는 true, 그렇지 않은 경우는 false
관련 항목:
processName(java.lang.String, java.lang.String[], boolean) , getURI(java.lang.String) , getPrefix(java.lang.String)

processName

public String [] processName(String  qName,
                            String [] parts,
                            boolean isAttribute)
현재의 문맥내의 모든 선언이 declarePrefix() 에 의해 처리된 뒤, raw XML 의 수식명을 처리합니다.

이 메소드는, 접두사를 삭제해, 그것을 현재 선언되고 있는 접두사내에서 검색하는 것에 의해 현재의 문맥내에서 raw XML 수식명을 처리합니다. 반환값은 호출해 옆으로부터 제공된 배열이 되어, 다음과 같이 할당할 수 있습니다.

parts[0]
이름 공간 URI. 사용되어 있지 않은 경우는 공문자열
parts[1]
로컬명 (전치수식자 없음)
parts[2]
원의 raw 명

배열내의 모든 캐릭터 라인이 내부화 됩니다. raw 명에 아직 선언되어 있지 않은 접두사가 포함되어 있는 경우, 반환값은 null 가 됩니다.

속성명의 처리 방법은 요소명의 처리 방법과는 다릅니다. 접두사를 가지지 않는 요소명이 디폴트의 이름 공간 (존재하는 경우)을 받는데 대해, 접두사를 가지지 않는 속성명은 이것을 받지 않습니다.

파라미터:
qName - 처리되는 XML 수식명
parts - 호출원이 지정한 배열 (3 개 이상의 멤버를 포함할 수 있다)
isAttribute - 속성명 (true)일까 요소명 (false) 인지를 나타내는 플래그
반환값:
이름 공간 URI 또는 공문자열, 로컬명, 및 XML 수식명을 나타내는, 3 개의 내부화 된 캐릭터 라인이 포함된 주어진(given) 배열. 미선언의 접두사가 있는 경우는 null
관련 항목:
declarePrefix(java.lang.String, java.lang.String) , String.intern()

getURI

public String  getURI(String  prefix)
전치수식자를 검색해, 현재 매핑 되고 있는 이름 공간 URI 를 가져옵니다.

이 메소드는, 현재의 문맥내에서 접두사를 검색합니다. 디폴트의 이름 공간을 검색하는 경우는 공문자열 ("")을 사용합니다.

파라미터:
prefix - 검색하기 전치수식자
반환값:
관련 이름 공간 URI. 접두사가 이 문맥내에서 선언되어 있지 않은 경우는 null
관련 항목:
getPrefix(java.lang.String) , getPrefixes()

getPrefixes

public Enumeration  getPrefixes()
현재의 문맥내에서 선언이 액티브한, 모든 접두사의 열거를 돌려줍니다. 여기에는, 오버라이드(override)되어 있지 않은 친문맥의 선언도 포함됩니다.

주: 디폴트의 접두사는, 반환값의 열거에 돌려주어지지 않습니다. 디폴트의 접두사를 확인하는 경우는, 인수 "" 를 지정해 getURI 를 사용해 주세요.

반환값:
접두사의 열거 (빈 상태(empty) 이외)
관련 항목:
getDeclaredPrefixes() , getURI(java.lang.String)

getPrefix

public String  getPrefix(String  uri)
이름 공간 URI 에 매핑 되고 있기 전치수식자를 1 개 돌려줍니다.

같은 URI 에 복수의 접두사가 매핑 되고 있는 경우, 이 메소드는 그 중에서 무작위로 1 개를 돌려줍니다. 모든 접두사를 확인하는 경우는, 이 메소드는 아니고 getPrefixes() 메소드를 사용해 주세요.

주: 이 메소드는, 빈 상태(empty) (디폴트)의 접두사를 돌려주지 않습니다. 디폴트의 접두사를 확인하는 경우는, 인수 "" 를 지정해 getURI 를 사용해 주세요.

파라미터:
uri - 이름 공간 URI
반환값:
지정의 URI 에 현재 매핑 되고 있는 접두사 가운데 1 개. 현재 매핑 되고 있는 접두사가 없는 경우, 또는 URI 가 디폴트의 이름 공간에 할당할 수 있고 있는 경우는 null
관련 항목:
getPrefixes(java.lang.String) , getURI(java.lang.String)

getPrefixes

public Enumeration  getPrefixes(String  uri)
현재의 문맥내에서 선언이 액티브하게 되어 있는 지정된 URI 의 모든 접두사의 열거를 돌려줍니다. 여기에는, 오버라이드(override)되어 있지 않은 친문맥의 선언도 포함됩니다.

이 메소드는 특정의 이름 공간 URI 에 매핑 되고 있는 접두사를 돌려줍니다. 반환값에는, 접두사 xml: 가 포함됩니다. 이름 공간 URI 에 매핑 되고 있는 접두사를 무작위로 1 개만 취득하는 경우는, 이 메소드는 아니고 getPrefix 메소드를 사용합니다.

주: 공 (디폴트)의 접두사는, 반환값의 열거에 포함되지 않습니다. 디폴트의 이름 공간의 존재를 확인하는 경우는, 인수 "" 를 지정해 getURI 를 사용해 주세요.

파라미터:
uri - 이름 공간 URI
반환값:
접두사의 열거 (빈 상태(empty) 이외)
관련 항목:
getPrefix(java.lang.String) , getDeclaredPrefixes() , getURI(java.lang.String)

getDeclaredPrefixes

public Enumeration  getDeclaredPrefixes()
이 문맥내에 선언 떠날 수 있어 모든 전치수식자의 열거를 돌려줍니다.

getPrefix(java.lang.String)getPrefixes() 를 사용하는 경우와는 달라, 반환값의 열거에는, 빈 상태(empty) (디폴트)의 접두사도 포함됩니다.

반환값:
이 문맥내에 선언 떠날 수 있어 모든 접두사의 열거
관련 항목:
getPrefixes() , getURI(java.lang.String)

setNamespaceDeclUris

public void setNamespaceDeclUris(boolean value)
이름 공간 선언의 속성이 processName() 에 의해 NSDECL 이름 공간에 배치될지 어떨지를 제어합니다. 이 변경은, 모든 문맥이 푸쉬 되기 전에게만 실시할 수가 있습니다.

예외:
IllegalStateException - 문맥이 푸쉬 된 뒤로 설정하려고 했을 경우
도입된 버젼:
SAX 2.1alpha

isNamespaceDeclUris

public boolean isNamespaceDeclUris()
이름 공간 선언의 속성이 이름 공간에 배치되었을 경우는 true 를 돌려줍니다. 이 동작은 디폴트에 의하는 것이 아닙니다.

도입된 버젼:
SAX 2.1alpha

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 도 참조해 주세요.