Overview

WML(Wireless Markup Language) là một ngôn ngữ XML được sử dụng để xác định giao diện, nội dung cho các thiết bị như PDA(Personal digital assistant) hay điện thoại di động. Bài viết này sẽ cung cấp cho các bạn một sự hiểu biết về ngôn ngữ WML, để từ đó phát triển các ứng dụng WAP.

WML được viết dựa trên HDML và cấu trúc của nó chúng ta nhìn sẽ thấy rất giống HTML. Tuy nhiên thì WML sẽ được sử dụng hữu ích trên thiết bị có màn hình nhỏ hay đường truyền băng thông thấp. Chúng ta sẽ thấy được vì sao nó lại có thể được như vậy, điển hình của UML đó là WAP( được viết bằng WML, file có phần mở rộng “.wml”. Các kiểu MIME của WML là “text/vnd.wap.wml”).

Discussion

Sự khác biệt lớn nhất giữa WML và HTML đó chính là đơn vị chuyển hướng. Với mỗi HTML được định nghĩa sẽ tương ứng với 1 page, việc này sẽ được hiểu rằng bạn có bao nhiêu màn hình sẽ phải định nghĩa bấy nhiêu HTML page tương ứng. Và việc chuyển hướng trong HTML sẽ là chuyển qua lại giữa các page này. Còn với WML chuyển hướng sẽ là 1 card, một WML có thể chứa nhiều card và chúng tạo thành 1 deck.

Khi một trang WML được truy cập từ điện thoại di động, tất cả các thẻ trong trang được tải về từ máy chủ WAP. Vì vậy, nếu người dùng đi đến một card, các trình duyệt di động không phải gửi bất kỳ yêu cầu đến máy chủ từ các tập tin có chứa các deck đã được lưu trữ trong các thiết bị không dây. Bạn có thể đặt trong card các thành phần links, text, images, input fields, option boxes…

Structure & Environment

Sau đây là cấu trúc cơ bản của một chương trình WML:

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">

<wml>
    <card id="one" title="First Card">
        <p>
            This is the first card in the deck
        </p>
    </card>
    <card id="two" title="Second Card">
        <p>
        Ths is the second card in the deck
        </p>
    </card>
</wml>

Dòng đầu tiên của văn bản này cho biết rằng đây là một tài liệu XML và phiên bản là 1.0. Dòng thứ hai lựa chọn các loại tài liệu và cung cấp cho các URL của định nghĩa kiểu tài liệu(DTD).

Để chạy được đoạn script trên các bạn cần lưu chúng ra file ví dụ test.wml. Và bạn có thể chạy url giống như http://websitename.com/wapstuff/test.wml. Nhưng trước hết bạn cần phải giả lập WAP Gateway trên PC của bạn.

Bạn cần chắc chắn được 3 thành phần dưới được thiết đặt

  • A WAP enabled Web Server: Bạn có thể cho phép Apache của bạn hoặc Microsoft IIS để phục vụ tất cả các yêu cầu của WAP.
  • A WAP Gateway Simulator: Điều này là cần thiết để tương tác với máy chủ WAP của bạn.
  • A WAP Phone Simulator: Đây là yêu cầu để kiểm tra trang WAP của bạn và hiển thị tất cả các trang WAP

Configure Apache

Nếu chọn Apache làm web server thì bạn cần tìm đến file /conf/httpd.conf và thêm những dòng sau vào file sau đó restart lại Apache.

 AddType text/vnd .wap .wml .wml
 AddType text/vnd .wap .wmlscript .wmls
 AddType application/vnd .wap .wmlc .wmlc
 AddType application/vnd .wap .wmlscriptc .wmlsc
 AddType image/vnd .wap .wbmp .wbmp

Configure Microsoft IIS

Nếu bạn chọn IIS làm web server thì bạn cần làm theo các step dưới đây

  1. Bạn tìm đến service Internet Manager và thêm các loại WAP MIME cho toàn bộ một máy chủ hoặc các thư mục cá nhân.
  2. Mở hộp thoại Properties chọn tab HTTP Headers, sau đó chọn nút File Types ở góc dưới bên phải.
  3. Đối với mỗi loại MIME được liệt kê trên phần Confiure Apache, cung cấp phần mở rộng có hoặc không có dấu chấm(nó sẽ được tự động thêm vào), sau đó bấm OK trong hộp thoại Properties để chấp nhận thay đổi.

Installing WAP Gateway Simulator

Có rất nhiều WAP Gateway Simulator có sẵn trên Internet bạn có thể tải về bất kỳ version nào. Bạn cần chạy cái này trước khi bắt đầu WAP Mobile giả lập. Có thể tải từ http://nokia-wap-gateway-simulator.software.informer.com/

