MathML là một Khuyến cáo của W3C định nghĩa một bảng từ vựng XML để đánh dấu các biểu thức toán học. Phiên bản 1 được công bố như là một Khuyến cáo của W3C vào năm 1998, ngay sau khi đặc tả XML được công bố. Ba phiên bản khác của MathML đã được công bố là các Khuyến cáo: MathML 1.01, MathML 2.0, và MathML 2.0 (ấn bản thứ hai) từ năm 2003 đã trở thành khuyến cáo MathML Chính thức. Phiên bản mới nhất, MathML 3.0, đang được chuẩn hóa gần đến các chặng cuối (và chờ để chuyển sang trạng thái Khuyến cáo Ứng viên vào tháng 12/2009). Trong bài này, chúng ta hãy khám phá một tổng quan về MathML, với nhấn mạnh đặc biệt vào các tính năng mới trong MathML 3.0.

David Carlisle, Tư vấn Kỹ thuật cao cấp, NAG ltd

David Carlisle là một Tư vấn Kỹ thuật Cấp cao của Công ty NAG tại Vương quốc Anh. Ông đã tham gia vào OpenMath và MathML từ năm 1998 và đã công tác với tư cách là đồng biên tập đặc tả kỹ thuật của cả MathML2 và MathML3. Trước khi làm việc về MathML ông là một thành viên cốt lõi của đội LaTeX3, đội này đã thiết kế và thực hiện hệ thống sắp chữ LaTeX2e. Ông cũng tham gia tích cực vào XSLT và tích cực hoạt động trên danh sách gửi thư xsl-list.



22 01 2011

Giới thiệu tóm tắt về MathML

Các từ viết tắt thường dùng

  • CSS: Các tờ định kiểu dáng xếp chồng
  • HTML: Ngôn ngữ Đánh dấu Siêu văn bản
  • ISO: Tổ chức Tiêu chuẩn hoá Quốc tế
  • MIME: Phần mở rộng thư tín internet đa mục tiêu
  • ODF: Định dạng Tài liệu Mở
  • OMML: Ngôn ngữ đánh dấu toán học của Office
  • OOXML: XML của Office Open
  • SGML: Ngôn ngữ đánh dấu mở rộng tiêu chuẩn
  • UI: Giao diện người sử dụng
  • URI: Mã nhận dạng tài nguyên đồng nhất
  • W3C: Hiệp hội World Wide Web
  • XHTML: Ngôn ngữ đánh dấu siêu văn bản mở rộng
  • XML: Ngôn ngữ đánh dấu mở rộng
  • XSL: Ngôn ngữ tờ định kiểu dáng mở rộng
  • XSL-FO: Các đối tượng định dạng của ngôn ngữ tờ định kiểu dáng mở rộng
  • XSLT: Các phép biến đổi ngôn ngữ tờ định kiểu dáng mở rộng

MathML là một bảng từ vựng XML dùng để đánh dấu tài liệu toán học, và nó gồm hai ngôn ngữ con: MathML Trình bày (presentation MathML) và MathML Nội dung (content MathML). MathML Trình bày chủ yếu quan tâm đến việc mô tả cách bài trí của một biểu thức toán học (và như vậy có thể so sánh với TeX, hoặc các ngôn ngữ đánh dấu SGML trước đây dùng cho toán học chẳng hạn như ISO 12083). MathML Nội dung chủ yếu quan tâm đến việc đánh dấu một số mặt ý nghĩa, hoặc ít nhất là cấu trúc toán học, của các biểu thức. Mặt này của MathML bị ảnh hưởng rất nhiều bởi ngôn ngữ OpenMath (xem phần Tài nguyên để nhận được liên kết) để đánh dấu ngữ nghĩa toán học, và trong MathML3 thì việc gióng theo OpenMath đã được thực hiện rõ ràng hơn rất nhiều.

Một thí dụ đơn giản có thể chỉ ra sự khác nhau giữa hai kiểu đánh dấu. Hãy xem xét ký pháp truyền thống để viết tích của sin θ với chính nó. Thật éo le, số mũ 2 được đặt lên trên toán tử sin, chứ không phải ở cuối biểu thức như bạn mong đợi: sin2θ.

Liệt kê 1 cho thấy cách MathML Nội dung mã hóa cấu trúc toán học.

Liệt kê 1. Mã hóa MathML
<apply><power/>
  <apply><sin/>
    <ci>&#x03B8;</ci>
  </apply>
  <cn>2</cn>
</apply>

