MathML
| 인터넷 미디어 타입 | application/mathml+xml, application/mathml-presentation+xml, application/mathml-content+xml, math/mml |
|---|---|
| 개발 | 월드 와이드 웹 컨소시엄 |
| 포맷 종류 | 마크업 언어 |
| 다음으로부터 확장 | XML |
| 표준 | W3C MathML |
MathML(Mathematical Markup Language)은 XML 응용 중 하나로 수학 수식을 표현하고, 그 구조와 내용을 파악하기 위한 마크업 언어이다. 월드 와이드 웹 페이지 및 다른 문서들에 수식을 통합하는 것을 목적으로 한다. W3C 매스(math) 워킹 그룹의 권고이며 HTML5의 일부이다.
표현과 의미
[편집]MathML은 표현만을 다루지 않으며 수식의 의미 요소도 다룬다(후자를 "내용Content MathML”이라 한다). 수식의 의미는 표현과는 별개로 보존되므로, 내용이 어떻게 소통되는지는 사용자에게 맡겨진다. 예를 들어 MathML 내장 웹 페이지는 많은 브라우저들에서 정상 웹 페이지로 보이지만, 시각장애인 사용자는 스크린 리더 (인터넷 익스플로러용 매스플레이어 플러그인, 오페라 9.50 빌드 9656 이상, 파이어폭스용 파이어 복스 확장 등)를 이용하여 MathML 읽기를 제공받을 수 있다.
표현 MathML
[편집]표현 MathML은 수식의 화면 표시에 집중하며, 30여 가지의 엘리먼트들이 있다. 이들 엘리먼트의 이름은 모두 m으로 시작한다. 표현 MathML 식은 토큰들이 모여 구성되며, 레이아웃을 조절하는 고수준 엘리먼트에 의해 조합된다. (50여 종의 애트리뷰트 또한 존재하는데, 이들은 주로 미세 조정에 쓰인다.).
토큰 엘리먼트들은 일반적으로 문자만을 포함한다(즉 다른 엘리먼트를 포함하지 않는다). 다음을 포함한다:
<mi>x</mi>– 식별자;<mo>+</mo>– 연산자;<mn>2</mn>– 숫자.<mtext>non zero</mtext>– 텍스트.
이들 토큰 엘리먼트들은 호스트 언어에서 마크업을 허용하는 확장점으로 쓰일 수도 있다는 것에 주의하라. HTML5에서의 MathML은 mtext에서 대부분의 HTML 마크업을 허용한다. 즉,
<mtext><b>non</b> zero</mtext>
와 같이, HTML 마크업을 MathML 내에 내장된 텍스트를 꾸미는 데 쓸 수도 있다(이 예제에서는 첫 번째 단어를 굵게 처리한다).
이들은 레이아웃 엘리먼트를 이용하여 조합된다:
<mrow>– 항목들로 이루어진 가로 행;<msup>,<munderover>등 – 위첨자, limits over and under operators like sums, etc.;<mfrac>– 분수;<msqrt>and<mroot>– 근호;<mfenced>- 내용을 괄호(예를 들어 소괄호)로 감싼다.
HTML이나 XML에서처럼, 특별한 기호나 이름을 나타내는 데 쓸 수 있는 많은 엔티티(entities)가 있다. 예를 들어 π, → 등이다. 한 가지 흥미로운 MathML의 기능은, 일반적으로 보이지 않는 연산자를 표현하기 위한 엔티티도 존재한다는 것이다. 암묵적인 곱셈연산자(implicit multiplication) ⁢ 가 그 예이다. 그 외에 다음과 같은 것들이 있다:
U+2061 FUNCTION APPLICATION; U+2062 INVISIBLE TIMES; U+2063 INVISIBLE SEPARATOR; U+2064 INVISIBLE PLUS. 완전한 MathML 엔티티 명세는 에 있으며, HTML 및 XML에서의 일반적인 사용을 위한 연관 명세()와 밀접히 연관되어 있다.
따라서, 수식 는 두 개의 레이아웃 엘리먼트를 필요로 한다: 하나는 전체적인 수평 행을, 다른 하나는 지수 표현을 위한 위첨자 행을 생성한다. 레이아웃 엘리먼트와 토큰만을 포함시키면, 구조는 다음과 같이 될 것이다:
<mrow>
a ⁢ <msup>x 2</msup>
+ b ⁢ x
+ c
</mrow>
그러나 개별 토큰들은 식별자(mi), 연산자(mo), 숫자(mn)로 구별되어야 한다. 토큰 마크업을 추가하면, 완성된 양식은 아래와 같다:
<mrow>
<mi>a</mi> <mo>⁢</mo> <msup><mi>x</mi><mn>2</mn></msup>
<mo>+</mo><mi>b</mi><mo>⁢</mo><mi>x</mi>
<mo>+</mo><mi>c</mi>
</mrow>
유효한 MathML 문서는 전형적으로 XML 선언, DOCTYPE 선언, document 엘리먼트로 이루어진다. 그리고 document body는 <math> 엘리먼트 속에 나타나는 MathML 표현식을 포함한다. MathML이 HTML, DocBook, 다른 XML 스키마 같은 더 일반적인 문서에 포함되는 일도 흔하다. 위의 MathML 예제만으로 이루어진 완전한 문서는 아래와 같다:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN"
"http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<mi>a</mi>
<mo>⁢</mo>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<mi>b</mi>
<mo>⁢ </mo>
<mi>x</mi>
<mo>+</mo>
<mi>c</mi>
</mrow>
</math>
내용 MathML
[편집]내용 MathML은 수식의 모양보다는 내용에 집중한다. 내용 MathML의 중심은 함수 적용을 나타내는 <apply> 엘리먼트이다. 적용하는 함수는 <apply> 아래의 첫 번째 자식 엘리먼트(child element)이고, 나머지 자식 엘리먼트들은 피연산자(형식인수)이다. 내용 MathML은 적은 수의 애트리뷰트만을 사용한다.
식별자나 숫자 같은 토큰들은 표현 MathML에서처럼 개별적으로 마크업된다. 다만 ci나 cn 같은 엘리먼트로 표현된다. 연산자들은 단순히 다른 종류의 토큰이 되는 게 아니라, 특수 엘리먼트로 표현되는데, 이들의 수학적 의미는 MathML에 의해 인지된다. times, power 등이 그 예이다. 100개가 넘는 함수 및 연산자에 대응되는 엘리먼트가 있다(를 보라.).
예를 들어, <apply><sin/><ci>x</ci></apply>는 를 나타내며, <apply><plus/><ci>x</ci><cn>5</cn></apply>는 를 나타낸다. 연산자와 함수를 표현하는 엘리먼트들은 빈 엘리먼트(empty element)인데, 그 이유는 그들의 피연산자들이 <apply>를 포함하는 다른 엘리먼트이기 때문이다.
수식 는 아래와 같이 표현할 수 있다.
<math>
<apply>
<plus/>
<apply>
<times/>
<ci>a</ci>
<apply>
<power/>
<ci>x</ci>
<cn>2</cn>
</apply>
</apply>
<apply>
<times/>
<ci>b</ci>
<ci>x</ci>
</apply>
<ci>c</ci>
</apply>
</math>
내용 MathML은 Scheme 같은 functional language의 expressions와 거의 같은 구조이다. <apply>...</apply>는 Scheme의 (...)에 해당하고, 많은 연산자 및 함수들이 Scheme 함수에 대응된다. 이런 간단한 문자 변환과 개별 토큰의 태그 제거만으로, 위 예제를 아래와 같이 변환할 수 있다:
(plus (times a (power x 2)) (times b x) c)
이는 널리 알려진 XML 엘리먼트 구조와 LISP 또는 Scheme의 S-expressions 사이의 가까운 관계를 반영한다.[1][2]
예제 및 다른 형식과의 비교
[편집]이차 방정식의 근의 공식
은 LaTeX 문법으로는 다음처럼 나타낸다.
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
또다른 문서 마크업 언어인 troff/eqn에서는 다음처럼 나타낸다.
x={-b +- sqrt{b sup 2 - 4ac}} over 2a
오픈오피스 수식편집에서는 다음 두 가지 방법으로 나타낸다.
x={-b plusminus sqrt {b^2 - 4 ac}} over {2 a}
x={-b +- sqrt {b^2 - 4ac}} over 2a
이 수식을 표현 MathML로는 다음처럼 나타낼 수 있다.
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>x</mi>
<mo>=</mo>
<mfrac>
<mrow>
<mrow>
<mo>-</mo>
<mi>b</mi>
</mrow>
<mo>±</mo>
<msqrt>
<msup>
<mi>b</mi>
<mn>2</mn>
</msup>
<mo>-</mo>
<mrow>
<mn>4</mn>
<mo>⁢</mo>
<mi>a</mi>
<mo>⁢</mo>
<mi>c</mi>
</mrow>
</msqrt>
</mrow>
<mrow>
<mn>2</mn>
<mo>⁢</mo>
<mi>a</mi>
</mrow>
</mfrac>
</math>
내용 MathML로는 다음과 같다.
<apply>
<eq/>
<ci>x</ci>
<apply>
<divide/>
<apply>
<csymbol>±</csymbol>
<apply>
<minus/>
<ci>b</ci>
</apply>
<apply>
<root/>
<degree><cn>2</cn></degree>
<apply>
<minus/>
<apply>
<power/>
<ci>b</ci>
<cn>2</cn>
</apply>
<apply>
<times/>
<cn>4</cn>
<ci>a</ci>
<ci>c</ci>
</apply>
</apply>
</apply>
</apply>
<apply>
<times/>
<cn>2</cn>
<ci>a</ci>
</apply>
</apply>
</apply>
MathML을 HTML/XHTML 파일에 포함시키기
[편집]MathML은 XML이므로 다른 XML 파일에 삽입될 수 있다. Firefox 3+나 Opera 9.6+(불완전하게 지원) 같은 최신 브라우저들은 XHTML에 포함된 표현 MathML을 화면에 표시할 수 있다.