맨위로가기

SXML

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

SXML은 XML 정보 집합을 S-표현식으로 표현하는 방식이다. 기존 XML 처리 언어의 한계를 해결하기 위해 Scheme 언어를 활용하여 개발되었으며, XML의 시작/종료 태그를 괄호로 대체한 형태를 갖는다. SXML은 XML 정보 집합의 완전한 인스턴스화로, Scheme 프로그래밍 언어를 통해 XML 데이터를 쉽고 자연스럽게 처리할 수 있도록 설계되었다. SXML은 XML 문서와 그 노드를 S식으로 표현하여 Scheme 프로그램으로 활용 가능하며, 데이터 구조의 유연성과 쿼리 및 변환의 단순성을 제공한다. 그러나 단방향 연결 리스트 기반으로, 특정 쿼리 작업에 단점을 가진다.

더 읽어볼만한 페이지

  • 기술 소통 - 교열
    교열은 글의 명확성과 정확성을 높이기 위해 문법, 용법, 내용, 구성 요소 간의 관계 등을 고려하여 오류를 수정하고 재구성하는 복잡한 과정으로, 디지털 환경 변화에 따라 역할이 재정립되고 있다.
  • 기술 소통 - 국제화와 지역화
    국제화는 소프트웨어를 다양한 언어와 지역을 지원하도록 설계하는 과정이며, 지역화는 특정 언어와 지역에 맞춰 조정하는 과정으로, 문자 인코딩, 날짜/시간 형식, 통화, 법적 규제, 문화적 차이 등을 고려하여 제품을 적응시키는 것을 의미한다.
  • 마크업 언어 - HTML
    HTML은 웹 페이지 제작을 위한 표준 마크업 언어로서, 팀 버너스리가 제안하고 구현한 후 인터넷 발전과 함께 널리 사용되며, SGML에 기반하여 하이퍼텍스트 기능으로 다양한 콘텐츠를 표현하고 연결하며, W3C와 WHATWG에서 표준화를 진행하고 최신 버전은 HTML Living Standard이다.
  • 마크업 언어 - XAML
    XAML은 마이크로소프트에서 개발한 XML 기반의 마크업 언어로, 사용자 인터페이스, 데이터 바인딩, 이벤트 처리 등을 정의하며 WPF, Silverlight, WF, WinRT API 앱, Xamarin.Forms 등에서 UI 개발에 널리 사용된다.
SXML - [IT 관련 정보]에 관한 문서
기본 정보
나우루 국기
국기
위치태평양
일반 정보
공식 명칭나우루 공화국
영어 명칭Republic of Nauru
나우루어 명칭Repubrikin Naoero
수도야렌 (사실상)
공용어나우루어
영어
면적21 km²
인구약 10,876명 (2019년)
통화오스트레일리아 달러 (AUD)
정치
정치 체제공화국
대통령데이비드 아데앙
역사
독립1968년 1월 31일 (영국으로부터)
기타 정보
국가 코드NR
국가 도메인.nr
국제 전화 코드+674

2. 개발 동기

XML 데이터 처리 언어는 예를 들어 XPath, XSLT, XQueryW3 컨소시엄에 의해 제안되었다. 그러나, 이것들은 범용적인 프로그래밍 언어가 아니며, 애플리케이션의 전부를 구현하기에는 불충분하다.

이러한 이유로, 대부분의 XML 애플리케이션은 C나 자바와 같은 전통적인 프로그래밍 언어, 혹은 , 자바스크립트파이썬과 같은 스크립트 언어를 사용하여 구현된다.

두 개의 다른 언어 (예를 들어, XPath와 자바)를 결합하는 시도는, 임피던스 불일치(Impedance Mismatch)로 알려진 문제를 일으킨다. 임피던스 불일치는 두 가지 측면으로 구성된다:



임피던스 불일치는 복잡한 변환기와, 두 언어를 연결하는 데 사용하는 API (예: DOM)를 요구한다.