Installing WAP Phone Simulator

WAP Simulator có thể tải về từ http://www.winwap.org/

Hoặc http://nokia-mobile-browser-simulator.software.informer.com/

Sau khi cài đặt xong và chạy thì tương ứng hiển thị 2 page tương ứng với 2 card

WAP Model

Hình ảnh mô tả WAP model

Ta thấy mô hình rất giống với mô hình Internet phải không? Đúng vậy, nếu không có WAP Gateway/Proxy hai mô hình sẽ là giống nhau. WAP Gateway/Proxy là thực thể kết nối các miền không dây với Internet. Yêu cầu được gửi từ máy khách không dây WAP Gateway/Proxy sử dụng không dây phiên Protocol (WSP). Trong bản chất của nó, WSP là một hệ nhị phân của HTTP.

Elements

WML rất giống với HTML ở việc sử dụng các thẻ tag để thể hiện từng thành phần con bên trong nó. Tuy nhiên, WML phải tuân thủ cấu trúc, thứ bậc XML và do đó, các yếu tố phải có một thẻ bắt đầu và một thẻ kết thúc <tag>content</tag>

Deck & Card Elements

  • <!--> Định nghĩa một WML comment
  • <wml> Định nghĩa một deck WML(WML root)
  • <head> Xác định thông tin đầu
  • <meta> Định nghĩa một meta information
  • <card> Định nghĩa một deck
  • <access> Định nghĩa một thông tin access control của một deck
  • <template> Định nghĩa một template cho tất cả cards trong một deck

Text Elements

  • <br> Định nghĩa xuống dòng
  • <p> Định nghĩa một đoạn văn bản
  • <table> Định nghĩa một table
  • <td> Định nghĩa một table cell
  • <tr> Định nghĩa một table row
  • <pre> Định nghĩa một preformatted text

Text Formatting Tags

  • <b> Định nghĩa một bold text
  • <big> Định nghĩa một big text
  • <em> Định nghĩa một emphasized text
  • <i> Định nghĩa một italic text
  • <small> Định nghĩa một small text
  • <strong> Định nghĩa một strong text
  • <u> Định nghĩa một underlined text

Image Elements

  • <img> Định nghĩa một image

Anchor Elements

  • <a> Định nghĩa một anchor viết tắt của anchor
  • <anchor> Định nghĩa một anchor

Event Elements

  • <do> Định nghĩa một do event handler
  • <onevent> Định nghĩa một onevent event handler
  • <postfield> Định nghĩa một postfield event handler
  • <ontimer> Định nghĩa một ontimer event handler
  • <onenterforward> Định nghĩa một onenterforward handler
  • <onenterbackward> Định nghĩa một onenterbackward handler
  • <onpick> Định nghĩa một onpick event handler

Task Elements

  • <go> các hành động của chuyển đổi card này sang card khác
  • <noop>
  • <prev> back lại cho các thẻ trước
  • <refresh> Làm mới một số card variables quy định.

Input Elements

  • <input> Định nghĩa một input field
  • <select> Định nghĩa một select group
  • <option> Định nghĩa một option in a selectable list
  • <fieldset> Định nghĩa một set của input fields
  • <optgroup> Bắt đầu một group của một selectable list

Variable Elements

  • <setvar> Bắt đầu một variable
  • <timer> Bắt đầu một timer

WML – comments

Giống với hầu hết các ngôn ngữ lập trình, WML cũng có thể đặt được comment trong mã. Với mục đích ghi lại các quyết định của chương trình trong code, việc này sẽ giup cho việc bảo trì dễ dàng hơn. WML sử dụng các định dạng tương tự HTML để comment một đoạn trong code.

  • Oneline comment
<!-- This will be assumed as a comment -->
  • Multiline comment
<!-- This is a multi-line
     comment -->

WML – variables

Có 2 cách khai báo biến trong WML

1. <setvar> element

Các <setvar> là kết qủa của việc sử lý một số việc. Các <setvar> có thể được sử dụng để thiết lập một biến theo các thành phần sau: <go><prev> và <refresh>.

Các attributes thiết đặt cho <setvar> element

  • name thiết đặt tên cho biến
  • value thiết đặt gía trị cho biến
  • class thiết đặt tên class
  • id thiết đặt một ID (ID này là duy nhất cho 1 element)

Ví dụ khởi tạo một biến a có gía trị là 1000

<setvar name="a" value="1000"/>

2. input element

