Giới thiệu MicroXML, Phần 1: Khám phá những nguyên tắc cơ bản của MicroXML

Tìm hiểu về tương lai có thể của XML

Một phần của cộng đồng XML luôn luôn càu nhàu rằng XML rất khó hiểu và khó xử lý. Về cơ bản XML là phức tạp, vì nhiều lý do mang tính lịch sử và hơn một thập kỷ nay mọi người đã đề xuất các phiên bản đơn giản. HTML5 đã trở thành một mối đe dọa đối với một số nguyên lý cơ bản nhất của XML, gây ra nhiều cuộc thảo luận. Từ những cuộc thảo luận này, MicroXML đã nổi lên. MicroXML, là bản đơn giản hóa tương thích lùi của XML, có ý nghĩa quan trọng vì tầm vóc của một số nhân vật liên quan và do xuất hiện đúng lúc. John Cowan đã phát triển trình phân tích cú pháp của MicroXML bằng Java và các công cụ liên quan khác. Trong bài viết này, hãy tìm hiểu về MicroXML và sự khác biệt về mặt kỹ thuật của nó với XML 1.x và các tiêu chuẩn liên quan.

Uche Ogbuji, Tư vấn trưởng

Uche Ogbuji là một tư vấn viên và là người đồng sáng lập của Fourthought Inc., một hãng bán và tư vấn phần mềm chuyên về các giải pháp XML cho quản lý tri thức doanh nghiệp. Fourthought phát triển 4Suite, một nền tảng mã nguồn mở cho XML, RDF, và các ứng dụng quản lý tri thức. Ông Ogbuji cũng là một nhà phát triển hàng đầu của ngôn ngữ truy vấn Versa RDF. Ông là một kỹ sư máy tính kiêm nhà viết sách sinh ra ở Nigeria, sống và làm việc ở Boulder, Colorado, USA. Bạn có thể liên hệ với ông Ogbuji theo địa chỉ uche@ogbuji.net.



31 10 2012 (Xuất bản lần đầu tiên vào ngày 29 10 2012)

Giới thiệu

Các bài viết trong loạt bài viết này

Mặc dù XML là một công nghệ cực kỳ thành công, nó vẫn có những khiếm khuyết. Thành công lớn thì săm xoi kỹ; nhiều người đã cố gắng thiết kế lại XML từ đầu. Mọi người đang đối phó với sự phức tạp của không gian tên của XML và với kỹ thuật xử lý XML gần đây chẳng hạn như XPath, XSLT và XQuery 3.0. Một số chuyên gia về lõi XML rất có ảnh hưởng đã xem xét khả năng làm lại từ đầu bằng việc đơn giản hóa chính XML.

Một yếu tố khác trong việc pha trộn là mối đe dọa gây ra bởi các nhà phát triển trình duyệt web làm việc trên HTML5. Cái mà đôi khi còn được gọi là XHTML5 sẽ là một sự tư duy lại căn bản về XML và vi phạm một số nguyên tắc được chăm chút nhất của hệ sinh thái. Tuy nhiên, XHTML5 cũng được coi là một sự bất tiện bởi hầu hết mọi người ủng hộ HTML5.

Các chữ viết tắt thường được sử dụng

  • HTML(Hypertext Markup Language): Ngôn ngữ đánh dấu siêu văn bản
  • JSON (JavaScript Object Notation): Ký pháp đối tượng của JavaScript
  • PI (Processing Instructions): Các chỉ dẫn xử lý
  • XML (Extensible Markup Language) Ngôn ngữ đánh dấu có thể mở rộng được
  • XSLT( Extensible Stylesheet Language Transformations): Phép biến đổi ngôn ngữ bản định kiểu có thể mở rộng được

Sự kết hợp sức mạnh này đã dẫn đến cuộc thảo luận trên danh sách thư XML-DEV và các blog khác nhau. Cuối cùng, James Clark đã đưa ra đề xuất đầy đủ cho MicroXML. John Cowan, người làm việc trong nhóm công tác phần lõi XML của W3C, đã tham gia như là một tác giả đóng góp chính và người soạn thảo đặc tả kỹ thuật.