임피던스 불일치 문제를 경감하거나 없애기 위해, Scheme 함수형 프로그래밍 언어를 XML 데이터 처리에 사용할 수 있다[5]:

  • 중첩된 리스트 (Scheme에서의 S식)는 중첩된 XML 문서의 자연스러운 표현을 제공한다. Scheme은 코드와 데이터를 동적 타입의 요소의 중첩된 리스트로 표현하고, XML 문서 (중첩된 XML 요소의 계층 구조로 구성됨)는 계층적인 중첩된 Scheme 리스트(소위 S식)로 생각할 수 있다.
  • Scheme은 대부분의 XML 용 언어 (예: XSLT와 XQuery)와 마찬가지로 함수형 언어이다. Scheme은 (중첩된) 리스트를 재귀적인 방법으로 처리한다. 이 방법은 문서 트리를 탐색/변환하는 처리로 생각할 수도 있다.


Scheme (LISP의 방언)은 광의의 스크립트 언어이다. Scheme은 실제로 사용되는 가장 세련되고 컴팩트한 프로그래밍 언어 중 하나이다: Scheme 표준의 설명은 불과 40 페이지이다. Scheme은 고수준 언어이며, 빠른 프로토타입에 적합하다. 게다가 Scheme 프로그램은 일반적으로 동일한 기능의 C 프로그램보다 몇 배나 더 컴팩트하다.

XML과 SXML의 글자 모양은 매우 비슷하다: 비공식적으로, SXML은 XML의 시작/종료 태그를 여는/닫는 괄호로 대체한다. 한편, SXML은 S식이며, 따라서 Scheme 프로그래밍 언어의 주요 데이터 구조이며, 결과적으로 Scheme을 통해 쉽고 자연스럽게 처리할 수 있다.

3. XML, XML 정보 집합과 SXML

XML 문서는 본질적으로 트리 구조를 가진다. 문서 전체를 감싸는 루트 요소를 시작으로, 내부에 다른 요소들이나 문자 데이터가 중첩되어 포함되는 형태이다.

W3C는 XML 정보 집합(XML Information Set, Infoset)을 추상 데이터 집합으로 정의했다. 정보 집합은 정형(well-formed) XML 문서에서 사용할 수 있는 정보를 기술한다. XML 문서의 정보 집합은 여러 "정보 항목(information item)"으로 구성되는데, 이는 요소, 속성, 문자 정보, 처리 명령 등 문서의 각 구성 요소를 나타낸다. 각각의 정보 항목은 이름, 네임스페이스 URI 등 관련된 여러 속성을 가진다. 예를 들어, 어떤 정보 항목의 속성 중에는 자식 요소나 속성처럼 다른 정보 항목들의 컬렉션인 것도 있다.

XML 정보 집합의 목표는 모든 관련 데이터의 형식과 추상화, 그리고 데이터 간의 관계를 정의하는 것이다. 이는 다른 사양들이 XML 문서 내의 정보를 일관되게 참조할 수 있도록 최소한의 정보와 속성 세트를 제공하는 것을 목적으로 한다. W3C의 모든 XML 관련 사양은 이 정보 집합에서 정의된 추상 데이터 모델을 기반으로 한다. 예를 들어, DOM은 정보 항목을 다루기 위한 API로 볼 수 있고, XPath 데이터 모델은 정보 항목에서 파생된 노드의 개념을 활용한다. 즉, DOM과 XPath 데이터 모델은 XML 정보 집합의 구체적인 두 가지 인스턴스라고 할 수 있다. XML 정보 집합 자체는 특정 데이터 구조나 정보 항목에 접근하는 인터페이스를 규정하지는 않는다. 따라서 정보 집합을 트리 구조로 보고, '정보 집합'과 '정보 항목'을 각각 일반적인 '트리'와 '노드'로 해석하는 등 다양한 방식으로 추상 데이터 모델을 구체화할 수 있다.