Ở mức bên ngoài là áp dụng hàm cầu phương (power, với đối số thứ hai là số 2), và đối số thứ nhất của power, là áp dụng hàm sin. Bằng cách sử dụng kiểu đánh dấu này, ý nghĩa của biểu thức được làm sáng tỏ, và trình biểu hiện MathML có thể “biết” quy ước về cách viết các cá thể của các hàm lượng giác và hiển thị biểu thức này như mong muốn theo mặc định. Hoặc bạn có thể sử dụng một cơ chế tạo kiểu dáng bên ngoài (thí dụ một phép biến đổi sang MathML Trình bày). Hoặc, tùy hoàn cảnh, một phép biểu hiện mặc định chẳng hạn như (sinθ)2 có thể coi là chấp nhận được.

MathML Trình bày sẽ trực tiếp mã hóa sơ đồ bài trí là có một số mũ 2 trên tên hàm sin, sử dụng như là một toán tử phức hợp áp dụng vào tên biến θ (xem Liệt kê 2).

Liệt kê 2. Mã hóa sơ đồ bài trí bằng cách sử dụng MathML Trình bày
<mrow>
  <msup><mi>sin</mi><mn>2</mn></msup>
  <mo>&#2061;</mo>
  <mi>&#x03B8;</mi>
</mrow>

Tuy nhiên cũng cần lưu ý rằng MathML Trình bày vẫn mã hóa các mặt ngữ nghĩa toán học. Đặc biệt quan trọng trong Liệt kê 2 là toán tử áp dụng hàm U+2061. Đây là một toán tử vô hình, nhưng việc sử dụng nó, cùng với các toán tử vô hình khác như U+2062 (dấu nhân vô hình) là rất quan trọng để phân biệt nội dung khi các hạng thức liền kề không có toán tử hữu hình, chẳng hạn như việc phân biệt áp dụng hàm f(x) với tích 3(x). Việc sử dụng đúng đắn các toán tử như vậy sẽ giúp không chỉ phân tích cú pháp MathML Trình bày một cách cơ học, mà nó còn cải thiện khả năng tiếp cận đến tài liệu. Các phép biểu hiện bằng âm thanh và phi trực quan khác có thể được cải thiện hơn nhiều nhờ các mách nước ngữ nghĩa như vậy.

MathML Trình bày và MathML Nội dung không phải là hai ngôn ngữ riêng biệt. Bạn có thể pha trộn chúng với nhau. Mỗi biểu thức MathML Nội dung, đối với một trình biểu hiện MathML đã cho, sẽ có một cách trình bày mặc định và bạn có thể tuỳ ý sử dụng các hạng thức MathML Nội dung trong MathML Trình bày. Nhìn chung chỉ cần sử dụng văn bản thuần, thường là một ký tự đơn lẻ, như là nội dung của phần tử ci trong MathML Nội dung (trong Liệt kê 1 là ký tự tê ta). Thực ra có thể sử dụng một biểu thức MathML Trình bày bất kỳ, cho phép xây dựng nên các tên phức tạp.

Sau khi phát hành ấn bản lần hai của MathML 2 vào năm 2003, nhóm công tác Toán W3C sau khi cân nhắc kỹ đã quyết định hoãn lại các thay đổi thêm nữa trong đặc tả kỹ thuật để có một giai đoạn ổn định dành cho trải nghiệm thực hiện nó. Tuy nhiên, các khu vực cụ thể, nơi mà MathML có thể được làm mạnh hơn đã được nhận biết, dẫn đến việc lập ra bản dự thảo đặc tả kỹ thuật MathML 3.0. Cấu trúc cơ bản của MathML 3 cũng giống như của MathML 2 và nhiều người sử dụng có thể sẽ không nhận ra các tính năng mới này, có lẽ chỉ trừ việc ngắt dòng tự động, là tính năng mới ảnh hưởng đến người dùng hiện tại. Tuy nhiên, MathML 3 bổ sung các chức năng để hỗ trợ các cộng đồng nơi mà MathML 2 tỏ ra là yếu kém. Trong đó có sự hỗ trợ cho các ngôn ngữ đọc từ phải sang trái, đặc biệt chú trọng vào chữ viết A rập, và hỗ trợ tường minh các sơ đồ bài trí toán học sơ cấp, giúp các nhà giáo dục đánh dấu các thí dụ và cũng giúp đỡ rất nhiều việc tạo ra các phiên bản phi trực quan có thể truy cập được của các công thức.

Tôi sẽ bàn luận sâu hơn về các tính năng mới này của MathML 3 trong phần tiếp theo.


Các tính năng mới trong MathML 3

MathML3 đã đưa ra một vài tính năng mới vượt lên MathML2.

Liên kết