MicroXML không có chỗ đứng chính thức trong bất kỳ tổ chức tiêu chuẩn được công nhận nào, nhưng nó là mối quan tâm lớn cho các nhà phát triển XML vì nhiều lý do. John Cowan đã phát triển MicroLark, là bản triển khai thực hiện cho Java, và tôi đã phát triển một bản triển khai thực hiện cho Python. Có rất nhiều quan tâm đến đặc tả kỹ thuật của MicroXML (xem phần Tài nguyên). Hãy nhớ rằng, nhiều đặc tả kỹ thuật hiện đại quan trọng nhất, chẳng hạn như JSON và Markdown, cũng có gốc rễ không chính thức giống như thế.

Một trong những khía cạnh có giá trị nhất của việc hiểu MicroXML là nó có thể giúp bạn học được cách hiệu quả nhất để tiếp cận XML đầy đủ. Trong bài viết này, hãy tìm hiểu về MicroXML. Các ví dụ giúp khám phá sự khác biệt chính giữa MicroXML và XML đầy đủ. Cuộc thảo luận về căn nguyên cũng được đưa vào thêm. Bài viết giả định rằng bạn đã quen thuộc với những khái niệm cơ sở của XML.

Các nguyên tắc của MicroXML

Hai mục tiêu then chốt của MicroXML là:

  • Duy trì một mô hình dữ liệu rất đơn giản
  • Duy trì khả năng tương thích lùi với XML

Mọi thứ khác đều bắt nguồn từ hai mục tiêu đó. Các tài liệu MicroXML là các tài liệu XML đúng khuôn dạng (well-formed). MicroXML cũng được thiết kế để thân thiện với HTML5 và JSON.

Các đặc tả chính cho mô hình dữ liệu XML, bao gồm cả Infoset và mô hình dữ liệu XPath (XDM), dài hàng chục trang. Ngay cả mô hình dữ liệu XPath 1.0, được thừa nhận là thanh lịch và gọn nhẹ, cũng dài vài trang. Mô hình dữ liệu MicroXML chiếm khoảng nửa trang, nếu bạn không bao gồm các ghi chú về khả năng tương thích JSON. John Cowan thậm chí rút gọn chỉ còn một đoạn, được trích dẫn toàn bộ như dưới đây.

"Mô hình dữ liệu của tài liệu bao gồm ít nhất một đối tượng phần tử. Đối tượng phần tử là sự mô tả trừu tượng của một phần tử đơn lẻ trong tài liệu. Mỗi đối tượng phần tử có 3 đặc tính đi kèm: Tên, ánh xạ thuộc tính, và dãy các con. Tên là một chuỗi ký tự; ánh xạ thuộc tính sẽ ánh xạ chuỗi ký tự tên đến chuỗi ký tự giá trị và mỗi phần tử con trong dãy các con sẽ hoặc là một chuỗi ký tự biểu diễn dữ liệu ký tự hoặc là một đối tượng phần tử."

Phần còn lại của bài viết này tập trung vào cú pháp MicroXML (cú pháp bắt nguồn trực tiếp từ mô hình dữ liệu). Khái niệm gói ghém tất cả trong MicroXML là tài liệu, nó là kết quả của việc phân tích một dòng đầu vào hoàn toàn tuân thủ đặc tả MicroXML.

Tính đúng khuôn dạng

Sự khác biệt cơ bản nhất giữa XML và MicroXML là việc xử lý hành vi của trình phân tích cú pháp. Với sự xử lý lỗi nổi tiếng là khắc nghiệt của XML, trình phân tích cú pháp được yêu cầu phải dừng ngay lập tức khi gặp lỗi đầu tiên. Đây là vấn đề gây nhiều tranh cãi, đặc biệt là khi xem xét HTML đã làm cho mọi người có thói quen dùng thẻ đánh dấu cẩu thả như thế nào. Các nhà phê bình của XML cũng có thể trích dẫn luật Postel: Nên nghiêm khắc với những gì bạn gửi, không hẹp hòi đối với những gì bạn nhận.

Trong MicroXML, trình phân tích cú pháp có thể tiếp tục sau khi gặp lỗi. Mặc dù tại thời điểm gặp lỗi, nó phải bằng cách nào đó đánh dấu đầu vào không phải là tài liệu đúng khuôn dạng, và do đó cho phép trình phân tích cú pháp tuân thủ MicroXML có thể chuyển sang cách diễn dịch đầu vào khác đi. Hãy suy nghĩ về cách trình phân tích cú pháp HTML có thể chuyển đổi từ tuân thủ chuẩn sang chế độ “món súp các nhãn” (tag soup) và bạn sẽ nắm được ý tưởng.

Ví dụ, nếu trình xử lý XML gặp phải đầu vào sau đây, nó phải dừng lại ngay khi nó gặp thẻ </para> và đưa ra lỗi không đúng khuôn dạng do thẻ đóng không khớp.