SXML은 이러한 XML 정보 집합을 S-표현식을 사용하여 완전히 구현한 것이다. S-표현식은 중첩된 리스트 구조를 가지는데, 이는 XML의 계층적인 구조를 자연스럽게 표현할 수 있다. SXML은 S-표현식을 통해 정보 집합의 중첩된 컨테이너 구조를 구체화하고, 각 정보 항목과 그 속성에 접근할 수 있는 방법을 제공한다. 이런 점에서 SXML은 XML 정보 집합의 또 다른 데이터 모델인 XPath나 DOM과 유사한 관계를 가진다고 볼 수 있다. 특히 SXML은 Scheme 프로그래밍 언어를 기반으로 XML이나 HTML 문서를 다루거나, XPath 쿼리를 실행하고, 트리 구조를 변환하는 작업에 적합하다.[5]

결론적으로, XML과 SXML은 동일한 XML 정보 집합이라는 추상적인 데이터 모델을 바탕으로 하지만, 이를 표현하는 문법적인 방식이 다른 두 가지 표현이라고 할 수 있다.

4. SXML 사양

SXML은 XML 정보 집합을 S-표현식 형식으로 완전히 인스턴스화한 것이다.[1] SXML 사양에 기반하여 SXML 문법과 특징을 설명한다.[1]

간결한 SXML의 문법은 EBNF 표기법으로 다음과 같이 나타낼 수 있다.[1] 여기서 ``은 단일 Scheme 심볼이다.[1]



[1] ::= ( *TOP* * )

[2] ::= ( ? * )

[3] ::= ( @ * )

[4] ::= ( "value"? )

[5] ::= | "character data" |

[6] ::= ( *PI* pi-target "processing instruction content string" )



XML 정보 집합의 각 정보 항목은 속성의 집합을 가지므로, 리스트는 SXML에서 정보 항목을 표현하기에 적합한 데이터 구조이다.[1] 리스트의 첫 번째 요소인 Scheme 식별자는 정보 항목의 이름(확장된 이름 포함)을 나타낸다.[1]

XML 요소에 해당하는 정보 항목은 요소 이름으로 시작하는 리스트로 표현된다. 이 리스트에는 선택적으로 속성 모음이 뒤따를 수 있으며, 나머지는 요소의 자식 요소, 문자 데이터, 처리 명령 등이 순서대로 나열된다.[1] 모든 자식 요소는 고유하며, 다른 항목과 공유되지 않는다.[1]

속성 집합은 `@`라는 특별한 이름으로 태그된 리스트로 표현된다.[1] `@` 문자는 정형(well-formed) XML 문서의 이름에 나타날 수 없으므로, 속성 리스트(``)가 요소를 나타내는 리스트와 혼동될 염려가 없다.[1] XML 문서는 요소에 속성, 처리 명령 등 메타데이터를 마크업하지만, SXML에서는 요소와 메타데이터가 모두 태그된 리스트로 통일적으로 표현된다.[1] 이는 RELAX NG와 같이 속성과 요소를 통일적으로 취급하려는 시도와 유사하며, 제임스 클라크는 이를 언어 단순화의 징후로 보았다.[1]

SXML의 장점 중 하나는 모든 XML 이름이 유효한 Scheme 식별자이지만, 그 역은 성립하지 않는다는 점이다.[1] 이 덕분에 `@`, `*PI*`, `*TOP*`과 같은 관리용 이름을 실제 XML 이름과 충돌할 걱정 없이 도입할 수 있다.[1] 이는 XML과 SXML 간의 관계를 명확하게 정의하며, SXML로 변환된 XML 문서는 정보 집합의 범위 내에서 동등한 XML 문서로 다시 변환될 수 있다.[1] SXML 자체도 정보 집합 사양에서 허용하는 구현 재량 범위 내에서 정보 집합의 인스턴스이다.[1]

XML 권고안은 처리 명령(PI)이 요소 및 문자 데이터와 구별되어야 하며 애플리케이션에 전달되어야 한다고 명시한다.[1] 따라서 SXML에서는 PI를 `*PI*`라는 전용 노드 유형으로 표현한다.[1] 이는 XPath나 DOM Level 2에서 처리 명령을 다루는 방식과 유사하다.[1]