Biến cũng được thiết lập thông qua yếu tố đầu vào như inputselectoption. Một biến được tự động tạo ra tương ứng với các thuộc tính được đặt tên của một yếu tố đầu vào.

Ví dụ, các yếu tố sau đây sẽ tạo ra một biến có tên là b

<select name="b">
<option value="value1">Option 1</option>
<option value="value2">Option 2</option>
</select>

3. Using Variables

Mở rộng biến xảy ra trong thời gian chạy, trong microbrowser hoặc giả lập. Điều này có nghĩa là nó có thể được sử dụng qua các deck hoặc nhúng trong văn bản khác nhau.

Các biến được tham chiếu với một dấu $, và bất kỳ dấu hiệu đồng $ trong boong WML đều được hiểu như là một tham chiếu biến. Ví dụ khi ta gọi $a$b

WML – Tasks

Task trong WML là một yếu tố xác định một hành động được thực hiện bởi trình duyệt, chứ không phải là một cái gì đó sẽ được hiển thị. Ví dụ, các hành động của một thẻ mới được đại diện bởi một <go>, và các hành động của việc trở lại được đại diện bởi <pre>. Các tasks element sẽ đóng gói tất cả các thông tin cần thiết để thực hiện các hành động.

WML có bốn yếu tố để xử lý tasks WML gồm go task, pre task, refresh task and noop taks.

<Go> Task

Như tên cho thấy, các <go>task đại diện cho hành động đi đến một thẻ mới.

Các <go> có các thuộc tính sau:

  • href dạng url, cung cấp cho các URL của thẻ mới.
  • method có 2 dạng get và post. Chỉ định các phương pháp đó phải được sử dụng trong một deck. Đây phải là một trong các giá trị tương ứng với GET và POST phương pháp HTTP
  • sendreferer có 2 gía trị true và false. Nếu thiết lập là true, trình duyệt sẽ gửi URL của deck đến cùng với request.
  • accept-charset gía trị mặc định là unknown.
  • class thiết lập class cho element
  • id là một gía trị unique
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">
<wml>
  <card title="GO Element">
    <p>
      <anchor>
        Using setvar:
        <go href="chapter2.wml" method="get">
          <postfield name="x" value="17"/>
          <postfield name="y" value="42"/>
        </go>
      </anchor>
    </p>
  </card>
</wml>

<prev> Task

Các <pre> task sử dụng cho việc quay trở lại thẻ truy cập trước đó. Nếu không có URL trước tồn tại, <pre> không có hiệu lực.

  • class thiết đặt tên class cho element
  • id thiết đặt Id unique
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">

<wml>
  <card title="Prev Element">
    <p>
      <anchor>
        <prev>
         <setvar name="password" value=""/>
        </prev>
      </anchor>
    </p>
  </card>
</wml>

<refresh> Task

Sử dụng thẻ này để thiết lập lại một số hành động trên thẻ

  • class thiết lập tên class cho element
  • id thiết lập id unique
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">
<wml>
  <card title="Referesh Element">
    <p>
      <anchor>
         Refresh this page:
        <go href="test.wml"/>
        <refresh>
          <setvar name="x" value="100"/>
        </refresh>
      </anchor>
    </p>
  </card>
</wml>

*<noop> Task

Mục đích sử dụng thẻ này là đi đến việc không làm gì (no operation). Các attributes cho thẻ

  • class
  • id
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">
<wml>
  <card title="Noop Element">
    <p>
      <do type="prev" label="Back">
        <noop/>
      </do>
    </p>
  </card>
</wml>

WML – Timer

Đôi khi, bạn có thể muốn một cái gì đó xảy ra mà không cần người dùng phải kích hoạt một điều khiển. WML cung cấp cho bạn OnTimer để xử lý vấn đề này. Gía trị time sẽ được đếm ngược đến khi về 0 và tính theo đơn vị giây. Các attributes cho Timer

  • name tên cho element
  • value gía trị cho timeout
  • class
  • id

Ví dụ cụ thể sau khi click vào Enter 5s sẽ hiển thị ra dòng chữ welcome to he main screen

Regard

Mình xin dừng lại bài giới thiệu WML tại đây. Trên đây là toàn bộ những element đặc biệt trong WML. Các bạn có thể sử dụng WML để viết ra một trang WAP hiển thị trên thiết bị di động. Tiêu chí của WML là nhẹ, không tốn băng thông nên rất phù hợp cho việc thiết kế mobile wap.

Tài liệu tham khảo

http://www.w3school.com.cn/wap

http://www.tutorialspoint.com/wml

http://www.developershome.com/wap/wml/