- Xee는 Rust로 개발된 XML 실행 엔진으로, 최신 버전의 XPath 3.1과 XSLT 3.0을 지원함
- XPath는 XML 쿼리 언어이며, XSLT는 XML 문서를 다른 문서로 변환하는 언어
- 커맨드라인 도구
xee와 Rust 라이브러리xee-xpath로 구성되어 있으며, XPath 쿼리를 실행할 수 있음 - Rust의 성능과 통합 가능성을 바탕으로 다양한 언어에 확장 가능함 (예: PHP 바인딩 존재)
- 향후 WebAssembly(WASM)로 브라우저에서도 실행 가능할 것으로 기대
XML의 역사와 현재 위치
- XML은 1990년대 말에 등장했고, 2000년대 초반까지는 매우 인기 있었던 기술임
- 이후 JSON 등의 등장으로 대세는 아니지만, 여전히 많은 데이터 저장 및 전송에 사용되며, 문서 형식(docbook, JATS)이나 웹의 일부(SVG, MathML) 등에서 많이 사용됨
- XML은 여전히 중요한 기술로 남아 있으며, Xee는 XML 기술의 현대화를 목표로 함
- 개발자가 Python용 XML 라이브러리
lxml을 만든 경험을을 보유하고 있어, Rust와 XML 모두를 잘 아는 희귀한 개발자로서 Xee를 통해 XML 세계에 복귀하게 됨
XPath와 XSLT는 완전한 프로그래밍 언어
- XPath는 XML을 탐색하고 쿼리하는 언어이며, 함수형 언어로서 변수, 조건문, 반복문, 함수 정의 등을 포함함
- XSLT는 템플릿 기반의 변환 언어로, XPath를 내장 표현식 언어로 사용하며 XML을 다른 형식으로 변환함
- 두 언어 모두 강력한 기능을 갖춘 정식 프로그래밍 언어임
현재 XML 오픈소스 스택의 한계
- Java 생태계에는 최신 XPath/XSLT 구현체로 Saxon이 존재하며, 다양한 언어 바인딩과 JavaScript 런타임도 제공됨
- 반면 대부분의 리눅스 배포판 등에서는
libxml2와libxslt를 기본 제공함 - 이들 C 라이브러리는 XPath 1.0과 XSLT 1.0만 지원하며, 1999년에 나온 사양에 머물러 있음
- 최신 사양을 지원하는 오픈소스 대안이 부족한 상황에서, Xee는 Rust로 작성된 현대적인 대안을 제시함
XML 세계의 명세 중심 문화
- XML 커뮤니티는 명세 중심 문화가 강함 → 기능이 명세에 없으면 '진짜' 기능으로 간주하지 않음
- 덕분에 개발 속도는 느리지만, 기반은 매우 견고함
- XPath와 XQuery의 REST 프레임워크인 RESTXQ가 2012년에 논의되었고, 2024년까지도 사양 업데이트 논의 중임
Xee의 언어 구현 아키텍처
Crafting Interpreters책을 참고하여 구현됨- XPath는 토큰화 → AST → 중간 표현(IR) → 바이트코드 → 인터프리터 실행의 단계를 거침
- 이 바이트코드 인터프리터는 Python, Java 등에서 사용하는 스택 머신과 유사함
- XSLT도 같은 아키텍처 기반으로 구현되며, 프론트엔드만 다르고 나머지 구성 요소는 XPath와 동일하게 사용
방대한 XML/XPath/XSLT 명세의 세계
- XPath 3.1과 XSLT 3.0은 1.0 버전에 비해 훨씬 복잡해지고 기능이 많아졌음
- 구현을 위해 참조해야 할 명세 문서만 1800페이지가 넘으며, 다양한 사양이 상호 의존함
- 예를 들어:
XPath 3.1,XQuery/XPath 데이터 모델,함수 및 연산자,XML Schema(구조/데이터타입)XSLT 3.0,직렬화 사양,XML 네임스페이스,XML Base,xml:id등- 정규표현식 기능도 포함되어 있어 별도 regex 엔진도 구현함 → regexml
Xee의 현재 구현 상태
- XPath 3.1의 코어 언어 및 대부분의 표준 라이브러리 구현 완료
- 표준 라이브러리의 일부 포맷 관련 함수는 아직 미구현
- XPath 3.1 호환성 테스트에서 21859개 중 20130개 테스트 통과 (약 92%)
- 테스트는 약 13초 내에 모두 실행됨 → 매우 빠른 성능
- XSLT는 아직 완성되지 않았지만 기반 구조는 마련되어 있어 확장 가능
기여자 모집
- Rust와 XML에 관심 있는 개발자, 프로그래밍 언어 구현 또는 쿼리 최적화에 흥미 있는 분들 환영
- 스펙 기반 기능 구현, 최적화 작업, 쿼리 성능 개선 등 다양한 영역에서 기여 가능
- Xee는 Java 생태계 외의 현대적 XML 구현체로서 오픈소스 커뮤니티의 지원이 필요한 시점임
나는 아직도 힙하다. 비록 XML을 다루지만.