<para>Hello, I claim to be <strong>MicroXML</para>

Trình phân tích cú pháp MicroXML có thể tiếp tục từ điểm đó, nhưng nó sẽ không báo cáo lại rằng đầu vào là tài liệu MicroXML. Thậm chí nó có thể sửa chữa đầu ra để chèn thêm thẻ </strong> ngay trước </ para>, nhưng nhắc lại một lần nữa nó không được nói rằng kết quả là tài liệu MicroXML. Sự nới lỏng tinh tế này cho hạn chế phải đúng khuôn dạng tạo ra sự khác biệt lớn nếu bạn đang thiết kế hệ thống thế giới thực phải làm việc với các đầu vào không thể đoán trước.


Giải phẫu MicroXML

MicroXML chỉ hỗ trợ bộ mã ký tự UTF-8. Tài liệu MicroXML là dãy các ký tự được mã hóa bằng UTF-8, tạo thành cấu trúc được biểu thị trong mô hình dữ liệu của MicroXML. Giống như với XML, dãy thô ban đầu các ký tự được gọi là văn bản (text), nó bao gồm các thẻ đánh dấu và dữ liệu ký tự. Ví dụ dưới đây cho thấy sự phân biệt kỹ thuật giữa văn bản và dữ liệu ký tự.

<para style="friendly">Hello, I am...<strong>MicroXML</strong></para>

Tất cả mọi thứ từ thẻ <para> tới thẻ </ para> là văn bản, nhưng chỉ có các dãy sau đây là dữ liệu ký tự:

  • friendly
  • Hello, I am...
  • MicroXML

Dữ liệu ký tự là những gì xuất hiện trong các giá trị thuộc tính và ở giữa các thẻ tạo ra các phần tử.

Các phần tử, thuộc tính và các dữ liệu ký tự

Các phần tử, các thuộc tính và dữ liệu ký tự là nền tảng của XML, và trong MicroXML không có nhiều thay đổi với những cấu kiện này. Sự khác biệt lớn nhất là dấu hai chấm bị cấm trong các tên của phần tử. Điều này cấm các phần tử có tiền tố, thường được sử dụng để áp dụng các đặc tả không gian tên của XML. MicroXML không bao gồm không gian tên, sẽ được giải thích sau, nhưng tất cả các phần tử phải sử dụng định dạng không có tiền tố.

Các thuộc tính có thể sử dụng định dạng không gian tên làm tiền tố, đôi khi được gọi là thuộc tính toàn cục. Đặc tả của MicroXML xác định việc sử dụng:

  • xml:space
  • xml:lang
  • xml:base
  • xml:id

XML phiên bản 1.0 cho phép các tên thuộc tính chẳng hạn như spam:eggs:toast, nhưng những tên thuộc tính như thế bị cấm trong không gian tên của XML và cũng bị cấm cả trong MicroXML. Các quy tắc tương tự đối với các tên thuộc tính không tiền tố cũng được áp dụng trong MicroXML giống như trong XML, thuộc tính không tiền tố không ở trong bất kỳ không gian tên nào, ngay cả khi nó xuất hiện bên trong phần tử mà phần tử đó ở trong một không gian tên.

Khoảng trắng trong các thuộc tính không được chuẩn hóa trong MicroXML như trong XML. Trong XML, hai tài liệu sau đây là không thể phân biệt.

<para>Hi. I'm some form of <abbr ref="Extensible Markup Language">XML</abbr></para>

<para>Hi. I'm some form of <abbr ref=" Extensible   Markup   Language ">XML</abbr></para>

Lưu ý sự khác biệt về số khoảng trắng trong thuộc tính ref. Trong MicroXML, số khoảng trắng trong các thuộc tính được báo cáo chính xác đúng như đã bắt gặp, do đó hai tài liệu này là khác nhau.

Chỉ dẫn xử lý và chú thích

Các chỉ dẫn xử lý (PI) luôn luôn là khu vực gây tranh cãi của XML và chúng vẫn nguyên như vậy trong MicroXML. Một số người yêu cầu rằng các PI được đưa vào và một số người yêu cầu rằng chúng phải được bỏ đi hoàn toàn. Tương lai của PI trong HTML5 cũng chưa chắc chắn. MicroXML đã đạt được sự cân bằng tốt, nó cho phép một tập hạn chế các PI trông tương tự như các thẻ bắt đầu. PI được sử dụng phổ biến nhất là xml-stylesheet, vẫn còn đúng với MicroXML.