MathML 1 và MathML 2 không có bất kỳ cơ chế làm sẵn nào để xác định các liên kết. Thay vào đó chúng khuyên bạn sử dụng cú pháp XLink (xem phần Tài nguyên để nhận được liên kết). Một phần điều này cho thấy thời đại của MathML, bởi vì toàn bộ thiết kế ban đầu xuất hiện trước phiên bản cuối của chuẩn XML. XLink là một bộ phận của “Đại kế hoạch” ban đầu về XML, cùng với cú pháp XML, XLink dùng để liên kết, và XSL dùng cho kiểu dáng. Tuy nhiên XLink đã không chứng tỏ được sự phổ biến rộng như là một công nghệ cốt lõi, và không được hỗ trợ rộng rãi. MathML3 bây giờ quy định rằng về cơ bản bất kỳ phần tử MathML nào cũng có thể có một thuộc tính href mà nhận giá trị là một URI để xác định một siêu liên kết chính xác cùng một cách như thuộc tính href trong phần tử neo a của HTML.

Tính định hướng

MathML2 không có hỗ trợ tường minh để điều khiển định hướng của bài trí. Một chú thích trước đây đã ghi lại một số mở rộng cho phép các mẫu bài trí được sử dụng trong các cộng đồng A rập khác nhau có thể biểu hiện được (xem phần Tài nguyên để nhận được liên kết). Tùy vào kiểu dáng nào sẽ được sử dụng, bạn phải điều khiển cả hướng viết của các tên định danh sử dụng trong các công thức lẫn hướng bài trí của chính các công thức đó một cách riêng rẽ. Về nguyên lý, đây là sự bổ sung của thuộc tính dir (tương tự như thuộc tính cùng tên trong HTML) cùng với các quy tắc chi tiết về cách các định hướng tương tác với các quy tắc bài trí của MathML Trình bày như thế nào. Các biến thể phông chữ bổ sung được đề xuất cho Unicode sẽ được sử dụng theo cách tương tự như chữ đậm (bold) hoặc chữ bảng đen đậm (blackboard bold) (gõ đúp) được sử dụng cho bảng chữ cái Latin, như là các bảng chữ cái bổ sung của các ký hiệu ngữ nghĩa khác nhau. Các biến thể phông chữ như italic (nghiêng) hoặc sans serif (không chân) không thực sự áp dụng được đối với chữ A rập và do đó các biến thể phông chữ toán học initial, tailed, looped, và stretched đã được đề nghị trong phần chú giải tiếng A rập và được chuẩn hóa trong MathML3.

Ngắt dòng

MathML2 có rất ít hỗ trợ trong việc ngắt dòng của các phương trình toán học. Có một số hỗ trợ để xác định ngắt dòng được phép, trong biểu thức toán học một dòng, nhưng cách duy nhất để nhận được một biểu thức toán học trình bày nhiều dòng là ngắt phương trình đó bằng tay và gõ nhập các thành phần như là các hàng tách riêng trong một bảng. Hệ thống sắp chữ (typesetting) toán học TeX có các chức năng tương tự. Tuy nhiên, theo kiểu sắp chữ toán học truyền thống, công thức sẽ được ngắt để vừa với kích cỡ trang đã biết, nên không phải là quá bất tiện cho các tác giả khi phải ngắt dòng thủ công. Tuy nhiên, MathML được thiết kế dùng cho bối cảnh Web, ở đây biểu thức được hiển thị trong một cửa sổ kích thước chưa biết và có thể thay đổi động nữa. Điều đó có nghĩa là một hệ thống ngắt dòng tự động là cực kỳ quan trọng. MathML 3 quy định một mô hình ngắt dòng và đưa ra một số thuộc tính mới để điều khiển tính chất của các ngắt dòng và cách mà các dòng được gióng thẳng hàng với nhau.

Gồm thêm các hình ảnh

Phần tử glyph trong MathML 1 và MathML 2 được dự định để truy cập các ký hiệu đặc biệt từ các phông chữ không tiêu chuẩn, không phù hợp với các điểm mã Unicode. Cách này chưa bao giờ dễ sử dụng trong một ngữ cảnh Web, do bạn phải đảm bảo rằng các phông chữ đó đã có sẵn. Trong MathML3, cách sử dụng hiện thời đã lạc hậu và mglyph đã được mở rộng với một thuộc tính src để trở thành một phần tử tham chiếu ảnh tổng quát, tương tự như phần tử img của HTML.

Các bài trí của toán học sơ cấp

Có thể một trong những bổ sung quan trọng nhất trong MathML3 là một tập hợp mới các chức năng để bài trí toán học sơ cấp. Đây là các bài trí dạng bảng dùng cho các phép nhân dài và chia dài. Các cách viết khác nhau đối với các phép tính này được sử dụng ở nhiều nước, khác nhau nhiều đến mức đáng ngạc nhiên, nhưng chúng phần lớn có chung đặc tính của một bài trí dạng bảng dựa trên bề rộng của chữ số và thêm các đường gạch dọc, gạch ngang với hình dạng khác nhau, và các chữ số chèn thêm với cỡ phông nhỏ hơn dành cho số mượn và số mang sang. Có thể nhận được nhiều hiệu quả kiểu như vậy trong MathML2, nhưng đòi hỏi sử dụng tường minh các bảng và định vị khá nhiều, cái đó làm cho việc đánh dấu khó sử dụng, và điều quan trọng là rất khó tạo ra bất kỳ phép biểu hiện không trực quan hợp lý nào vì mẫu dạng cơ sở của phép tính đã bị che khuất đi bởi các đánh dấu bảng. Liệt kê 3 cho thấy một thí dụ về cách mà một phép chia dài được xử lý.