SXML은 주석, XML 네임스페이스, 외부 엔티티를 포함하여 XML 문서에 포함된 모든 정보를 표현할 수 있다.[1] (이러한 세부 사항은 SXML 사양에서 다루어진다.[1])

4. 1. SXML 예시

다음은 간단한 XHTML 페이지 예시이다.




xml:lang="en" lang="en">



An example page





Hi, there!



This is just an ">>example<<" to show XHTML & SXML.









이 페이지를 SXML로 변환하면 다음과 같다.



(*TOP* (@ (*NAMESPACES* (x "http://www.w3.org/1999/xhtml")))

(x:html (@ (xml:lang "en") (lang "en"))

(x:head

(x:title "An example page"))

(x:body

(x:h1 (@ (id "greeting")) "Hi, there")

(x:p "This is just an \">>example<<\" to show XHTML & SXML."))))



XML 요소의 태그 쌍은 괄호로 묶인 리스트로 대체된다. 여는 태그의 이름이 리스트의 첫 번째 심볼이 되며, 닫는 태그는 필요 없다. 요소의 내용은 태그 이름 심볼 뒤에 오며, 다른 요소이거나 문자열일 수 있다. XML 속성은 SXML에서 특별한 문법 없이 `@`라는 특수한 이름을 가진 노드로 표현된다. `@`는 XML에서 유효한 태그 이름이 아니므로 실제 XML 태그 이름과 충돌하지 않는다. 이는 SXML의 일반적인 패턴으로, XML에서 불가능하거나 특별한 상태를 나타내는 이름(`@`, `*PI*`, `*TOP*` 등)은 유효한 XML 식별자가 아닌 이름을 사용한다.