<?xml-stylesheet type="text/css" href="mystyles.css"?>

Các chú thích của MicroXML rất giống với các chú thích XML. Một số hạn chế bổ sung điều tiết HTML5, nhưng chúng có lẽ sẽ không ảnh hưởng đến hầu hết các nhà phát triển. Vì lý do tương thích, MicroXML không nới lỏng các hạn chế trong XML, đặc biệt là đối với hai dấu gạch ngang (--) trong chú thích, và do đó cả với các chú thích lồng nhau.

Các chú thích hoàn toàn chỉ vì lợi ích của người đọc các tài liệu và chúng được trình phân tích cú pháp bỏ qua. Trình phân tích cú pháp MicroXML báo cáo lại các chỉ dẫn, nhưng chúng không được coi là một phần của mô hình dữ liệu. Các ứng dụng nhận biết và sử dụng các chỉ dẫn của MicroXML phải hoạt động ở tầng cú pháp hơn là ở tầng dữ liệu.

Không gian tên

MicroXML hỗ trợ cách cách tiếp cận đơn giản hóa đến không gian tên của XML. Trình phân tích cú pháp chuyển các thuộc tính khai báo không gian tên xmlns và xmlns:a-prefix, đến ứng dụng như là các thuộc tính thông thường, không có bất kỳ xử lý đặc biệt nào. Tất nhiên ứng dụng MicroXML được khuyến khích sử dụng thông tin này để xây dựng mô hình, trong đó các phần tử và các thuộc tính có tên phổ quát, các tên này độc lập với tiền tố của chúng.

Nói chung, MicroXML hỗ trợ các đặc tả như XLink, bao gồm cả những đặc tả phụ thuộc chẳng hạn như SVG.

Các khái niệm khác

MicroXML bao gồm phần tóm tắt về:

  • Đặc tả ngôn ngữ con người (xml:lang) và bảo toàn số khoảng trắng (xml:space) tương tự như đặc tả của XML 1.0.
  • xml:base và xml:id, tương tự như đặc tả của XML lõi tương ứng.

Chỉ duy nhất một khai báo kiểu tài liệu được hỗ trợ, đó là một khai báo đơn giản, khai báo tên của phần tử gốc. Các định nghĩa kiểu tài liệu (DTD) hoàn toàn không được hỗ trợ trong MicroXML, cả trong tập hợp con nội bộ lẫn bên ngoài.


Ví dụ về MicroXML

Phần này có một ví dụ thực tế khá đầy đủ của XML điển hình để cho thấy nó trông ra sao dưới dạng MicroXML. Atom là một định dạng mẫu tốt bởi vì nó thường bao gồm một hỗn hợp các không gian tên, Liệt kê 1 được dựa trên liệt kê trong sách hướng dẫn "Xử lý Atom 1.0 với XSLT" (xem phần Tài nguyên). Tôi đã gỡ bỏ một trong các phần tử entry và sử dụng tiền tố không gian tên, a, cho tất cả các phần tử của Atom lõi, chẳng hạn như feed, để giúp minh họa các thay đổi đến không gian tên trong MicroXML.

Liệt kê 1. Liệt kê 1. XML điển hình
<?xml version="1.0" encoding="utf-8"?>
<a:feed xmlns:a="http://www.w3.org/2005/Atom" xmlns="http://www.w3.org/1999/xhtml"
      xml:lang="en"
      xml:base="http://copia.ogbuji.net">
  <a:id>http://copia.ogbuji.net/atom1.0</a:id>
  <a:title>Copia</a:title>
  <a:updated>2005-07-15T12:00:00Z</a:updated>
  <a:author>
    <a:name>Uche Ogbuji</a:name>
    <a:uri>http://uche.ogbuji.net</a:uri>
  </a:author>
  <a:link href="/blog" />
  <a:link rel="self" href="/blog/atom1.0" />
  <a:entry>
    <a:id>http://copia.ogbuji.net/blog/2005-09-16/xhtml</a:id>
    <a:title>XHTML tutorial pubbed</a:title>
    <a:link href="http://copia.posterous.com/xhtml-tutorial-pubbed"/>
    <a:category term="xml"/>
    <a:category term="css"/>
    <a:category term="xhtml"/>
    <a:updated>2005-07-15T12:00:00Z</a:updated>
    <a:content type="xhtml">
      <div>
        <p>
          <a href="http://www.ibm.com/developerworks/edu/x-dw-x-xhtml-i.htm">
            "XHTML, step-by-step"
          </a>
        </p>
        <blockquote>
          <p>Start working with Extensible Hypertext Markup Language. In this tutorial,
          author Uche Ogbuji shows you how to use XHTML in practical Web sites.</p>
        </blockquote>
        <p>In this tutorial</p>
        <ul>
          <li>Tutorial introduction</li>
          <li>Anatomy of an XHTML Web page</li>
          <li>Understand the ground rules</li>
          <li>Replace common HTML idioms</li>
          <li>Some practical considerations</li>
          <li>Wrap up</li>
        </ul>
      </div>
    </a:content>
  </a:entry>