Liệt kê 3. Phép chia dài trong MathML2
   435.3
 ______
3)1306
  12
  __
   10
    9
   __
    16
    15
    __
     1.0
       9
       _
       1

Liệt kê 4 Liệt kê 4 cho thấy cách đánh dấu MathML3.

Liệt kê 4. Phiên bản MathML của phép chia dài
<mlongdiv longdivstyle="lefttop">
  <mn> 3 </mn>
  <mn> 435.3</mn>

  <mn> 1306</mn>

  <msgroup position="2" shift="-1">
    <msgroup>
      <mn> 12</mn>
      <msline length="2"/>
    </msgroup>
    <msgroup>
      <mn> 10</mn>
      <mn> 9</mn>
      <msline length="2"/>
    </msgroup>
    <msgroup>
      <mn> 16</mn>
      <mn> 15</mn>
      <msline length="2"/>
      <mn> 1.0</mn> 
    </msgroup>
    <msgroup position='-1'>
       <mn> 9</mn>
      <msline length="3"/>
      <mn> 1</mn>
    </msgroup>
  </msgroup>
</mlongdiv>

Đặc biệt cần lưu ý về cách các số được nhập vào như là các đơn vị duy nhất và không được chia tách ra một cách rõ ràng như là từng ký số đơn lẻ trên mỗi ô bảng. Khả năng tiếp cận này được cải tiến rất nhiều bởi vì các máy âm thanh hoặc chữ nổi có thể sử dụng thông tin phép chia dài (phần tử mlongdiv) và biết rằng ba hàng đầu tiên chắc chắn là về các toán hạng và kết quả của phép chia, với các hàng còn lại là một phần của bài trí kết quả trung gian.

Gióng theo OpenMath

Chương 4, định nghĩa MathML Nội dung (của Tài liệu MathML của W3C), được viết lại hoàn toàn. MathML Nội dung có một loạt các phần tử rỗng chẳng hạn như <power/><sin/> trong Liệt kê 1. Những phần tử này được chọn để bao hàm phần lớn các biểu thức toán học mà bạn có thể gặp phải trong giảng dạy toán học mức dự bị đại học. Tuy nhiên, để nói đến các ký hiệu toán học chưa có một phần tử được định nghĩa sẵn, bạn có thể dùng phần tử <csymbol>: <csymbol>myfun</csymbol>. Bạn có thể tuỳ ý sử dụng thuộc tính definitionURL để xác định rõ URI của một định nghĩa của hàm đó; tuy nhiên không có khuôn dạng định nghĩa sẵn nào dành cho các định nghĩa như vậy, vì đơn giản chúng có thể là văn bản ngôn ngữ tự nhiên chẳng hạn.

OpenMath (xem phần Tài nguyên) là một định dạng cũ hơn có gốc gác từ các hệ thống đại số máy tính. Nó định nghĩa một mô hình các đối tượng toán học và các mã hóa khác nhau của mô hình đó, mà mô hình quan trọng nhất bây giờ là mã hóa XML. Các khác biệt chủ yếu giữa OpenMath và MathML Nội dung là ở chỗ OpenMath không có cái gì tương tự như MathML Trình bày; Nó chỉ đơn thuần quan tâm đến việc mã hoá cấu trúc toán học. Ngoài ra, không giống như MathML Nội dung, cũng không có các phần tử định nghĩa sẵn nào dành cho các toán tử toán học thông thường, do ngôn ngữ OpenMath lõi chỉ định nghĩa các cấu trúc cơ bản. Bất kỳ ký hiệu nào dự định sử dụng phải được định nghĩa từ bên ngoài. Chuẩn OpenMath định nghĩa một khuôn thức tài liệu XML, đó là Các Từ điển Nội dung (Content Dictionaries), để định nghĩa các ký hiệu như vậy, mặc dù ý nghĩa của ký hiệu đó có thể cuối cùng được cung cấp theo ngôn ngữ tự nhiên, hoặc bằng cách tham khảo một cuốn sách. Thí dụ, định nghĩa của sin có thể được cung cấp bằng cách tham khảo Từ điển Nội dung dùng cho các hàm siêu việt, được phân phối từ trang Web OpenMath (xem phần Tài nguyên để nhận được liên kết).