SXML 문자열에서는 문자열 구분 기호인 `"` (`\"`로 이스케이프 처리)와 이스케이프 문자 자체인 `\` (`\\`로 이스케이프 처리)만 이스케이프하면 된다. 반면, 위의 XML 예시에서는 `&`, `<`, `>` 문자를 각각 `&`, `<`, `>`로 이스케이프해야 했다. SXML에서는 문자열 내용이 태그나 엔티티로 해석될 여지 없이 순수하게 내용으로 간주되므로, XML에서 필요한 `&`나 `>` 같은 엔티티 참조 표기가 필요 없다. 이는 자동으로 생성된 내용을 삽입할 때 이스케이프 처리를 잊어 발생할 수 있는 크로스 사이트 스크립팅 같은 문제를 방지하는 데 도움이 된다.

다음은 XML 요소와 그에 해당하는 SXML 표현을 비교한 또 다른 예시이다. 속성 표현 방식과 중첩 구조를 보여준다.

XMLSXML



위 예시에서 `certified` 속성처럼 부울형 속성은 SXML에서 값을 생략하고 이름만 표시할 수 있다.

다음은 더 복잡한 XML 문서와 그에 해당하는 SXML 표현을 비교한 예시이다. SXML 문서가 동등한 XML보다 약간 더 간결함을 확인할 수 있다.

XMLSXML



SXML은 XML 문서를 파싱하여 얻는 추상 구문 트리로 볼 수 있다. Scheme 언어의 XML 파싱 프레임워크인 SSAX를 사용하면 XML 문서나 정형화된(well-formed) XML 조각을 해당 SXML 형식으로 자동으로 변환할 수 있다.

5. SXML의 특징

SXML은 XML 정보 집합의 S-표현식에 의한 완전한 인스턴스이다. 즉, XML 문서가 가진 정보(요소, 속성, 내용 등)를 LISP 계열 언어에서 주로 사용하는 S-표현식 형식으로 나타낸 것이다. XML과 SXML은 XML 정보 집합에 대한 두 가지 다른 문법적 표현이라고 볼 수 있다.

SXML은 XML에 비해 몇 가지 특징을 가진다.


  • 통일적인 표현: XML에서는 요소, 속성, 처리 명령 등을 다른 방식으로 표현하지만, SXML에서는 이들을 모두 리스트(list) 형태로 통일하여 표현한다. 각 리스트의 첫 번째 항목은 요소 이름, 속성 목록을 나타내는 특수 기호(@), 또는 처리 명령을 나타내는 특수 기호(*PI*) 등이 된다. 이러한 통일성은 RELAX NG와 같은 다른 XML 기술에서도 추구하는 방향이며, 데이터 구조를 단순화하고 일관성 있게 다룰 수 있게 한다.
  • 예를 들어, XML 요소 `content`는 SXML에서 `(element (@ (attribute "value")) "content")`와 같이 표현된다. 속성은 @ 기호로 시작하는 리스트 안에 표현된다.
  • @, *PI*, *TOP*과 같이 XML 이름으로 사용할 수 없는 특수 기호를 사용하여 SXML 내부 구조를 표현하므로, 실제 XML 태그 이름과 충돌할 염려가 없다.

  • 간결성 및 변환 용이성: SXML은 일반적으로 동일한 내용을 표현하는 XML보다 간결하다. 또한 XPath나 DOM과 유사하게 XML 데이터 모델을 표현하지만, S-표현식 기반이므로 Scheme과 같은 언어에서 처리하기 용이하다. SSAX와 같은 파서를 사용하면 XML 문서를 SXML 형식으로 쉽게 변환할 수 있으며, 반대로 SXML에서 동등한 XML 문서로 재구성하는 것도 가능하다 (정보 집합 범위 내에서).

  • 데이터 재구성의 유연성: 요소와 속성을 모두 리스트 형태로 다루기 때문에, 특정 정보를 요소로 표현할지 속성으로 표현할지 변경하는 것이 비교적 간단하다. 예를 들어, 무게 정보를 요소의 내용으로 표현하다가 속성으로 변경해야 할 경우, SXML에서는 해당 리스트를 속성 목록(@ 리스트) 안으로 옮기기만 하면 된다.



; 무게를 요소 내용으로 표현

(delivery

...

(weight "789"))

; 무게를 속성으로 표현

(delivery

(@ (weight "789"))

...)



이러한 유연성은 데이터 구조 변경에 따른 애플리케이션 수정을 최소화하고, 데이터 쿼리 방식을 통일적으로 유지하는 데 도움을 준다.

  • 속성 처리의 편리성: SXML에서 속성 목록은 `(@ (속성1 값1) (속성2 값2) ...)` 형태의 리스트로 표현된다. 이 리스트에서 @를 제외한 나머지 부분(cdr)은 연상 리스트(association list) 구조를 가지므로, LISP 계열 언어의 내장 함수(예: Scheme의 `assoc`)를 사용하여 특정 속성 값을 쉽게 찾고 처리할 수 있다.

  • 트리 구조와 노드: XML 문서처럼 SXML 문서도 본질적으로 트리 구조를 가진다. SXML에서는 이 트리를 구성하는 요소, 속성 목록, 속성, 텍스트 데이터, 처리 명령 등을 통칭하여 SXML 노드(Node)라고 부른다. 모든 노드는 S-표현식 리스트 또는 문자열로 표현되므로, 트리 전체를 일관된 방식으로 탐색하고 조작할 수 있다. SXML 노드는 다음과 같은 EBNF 문법으로 정의될 수 있다.



[N] ::= | | | "character data: text string" | |



또는 상호 재귀적인 데이터 타입으로 정의할 수도 있다.



[N1] ::= ( . ) | "text string"

[N2] ::= ( * )

[N3] ::= | @ | *TOP* | *PI*


5. 1. Scheme 프로그램으로서의 SXML

LISP 계열 프로그래밍 언어의 문법, 특히 Scheme은 데이터와 코드 표현 모두에 사용되는 S식에 기반한다. 이 특징 덕분에 Scheme 프로그램은 반구조화된 데이터처럼 다루거나, 반대로 데이터를 프로그램처럼 다루는 것이 편리하다.

SXML 문서와 그 노드는 S식이므로, Scheme 프로그램을 표현하는 데 사용될 수 있다. 이를 위한 충분조건은 SXML 트리 내 리스트의 첫 번째 멤버가 함수여야 한다는 것이다. 매크로를 사용하면 더 많은 기능을 구현할 수 있다. 리스트의 나머지 멤버는 인수가 되어 함수에 전달된다. SXML 문법에 따라 속성과 요소 이름, 특수 이름은 함수와 연결되어야 한다.

이러한 조건을 만족하는 SXML 문서나 노드는 평가 가능한 Scheme 프로그램으로 간주될 수 있으며, 예를 들어 eval 함수를 사용하여 평가할 수 있다.

예를 들어, `para`와 `bold`가 다음과 같은 함수로 정의되어 있다고 가정해보자.

(define (para . x) (cons 'p x))

(define (bold . x) (cons 'b x))

이 경우, 다음 SXML 요소는 프로그램으로 취급될 수 있다.

(para "plain"

(bold "highlighted")

"plain")

이 프로그램의 평가 결과는 다음과 같은 SXML 요소이다.

(p "plain"

(b "highlighted")

"plain")

프로그램 평가 결과가 반드시 SXML 요소일 필요는 없다. 주로 프로그램은 XML이나 HTML 형식의 원본 데이터 표현을 반환하거나, SXML 데이터를 관계형 데이터베이스에 저장하는 것과 같은 부작용을 일으킬 수 있다.

6. SXML의 단점

SXML은 리스트 표현의 근본이 단방향 리스트이기 때문에, 특정 노드가 자신의 앞에 있는 형제 노드나 부모 노드에 접근할 방법이 없다. 대부분의 DOM이나 XPath에서의 트리 순회(traverse) 연산은 SXML에서도 문제없이 가능하지만, 부모 노드로부터 각 노드의 위치를 파악하거나, 이미 순회한 자식 노드의 인덱스를 알거나, 현재 노드의 경로를 추적하는 등의 조작은 할 수 없다.

또한, SXML은 DOM의 "NodeList.item"이나 XPath의 "[]" 접근자처럼 특정 위치의 노드를 직접 쿼리하는 데는 적합하지 않다. 이는 원하는 노드를 찾기 위해 리스트의 처음부터 n번째 노드까지 순차적으로 따라가야 하므로, 처리 시간이 O(n)에 비례하여 소요되기 때문이다. 반면, 벡터나 배열을 사용하는 방식은 특정 위치에 직접 접근할 수 있어 O(1)의 시간 복잡도를 가진다.

이러한 특성 때문에 SXML과 유사한 S 표현식 기반의 XML 표현 형식들은 순차적인 처리에 더 적합하다. 예를 들어, SAX 방식의 이벤트 처리나 XML 문서에 속성을 추가하고 직렬화하는 작업 등에 유리하다. SXML로 가능한 변환 처리는 제한적인데, 주로 이전 형제 노드나 부모 노드에 대한 정보가 필요하지 않은 경우, 또는 스택과 같은 복잡한 구조를 사용하지 않는 단순한 변환 처리에 국한된다.

참조

[1] 간행물 SXML Specification
[2] 콘퍼런스 XML, XPath, XSLT Implementations as SXML, SXPath, and SXSLT http://okmij.org/ftp[...]
[3] 콘퍼런스 SXSLT: Manipulation Language for XML
[4] 웹사이트 XML Matters: Investigating SXML and SSAX http://www-106.ibm.c[...] 2003-10-23
[5] 문서 "SXML: an XML document as an S-expression" http://modis.ispras.[...] IIS
[6] 저널 SXML Specification
[7] 콘퍼런스 XML, XPath, XSLT Implementations as SXML, SXPath, and SXSLT http://okmij.org/ftp[...]
[8] 콘퍼런스 SXSLT: Manipulation Language for XML
[9] 웹인용 XML Matters: Investigating SXML and SSAX http://www-106.ibm.c[...] 2003-10-23



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com