Notes on XML

XML, XML Schema, Web Services 등을 다루면서 관련된 팁들을 정리하고 있습니다.

1. XML Catalog Management

XML의 DTD나 XML Schema 문서의 위치를 내부적으로(프로그래밍적으로) 해석하는 기본적인 방법은 EntityResolver를 직접 구현하는 것입니다.
EntityResolver에서 DTD의 public id나 system id를 찾거나 XML Schema의 system id를 찾아서 프로그램이 알고 있는 위치의 문서를 찾아주는 방법이 가장 손쉽게 적용할 수 있는 방법입니다.
하지만, 이것은 간단한 시스템인 경우 충분한 해결책이 될 수 있지만,(예를 들면 특정 디렉토리의 파일이나 JAR 파일 안의 특정 위치의 리소스를 읽어오도록 하는 방법) 복잡한 시스템의 경우에는 별도로 매핑 정보를 내부적으로 관리할 필요가 생깁니다.
이를 위해 XML의 Entity 혹은 URI를 프로그래밍적으로 해석하기 위한 표준적인 방법 중 하나로 XML Catalog가 OASIS에서 표준화되어 있습니다.
dtd의 public id나 system id를 해석해야 하거나, XML Schema의 schema location을 해석해야 하는 등 일종의 XML repository를 내부적으로 처리해야 하는 많은 프로그램에서 이러한 기능을 필요로 할 것입니다.

XML Catalogs Specification
Apache의 Xerces 파서(v2.6.1)가 이 표준에 대한 지원을 내장하고 있어서 사용하는 데 도움이 될 것 같습니다.

Using XML Catalogs

2. XML Parser and Document Model

DOM, JDOM, Dom4J 등 사용가능한 몇 가지 Doucment Model에 대한 비교가 있네요.
Sosnoski의 말대로 JDOM에 비해서는 Dom4J가 성능 면에서 훨씬 우수하고, 또 좀더 프로그래밍적인 측면에서 유연한 것 같습니다. 각 XML 요소들이 DOM과 Dom4J는 인터페이스로 선언이 되어 있고, JDOM은 클래스로 설계되어 있는데 실제 개발에서 부닥치게 되는 것은 인터페이스의 상속성이 클래스보다 훨씬 높기 때문에 코드가 깔끔해진다는 것입니다. 게다가 JDOM과 Dom4J가 모두 공개 소스 프로젝트이지만, JDOM은 contributor가 많지 않고 덜 활성화되어 있는 반면에 Dom4J가 좀더 활성화되고 점점 더 많은 프로젝트에 사용되는 것으로 보입니다.

XML and Java technologies: Java document model usage

아주 간단한 (흔히 사용되는) XML 문서를 파싱하는 데 Dom4J가 DOM이나 JDOM에 비해 두 배 이상 빨랐으며, DOM과 JDOM은 시간이 비슷하게 걸리긴 했지만, 예상밖으로 DOM이 조금 더 빨랐습니다. 사용한 XML 문서에 따라 차이가 있을 순 있겠지만, 예상밖의 결과가 나타나는 원인은 동일한 기능을 구현하는 데 JDOM이 좀더 클래스 캐스팅이나 instanceof 검사를 많이 요구하는 구조이기 때문인 것으로 생각됩니다.
- by yoonforh 2004-02-19 15:40:05

3. XPath using Jaxen

How to use Jaxen to implement custom XPath functions? Below is the answer from Jaxen intro slides.

Like most other things in XPath, there is a function context that contains the core library of functions. The set of functions available within an expression is extensible.

XSLT has added the document(url) function. Other technologies, such as XPointer and BPEL4WS add even more functions to the XPath function context.
An extensible function context is supported in jaxen through the FunctionContext interface.

package org.jaxen;
public interface FunctionContext
{
    Function getFunction(String namepsaceUri,
                         String prefix,
                         String localName)
        throws UnresolvableException;
}
The three parameters to the getFunction(...) method are:
  1. namespaceUri The namespace URI associated with the prefix as determined by the current NamespaceContext.
  2. prefix The actual prefix used in the XPath expression.
  3. localName The portion of the variable name that is not the namespace prefix.

Java XPath Engine : Jaxen
Introduction to XPath in Java using Jaxen

- by yoonforh 2004-02-20 01:11:41

4. XML reading/composing with Emacs

See excellent nxml-mode written by the famous XML guru, James Clark!!!
We can enjoy much more fun in our XML life!

Emacs Resources

- by yoonforh 2004-02-19 15:43:47


[Class Loader, Dynamic Proxy, XML, JDBC, JNDI, LDAP, Transaction, Security, Cryptography, SSL, Authentication, Login, Authorization, CORBA, RMI, RMI-IIOP, ... 본격적인 자바 개발자로 가기 위한 (책) 자바 2 SDK 1.4 시작 그리고 완성]

Yoon Kyung Koo <yoonforh at yahoo dot com>
이 페이지는 2004년 2월 12일에 처음 만들어졌습니다.
Last modified: Fri Feb 20 01:14:08 KST 2004