MathML3 bổ sung các thuộc tính vào csymbol để cho phép tham chiếu tường minh đến Các Từ điển Nội dung OpenMath và tiếp tục gióng theo OpenMath bằng việc bổ sung một số phần tử cấu trúc. OpenMath phân biệt việc áp dụng hàm (<OMA>) với biểu thức kết buộc (<OMBIND>). MathML theo truyền thống sử dụng phần tử <apply> cho cả hai cách sử dụng này, với ý nghĩa được xác định theo ngữ cảnh. Tuy nhiên, các ngữ cảnh kết buộc này bây giờ có thể được đánh dấu rõ ràng bằng một phần tử <bind> mới. Tương tự như vậy, OpenMath phân biệt các chuỗi ký tự như là một kiểu dữ liệu nguyên thủy ngoài các số, và MathML3 đã bổ sung một phần tử <cs> mới cho các trực kiện chuỗi ký tự, ngoài <cn> cho các số và <ci> cho các tên định danh (các biến).

Một thay đổi lớn về cách mà MathML Nội dung được định nghĩa trong MathML, mặc dù nó không thật sự làm thay đổi ngôn ngữ MathML đã được định nghĩa một chút nào, là ở chỗ các ý nghĩa của tất cả các cấu trúc phần tử rỗng truyền thống trong MathML Nội dung bây giờ được cung cấp thông qua một tập hợp tường minh các quy tắc viết lại thành một mẫu được biết với tên MathML Nội dung Chặt chẽ (Strict Content MathML). Mẫu này chỉ sử dụng các csymbols và có thể được ánh xạ dễ dàng thành OpenMath chủ yếu chỉ bằng cách đổi tên các phần tử, nhưng vẫn giữ lại cấu trúc của biểu thức. Như vậy bạn có thể viết lại biểu thức MathML Nội dung trong phần đầu tiên của mẫu trong Liệt kê 5.

Liệt kê 5. Biểu thức MathML Nội dung được viết lại
<apply><csymbol cd="arith1">power</csymbol>
  <apply><csymbol cd="transc1">sin</csymbol><ci>&#x03B8;</ci></apply>
  <cn type="integer">2</cn>
</apply>

Một thay đổi nữa là ở chỗ các biểu hiện thí dụ của MathML Nội dung, mà trong các phiên bản trước đây của MathML chỉ được cung cấp dưới dạng hình ảnh, thì trong phiên bản này được cung cấp cả dưới dạng MathML Trình bày lẫn dưới dạng hình ảnh. Hy vọng rằng việc này sẽ giúp đỡ nhiều hơn cho các hệ thống thực hiện việc biểu hiện MathML Nội dung bằng cách ánh xạ bên trong tới các hỗ trợ biểu hiện MathML Trình bày hiện có.

Các phép biến đổi

  • từ MathML Nội dung Tổng quát thành MathML Nội dung Chặt chẽ
  • từ MathML Nội dung thành MathML Trình bày
  • từ MathML Trình bày thành TeX (để sắp xếp các hình ảnh mẫu)

Tất cả đều được thực hiện trong XSLT 2, và sẽ trở nên sẵn có để dùng miễn phí theo giấy phép Phần mềm của W3C. Chúng không thực sự sẵn sàng vào lúc này, mặc dù các phiên bản trước đây, về cơ bản chưa được tài liệu hóa đầy đủ, đã sẵn có trong kho tài nguyên OpenMath (xem phần Tài nguyên để nhận được liên kết). Tôi chờ đợi cập nhật lĩnh vực Math/XSL của W3C với nhiều phiên bản vững mạnh hơn của các phép biến đổi này như một phần của hoạt động “kêu gọi thực hiện” Khuyến nghị Ứng Viên, hy vọng là trước khi kết thúc năm nay (xem phần Tài nguyên).

Các kiểu Clipbboard và Media (MIME)

Nhiều hệ thống MathML hiện có cho phép bạn cắt và dán các biểu thức MathML bằng cách sử dụng bộ đệm (clipboard) của hệ điều hành. Không may là các hệ thống khác nhau lại khác nhau nhiều về cách chúng xử lý việc này. Đặc biệt là nó có thể khác ở cách thức hoặc MathML chỉ được gắn nhãn trong bộ đệm như là văn bản hoặc liệu nó có được cho một hơi hướng bộ đệm đặc thù MathML hay không, và nếu như vậy thì đó là nhãn nào. MathML 3 lần đầu tiên xác định rõ khá chi tiết hành vi bộ đệm khuyên dùng, và tương tự như vậy định rõ kiểu (MIME) Media (phương tiện mang) để sử dụng nếu chuyển giao các đoạn XML thông qua các dịch vụ Web hoặc các hệ thống khác nơi mà các kiểu MIME là quan trọng. Một bản trước đây của đặc tả bộ đệm đã được thực hiện trong trình biểu hiện MathML MathPlayer dùng cho Microsoft® Internet Explorer®, và trong Microsoft Word 2007, cho phép các đoạn Math được cắt ra một cách chắc chắn từ Internet Explorer và dán vào Word. Hy vọng rằng đặc tả bộ đệm này trong MathML3 sẽ được phần lớn các hệ thống MathML thực hiện và làm cho nó dễ di chuyển các biểu thức từ hệ thống này sang hệ thống khác.