</a:feed>

Liệt kê 2 là phiên bản MicroXML của liệt kê 1. Hãy lưu ý là không có khai báo XML, vì nó không được hỗ trợ ở MicroXML và không cần thiết vì chỉ mã hóa UTF-8 được hỗ trợ. Không có tiền tố trước bất kỳ phần tử nào. Không gian tên mặc định được thiết lập là Atom trên phần tử feed và cho XHTML trên phần tử div.

Liệt kê 2. Liệt kê 2. Phiên bản MicroXML
<feed xmlns="http://www.w3.org/2005/Atom"
      xml:lang="en"
      xml:base="http://copia.ogbuji.net">
  <id>http://copia.ogbuji.net/atom1.0</id>
  <title>Copia</title>
  <updated>2005-07-15T12:00:00Z</updated>
  <author>
    <name>Uche Ogbuji</name>
    <uri>http://uche.ogbuji.net</uri>
  </author>
  <link href="/blog" />
  <link rel="self" href="/blog/atom1.0" />
  <entry>
    <id>http://copia.ogbuji.net/blog/2005-09-16/xhtml</id>
    <title>XHTML tutorial pubbed</title>
    <link href="http://copia.posterous.com/xhtml-tutorial-pubbed"/>
    <category term="xml"/>
    <category term="css"/>
    <category term="xhtml"/>
    <updated>2005-07-15T12:00:00Z</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.ibm.com/developerworks/edu/x-dw-x-xhtml-i.htm">
            "XHTML, step-by-step"
          </a>
        </p>
        <blockquote>
          <p>Start working with Extensible Hypertext Markup Language. In this tutorial,
          author Uche Ogbuji shows you how to use XHTML in practical Web sites.</p>
        </blockquote>
        <p>In this tutorial</p>
        <ul>
          <li>Tutorial introduction</li>
          <li>Anatomy of an XHTML Web page</li>
          <li>Understand the ground rules</li>
          <li>Replace common HTML idioms</li>
          <li>Some practical considerations</li>
          <li>Wrap up</li>
        </ul>
      </div>
    </content>
  </entry>
</feed>

Liệt kê 3 cho thấy tài liệu MicroXML, cũng là một tài liệu HTML5 hợp lệ. Khai báo DOCTYPE đơn giản hóa được sử dụng. Ví dụ này cũng sử dụng chỉ dẫn xử lý và chú thích.

Liệt kê 3. Liệt kê 3. MicroXML và HTML5 hợp lệ
<!DOCTYPE html>
<?xml-stylesheet type="text/css" href="mystyle.css"?>
<html lang="en">
  <!-- A comment -->
  <head>
    <title>Welcome page</title>
  </head>
  <body>
    <p>Welcome to <a href="ibm.com/developerworks/">IBM developerWorks</a>.</p>
  </body>
</html>

Tổng kết

Các bài viết trong loạt bài này

MicroXML vẫn còn là một đặc tả mới nổi lên. Tôi không nhất thiết phải vận động bạn nắm lấy nó hoàn toàn và quay lưng lại với XML đầy đủ, nhưng nó là một sự phát triển quan trọng. Hiểu biết MicroXML sẽ giúp bạn có ý thức rõ ràng về cách làm thế nào để sử dụng XML có hiệu quả nhất khi đối mặt với các thay đổi hiện nay, chẳng hạn như sự xuất hiện của JSON và HTML5. Đặc tả của MicroXML là rất nhỏ, và một số công cụ đã sắp xuất hiện. Tôi khuyến khích bạn thử nghiệm MicroXML.

Tài nguyên

Học tập

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

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=843740
ArticleTitle=Giới thiệu MicroXML, Phần 1: Khám phá những nguyên tắc cơ bản của MicroXML
publish-date=10312012