Sử dụng MathML trong một trình duyệt

Một mục tiêu lớn của MathML ngay từ giai đoạn thiết kế ban đầu là cho phép biểu thức toán học sử dụng trong trang Web như là văn bản, không phải dưới dạng các ảnh hoặc các phần bổ sung mờ nhạt, cho phép tìm kiếm, thay đổi kích thước văn bản, v.v.... Hiện tại điều này vẫn còn khó khăn hơn mức đáng có khi dùng XHTML so với HTML đối với đông đảo độc giả. XHTML là việc tái lập HTML dùng từ vựng XML. Ý định ban đầu là việc này, với các quy tắc phân tích cú pháp XML chặt chẽ hơn, sẽ thay thế dần dần HTML như là ngôn ngữ đánh dấu dành cho Web được ưa dùng. Tuy nhiên, các nhà làm ra trình duyệt Web và người dùng Web đã tỏ ra có nghi ngại nào đó khi chuyển đổi, và đặc biệt là trình duyệt được dùng áp đảo là Internet Explorer vẫn không có sự hỗ trợ nguyên sinh nào cho XHTML.

Đối với một phạm vi rộng các cấu trúc MathML Trình bày (MathML2), có thể trộn XHTML và MathML với nhau trong cùng một tài liệu. Cách đơn giản nhất để đạt được hỗ trợ nhiều trình duyệt đối với một tài liệu như vậy là theo các quy tắc đơn giản sau:

  1. Cung cấp tài liệu như là XML đúng khuôn dạng, với các phần tử HTML trong vùng tên xhtml (http://www.w3.org/1999/xhtml) các phần tử MathML trong vùng tên MathML (http://www.w3.org/1998/Math/MathML).
  2. Sử dụng kiểu MIME: application/xhtml+xml
  3. Đảm bảo rằng vùng tên MathML được khai báo gần trên đỉnh của tài liệu, đơn giản nhất là bằng cách đưa khai báo vùng tên xmlns:m="http://www.w3.org/1998/Math/MathML" vào phần tử html.

Firefox (tất cả các phiên bản) sẽ biểu hiện một tài liệu như vậy một cách tự nhiên, mặc dù máy tính đọc nó trước đó phải đã cài đặt các phông chữ toán học phù hợp (xem phần Tài nguyên để nhận được liên kết).

Internet Explorer (bản 6.0 và mới hơn) sẽ biểu hiện một tài liệu như vậy nếu máy tính đọc nó đã cài đặt thành phần MathPlayer miễn phí từ Design Science (xem phần Tài nguyên để nhận được liên kết). (Chú ý: Việc sử dụng MathPlayer để làm cho Internet Explorer biểu hiện các tài liệu kiểu application/xhtml+xml sẽ trở nên phổ biến rộng rãi hơn, vì nó hữu ích ngay cả khi không có biểu thức toán nào trong tài liệu.)

Opera, Safari, và các trình duyệt khác không có hỗ trợ MathML tường minh nhưng vẫn có thể biểu hiện một loạt các tài liệu như vậy bằng cách sử dụng một tờ định kiểu dáng CSS phù hợp. Việc sử dụng CSS để biểu hiện MathML được tách ra thành một đặc tả riêng: MathML dùng cho CSS (xem phần Tài nguyên để nhận được liên kết).

Một kỹ thuật cũ hơn và mạnh hơn đôi chút để đạt được hỗ trợ nhiều trình duyệt là sử dụng một tờ định kiểu dáng XSLT phía khách như mô tả trong vùng Math/XSL hoặc một phiên bản đã cập nhật một chút phát hiện ra nhiều khả năng trình duyệt hiện đại hơn như được sử dụng trong tài liệu của NAG (xem phần Tài nguyên để nhận được liên kết). Việc sử dụng XSLT là khó cài đặt hơn, nhất là khi các bản phát hành trình duyệt hiện đại ngày càng đặt ra các hạn chế về an ninh (xem phần Tài nguyên để nhận được liên kết) khi sử dụng XSLT. Tuy nhiên, có ưu điểm là XSLT có thể phát hiện ra trình duyệt nào được sử dụng và chuyển đổi nó một cách thích hợp, chứ không phải bị hạn chế ở các khả năng của trình duyệt có ít khả năng nhất.

Một tuỳ chọn thứ ba, khác với việc sử dụng XSLT phía khách, là phát hiện tác tử người sử dụng tại máy chủ và cung cấp nội dung khác nhau tùy vào các khả năng của tác tử người sử dụng đó. Các chi tiết của việc này tuỳ thuộc vào môi trường máy chủ được sử dụng và sẽ không trình bày trong bài này.

Khi ghi nhận rằng XHTML ít có khả năng thay thế hoàn toàn cho HTML, gần đây đã bắt đầu nhiều công việc để chuẩn hóa một bản đặc tả HTML cập nhật, HTML5 (xem phần Tài nguyên để nhận được liên kết). Đặc tả của HTML5 còn lâu mới hoàn tất nhưng các bản dự thảo hiện tại xác định rõ rằng MathML có thể được sử dụng trực tiếp trong một tài liệu HTML được cung cấp với kiểu MIME text/html tiêu chuẩn. Như vậy, hy vọng sắp tới trong tương lai gần sẽ có thể đặt MathML trực tiếp trên Web mà không phải lo nghĩ về các kiểu MIME và cấu hình máy chủ.

Tuy nhiên, không chờ cho đến khi HTML5 được chuẩn hóa, vẫn còn khá dễ dàng cung cấp một tài liệu bằng cách sử dụng MathML, và nó làm việc với chất lượng biểu hiện rất cao trong Firefox và Internet Explorer, và có thể đọc được trong Opera, Safari, và các trình duyệt khác với sự hỗ trợ CSS phù hợp. Hình 1 cho thấy tài liệu được biểu hiện trong trình duyệt Firefox.

Hình 1. Tài liệu MathML được biểu hiện trong trình duyệt Firefox
Màn hình bắt giữ một tài liệu MathML được biểu hiện trong trình duyệt Firefox

Hình 2 cho thấy cùng tài liệu đó được biểu hiện trong Internet Explorer.

Hình 2. Tài liệu MathML được biểu hiện trong Internet Explorer
Màn hình bắt giữ một tài liệu MathML được biểu hiện trong Internet Explorer

Sử dụng MathML trong ngành xuất bản

MathML đang trở thành ngôn ngữ đánh dấu được ưa chuộng để đánh dấu các biểu thức toán học. Ngay cả khi việc các bài gửi của tác giả sử dụng các định dạng khác (Word, TeX, v.v...) chúng thường được dịch sang MathML nhằm mục đích lưu trữ để xử lý tiếp. Không phải tất cả các quy trình là công khai, nhưng bạn có thể nhận được một chút hương vị của cách sử dụng “ngoài Web” này bằng cách xem xét hỗ trợ của MathML trong các hệ thống XSL-FO [thí dụ như antennahouse hoặc bài báo về MathML trong Scientific and Technical Publishing (Xuất bản phẩm Khoa học và Kỹ thuật) do Design Science xuất bản (xem phần Tài nguyên để nhận được liên kết)].


Sử dụng MathML trong phần mềm văn phòng

Các phần mềm biên tập văn phòng hiện đại, đáng kể đến là Open Office và Microsoft Office, hoá ra là đang chuẩn hóa việc sử dụng một thùng chứa zip dùng cho XML như là định dạng tệp tin mặc định chứ không phải là các dạng thức thuần nhị phân, cũ hơn. MathML có một vai trò rõ ràng để tham gia ở đây, hoặc như là khuôn thức tệp nguyên sinh trong thùng chứa zip hoặc như là một tầng liên tác giữa các hệ thống khác nhau.

Hiện nay, Microsoft Office không sử dụng MathML nội bộ (nó có định dạng XML riêng cho toán học), tuy nhiên nó thực sự sử dụng MathML trên bộ đệm cho cả việc dán các biểu thức từ nơi khác vào và cắt các biểu thức ra khỏi Word. (Tính năng này có thể được kích hoạt thông qua một hộp kiểm trên băng trình đơn (Ribbon), nhưng đó là một tính năng chuẩn của Word 2007). OpenOffice (và các hệ thống khác sử dụng các khuôn thức tài liệu ODF) thì ngược lại, sử dụng MathML nội bộ trong hệ thống tệp tin nguyên sinh của nó, mặc dù OpenOffice hiện chưa cung cấp MathML trên bộ đệm. Hy vọng rằng đặc tả chi tiết của hành vi bộ đệm trong MathML3 sẽ khuyến khích các nhà triển khai thực hiện MathML, cắt và dán theo cách liên tác được.

Trong khi hỗ trợ bộ đệm là hữu ích đối với các biên tập chỉnh sửa và trình diễn một lần, thì nó lại ít hữu ích nếu bạn muốn xử lý toàn bộ tài liệu. Tuy nhiên, việc cả hai hệ thống dựa OOXML và dựa ODF đều sử dụng các định dạng XML nén có nghĩa là có thể tương tác trực tiếp với dữ liệu và trích xuất các biểu thức MathML tái sử dụng được từ một trong hai hệ thống đó. Hãy xem, chẳng hạn các mục blog của tôi về việc tiếp nhận các tài liệu XHTML+MathML từ Word và OpenOffice (xem phần Tài nguyên để nhận được liên kết).

Hỗ trợ MathML gắn sẵn trong Word chỉ đối với các phiên bản Office 2007, mới hơn, nhưng nhiều người sử dụng các hệ thống cũ hơn (và hiện hành) sử dụng các trình soạn thảo công thức MathType trong Word, mà cũng có hỗ trợ MathML gắn sẵn.


Các chuyển đổi sang MathML và từ MathML

Là một bảng từ vựng XML, MathML rất thích hợp với phép biến đổi bằng cách sử dụng các công cụ XML tiêu chuẩn, nhất là XSLT, một ngôn ngữ biến đổi XML tổng quát do W3C định nghĩa. Các phép biến đổi sang OpenMath và từ OpenMath, sang OMML và từ OMML (định dạng XML của Word dành cho Math) và sang TeX đã được đề cập đến trước đây trong bài này. Một vùng chủ yếu mà phép biến đổi làm việc là việc xây dựng nên các chuyển đổi sang MathML từ TeX, hệ thống sắp chữ toán học do Donald Knuth phát triển. Ở đây bạn cần phân biệt các hệ thống cố gắng xử lý tính biến động cực điểm trong các tài liệu TeX và chuyển đổi các tài liệu di sản hiện có sang XHTML+MathML, với các hệ thống đưa ra một cú pháp giống như TeX được nhắm cụ thể vào việc cung cấp một cú pháp biên soạn mẫu dạng ngắn tiện lợi dùng cho MathML.

Các hệ thống đáng chú ý thuộc kiểu đầu tiên là tex4ht của Eitan Gurari và LateXML của Bruce Miller (xem phần Tài nguyên để nhận được liên kết).

Các hệ thống cung cấp một cú pháp giống như TeX dùng cho MathML gồm có itex2MML của Jacques Distler, ASCIIMathML của Peter Jipsen, và biến thể LaTeXMathML của Douglas Woodall (xem phần Tài nguyên để nhận được liên kết).

Nhiều hệ toán học chuyên gia sẽ có các phép biến đổi sang MathML được gắn sẵn, thí dụ các hệ thống đại số máy tính Mathematica và Maple, có thể vừa nhập khẩu và cả xuất khẩu MathML, chuyển đổi giữa các dạng XML và các cấu trúc dữ liệu bên trong của mình.


Tóm tắt

Bây giờ bạn đã phải có một sự hiểu biết đầy đủ về MathML, gồm MathML Trình bày và MathML Nội dung. Bạn cũng hiểu toàn bộ về các ưu điểm mà MathML 3.0 sẽ sớm mang lại để đánh dấu toán học trong XML.

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

  • Phông chữ dùng cho Mozilla có khả năng MathML: Cài đặt các phông chữ phù hợp này để Firefox biểu hiện một tài liệu MathML một cách tự nhiên.
  • MathPlayer: Để trình duyệt Internet Explorer biểu hiện một tài liệu MathML, hãy cài đặt thành phần miễn phí này từ Design Science. (Chú ý sử dụng MathPlayer này để nhận được Internet Explorer.)
  • OpenMathĐưa toán học lên Web bằng MathML (W3C): Tìm các phiên bản sơ bộ của các phép biến đổi từ MathML Nội dung Tổng quát sang MathML Nội dung Chặt chẽ, từ MathML Nội dung sang MathML Trình bày và MathML Trình bày sang TeX (để sắp xếp các hình ảnh mẫu), tất cả được thực hiện bằng XSLT 2.
  • tex4ht của Eitan Gurari và LateXML của Bruce Miller: Khám phá những công cụ chuyển đổi tài liệu toán học thành MathML Nội dung và MathML Trình bày.
  • itex2MML của Jacques Distler, ASCIIMathML của Peter Jipsen, và biến thể LaTeXMathML của Douglas Woodall: Dùng thử các hệ thống đưa ra một cú pháp giống như TeX dùng cho MathML.
  • Các phiên bản đánh giá sản phẩm của IBM: Tải về hoặc khám phá dùng thử trực tuyến trong Sandbox SOA của IBM và bắt tay thực hành các công cụ phát triển ứng dụng và các sản phẩm phần giữa từ DB2®, Lotus®, Rational®, Tivoli®, và WebSphere®.

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Nguồn mở
ArticleID=618941
ArticleTitle=Nhập môn MathML
publish-date=01222011