WML - คู่มือฉบับย่อ

เลเยอร์บนสุดในสถาปัตยกรรม WAP (Wireless Application Protocol) ประกอบด้วย WAE (Wireless Application Environment) ซึ่งประกอบด้วยภาษาสคริปต์ WML และ WML

  • WML ย่อมาจาก Wไม่รู้จักเหน็ดเหนื่อย MArkup Lความปวดร้าว

  • WML เป็นแอปพลิเคชันของ XML ซึ่งกำหนดไว้ในข้อกำหนดประเภทเอกสาร

  • WML ขึ้นอยู่กับ HDML และได้รับการแก้ไขเพื่อให้สามารถเปรียบเทียบกับ HTML ได้

  • WML ดูแลหน้าจอขนาดเล็กและแบนด์วิธในการรับส่งข้อมูลต่ำ

  • WML เป็นภาษามาร์กอัปที่กำหนดไว้ในข้อกำหนด WAP

  • ไซต์ WAP เขียนด้วย WML ในขณะที่เว็บไซต์เขียนด้วย HTML

  • WML คล้ายกับ HTML มาก ทั้งสองใช้แท็กและเขียนในรูปแบบข้อความธรรมดา

  • ไฟล์ WML มีนามสกุล ".wml" WML ประเภท MIME คือ "text / vnd.wap.wml"

  • WML รองรับการเขียนสคริปต์ฝั่งไคลเอ็นต์ ภาษาสคริปต์ที่รองรับเรียกว่า WMLScript

เวอร์ชัน WML:

WAP Forum ได้เปิดตัว WAP 2.0 เวอร์ชันล่าสุด ภาษามาร์กอัปที่กำหนดใน WAP 2.0 คือ XHTML Mobile Profile (MP) WML MP เป็นส่วนย่อยของ XHTML สไตล์ชีตที่เรียกว่า WCSS (WAP CSS) ถูกนำมาใช้พร้อมกับ XHTML MP WCSS เป็นส่วนย่อยของ CSS2

โทรศัพท์มือถือรุ่นใหม่ที่เปิดตัวส่วนใหญ่เปิดใช้งาน WAP 2.0 เนื่องจาก WAP 2.0 เข้ากันได้กับ WAP 1.x รุ่นเก่าอุปกรณ์เคลื่อนที่ที่เปิดใช้งาน WAP 2.0 จึงสามารถแสดงทั้งเอกสาร XHTML MP และ WML

WML 1.x เป็นเทคโนโลยีรุ่นก่อนหน้า อย่างไรก็ตามนั่นไม่ได้หมายความว่าไม่มีประโยชน์เนื่องจากยังคงมีการใช้อุปกรณ์ไร้สายจำนวนมากที่รองรับ WML 1.x อยู่ เวอร์ชันล่าสุดของ WML คือ 2.0 และถูกสร้างขึ้นเพื่อวัตถุประสงค์ในการใช้งานร่วมกันได้แบบย้อนหลัง ดังนั้นนักพัฒนาไซต์ WAP ไม่จำเป็นต้องกังวลเกี่ยวกับ WML 2.0

WML Decks และการ์ด:

ความแตกต่างหลักระหว่าง HTML และ WML คือหน่วยพื้นฐานของการนำทางใน HTML คือเพจในขณะที่ใน WML เป็นการ์ด ไฟล์ WML สามารถมีการ์ดได้หลายใบและรวมกันเป็นสำรับ

เมื่อเข้าถึงเพจ WML จากโทรศัพท์มือถือการ์ดทั้งหมดในเพจจะถูกดาวน์โหลดจากเซิร์ฟเวอร์ WAP ดังนั้นหากผู้ใช้ไปที่การ์ดอื่นในเด็คเดียวกันเบราว์เซอร์มือถือไม่จำเป็นต้องส่งคำขอใด ๆ ไปยังเซิร์ฟเวอร์เนื่องจากไฟล์ที่มีเด็คนั้นถูกเก็บไว้ในอุปกรณ์ไร้สาย

คุณสามารถใส่ลิงก์ข้อความรูปภาพช่องป้อนข้อมูลกล่องตัวเลือกและองค์ประกอบอื่น ๆ อีกมากมายในการ์ด

โครงสร้างโปรแกรม WML:

ต่อไปนี้เป็นโครงสร้างพื้นฐานของโปรแกรม 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>

บรรทัดแรกของข้อความนี้ระบุว่านี่คือเอกสาร XML และเวอร์ชันคือ 1.0 บรรทัดที่สองเลือกประเภทเอกสารและระบุ URL ของข้อกำหนดประเภทเอกสาร (DTD)

สำรับ WML หนึ่งใบ (เช่นหน้า) สามารถมีไพ่หนึ่งใบหรือมากกว่าดังที่แสดงไว้ด้านบน เราจะดูรายละเอียดทั้งหมดเกี่ยวกับโครงสร้างเอกสาร WML ในบทต่อไป

ไม่เหมือนกับ HTML 4.01 Transitional ไม่สามารถใส่ข้อความลงในคู่แท็ก <card> ... </card> ได้โดยตรง ดังนั้นคุณต้องใส่เนื้อหาไว้ข้างใน <p> ... </p> ดังที่แสดงด้านบน

ข้อควรพิจารณาในการออกแบบเว็บไซต์ WAP:

อุปกรณ์ไร้สายถูก จำกัด ด้วยขนาดของจอแสดงผลและปุ่มกด ดังนั้นจึงเป็นเรื่องสำคัญมากที่จะต้องคำนึงถึงเรื่องนี้เมื่อออกแบบเว็บไซต์ WAP

ในขณะที่ออกแบบไซต์ WAP คุณต้องมั่นใจว่าคุณได้ทำให้สิ่งต่างๆเรียบง่ายและใช้งานง่าย คุณควรจำไว้เสมอว่าไม่มีพฤติกรรมไมโครเบราว์เซอร์มาตรฐานและการเชื่อมโยงข้อมูลอาจค่อนข้างช้าที่ประมาณ 10Kbps อย่างไรก็ตามสำหรับ GPRS, EDGE และ UMTS อาจใช้เวลาไม่นานขึ้นอยู่กับว่าคุณอยู่ที่ใด

ต่อไปนี้เป็นเคล็ดลับการออกแบบทั่วไปที่คุณควรคำนึงถึงเมื่อออกแบบบริการ:

  • เก็บเด็คและรูปภาพ WML ให้น้อยกว่า 1.5KB

  • ทำให้ข้อความสั้นและมีความหมายและเท่าที่จะทำได้พยายามกำหนดตัวเลือกล่วงหน้าเพื่อลดประสบการณ์ที่ค่อนข้างเจ็บปวดในการป้อนข้อมูลผู้ใช้

  • ทำให้ URL สั้นและจำง่าย

  • ลดระดับเมนูเพื่อป้องกันไม่ให้ผู้ใช้หลงทางและระบบไม่ทำงานช้าลง

  • ใช้แท็กเค้าโครงมาตรฐานเช่น <big> และ <b> และจัดโครงสร้างข้อมูลของคุณอย่างมีเหตุผล

  • อย่าลงน้ำด้วยการใช้กราฟิกเนื่องจากอุปกรณ์เป้าหมายจำนวนมากอาจไม่รองรับอุปกรณ์เหล่านี้

ในการพัฒนาแอปพลิเคชัน WAP คุณจะต้องมีสิ่งต่อไปนี้:

  • A WAP enabled Web Server: คุณสามารถเปิดใช้ Apache หรือ Microsoft IIS เพื่อตอบสนองคำขอไคลเอนต์ WAP ทั้งหมด

  • A WAP Gateway Simulator: สิ่งนี้จำเป็นสำหรับการโต้ตอบกับเซิร์ฟเวอร์ WAP ของคุณ

  • A WAP Phone Simulator: สิ่งนี้จำเป็นสำหรับการทดสอบหน้า WAP ของคุณและเพื่อแสดงหน้า WAP ทั้งหมด

คุณสามารถเขียนหน้า WAP ของคุณโดยใช้ภาษาต่อไปนี้:

  • Wireless Markup Language (WML) เพื่อพัฒนาแอปพลิเคชัน WAP
  • WML Script เพื่อเพิ่มประสิทธิภาพการทำงานของแอปพลิเคชัน WAP

การกำหนดค่าเว็บเซิร์ฟเวอร์:

ในเว็บแอปพลิเคชันปกติประเภท MIME ถูกตั้งค่าเป็น text / html โดยกำหนดโค้ด HTML ปกติ ในทางกลับกันรูปภาพสามารถระบุเป็น image / gif หรือ image / jpeg เป็นต้น ด้วยข้อกำหนดประเภทเนื้อหานี้เว็บเบราว์เซอร์จะทราบชนิดข้อมูลที่เว็บเซิร์ฟเวอร์ส่งกลับ

เพื่อให้ Apache WAP ของคุณเข้ากันได้คุณไม่ต้องทำอะไรมาก คุณเพียงแค่ต้องเพิ่มการรองรับสำหรับประเภท MIME และส่วนขยายที่แสดงด้านล่าง

นามสกุลไฟล์ ประเภท MIME
WML (.wml) ข้อความ / vnd.wap.wml
WMLScript (.wmls) text / vmd.wap.wmlscript
WMLScriptc (.wmlsx) ใบสมัคร / vnd.wap.wmlscriptc
WMLC (.wmlc) ใบสมัคร / vnd.wap.wmlc
WBMP (.wbmp) ภาพ / vnd.wap.wbmp

กำหนดค่า Apache Web Server สำหรับ WAP:

สมมติว่าคุณติดตั้ง Apache Web server ในเครื่องของคุณ ตอนนี้เราจะบอกวิธีเปิดใช้งานฟังก์ชัน WAP ในเว็บเซิร์ฟเวอร์ Apache ของคุณ

ดังนั้นค้นหาไฟล์ของ Apache httpd.conf ซึ่งโดยปกติจะอยู่ใน / etc / httpd / conf และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์และรีสตาร์ทเซิร์ฟเวอร์:

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

ในแอปพลิเคชันแบบไดนามิกต้องตั้งค่าประเภท MIME ทันทีในขณะที่ในแอปพลิเคชัน WAP แบบคงที่เว็บเซิร์ฟเวอร์จะต้องกำหนดค่าอย่างเหมาะสม

กำหนดค่า Microsoft IIS สำหรับ WAP:

ในการกำหนดค่าเซิร์ฟเวอร์ Microsoft IIS เพื่อส่งเนื้อหา WAP คุณต้องดำเนินการดังต่อไปนี้:

  1. เปิดคอนโซล Internet Service Manager และขยายโครงสร้างเพื่อดูรายการเว็บไซต์ของคุณ คุณสามารถเพิ่มประเภท WAP MIME ให้กับเซิร์ฟเวอร์ทั้งหมดหรือแต่ละไดเร็กทอรี
  2. เปิดกล่องโต้ตอบคุณสมบัติโดยคลิกขวาที่เซิร์ฟเวอร์หรือไดเรกทอรีที่เหมาะสมจากนั้นเลือกคุณสมบัติจากเมนู
  3. จากกล่องโต้ตอบคุณสมบัติเลือกแท็บส่วนหัว HTTP จากนั้นเลือกปุ่มประเภทไฟล์ที่ด้านล่างขวา
  4. สำหรับ MIME แต่ละประเภทที่แสดงรายการก่อนหน้าในตารางด้านบนให้ระบุส่วนขยายที่มีหรือไม่มีจุด (จะถูกเพิ่มให้คุณโดยอัตโนมัติ) จากนั้นคลิกตกลงในกล่องโต้ตอบคุณสมบัติเพื่อยอมรับการเปลี่ยนแปลงของคุณ

การติดตั้ง WAP Gateway Simulator:

มี WAP Gateway Simulator มากมายบนอินเทอร์เน็ตดังนั้นให้ดาวน์โหลดและติดตั้งบนพีซีของคุณ คุณจะต้องเรียกใช้เกตเวย์นี้ก่อนเริ่มโปรแกรมจำลอง WAP Mobile

WAP Gateway จะรับคำขอของคุณและจะส่งต่อไปยังเว็บเซิร์ฟเวอร์และการตอบสนองใด ๆ ที่จะได้รับจากเว็บเซิร์ฟเวอร์ซึ่งจะส่งผ่านไปยัง Mobile Simulator

คุณสามารถดาวน์โหลดได้จากเว็บไซต์ Nokia:

  • Nokia WAP Gateway simulator - ดาวน์โหลด Nokia WAP Gateway simulator

การติดตั้ง WAP Phone Simulator:

มี WAP Simulator มากมายบนอินเทอร์เน็ตดังนั้นให้ดาวน์โหลดโปรแกรมเหล่านี้และติดตั้งบนพีซีของคุณซึ่งคุณจะใช้เป็นไคลเอนต์ WAP นี่คือลิงค์ยอดนิยมสำหรับดาวน์โหลดโปรแกรมจำลอง:

  • Nokia WAP simulator - ดาวน์โหลด Nokia WAP simulator

  • WinWAP Simulator - ดาวน์โหลดเบราว์เซอร์ WinWAP จากเว็บไซต์ทางการ

NOTE:หากคุณมีโทรศัพท์ที่เปิดใช้งาน WAP คุณไม่จำเป็นต้องติดตั้งเครื่องจำลองนี้ แต่ในขณะที่ทำการพัฒนาจะสะดวกและประหยัดกว่าในการใช้เครื่องจำลอง

แบบจำลอง WAP:

ฉันให้ส่วนนี้เพื่อเป็นข้อมูลอ้างอิงเท่านั้นหากคุณไม่สนใจคุณสามารถข้ามส่วนนี้ได้

รูปด้านล่างแสดงโมเดลการเขียนโปรแกรม WAP สังเกตความคล้ายคลึงกันกับโมเดลอินเทอร์เน็ต หากไม่มี WAP Gateway / Proxy ทั้งสองรุ่นจะเหมือนกันจริง

WAP Gateway / Proxy คือเอนทิตีที่เชื่อมต่อโดเมนไร้สายกับอินเทอร์เน็ต คุณควรทราบว่าคำขอที่ส่งจากไคลเอนต์ไร้สายไปยัง WAP Gateway / Proxy ใช้ Wireless Session Protocol (WSP) โดยพื้นฐานแล้ว WSP เป็น HTTP เวอร์ชันไบนารี

ภาษามาร์กอัป - ภาษามาร์กอัปไร้สาย (WML) ได้รับการปรับเพื่อพัฒนาแอปพลิเคชัน WAP ที่เหมาะสมที่สุด เพื่อประหยัดแบนด์วิธที่มีค่าในเครือข่ายไร้สาย WML สามารถเข้ารหัสเป็นรูปแบบไบนารีขนาดกะทัดรัด การเข้ารหัส WML เป็นหนึ่งในงานที่ดำเนินการโดย WAP Gateway / Proxy

WAP Model ทำงานอย่างไร

เมื่อพูดถึงการใช้งานจริง WAP จะทำงานในลักษณะนี้:

  1. ผู้ใช้เลือกตัวเลือกบนอุปกรณ์เคลื่อนที่ที่มี URL ที่มีเนื้อหาภาษามาร์กอัปไร้สาย (WML) ที่กำหนดให้

  2. โทรศัพท์จะส่งคำขอ URL ผ่านเครือข่ายโทรศัพท์ไปยังเกตเวย์ WAP โดยใช้โปรโตคอล WAP ที่เข้ารหัสไบนารี

  3. เกตเวย์แปลคำขอ WAP นี้เป็นคำขอ HTTP แบบเดิมสำหรับ URL ที่ระบุและส่งไปยังอินเทอร์เน็ต

  4. เว็บเซิร์ฟเวอร์ที่เหมาะสมรับคำขอ HTTP

  5. เซิร์ฟเวอร์ประมวลผลคำขอเช่นเดียวกับคำขออื่น ๆ หาก URL อ้างถึงไฟล์ WML แบบคงที่เซิร์ฟเวอร์จะจัดส่งให้ หากมีการร้องขอสคริปต์ CGI จะมีการประมวลผลและส่งคืนเนื้อหาตามปกติ

  6. เว็บเซิร์ฟเวอร์เพิ่มส่วนหัว HTTP ให้กับเนื้อหา WML และส่งกลับไปยังเกตเวย์

  7. เกตเวย์ WAP รวบรวม WML ไว้ในรูปแบบไบนารี

  8. จากนั้นเกตเวย์จะส่งการตอบสนอง WML กลับไปที่โทรศัพท์

  9. โทรศัพท์รับ WML ผ่านโปรโตคอล WAP

  10. ไมโครเบราว์เซอร์ประมวลผล WML และแสดงเนื้อหาบนหน้าจอ

โดยทั่วไปโปรแกรม WML จะแบ่งออกเป็นสองส่วน: เอกสาร prolog และส่วนเนื้อหา พิจารณารหัสต่อไปนี้:

ต่อไปนี้เป็นโครงสร้างพื้นฐานของโปรแกรม 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>

WML Document Prolog:

บรรทัดแรกของข้อความนี้ระบุว่านี่คือเอกสาร XML และเวอร์ชันคือ 1.0 บรรทัดที่สองเลือกประเภทเอกสารและระบุ URL ของข้อกำหนดประเภทเอกสาร (DTD) DTD ที่อ้างถึงถูกกำหนดไว้ใน WAP 1.2 แต่ส่วนหัวนี้จะเปลี่ยนไปตามเวอร์ชันของ WML ต้องคัดลอกส่วนหัวทุกประการเพื่อให้ชุดเครื่องมือสร้าง prolog นี้โดยอัตโนมัติ

ส่วนประกอบ prolog ไม่ใช่องค์ประกอบ WML และไม่ควรปิดกล่าวคือคุณไม่ควรให้ end tag หรือปิดท้ายด้วย />

เนื้อหาเอกสาร WML:

เนื้อหาอยู่ในคู่แท็ก <wml> </wml> เนื้อหาของเอกสาร WML สามารถประกอบด้วยอย่างน้อยหนึ่งอย่างต่อไปนี้:

  • Deck

  • Card

  • เนื้อหาที่จะแสดง

  • คำแนะนำการนำทาง

ไม่เหมือนกับ HTML 4.01 Transitional ไม่สามารถใส่ข้อความลงในคู่แท็ก <card> ... </card> ได้โดยตรง ดังนั้นคุณต้องใส่เนื้อหาไว้ข้างใน <p> ... </p> ดังที่แสดงด้านบน

การทดสอบโปรแกรมของคุณ:

ใส่โค้ดด้านบนในไฟล์ชื่อไฟล์ test.wml และวางไฟล์ WML นี้ไว้ในฮาร์ดดิสก์ของคุณจากนั้นดูโดยใช้โปรแกรมจำลอง

นี่เป็นวิธีที่มีประสิทธิภาพที่สุดในการพัฒนาและทดสอบไฟล์ WML อย่างไรก็ตามเนื่องจากเป้าหมายของคุณคือเพื่อพัฒนาบริการที่จะพร้อมใช้งานสำหรับผู้ใช้โทรศัพท์ WAP คุณควรอัปโหลดไฟล์ WML ของคุณไปยังเซิร์ฟเวอร์เมื่อคุณพัฒนาขึ้นในเครื่องและทดสอบผ่านการเชื่อมต่ออินเทอร์เน็ตจริง เมื่อคุณเริ่มพัฒนาบริการ WAP ที่ซับซ้อนมากขึ้นนี่คือวิธีที่คุณจะระบุและแก้ไขปัญหาด้านประสิทธิภาพซึ่งอาจทำให้ผู้เยี่ยมชมไซต์ของคุณสูญเสียไป

ในการอัปโหลดไฟล์ test.wml ไปยังเซิร์ฟเวอร์คุณจะต้องทดสอบโปรแกรมจำลอง WML ของคุณเพื่อดูว่ามันมีลักษณะและการทำงานอย่างไรและตรวจสอบเว็บเซิร์ฟเวอร์ของคุณเพื่อดูว่าตั้งค่าอย่างถูกต้อง ตอนนี้เริ่มโปรแกรมจำลองของคุณและใช้เพื่อเข้าถึง URL ของ test.wml ตัวอย่างเช่น URL อาจมีลักษณะดังนี้:

http://websitename.com/wapstuff/test.wml

NOTE: ก่อนเข้าถึง URL ใด ๆ ตรวจสอบให้แน่ใจว่า WAP Gateway Simulator กำลังทำงานบนพีซีของคุณ

เมื่อคุณจะดาวน์โหลดโปรแกรม WAP ของคุณคุณจะเห็นเฉพาะการ์ดใบแรกที่มือถือของคุณ ต่อไปนี้เป็นผลลัพธ์ของตัวอย่างข้างต้นบน Nokia Mobile Browser 4.0 มือถือนี้รองรับการเลื่อนในแนวนอน คุณสามารถดูข้อความจากหน้าจอได้โดยกดปุ่ม "ซ้าย" หรือ "ขวา"

เมื่อคุณกดปุ่มขวาการ์ดใบที่สองจะปรากฏดังนี้:

WML ถูกกำหนดโดยชุดขององค์ประกอบที่ระบุมาร์กอัปและข้อมูลโครงสร้างทั้งหมดสำหรับเด็ค WML องค์ประกอบจะถูกระบุโดยแท็กซึ่งแต่ละแท็กจะอยู่ในวงเล็บเหลี่ยมคู่หนึ่ง

ต่างจาก HTML ตรงที่ WML ปฏิบัติตามโครงสร้างลำดับชั้นของ XML อย่างเคร่งครัดดังนั้นองค์ประกอบจึงต้องมีแท็กเริ่มต้น เนื้อหาใด ๆ เช่นข้อความและ / หรือองค์ประกอบอื่น ๆ และแท็กปิดท้าย องค์ประกอบมีหนึ่งในสองโครงสร้างต่อไปนี้:

  • <tag> content </tag> : แบบฟอร์มนี้เหมือนกับ HTML

  • <tag />:ใช้เมื่อองค์ประกอบไม่สามารถมีเนื้อหาที่มองเห็นได้หรือว่างเปล่าเช่นตัวแบ่งบรรทัด ส่วน prolog ของเอกสาร WML ไม่มีองค์ประกอบใด ๆ ที่มีองค์ประกอบปิด

ตารางต่อไปนี้แสดงองค์ประกอบที่ถูกต้องส่วนใหญ่ รายละเอียดที่สมบูรณ์ขององค์ประกอบทั้งหมดเหล่านี้จะได้รับในWML แท็กอ้างอิง

องค์ประกอบสำรับและการ์ด

องค์ประกอบ WML วัตถุประสงค์
<! ->  กำหนดข้อคิดเห็น WML
<wml>  กำหนดเด็ค WML (รูท WML)
<head> กำหนดข้อมูลส่วนหัว
<meta> กำหนดข้อมูลเมตา
<card> กำหนดการ์ดในเด็ค
<การเข้าถึง> กำหนดข้อมูลเกี่ยวกับการควบคุมการเข้าถึงเด็ค
<เทมเพลต> กำหนดเทมเพลตรหัสสำหรับการ์ดทั้งหมดในสำรับ

องค์ประกอบข้อความ

องค์ประกอบ WML วัตถุประสงค์
<br> กำหนดเส้นแบ่ง
<p>  กำหนดย่อหน้า
<table> กำหนดตาราง
<td> กำหนดเซลล์ตาราง (ข้อมูลตาราง)
<tr> กำหนดแถวตาราง
<pre> กำหนดข้อความที่จัดรูปแบบไว้ล่วงหน้า

แท็กการจัดรูปแบบข้อความ

องค์ประกอบ WML วัตถุประสงค์
เ <b> กำหนดข้อความตัวหนา
<big>  กำหนดข้อความขนาดใหญ่
เ <em> กำหนดข้อความที่เน้น
<i> กำหนดข้อความตัวเอียง
<small> กำหนดข้อความขนาดเล็ก
<strong> กำหนดข้อความที่ชัดเจน
<u> กำหนดข้อความที่ขีดเส้นใต้

องค์ประกอบภาพ

องค์ประกอบ WML วัตถุประสงค์
<img> กำหนดภาพ

Anchor Elements

องค์ประกอบ WML วัตถุประสงค์
<a> กำหนดจุดยึด
<anchor>  กำหนดจุดยึด

องค์ประกอบของเหตุการณ์

องค์ประกอบ WML วัตถุประสงค์
<do> กำหนด do event handler
<onevent> กำหนดตัวจัดการเหตุการณ์ onevent
<postfield> กำหนดตัวจัดการเหตุการณ์หลังสนาม
<ontimer> กำหนดตัวจัดการเหตุการณ์ ontimer
<onenterforward> กำหนดตัวจัดการ onenterforward
<onenterbackward> กำหนดตัวจัดการแบบย้อนกลับด้านหลัง
<onpick> กำหนดตัวจัดการเหตุการณ์ onpick

องค์ประกอบของงาน

องค์ประกอบ WML วัตถุประสงค์
<go> แสดงถึงการดำเนินการเปลี่ยนไปใช้การ์ดใหม่
<noop> บอกว่าไม่มีอะไรควรทำ
<prev> แสดงถึงการย้อนกลับไปยังการ์ดก่อนหน้า
<รีเฟรช> รีเฟรชตัวแปรการ์ดที่ระบุ

องค์ประกอบการป้อนข้อมูล

องค์ประกอบ WML วัตถุประสงค์
<input>  กำหนดช่องป้อนข้อมูล
<select> กำหนดกลุ่มที่เลือก
<option> กำหนดตัวเลือกในรายการที่เลือกได้
<fieldset> กำหนดชุดของช่องป้อนข้อมูล
<optgroup> กำหนดกลุ่มตัวเลือกในรายการที่เลือกได้

องค์ประกอบตัวแปร

องค์ประกอบ WML วัตถุประสงค์
<setvar> กำหนดและตั้งค่าตัวแปร
<Timer> กำหนดตัวจับเวลา

เช่นเดียวกับภาษาโปรแกรมส่วนใหญ่ WML ยังมีวิธีการวางข้อความแสดงความคิดเห็นไว้ในโค้ด

ความคิดเห็นถูกใช้โดยนักพัฒนาเพื่อเป็นเอกสารในการตัดสินใจเกี่ยวกับการเขียนโปรแกรมภายในโค้ดเพื่อให้สามารถดูแลโค้ดได้ง่ายขึ้น

ความคิดเห็น WML ใช้รูปแบบเดียวกับความคิดเห็น HTML และใช้ไวยากรณ์ต่อไปนี้:

<!-- This will be assumed as a comment -->

สามารถแสดงความคิดเห็นหลายบรรทัดได้ดังนี้:

<!-- This is a multi-line
     comment -->

ผู้เขียน WML สามารถใช้ข้อคิดเห็นได้ทุกที่และตัวแทนผู้ใช้จะไม่แสดงต่อผู้ใช้ ผู้เลียนแบบบางคนอาจบ่นหากมีการแสดงความคิดเห็นไว้ก่อน XML prolog

โปรดทราบว่าความคิดเห็นจะไม่ถูกรวบรวมหรือส่งไปยังตัวแทนผู้ใช้ดังนั้นจึงไม่มีผลกับขนาดของเด็คที่คอมไพล์

เนื่องจากสามารถบรรจุการ์ดได้หลายใบในสำรับเดียวจึงจำเป็นต้องมีกลไกบางอย่างเพื่อเก็บข้อมูลขณะที่ผู้ใช้ข้ามจากการ์ดไปยังการ์ด กลไกนี้มีให้ผ่านตัวแปร WML

WML พิจารณาตัวพิมพ์เล็กและใหญ่ ไม่มีการพับเคสเมื่อแยกวิเคราะห์เด็ค WML ค่าแอตทริบิวต์ที่แจกแจงทั้งหมดเป็นกรณีที่คำนึงถึงตัวพิมพ์เล็กและใหญ่ ตัวอย่างเช่นค่าแอตทริบิวต์ต่อไปนี้แตกต่างกันทั้งหมด id = "Card1", id = "card1" และ id = "CARD1"

ตัวแปรสามารถสร้างและตั้งค่าได้โดยใช้วิธีการต่างๆ ต่อไปนี้เป็นสองตัวอย่าง:

<setvar> องค์ประกอบ:

องค์ประกอบ <setvar> ถูกใช้เป็นผลมาจากการที่ผู้ใช้ดำเนินงานบางอย่าง องค์ประกอบ> setvar> สามารถใช้เพื่อตั้งค่าสถานะของตัวแปรภายในองค์ประกอบต่อไปนี้: <go>, <prev> และ <refresh>

องค์ประกอบนี้รองรับแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
ชื่อ สตริง ตั้งชื่อของตัวแปร
มูลค่า สตริง ตั้งค่าของตัวแปร
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

องค์ประกอบต่อไปนี้จะสร้างตัวแปรชื่อa ที่มีค่า 1000:

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

องค์ประกอบอินพุต:

ตัวแปรจะถูกตั้งค่าผ่านองค์ประกอบอินพุตใด ๆ เช่นอินพุตเลือกตัวเลือกฯลฯ ตัวแปรจะถูกสร้างขึ้นโดยอัตโนมัติซึ่งสอดคล้องกับแอตทริบิวต์ที่มีชื่อขององค์ประกอบอินพุต

ตัวอย่างเช่นองค์ประกอบต่อไปนี้จะสร้างตัวแปรชื่อb :

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

การใช้ตัวแปร:

การขยายตัวแปรเกิดขึ้นที่รันไทม์ในไมโครเบราว์เซอร์หรือโปรแกรมจำลอง ซึ่งหมายความว่าสามารถเชื่อมต่อกับหรือฝังในข้อความอื่นได้

ตัวแปรจะอ้างอิงด้วยเครื่องหมายดอลลาร์นำหน้าและเครื่องหมายดอลลาร์เดียวใด ๆ ในสำรับ WML ของคุณจะถูกตีความว่าเป็นการอ้างอิงตัวแปร

<p> Selected option value is $(b) </p>

ส่วนนี้จะอธิบายองค์ประกอบการจัดรูปแบบข้อความพื้นฐานของ WML

เส้นแบ่ง:

องค์ประกอบ <br /> กำหนดเส้นแบ่งและเบราว์เซอร์ WAP เกือบทั้งหมดรองรับแท็กตัวแบ่งบรรทัด

องค์ประกอบ <br /> รองรับแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
xml: lang language_code ตั้งค่าภาษาที่ใช้ในองค์ประกอบ
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างแสดงการใช้งานองค์ประกอบ <br />

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

<wml>

<card title="Line Break Example">
<p align="center">
This is a <br /> paragraph with a line break.
</p>
</card>

</wml>

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้:

ย่อหน้าข้อความ:

องค์ประกอบ <p> กำหนดย่อหน้าของข้อความและเบราว์เซอร์ WAP จะแสดงย่อหน้าในบรรทัดใหม่เสมอ

ต้องใช้องค์ประกอบ <p> เพื่อกำหนดข้อความรูปภาพหรือตารางใน WML

<p> องค์ประกอบสนับสนุนแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
จัดตำแหน่ง
  • left
  • right
  • center
ใช้เพื่อเปลี่ยนการจัดแนวตามแนวนอนของย่อหน้า
โหมด
  • wrap
  • nowrap
ตั้งค่าว่าย่อหน้าควรตัดบรรทัดหรือไม่
xml: lang language_code ตั้งค่าภาษาที่ใช้ในองค์ประกอบ
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างแสดงการใช้งานของ <p> องค์ประกอบ

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

<wml>

<card title="Paragraph Example">
<p align="center">
This is first  paragraph
</p>
<p align="right">
This is second  paragraph
</p>
</card>

</wml>

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้:

ตาราง WML:

องค์ประกอบ <table> พร้อมด้วย <tr> และ <td> ใช้เพื่อสร้างตารางใน WML WML ไม่อนุญาตให้มีการซ้อนตาราง

ควรใส่องค์ประกอบ <table> ด้วย - ใน <p> ... </p> องค์ประกอบ

องค์ประกอบ <table /> รองรับแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
คอลัมน์ จำนวน ตั้งค่าจำนวนคอลัมน์ในตาราง
จัดตำแหน่ง
  • L
  • C
  • R
ในการระบุการจัดแนวข้อความแนวนอนของคอลัมน์คุณต้องกำหนดตัวอักษรสามตัวให้กับแอตทริบิวต์ align ตัวอักษรแต่ละตัวแสดงถึงการจัดแนวข้อความในแนวนอนของคอลัมน์ ตัวอักษรสามารถเป็น L, C หรือ R ได้ตัวอย่างเช่นหากคุณต้องการใช้การตั้งค่าต่อไปนี้กับตารางของคุณ:
  • คอลัมน์แรกของตาราง - จัดชิดซ้าย

  • คอลัมน์ตารางที่สอง - จัดกึ่งกลาง

  • คอลัมน์ตารางที่สาม - จัดชิดขวา

จากนั้นคุณควรตั้งค่าของแอตทริบิวต์alignเป็น LCR

xml: lang language_code ตั้งค่าภาษาที่ใช้ในองค์ประกอบ
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างแสดงการใช้งานองค์ประกอบ <table>

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

<wml>

<card title="WML Tables">
<p>
<table columns="3" align="LCR">
	<tr>
	  <td>Col 1</td>
	  <td>Col 2</td>
	  <td>Col 3</td>
	</tr>

	<tr>
	  <td>A</td>
	  <td>B</td>
	  <td>C</td>
	</tr>

	<tr>
	  <td>D</td>
	  <td>E</td>
	  <td>F</td>
	</tr>
</table>
</p>
</card>

</wml>

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้:

ข้อความที่จัดรูปแบบไว้ล่วงหน้า:

องค์ประกอบ <pre> ใช้เพื่อระบุข้อความที่จัดรูปแบบไว้ล่วงหน้าใน WML ข้อความที่จัดรูปแบบไว้ล่วงหน้าคือข้อความที่รูปแบบเป็นไปตามที่พิมพ์ในเอกสาร WML

แท็กนี้รักษาช่องว่างสีขาวทั้งหมดที่อยู่ภายในแท็กนี้ ตรวจสอบว่าคุณไม่ได้ใส่แท็กนี้ไว้ข้างใน <p> ... </p>

องค์ประกอบ <pre> รองรับแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
xml: lang language_code ตั้งค่าภาษาที่ใช้ในองค์ประกอบ
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างแสดงการใช้องค์ประกอบ <pre>

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

<wml>

<card title="Preformatted Text">
   <pre>
   This is     preformatted
        text and will appear
 as it it.
</pre>
</card>

</wml>

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้:

WML ไม่สนับสนุนองค์ประกอบ <font> แต่มีองค์ประกอบ WML อื่น ๆ ซึ่งคุณสามารถใช้เพื่อสร้างเอฟเฟ็กต์แบบอักษรต่างๆเช่นข้อความที่ขีดเส้นใต้ข้อความตัวหนาและตัวเอียงเป็นต้น

แท็กเหล่านี้มีให้ในตารางต่อไปนี้:

องค์ประกอบ WML วัตถุประสงค์
เ <b> กำหนดข้อความตัวหนา
<big>  กำหนดข้อความขนาดใหญ่
เ <em> กำหนดข้อความที่เน้น
<i> กำหนดข้อความตัวเอียง
<small> กำหนดข้อความขนาดเล็ก
<strong> กำหนดข้อความที่ชัดเจน
<u> กำหนดข้อความที่ขีดเส้นใต้

องค์ประกอบเหล่านี้สนับสนุนคุณลักษณะต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
xml: lang language_code ตั้งค่าภาษาที่ใช้ในองค์ประกอบ
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างที่แสดงการใช้องค์ประกอบเหล่านี้

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

<wml>

<card title="Text Formatting">
<p>
  <b>bold text</b><br/>
  <big>big text</big><br/>
  <em>emphasized text</em><br/>
  <i>italic text</i><br/>
  <small>small text</small><br/>
  <strong>strong text</strong><br/>
  <u>underlined text</u>
</p>
</card>

</wml>

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้:

องค์ประกอบ <img> ใช้เพื่อรวมรูปภาพในการ์ด WAP อุปกรณ์ไร้สายที่เปิดใช้งาน WAP รองรับเฉพาะรูปแบบภาพ Wireless Bitmap (WBMP)

ภาพ WBMP มีได้สองสีเท่านั้น: ขาวดำ นามสกุลไฟล์ของ WBMP คือ ".wbmp" และประเภท MIME ของ WBMP คือ "image / vnd.wap.wbmp"

องค์ประกอบ <img> สนับสนุนแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
จัดตำแหน่ง
  • top
  • middle
  • bottom
การจัดตำแหน่งของภาพ
alt ข้อความแสดงแทน ตั้งค่าข้อความอื่นที่จะแสดงหากไม่แสดงภาพ
ความสูง
  • px
  • %
ความสูงของภาพเป็นพิกเซลหรือเปอร์เซ็นต์ หากคุณระบุค่าเป็นพิกเซลไวยากรณ์คือ "140" แทนที่จะเป็น "140px"
hspace
  • px
  • %
ตั้งค่าพื้นที่สีขาวทางซ้ายและขวาของภาพ หากคุณระบุค่าเป็นพิกเซลไวยากรณ์คือ "140" แทนที่จะเป็น "140px"
ชาวบ้าน cdata ตั้งค่าการแสดงทางเลือกสำหรับรูปภาพ หากมีการตั้งค่าแอตทริบิวต์นี้เบราว์เซอร์จะใช้แทนแอตทริบิวต์ "src"
src URL รูปภาพ เส้นทางไปยังภาพ wbmp
vspace
  • px
  • %
ตั้งค่าพื้นที่สีขาวด้านบนและด้านล่างของรูปภาพ หากคุณระบุค่าเป็นพิกเซลไวยากรณ์คือ "140" แทนที่จะเป็น "140px"
ความกว้าง
  • px
  • %
ตั้งค่าความกว้างของรูปภาพหากคุณระบุค่าเป็นพิกเซลไวยากรณ์คือ "140" แทนที่จะเป็น "140px"
xml: lang language_code ตั้งค่าภาษาที่ใช้ในองค์ประกอบ
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

วิธีสร้างภาพ ".wbmp"

มีเครื่องมือฟรีบนอินเทอร์เน็ตเพื่อสร้างภาพ ".wbmp"

Nokia Mobile Internet Toolkit (NMIT) มาพร้อมกับโปรแกรมแก้ไขภาพ WBMP ที่คุณสามารถใช้ได้ คุณสามารถแปลงไฟล์รูปภาพ GIF หรือ JPG ที่มีอยู่เป็นไฟล์ WBMP โดยใช้ NMIT

เครื่องมือฟรีอีกอย่างคือImageMagickซึ่งสามารถช่วยคุณสร้างภาพ WBMP

ต่อไปนี้เป็นตัวอย่างที่แสดงการใช้องค์ประกอบ <img>

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

<wml>

<card title="WML Images">
<p>
This is Thumb image
<img src="/images/thumb.wbmp" alt="Thumb Image"/>
</p>

<p>
This is Heart image
<img src="/images/heart.wbmp" alt="Heart Image"/>
</p>

</card>

</wml>

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้:

องค์ประกอบ <table> พร้อมด้วย <tr> และ <td> ใช้เพื่อสร้างตารางใน WML WML ไม่อนุญาตให้มีการซ้อนตาราง

ควรใส่องค์ประกอบ <table> ด้วย - ใน <p> ... </p> องค์ประกอบ

องค์ประกอบ <table /> รองรับแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
คอลัมน์ จำนวน ตั้งค่าจำนวนคอลัมน์ในตาราง
จัดตำแหน่ง
  • L
  • C
  • R
ในการระบุการจัดแนวข้อความแนวนอนของคอลัมน์คุณต้องกำหนดตัวอักษรสามตัวให้กับแอตทริบิวต์ align ตัวอักษรแต่ละตัวแสดงถึงการจัดแนวข้อความในแนวนอนของคอลัมน์ ตัวอักษรสามารถเป็น L, C หรือ R ได้ตัวอย่างเช่นหากคุณต้องการใช้การตั้งค่าต่อไปนี้กับตารางของคุณ:
  • คอลัมน์แรกของตาราง - จัดชิดซ้าย

  • คอลัมน์ตารางที่สอง - จัดกึ่งกลาง

  • คอลัมน์ตารางที่สาม - จัดชิดขวา

จากนั้นคุณควรตั้งค่าของแอตทริบิวต์alignเป็น LCR

xml: lang language_code ตั้งค่าภาษาที่ใช้ในองค์ประกอบ
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างแสดงการใช้งานองค์ประกอบ <table>

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

<wml>

<card title="WML Tables">
<p>
<table columns="3" align="LCR">
	<tr>
	  <td>Col 1</td>
	  <td>Col 2</td>
	  <td>Col 3</td>
	</tr>

	<tr>
	  <td>A</td>
	  <td>B</td>
	  <td>C</td>
	</tr>

	<tr>
	  <td>D</td>
	  <td>E</td>
	  <td>F</td>
	</tr>
</table>
</p>
</card>

</wml>

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้:

WML ให้คุณมีตัวเลือกในการเชื่อมโยงการ์ดต่างๆโดยใช้ลิงก์จากนั้นเลื่อนดูการ์ดต่างๆ

มีองค์ประกอบ WML สององค์ประกอบคือ <anchor> และ <a> ซึ่งสามารถใช้เพื่อสร้างลิงก์ WML

WML <anchor> องค์ประกอบ:

คู่แท็ก <anchor> ... </anchor> ใช้เพื่อสร้างลิงก์จุดยึด ใช้ร่วมกับองค์ประกอบ WML อื่น ๆ ที่เรียกว่า <go />, <refresh> หรือ <prev /> องค์ประกอบเหล่านี้เรียกว่าองค์ประกอบของงานและบอกเบราว์เซอร์ WAP ว่าต้องทำอย่างไรเมื่อผู้ใช้เลือกลิงก์จุดยึด

คุณสามารถใส่ข้อความหรือรูปภาพพร้อมกับแท็กงานในคู่แท็ก <anchor> ... </anchor>

องค์ประกอบ <anchor> รองรับแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
หัวข้อ cdata กำหนดข้อความที่ระบุลิงก์
xml: lang language_code ตั้งค่าภาษาที่ใช้ในองค์ประกอบ
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างที่แสดงการใช้องค์ประกอบ <anchor>

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

<wml>

<card title="Anchor Element">
<p>
   <anchor>
      <go href="nextpage.wml"/>
   </anchor>
</p>
<p>
   <anchor>
      <prev/>
   </anchor>
</p>
</card>

</wml>

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้:

WML <a> องค์ประกอบ:

นอกจากนี้ยังสามารถใช้คู่แท็ก <a> ... </a> เพื่อสร้างลิงก์จุดยึดและเป็นวิธีที่ต้องการในการสร้างลิงก์เสมอ

คุณสามารถใส่ข้อความหรือรูปภาพไว้ในแท็ก <a> ... </a>

องค์ประกอบ <a> สนับสนุนแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
href URL กำหนด URL ของหน้าที่ชอบ
หัวข้อ cdata กำหนดข้อความที่ระบุลิงก์
xml: lang language_code ตั้งค่าภาษาที่ใช้ในองค์ประกอบ
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างแสดงการใช้งานองค์ประกอบ <a>

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

<wml>

<card title="A Element">
<p> Link to Next Page: 
   <a href="nextpage.wml">Next Page</a>
</p>
</card>

</wml>

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้:

งาน WML เป็นองค์ประกอบที่ระบุการดำเนินการที่จะดำเนินการโดยเบราว์เซอร์แทนที่จะเป็นสิ่งที่จะแสดง ตัวอย่างเช่นการดำเนินการในการเปลี่ยนการ์ดใหม่จะแสดงโดยองค์ประกอบงาน <go> และการดำเนินการกลับไปยังการ์ดก่อนหน้าที่เข้าชมจะแสดงด้วยองค์ประกอบงาน <prev> องค์ประกอบของงานห่อหุ้มข้อมูลทั้งหมดที่จำเป็นในการดำเนินการ

WML จัดเตรียมองค์ประกอบสี่อย่างต่อไปนี้เพื่อจัดการงาน WML สี่งานที่เรียกว่า go task, pre task, refresh task และ noop taks

งาน <go>:

ตามชื่อที่แนะนำงาน <go> แสดงถึงการดำเนินการไปยังการ์ดใหม่

องค์ประกอบ <go> รองรับแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
href URL ให้ URL ของการ์ดใหม่ URL สัมพัทธ์ได้รับการแก้ไขโดยสัมพันธ์กับการ์ดปัจจุบัน
วิธี
  • get
  • post
ระบุวิธีการที่ควรใช้เพื่อดึงข้อมูลเด็ค ค่านี้ต้องเป็นค่า get หรือ post ซึ่งสอดคล้องกับเมธอด GET และ POST ของ HTTP

เมื่อใช้ method="get"ข้อมูลจะถูกส่งไปตามคำขอด้วย? ข้อมูลต่อท้าย url วิธีนี้มีข้อเสียคือสามารถใช้ได้กับข้อมูลจำนวน จำกัด เท่านั้นและหากคุณส่งข้อมูลที่ละเอียดอ่อนจะแสดงบนหน้าจอและบันทึกไว้ในบันทึกของเว็บเซิร์ฟเวอร์ ดังนั้นอย่าใช้วิธีนี้หากคุณกำลังส่งรหัสผ่านเป็นต้น

ด้วย method="post"ข้อมูลจะถูกส่งเป็นคำขอพร้อมกับข้อมูลที่ส่งในเนื้อหาของคำขอ วิธีนี้ไม่มีขีด จำกัด และข้อมูลที่ละเอียดอ่อนจะไม่ปรากฏใน URL

sendreferer
  • true
  • false
หากตั้งค่าเป็นจริงเบราว์เซอร์จะส่ง URL ของเด็คปัจจุบันพร้อมกับคำขอ URL นี้ถูกส่งเป็น URL สัมพัทธ์ถ้าเป็นไปได้ จุดประสงค์ของสิ่งนี้คือเพื่อให้เซิร์ฟเวอร์สามารถควบคุมการเข้าถึงบนเด็คได้อย่างง่ายดายโดยขึ้นอยู่กับว่าเด็คใดที่เชื่อมโยงกับเด็ค ตัวอย่างเช่นการใช้ HTTP แอตทริบิวต์นี้จะถูกส่งในส่วนหัวของ HTTP Referer
ยอมรับชุดอักขระ charset_list ระบุรายการชุดอักขระที่คั่นด้วยคอมมาหรือเว้นวรรคที่สามารถเข้ารหัสข้อมูลที่ส่งไปยังเซิร์ฟเวอร์ในคำขอ POST ค่าเริ่มต้นคือ "ไม่ทราบ"
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างที่แสดงการใช้องค์ประกอบ <go>

<?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>
       Chapter 2 : <go href="chapter2.wml"/>
   </anchor>
</p>
</card>
</wml>

อีกตัวอย่างหนึ่งที่แสดงวิธีการอัปโหลดข้อมูลโดยใช้ Get Method

<?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 Get Method 
      <go href="chapter2.wml?x=17&y=42" method="get"/>
   </anchor>
</p>
</card>
</wml>

อีกตัวอย่างหนึ่งที่แสดงวิธีการอัปโหลดข้อมูลโดยใช้องค์ประกอบ <setvar>

<?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"> 
	      <setvar name="x" value="17"/> 
  	      <setvar name="y" value="42"/> 
	  </go>
   </anchor>
</p>
</card>
</wml>

อีกตัวอย่างหนึ่งที่แสดงวิธีการอัปโหลดข้อมูลโดยใช้องค์ประกอบ <postfiled>

<?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>:

งาน <prev> แสดงถึงการดำเนินการกลับไปยังการ์ดที่เยี่ยมชมก่อนหน้านี้บนสแต็กประวัติ เมื่อดำเนินการนี้รายการบนสุดจะถูกลบออกจากกองประวัติและการ์ดนั้นจะแสดงอีกครั้งหลังจากการกำหนดตัวแปร <setvar> ใด ๆ ในงาน <prev> มีผล

หากไม่มี URL ก่อนหน้าการระบุ <prev> จะไม่มีผล

องค์ประกอบ <prev> รองรับแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างแสดงการใช้งานองค์ประกอบ <prev>

<?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>
        Previous Page :<prev/>
   </anchor>
</p>
</card>
</wml>

สถานการณ์หนึ่งที่อาจเป็นประโยชน์ในการรวมตัวแปรในงาน <prev> คือหน้าเข้าสู่ระบบซึ่งแจ้งให้ใส่ชื่อผู้ใช้และรหัสผ่าน ในบางสถานการณ์คุณอาจต้องการล้างฟิลด์รหัสผ่านเมื่อกลับไปที่การ์ดล็อกอินโดยบังคับให้ผู้ใช้ป้อนอีกครั้ง ซึ่งสามารถทำได้ด้วยโครงสร้างเช่น:

<?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>:

งาน <refresh> เป็นงานที่ง่ายที่สุดที่ทำบางอย่างได้จริง เอฟเฟกต์ของมันคือดำเนินการกำหนดตัวแปรที่ระบุโดยองค์ประกอบ <setvar> จากนั้นแสดงการ์ดปัจจุบันอีกครั้งด้วยค่าใหม่ งาน <go> และ <prev> จะดำเนินการเหมือนกันก่อนที่จะแสดงการ์ดใหม่

งาน <refresh> มักใช้เพื่อดำเนินการ "รีเซ็ต" บางประเภทบนการ์ด

องค์ประกอบ <refresh> รองรับแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างที่แสดงการใช้องค์ประกอบ <refresh>

<?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>:

วัตถุประสงค์ของงาน <noop> คือการไม่ทำอะไรเลย (ไม่มีการดำเนินการ)

การใช้งานจริงเพียงอย่างเดียวสำหรับงานนี้คือการเชื่อมต่อกับเทมเพลต

องค์ประกอบ <noop> รองรับแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างแสดงการใช้งานองค์ประกอบ <noop>

<?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 มีตัวเลือกต่างๆเพื่อให้ผู้ใช้ป้อนข้อมูลผ่านแอปพลิเคชัน WAP

ก่อนอื่นเราจะดูตัวเลือกต่าง ๆ เพื่อให้ผู้ใช้สามารถเลือกได้อย่างตรงไปตรงมาระหว่างรายการต่างๆ โดยปกติจะอยู่ในรูปแบบของเมนูและเมนูย่อยซึ่งช่วยให้ผู้ใช้เจาะลึกข้อมูลที่ต้องการได้

WML <select> องค์ประกอบ:

องค์ประกอบ <select> ... </select> WML ใช้เพื่อกำหนดรายการการเลือกและแท็ก <option> ... </option> ใช้เพื่อกำหนดรายการในรายการการเลือก รายการจะแสดงเป็นปุ่มเรดิโอในบางเบราว์เซอร์ WAP คู่แท็ก <option> ... </option> ควรอยู่ภายในแท็ก <select> ... </select>

องค์ประกอบนี้สนับสนุนคุณลักษณะต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
ฉันชื่อ ข้อความ ตั้งชื่อตัวแปรที่ตั้งค่าด้วยผลลัพธ์ดัชนีของการเลือก
ivalue ข้อความ ตั้งค่าองค์ประกอบตัวเลือกที่เลือกไว้ล่วงหน้า
หลาย
  • true
  • false
ตั้งค่าว่าจะเลือกได้หลายรายการหรือไม่ ค่าเริ่มต้นคือ "เท็จ"
ชื่อ ข้อความ ตั้งชื่อตัวแปรที่ตั้งค่าด้วยผลลัพธ์ของการเลือก
tabindex จำนวน ตั้งค่าตำแหน่งแท็บสำหรับองค์ประกอบที่เลือก
หัวข้อ ข้อความ ตั้งชื่อรายการ
มูลค่า ข้อความ ตั้งค่าเริ่มต้นของตัวแปรในแอตทริบิวต์ "name"
xml: lang language_code ตั้งค่าภาษาที่ใช้ในองค์ประกอบ
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างที่แสดงการใช้งานขององค์ประกอบทั้งสองนี้

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

<wml>

<card title="Selectable List">
<p> Select a Tutorial :
 <select>
  <option value="htm">HTML Tutorial</option>
  <option value="xml">XML Tutorial</option>
  <option value="wap">WAP Tutorial</option>
 </select>
</p>
</card>

</wml>

เมื่อคุณจะโหลดโปรแกรมนี้โปรแกรมจะแสดงหน้าจอต่อไปนี้:

เมื่อคุณไฮไลต์และป้อนตัวเลือกแล้วจะแสดงหน้าจอต่อไปนี้:

คุณต้องการให้ตัวเลือกในการเลือกหลายตัวเลือกจากนั้นตั้งค่าหลายแอตทริบิวต์เป็นจริงดังนี้

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

<wml>

<card title="Selectable List">
<p> Select a Tutorial :
 <select multiple="true">
  <option value="htm">HTML Tutorial</option>
  <option value="xml">XML Tutorial</option>
  <option value="wap">WAP Tutorial</option>
 </select>
</p>
</card>

</wml>

จะมีหน้าจอให้เลือกหลายตัวเลือกดังนี้:

WML <input> องค์ประกอบ:

องค์ประกอบ <input /> ใช้เพื่อสร้างช่องป้อนข้อมูลและช่องป้อนข้อมูลใช้เพื่อรับข้อมูลที่เป็นตัวอักษรและตัวเลขจากผู้ใช้

องค์ประกอบนี้สนับสนุนคุณลักษณะต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
ชื่อ ข้อความ ชื่อของตัวแปรที่ตั้งค่าด้วยผลลัพธ์ของอินพุตของผู้ใช้
ความยาวสูงสุด จำนวน กำหนดจำนวนอักขระสูงสุดที่ผู้ใช้สามารถป้อนในฟิลด์
ว่าง
  • true
  • false
ตั้งค่าว่าผู้ใช้สามารถปล่อยให้ช่องป้อนข้อมูลว่างได้หรือไม่ ค่าเริ่มต้นคือ "เท็จ"
รูปแบบ N X x M เมตร* ฉnf








ตั้งค่ารูปแบบข้อมูลสำหรับช่องป้อนข้อมูล ค่าเริ่มต้นคือ "* M"

A = อักษรตัวพิมพ์ใหญ่หรืออักขระเครื่องหมายวรรคตอน
a = อักขระตัวพิมพ์เล็กหรืออักขระเครื่องหมายวรรคตอน
N = อักขระตัวเลข
X = อักขระตัวพิมพ์ใหญ่
x = อักขระตัวพิมพ์เล็ก
M = อักขระทั้งหมด
m = อักขระทั้งหมด
* f = อักขระจำนวนเท่าใดก็ได้ แทนที่fด้วยตัวอักษรตัวใดตัวหนึ่งด้านบนเพื่อระบุอักขระที่ผู้ใช้ป้อนได้
nf = แทนที่nด้วยตัวเลขตั้งแต่ 1 ถึง 9 เพื่อระบุจำนวนอักขระที่ผู้ใช้สามารถป้อนได้ แทนที่fด้วยตัวอักษรตัวใดตัวหนึ่งด้านบนเพื่อระบุอักขระที่ผู้ใช้สามารถป้อนได้

ขนาด จำนวน ตั้งค่าความกว้างของช่องป้อนข้อมูล
tabindex จำนวน ตั้งค่าตำแหน่งแท็บสำหรับองค์ประกอบที่เลือก
หัวข้อ ข้อความ ตั้งชื่อรายการ
ชนิด
  • text
  • password
ระบุประเภทของช่องป้อนข้อมูล ค่าเริ่มต้นคือ "ข้อความ" ฟิลด์รหัสผ่านใช้เพื่อรับรหัสผ่านเพื่อวัตถุประสงค์ในการตรวจสอบสิทธิ์
มูลค่า ข้อความ ตั้งค่าเริ่มต้นของตัวแปรในแอตทริบิวต์ "name"
xml: lang language_code ตั้งค่าภาษาที่ใช้ในองค์ประกอบ
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างที่แสดงการใช้งานองค์ประกอบนี้

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

<wml>

<card title="Input Fields">
<p> Enter Following Information:<br/> 
 Name: <input name="name" size="12"/>
 Age :  <input name="age" size="12" format="*N"/>
 Sex :  <input name="sex" size="12"/> 
</p>
</card>

</wml>

ซึ่งจะแสดงหน้าจอต่อไปนี้เพื่อป้อนข้อมูลที่จำเป็น:

WML <fieldset> องค์ประกอบ:

องค์ประกอบ <fieldset /> ใช้เพื่อจัดกลุ่มช่องป้อนข้อมูลต่างๆหรือรายการที่เลือกได้

องค์ประกอบนี้สนับสนุนคุณลักษณะต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
หัวข้อ ข้อความ ตั้งชื่อรายการ
xml: lang language_code ตั้งค่าภาษาที่ใช้ในองค์ประกอบ
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างที่แสดงการใช้งานองค์ประกอบนี้

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

<wml>

<card title="Grouped Fields">
<p> 
<fieldset title="Personal Info">
 Name: <input name="name" size="12"/>
 Age :  <input name="age" size="12" format="*N"/>
 Sex :  <input name="sex" size="12"/> 
</fieldset>
</p>
</card>

</wml>

ซึ่งจะแสดงหน้าจอต่อไปนี้เพื่อป้อนข้อมูลที่จำเป็น ผลลัพธ์นี้อาจแตกต่างจากเบราว์เซอร์แต่ละเบราว์เซอร์

WML <optgroup> องค์ประกอบ

องค์ประกอบ <optgroup /> ใช้เพื่อจัดกลุ่มตัวเลือกต่างๆเข้าด้วยกันภายในรายการที่เลือกได้

องค์ประกอบนี้สนับสนุนคุณลักษณะต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
หัวข้อ ข้อความ ตั้งชื่อรายการ
xml: lang language_code ตั้งค่าภาษาที่ใช้ในองค์ประกอบ
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างที่แสดงการใช้งานองค์ประกอบนี้

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

<wml>

<card title="Selectable List"> 
<p>
 <select>
   <optgroup title="India">
    <option value="delhi">Delhi</option>
    <option value="mumbai">Mumbai</option>
    <option value="hyderabad">Hyderabad</option>
   </optgroup>
   <optgroup title="USA">
    <option value="ohio">Ohio</option>
    <option value="maryland">Maryland</option>
    <option value="washington">Washingtone</option>
   </optgroup>
 </select>
</p>
</card>

</wml>

เมื่อผู้ใช้โหลดโค้ดด้านบนจะมีให้เลือกสองตัวเลือก:

เมื่อผู้ใช้เลือกตัวเลือกใดตัวเลือกหนึ่งระบบจะให้ตัวเลือกสุดท้ายเท่านั้นที่จะเลือก ดังนั้นหากผู้ใช้เลือกอินเดียระบบจะแสดงตัวเลือกต่อไปนี้ให้คุณเลือก:

หลายครั้งคุณจะต้องการให้ผู้ใช้ของคุณส่งข้อมูลบางส่วนไปยังเซิร์ฟเวอร์ของคุณ เช่นเดียวกับHTML Form WML ยังมีกลไกในการส่งข้อมูลผู้ใช้ไปยังเว็บเซิร์ฟเวอร์

ในการส่งข้อมูลไปยังเซิร์ฟเวอร์ใน WML คุณต้องมีแท็ก <go> ... </go> พร้อมด้วยแท็ก <postfield /> แท็ก <postfield /> ควรอยู่ในคู่แท็ก <go> ... </go>

ในการส่งข้อมูลไปยังเซิร์ฟเวอร์เรารวบรวมตัวแปร WML ที่ตั้งไว้ทั้งหมดและใช้องค์ประกอบ <postfield> เพื่อส่งไปยังเซิร์ฟเวอร์ องค์ประกอบ <go> ... </go> ใช้เพื่อตั้งค่าวิธีการโพสต์เป็น POST หรือ GET และระบุสคริปต์ฝั่งเซิร์ฟเวอร์เพื่อจัดการข้อมูลที่อัปโหลด

ในบทก่อนหน้านี้เราได้อธิบายวิธีต่างๆในการป้อนข้อมูลจากผู้ใช้ องค์ประกอบอินพุตเหล่านี้ตั้งค่าตัวแปร WML เป็นค่าที่ป้อน เรายังรู้วิธีรับค่าจากตัวแปร WML ตอนนี้ตัวอย่างต่อไปนี้จะแสดงวิธีการส่งชื่อฟิลด์อายุและเพศสามช่องไปยังเซิร์ฟเวอร์

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

<wml>

<card id="card1" title="WML Form">
<p>
   Name: <input name="name" size="12"/>
   Sex : <select name="sex">
      <option value="male">Male</option>
      <option value="female">Female</option>
      </select>
   Age :  <input name="age" size="12" format="*N"/>
   <anchor>
      <go method="get" href="process.php">
          <postfield name="name" value="$(name)"/>
          <postfield name="age" value="$(age)"/> <postfield name="sex" value="$(sex)"/>
      </go>
      Submit Data
    </anchor>
</p>
</card>

</wml>

เมื่อคุณดาวน์โหลดรหัสข้างต้นบนอุปกรณ์ WAP ของคุณก็จะให้คุณเลือกที่จะใส่สามช่องชื่ออายุและเพศสัมพันธ์และเชื่อมโยงหนึ่งส่งข้อมูล คุณจะป้อนสามฟิลด์จากนั้นในที่สุดคุณจะเลือกลิงค์ส่งข้อมูลเพื่อส่งข้อมูลที่ป้อนไปยังเซิร์ฟเวอร์

วิธีแอตทริบิวต์ของ <ไป> แท็กระบุว่าวิธี HTTP ควรจะใช้ในการส่งข้อมูลแบบฟอร์ม

หากใช้เมธอด HTTP POST ข้อมูลแบบฟอร์มที่จะส่งจะอยู่ในเนื้อหาข้อความของคำขอ หากใช้เมธอด HTTP GET ข้อมูลแบบฟอร์มที่จะส่งจะต่อท้าย URL เนื่องจาก URL สามารถมีอักขระได้จำนวน จำกัด เมธอด GET จึงมีข้อเสียคือมีการ จำกัด ขนาดสำหรับข้อมูลที่จะส่ง หากข้อมูลผู้ใช้มีอักขระที่ไม่ใช่ ASCII คุณควรใช้วิธีการ POST เพื่อหลีกเลี่ยงปัญหาการเข้ารหัส

มีความแตกต่างที่สำคัญอย่างหนึ่งระหว่าง HTML และ WML ใน HTML แอตทริบิวต์ name ของแท็ก <input> และ <select> ถูกใช้เพื่อระบุชื่อของพารามิเตอร์ที่จะส่งในขณะที่ใน WML จะใช้แอตทริบิวต์ name ของแท็ก <postfield> เพื่อทำสิ่งเดียวกัน ใน WML แอตทริบิวต์ชื่อของ <input> และ <select> ถูกใช้เพื่อระบุชื่อของตัวแปรสำหรับจัดเก็บข้อมูลแบบฟอร์ม

บทต่อไปจะสอนวิธีจัดการข้อมูลที่อัปโหลดเมื่อสิ้นสุดเซิร์ฟเวอร์

หากคุณรู้วิธีการเขียนสคริปต์ฝั่งเซิร์ฟเวอร์สำหรับ Web Application แล้วการเขียนโปรแกรม Server Side สำหรับแอปพลิเคชัน WML นั้นง่ายมากสำหรับคุณ คุณสามารถใช้เทคโนโลยีฝั่งเซิร์ฟเวอร์ที่คุณชื่นชอบเพื่อประมวลผลตามที่แอปพลิเคชันอินเทอร์เน็ตบนมือถือของคุณต้องการ

ที่ฝั่งเซิร์ฟเวอร์ชื่อพารามิเตอร์จะถูกใช้เพื่อดึงข้อมูลแบบฟอร์ม

พิจารณาตัวอย่างต่อไปนี้จากบทก่อนหน้าเพื่อส่งชื่ออายุและเพศของบุคคล:

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

<wml>

<card id="card1" title="WML Form">
<p>
   Name: <input name="name" size="12"/>
   Sex : <select name="sex">
      <option value="male">Male</option>
      <option value="female">Female</option>
      </select>
   Age :  <input name="age" size="12" format="*N"/>
   <anchor>
      <go method="get" href="process.php">
          <postfield name="name" value="$(name)"/> <postfield name="age" value="$(age)"/>
          <postfield name="sex" value="$(sex)"/>
      </go>
      Submit Data
    </anchor>
</p>
</card>

</wml>

WML และ PHP

ตอนนี้เราสามารถเขียนสคริปต์ฝั่งเซิร์ฟเวอร์เพื่อจัดการข้อมูลที่ส่งโดยใช้ PHP, PERL, ASP หรือ JSP ฉันจะแสดงสคริปต์ฝั่งเซิร์ฟเวอร์ที่เขียนด้วย PHP ด้วยวิธี HTTP GET

ใส่โค้ด PHP ต่อไปนี้ในไฟล์ process.php ในไดเร็กทอรีเดียวกับที่คุณมีไฟล์ WML

<?php echo 'Content-type: text/vnd.wap.wml'; ?>
<?php echo '<?xml version="1.0"?'.'>'; ?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">

<wml>
  
  <card id="card1" title="WML Response">
    <p>
      Data received at the server:<br/>
      Name: <?php echo $_GET["name"]; ?><br/>
      Age: <?php echo $_GET["age"]; ?><br/> Sex: <?php echo $_GET["sex"]; ?><br/>
    </p>
  </card>

</wml>

หากคุณใช้วิธี HTTP POST คุณจะต้องเขียนสคริปต์ PHP เพื่อจัดการกับข้อมูลที่ได้รับ ในขณะที่ส่งเอาต์พุตกลับไปยังเบราว์เซอร์อย่าลืมตั้งค่าประเภท MIME ของเอกสารเป็น "text / vnd.wap.wml"

ด้วยวิธีนี้คุณสามารถเขียน Web Application เต็มรูปแบบซึ่งเกี่ยวข้องกับธุรกรรมฐานข้อมูลจำนวนมาก

คุณสามารถใช้แนวคิด PERL CGIเพื่อเขียนไซต์ WAP แบบไดนามิก

เหตุการณ์ในภาษาธรรมดาสามารถกำหนดได้ว่าเกิดอะไรขึ้น ในการเขียนโปรแกรม eventมีความหมายเหมือนกัน แต่มีความแตกต่างที่สำคัญอย่างหนึ่ง เมื่อมีสิ่งใดเกิดขึ้นในระบบคอมพิวเตอร์ระบบเองก็ต้อง(1) ตรวจพบว่ามีบางอย่างเกิดขึ้นและ (2) รู้ว่าต้องทำอย่างไร

ภาษา WML ยังรองรับเหตุการณ์และคุณสามารถระบุการดำเนินการที่จะดำเนินการเมื่อใดก็ตามที่เกิดเหตุการณ์ การดำเนินการนี้อาจอยู่ในรูปของ WMLScript หรือในรูปแบบของ WML

WML รองรับเหตุการณ์สี่ประเภทดังต่อไปนี้:

  • onenterbackward : เหตุการณ์นี้เกิดขึ้นเมื่อผู้ใช้ตีการ์ดด้วยวิธีการนำทางถอยหลังตามปกติ นั่นคือผู้ใช้กดปุ่มย้อนกลับบนการ์ดในภายหลังและกลับมาที่การ์ดใบนี้ในกองประวัติ

  • onenterforward : เหตุการณ์นี้เกิดขึ้นเมื่อผู้ใช้กดการ์ดด้วยวิธีการนำทางไปข้างหน้าตามปกติ

  • onpick : นี่เป็นเหมือนแอตทริบิวต์มากกว่า แต่จะถูกใช้เหมือนเหตุการณ์ เหตุการณ์นี้เกิดขึ้นเมื่อรายการของรายการการเลือกถูกเลือกหรือยกเลิกการเลือก

  • ontimer : เหตุการณ์นี้ใช้เพื่อทริกเกอร์เหตุการณ์หลังจากช่วงเวลาที่กำหนด

ชื่อเหตุการณ์เหล่านี้คำนึงถึงขนาดตัวพิมพ์และต้องเป็นตัวพิมพ์เล็ก

WML <onevent> องค์ประกอบ:

แท็ก <onevent> ... </onevent> ใช้เพื่อสร้างตัวจัดการเหตุการณ์ การใช้งานอยู่ในรูปแบบต่อไปนี้:

<onevent type="event_type">
   A task to be performed.
</onevent>

คุณสามารถใช้go, prevหรือrefresh task ภายในแท็ก <onevent> ... </onevent> กับเหตุการณ์

องค์ประกอบ <onevent> สนับสนุนแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
ชนิด
  • onenterbackward
  • onenterforward
  • onpick
  • ontimer
กำหนดประเภทของเหตุการณ์ที่เกิดขึ้น
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างที่แสดงการใช้งานองค์ประกอบ <onevent> ในตัวอย่างนี้เมื่อใดก็ตามที่คุณพยายามกลับจากไพ่ใบที่สองไปยังไพ่ใบแรกonenterbackwardเกิดขึ้นซึ่งย้ายคุณไปยังไพ่หมายเลขสาม คัดลอกและวางโปรแกรมนี้และลองเล่นกับมัน

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

<wml>
<onevent type="onenterbackward">
  <go href="#card3"/>
</onevent>

<card id="card1" title="Card 1">
<p>
  <anchor>
     <go href="#card2"/>
     Go to card 2
  </anchor>
</p>
</card>
<card id="card2" title="Card 2">
<p>
   <anchor>
   <prev/>
      Going backwards
   </anchor>
</p>
</card>
<card id="card3" title="Card 3">
<p>
Hello World!
</p>
</card>
</wml>

บทก่อนหน้านี้ได้อธิบายถึงเหตุการณ์ที่เกิดขึ้นโดยผู้ใช้และเราจะจัดการกับเหตุการณ์เหล่านี้โดยใช้ตัวจัดการเหตุการณ์อย่างไร

ในบางครั้งคุณอาจต้องการให้บางสิ่งเกิดขึ้นโดยที่ผู้ใช้ไม่จำเป็นต้องเปิดใช้งานการควบคุมอย่างชัดเจน ใช่ WML ให้คุณontimer เหตุการณ์ที่จะจัดการนี้

เหตุการณ์ ontimer จะถูกทริกเกอร์เมื่อตัวจับเวลาของการ์ดนับถอยหลังจากหนึ่งถึงศูนย์ซึ่งหมายความว่าจะไม่เกิดขึ้นหากตัวจับเวลาเริ่มต้นเป็นระยะหมดเวลาเป็นศูนย์

คุณสามารถผูกงานกับเหตุการณ์นี้ด้วยองค์ประกอบ <onevent> นี่คือไวยากรณ์:

<onevent type="ontimer">
   A task to be performed.
</onevent>

ในที่นี้งานอาจเป็น <go>, <prev> หรือ <refresh>

WML <timer> องค์ประกอบ:

มีการประกาศตัวจับเวลาภายในการ์ด WML ที่มีองค์ประกอบ <timer> ต้องเป็นไปตามองค์ประกอบ <onevent> หากมีอยู่ (หากไม่มีองค์ประกอบ <onevent> <timer> ต้องเป็นองค์ประกอบแรกใน <card>) อาจมี <timer> ไม่เกินหนึ่งรายการในการ์ด

องค์ประกอบ <timer> รองรับแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
ชื่อ ข้อความ ตั้งชื่อสำหรับองค์ประกอบ
มูลค่า จำนวน ระบุตัวจับเวลาหลังจากที่ตัวจับเวลาจะหมดลง การหมดเวลาระบุไว้ในหน่วยของหนึ่งในสิบของวินาที
ชั้นเรียน class_data ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างที่แสดงการใช้งานองค์ประกอบ <timer>

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

<wml>

<card id="splash" title="splash">
  <onevent type="ontimer">
    <go href="#welcome"/>
  </onevent>
  <timer value="50"/>
<p>
  <a href="#welcome">Enter</a>
</p>
</card>

<card id="welcome" title="Welcome">
<p>
Welcome to the main screen.
</p>
</card>
</wml>

เมื่อคุณโหลดโปรแกรมนี้จะแสดงหน้าจอต่อไปนี้:

หากคุณไม่ได้เลือกให้ Enter หลังจากนั้น 5 วินาทีคุณจะถูกนำไปที่ Welcome หน้าและหน้าจอต่อไปนี้จะแสดงโดยอัตโนมัติ

<template> ใช้เพื่อใช้องค์ประกอบ <do> และ <onevent> กับการ์ดทั้งหมดในเด็ค องค์ประกอบนี้กำหนดเทมเพลตสำหรับการ์ดทั้งหมดในเด็คและโค้ดในแท็ก <template> จะถูกเพิ่มให้กับการ์ดแต่ละใบในเด็ค

คุณสามารถแทนที่องค์ประกอบ <do> ของเทมเพลตได้โดยการกำหนดองค์ประกอบ <do> อื่นที่มีค่าแอตทริบิวต์ชื่อเดียวกันในการ์ด WML

องค์ประกอบ <template> สนับสนุนแอตทริบิวต์ต่อไปนี้:

แอตทริบิวต์ มูลค่า คำอธิบาย
onenterbackward URL เกิดขึ้นเมื่อผู้ใช้เข้าไปในการ์ดโดยใช้งาน "ก่อนหน้า"
onenterforward URL เกิดขึ้นเมื่อผู้ใช้ไปยังการ์ดโดยใช้งาน "go"
ontimer URL เกิดขึ้นเมื่อหมดเวลา "ตัวจับเวลา"
ชั้นเรียน ข้อมูลคลาส ตั้งชื่อคลาสสำหรับองค์ประกอบ
id รหัสองค์ประกอบ รหัสเฉพาะสำหรับองค์ประกอบ

ต่อไปนี้เป็นตัวอย่างที่แสดงการใช้องค์ประกอบ <go>

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

<wml>
  <template>
    <do name="main_menu" type="accept" label="Chapters">
      <go href="chapters"/>
    </do>
    <do name="menu_1" type="accept" label="Chapter 1">
      <go href="#chapter1"/>
    </do>
    <do name="menu_2" type="accept" label="Chapter 2">
      <go href="#chapter2"/>
    </do>
    <do name="menu_3" type="accept" label="Chapter 3">
      <go href="#chapter3"/>
    </do>
    <do name="menu_4" type="accept" label="Chapter 4">
      <go href="#chapter4"/>
    </do>
  </template>

  <card id="chapters" title="WML Tutorial">
    <p>
      Select One Chapter:<br/>
      <anchor>
        <go href="#chapter1"/>
        Chapter 1: WML Overview
      </anchor><br />

      <anchor>
        <go href="#chapter2"/>
        Chapter 2: WML Environment
      </anchor><br />

      <anchor>
        <go href="#chapter3"/>
        Chapter 3: WML Syntax
      </anchor><br />

      <anchor>
        <go href="#chapter4"/>
        Chapter 4: WML Elements
      </anchor><br />
    </p>
  </card>

  <card id="chapter1" title="WML Tutorial Ch1">
    <p>
      <em>Chapter 1: WML Introduction</em><br/>
      ...
    </p>
  </card>

  <card id="chapter2" title="WML Tutorial Ch2">
    <p>
      <em>Chapter 2: WML Environment</em><br/>
      ...
    </p>
  </card>

  <card id="chapter3" title="WML Tutorial Ch3">
    <p>
      <em>Chapter 3: WML Syntax</em><br/>
      ...
    </p>
  </card>

  <card id="chapter4" title="WML Tutorial Ch4">
    <p>
      <em>Chapter 4: WML Elements</em><br/>
      ...
    </p>
  </card>
</wml>

สิ่งนี้จะสร้างเมนูต่อไปนี้และตอนนี้คุณสามารถเลื่อนดูทุกบท:

นี่คือ DTD ฉบับสมบูรณ์ที่นำมาจาก W3.org สำหรับ DTD ล่าสุดโปรดตรวจสอบส่วนทรัพยากรที่เป็นประโยชน์ของ WML ของบทช่วยสอนนี้

<!--
Wireless Markup Language (WML) Document Type Definition.
WML is an XML language. Typical usage:
   <?xml version="1.0"?>
   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
   "http://www.wapforum.org/DTD/wml12.dtd">
   <wml>
   ...
   </wml>

   Terms and conditions of use are available from the WAP Forum
   Ltd. web site at http://www.wapforum.org/docs/copyright.htm.
-->
<!ENTITY % length  "CDATA">         
   <!-- [0-9]+ for pixels or [0-9]+"%" for
   percentage length -->
<!ENTITY % vdata   "CDATA">         
   <!-- attribute value possibly containing
   variable references -->
<!ENTITY % HREF    "%vdata;">       
   <!-- URI, URL or URN designating a hypertext
   node. May contain variable references -->
<!ENTITY % boolean "(true|false)">
<!ENTITY % number  "NMTOKEN">       
   <!-- a number, with format [0-9]+ -->
<!ENTITY % coreattrs   "id     ID     #IMPLIED
                        class  CDATA  #IMPLIED">
<!ENTITY % ContentType "%vdata;">   
<!-- media type. May contain variable references -->

<!ENTITY % emph     "em | strong |b |i |u |big |small">
<!ENTITY % layout   "br">

<!ENTITY % text     "#PCDATA | %emph;">

<!-- flow covers "card-level" elements, 
                          such as text and images -->
<!ENTITY % flow     "%text; | %layout; | img | anchor |a |table">

<!-- Task types -->
<!ENTITY % task "go | prev | noop | refresh">

<!-- Navigation and event elements -->
<!ENTITY % navelmts "do | onevent">

<!--================ Decks and Cards ================-->

<!ELEMENT wml ( head?, template?, card+ )>
<!ATTLIST wml
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!-- card intrinsic events -->
<!ENTITY % cardev
  "onenterforward  %HREF;      #IMPLIED
  onenterbackward  %HREF;      #IMPLIED
  ontimer          %HREF;      #IMPLIED"
>

<!-- card field types -->
<!ENTITY % fields "%flow; | input | select | fieldset">
<!ELEMENT card (onevent*, timer?, (do | p | pre)*)>
<!ATTLIST card
  title            %vdata;     #IMPLIED
  newcontext       %boolean;   "false"
  ordered          %boolean;   "true"
  xml:lang         NMTOKEN     #IMPLIED
  %cardev;
  %coreattrs;
>

<!--================ Event Bindings ================-->

<!ELEMENT do (%task;)>
<!ATTLIST do
  type             CDATA       #REQUIRED
  label            %vdata;     #IMPLIED
  name             NMTOKEN     #IMPLIED
  optional         %boolean;   "false"
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!ELEMENT onevent (%task;)>
<!ATTLIST onevent
  type             CDATA       #REQUIRED
  %coreattrs;
>

<!--================ Deck-level declarations ================-->

<!ELEMENT head ( access | meta )+>
<!ATTLIST head
  %coreattrs;
>

<!ELEMENT template (%navelmts;)*>
<!ATTLIST template
  %cardev;
  %coreattrs;
>

<!ELEMENT access EMPTY>
<!ATTLIST access
  domain           CDATA       #IMPLIED
  path             CDATA       #IMPLIED
  %coreattrs;
>

<!ELEMENT meta EMPTY>
<!ATTLIST meta
  http-equiv       CDATA       #IMPLIED
  name             CDATA       #IMPLIED
  forua            %boolean;   "false"
  content          CDATA       #REQUIRED
  scheme           CDATA       #IMPLIED
  %coreattrs;
>

<!--================ Tasks ================-->

<!ELEMENT go (postfield | setvar)*>
<!ATTLIST go
  href             %HREF;          #REQUIRED
  sendreferer      %boolean;       "false"
  method           (post|get)      "get"
  enctype %ContentType; "application/x-www-form-urlencoded"
  accept-charset   CDATA           #IMPLIED
  %coreattrs;
>

<!ELEMENT prev (setvar)*>
<!ATTLIST prev
  %coreattrs;
>

<!ELEMENT refresh (setvar)*>
<!ATTLIST refresh
  %coreattrs;
>

<!ELEMENT noop EMPTY>
<!ATTLIST noop
  %coreattrs;
>

<!--================ postfield ================-->

<!ELEMENT postfield EMPTY>
<!ATTLIST postfield
  name             %vdata;     #REQUIRED
  value            %vdata;     #REQUIRED
  %coreattrs;
>

<!--================ variables ================-->

<!ELEMENT setvar EMPTY>
<!ATTLIST setvar
  name             %vdata;     #REQUIRED
  value            %vdata;     #REQUIRED
  %coreattrs;
>

<!--================ Card Fields ================-->

<!ELEMENT select (optgroup|option)+>
<!ATTLIST select
  title            %vdata;     #IMPLIED
  name             NMTOKEN     #IMPLIED
  value            %vdata;     #IMPLIED
  iname            NMTOKEN     #IMPLIED
  ivalue           %vdata;     #IMPLIED
  multiple         %boolean;   "false"
  tabindex         %number;    #IMPLIED
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!ELEMENT optgroup (optgroup|option)+ >
<!ATTLIST optgroup
  title            %vdata;     #IMPLIED
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!ELEMENT option (#PCDATA | onevent)*>
<!ATTLIST option
  value            %vdata;     #IMPLIED
  title            %vdata;     #IMPLIED
  onpick           %HREF;      #IMPLIED
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!ELEMENT input EMPTY>
<!ATTLIST input
  name             NMTOKEN         #REQUIRED
  type             (text|password) "text"
  value            %vdata;         #IMPLIED
  format           CDATA           #IMPLIED
  emptyok          %boolean;       "false"
  size             %number;        #IMPLIED
  maxlength        %number;        #IMPLIED
  tabindex         %number;        #IMPLIED
  title            %vdata;         #IMPLIED
  accesskey        %vdata;         #IMPLIED
  xml:lang         NMTOKEN         #IMPLIED
  %coreattrs;
>

<!ELEMENT fieldset (%fields; | do)* >
<!ATTLIST fieldset
  title           %vdata;      #IMPLIED
  xml:lang        NMTOKEN      #IMPLIED
  %coreattrs;
>

<!ELEMENT timer EMPTY>
<!ATTLIST timer
  name             NMTOKEN     #IMPLIED
  value            %vdata;     #REQUIRED
  %coreattrs;
>

<!--================ Images ================-->

<!ENTITY % IAlign "(top|middle|bottom)" >
<!ELEMENT img EMPTY>
<!ATTLIST img
  alt              %vdata;     #REQUIRED
  src              %HREF;      #REQUIRED
  localsrc         %vdata;     #IMPLIED
  vspace           %length;    "0"
  hspace           %length;    "0"
  align            %IAlign;    "bottom"
  height           %length;    #IMPLIED
  width            %length;    #IMPLIED
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!--================ Anchor ================-->

<!ELEMENT anchor ( #PCDATA | br | img | go | prev | refresh )*>
<!ATTLIST anchor
  title            %vdata;     #IMPLIED
  accesskey        %vdata;     #IMPLIED
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>
<!ELEMENT a ( #PCDATA | br | img )*>
<!ATTLIST a
  href             %HREF;      #REQUIRED
  title            %vdata;     #IMPLIED
  accesskey        %vdata;     #IMPLIED
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!--================ Tables ================-->

<!ELEMENT table (tr)+>
<!ATTLIST table
  title            %vdata;     #IMPLIED
  align            CDATA       #IMPLIED
  columns          %number;    #REQUIRED
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!ELEMENT tr (td)+>
<!ATTLIST tr
  %coreattrs;
>
<!ELEMENT td ( %text; | %layout; | img | anchor |a )*>
<!ATTLIST td
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!--============ Text layout and line breaks =============-->

<!ELEMENT em (%flow;)*>
<!ATTLIST em
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!ELEMENT strong (%flow;)*>
<!ATTLIST strong
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!ELEMENT b (%flow;)*>
<!ATTLIST b
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!ELEMENT i (%flow;)*>
<!ATTLIST i
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!ELEMENT u (%flow;)*>
<!ATTLIST u
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!ELEMENT big (%flow;)*>
<!ATTLIST big
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!ELEMENT small (%flow;)*>
<!ATTLIST small
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!ENTITY % TAlign    "(left|right|center)">
<!ENTITY % WrapMode  "(wrap|nowrap)" >

<!ELEMENT p (%fields; | do)*>
<!ATTLIST p
  align            %TAlign;    "left"
  mode             %WrapMode;  #IMPLIED
  xml:lang         NMTOKEN     #IMPLIED
  %coreattrs;
>

<!ELEMENT br EMPTY>
<!ATTLIST br
  %coreattrs;
>

<!ELEMENT pre (#PCDATA | a | br | i | b | em | strong | 
                                         input | select )*>
<!ATTLIST pre
  xml:space        CDATA       #FIXED    "preserve"
  %coreattrs;
>

<!ENTITY quot """>       <!-- quotation mark -->
<!ENTITY amp  "&#38;">   <!-- ampersand -->
<!ENTITY apos "'">       <!-- apostrophe -->
<!ENTITY lt   "&#60;">   <!-- less than -->
<!ENTITY gt   ">">       <!-- greater than -->
<!ENTITY nbsp " ">      <!-- non-breaking space -->
<!ENTITY shy  "­"> <!-- soft hyphen (discretionary hyphen) -->

WML2 เป็นภาษาที่ขยายไวยากรณ์และความหมายของสิ่งต่อไปนี้:

  • XHTML Basic [ XHTMLBasic ]
  • CSS Mobile Profile [ CSSMP ]
  • Unique semantics of WML1.0 [ WML1.0 ]

WML2 เหมาะสำหรับการระบุการนำเสนอและการโต้ตอบกับผู้ใช้บนอุปกรณ์ที่มีความสามารถ จำกัด เช่นโทรศัพท์มือถือและเทอร์มินัลมือถือไร้สายอื่น ๆ

บทช่วยสอนนี้ให้รายละเอียดของภาษามาร์กอัปไร้สาย (WML) เวอร์ชัน 2 บทช่วยสอนนี้อ้างถึงเวอร์ชัน 2.0 ของ WML เป็น WML2

XHTML Basic ที่กำหนดโดย W3C เป็นชุดย่อยที่เหมาะสมของ XHTML ซึ่งเป็นการจัดรูปแบบของ HTML ใน XML

เป้าหมายพื้นฐานของ WML2:

มีเป้าหมายหลัก 5 ประการสำหรับ WML2:

  • Backward compatibility: แอปพลิเคชัน WML2 ควรทำงานบนอุปกรณ์รุ่นเก่าเช่นกัน

  • Convergence with existing and evolving Internet standards: XHTML Basic [XHTMLBasic] และ CSS Mobile Profile [CSSMP]

  • Optimisation of access from small, limited devices:โดยทั่วไปอุปกรณ์ที่ใช้ WAP จะมีขนาดเล็กและใช้งานแบตเตอรี่และมีหน่วยความจำและพลังงาน CPU ที่ค่อนข้าง จำกัด ดังนั้น WML2 ควรได้รับการปรับให้เหมาะสมเพียงพอที่จะทำงานบนอุปกรณ์เหล่านี้

  • Allowance for the creation of distinct user interfaces: WAP ช่วยให้สามารถสร้าง Man Machine Interfaces (MMI) ด้วยความยืดหยุ่นและความสามารถสูงสุดสำหรับผู้ขายเพื่อปรับปรุงประสบการณ์ของผู้ใช้

  • Internationalisation of the architecture:WAP กำหนดเป้าหมายรหัสอักขระทั่วไปสำหรับการใช้งานระหว่างประเทศ ซึ่งรวมถึงสัญลักษณ์สากลและชุดรูปสัญลักษณ์สำหรับผู้ใช้ปลายทางและการเข้ารหัสอักขระที่ใช้เฉพาะสำหรับนักพัฒนาเนื้อหา

WML2 วิสัยทัศน์:

วิสัยทัศน์ WML2 คือการสร้างภาษาที่ขยายไวยากรณ์และความหมายของโปรไฟล์ XHTML Basic และ CSS Mobile ด้วยความหมายเฉพาะของ WML1 ผู้ใช้ไม่ควรทราบถึงความเข้ากันได้ของ WML1

โครงสร้างภาษา WML2:

WML2 เป็นภาษาใหม่ที่มีส่วนประกอบต่อไปนี้:

(1) XHTML พื้นฐาน:

กลุ่มองค์ประกอบนี้ใช้สำหรับคอนเวอร์เจนซ์ W3C สำหรับองค์ประกอบบางอย่างจะมีการเพิ่มแอตทริบิวต์ส่วนขยาย WML เพื่อให้สามารถใช้งานฟังก์ชัน WML1 ได้

(1a) องค์ประกอบพื้นฐาน XHTML:

a abbr ตัวย่อที่อยู่ฐาน blockquote br caption cite code dd dfn div dl dt em form h1 h2 h3 h4 h5 h6 head kbd label li link object ol param pre q samp span strong table td th title tr ul var

(1b) องค์ประกอบพื้นฐาน XHTML ที่มีแอตทริบิวต์ส่วนขยาย WML:

ร่างกาย html img อินพุตเมตาตัวเลือก p เลือกสไตล์ textarea

(2) องค์ประกอบ XHTML Modularization:

กลุ่มองค์ประกอบนี้ประกอบด้วยองค์ประกอบที่เลือกจากโมดูลเหล่านั้นของ XHTML ที่ไม่รวมอยู่ใน XHTML Basic องค์ประกอบส่วนใหญ่รวมอยู่เพื่อความเข้ากันได้ของ WML1 องค์ประกอบหนึ่งรวมอยู่ในการปรับปรุงที่เหมาะกับความสามารถของโทรศัพท์มือถือที่ จำกัด

(2a) XHTML Modularization สำหรับความเข้ากันได้แบบย้อนหลังกับ WML1:

b big i small (จากโมดูลการนำเสนอ) u (จาก Legacy Module) fieldset optgroup (จาก Forms Module)

(2b) องค์ประกอบ XHTML Modularization สำหรับการปรับปรุงคุณสมบัติ:

ชม

(3) องค์ประกอบส่วนขยาย WML:

องค์ประกอบบางอย่างนำมาจาก WML1 เนื่องจากความสามารถเทียบเท่าไม่ได้จัดเตรียมไว้ใน XHTML Basic หรือ XHTML Modularization องค์ประกอบหนึ่งรวมอยู่เพื่อการปรับปรุงความสามารถของ WML1

(3a) องค์ประกอบส่วนขยาย WML (สำหรับความเข้ากันได้ WML1):

wml: เข้าถึง wml: anchor wml: การ์ด wml: do wml: getvar wml: go wml: noop wml: onevent wml: postfield wml: prev wml: refresh wml: setvar wml: timer

(3b) องค์ประกอบส่วนขยาย WML (สำหรับการปรับปรุงคุณสมบัติ):

wml: วิดเจ็ต

โมดูลโครงสร้างเอกสาร WML:

องค์ประกอบต่อไปนี้ในโมดูลโครงสร้างใช้เพื่อระบุโครงสร้างของเอกสาร WML2:

  • body
  • html
  • wml:card
  • head
  • title

องค์ประกอบของร่างกาย:

แอ็ตทริบิวต์ wml: newcontext ระบุว่าบริบทของเบราว์เซอร์เริ่มต้นเป็นสถานะที่กำหนดไว้อย่างดีหรือไม่เมื่อโหลดเอกสาร หากค่าแอ็ตทริบิวต์ wml: newcontext เป็น "true" เบราว์เซอร์จะต้องกำหนดค่าบริบทของเบราว์เซอร์ใหม่เมื่อไปที่การ์ดนี้

องค์ประกอบ html:

แอตทริบิวต์ xmlns: wml อ้างถึงเนมสเปซ WML เช่น: http://www.wapforum.org/2001/wml

แอ็ตทริบิวต์ wml: use-xml-fragments ถูกใช้เพื่อระบุวิธีการตีความตัวระบุแฟรกเมนต์โดยตัวแทนผู้ใช้ สำหรับรายละเอียดการใช้ wml: use-xml-fragments ในงาน go และงานก่อนหน้า

wml: องค์ประกอบการ์ด:

องค์ประกอบ wml: card ระบุส่วนย่อยของเนื้อหาเอกสาร wml หลายรายการ: องค์ประกอบการ์ดอาจปรากฏในเอกสารเดียว องค์ประกอบ wml: การ์ดแต่ละรายการแสดงถึงการนำเสนอแต่ละรายการและ / หรือการโต้ตอบกับผู้ใช้

หากค่าแอตทริบิวต์ newcontext ขององค์ประกอบ wml: การ์ดเป็น "จริง" เบราว์เซอร์จะต้องกำหนดค่าบริบทของเบราว์เซอร์ใหม่เมื่อนำทางไปยังการ์ดนี้

องค์ประกอบหัว:

องค์ประกอบนี้เก็บข้อมูลส่วนหัวของเอกสารเช่นองค์ประกอบเมตาและสไตล์ชีตเป็นต้น

องค์ประกอบชื่อเรื่อง:

องค์ประกอบนี้ใช้เพื่อใส่ชื่อเอกสาร

NOTE:นักพัฒนา WML สามารถใช้รูปแบบเอกสาร XHTML นั่นคือโครงสร้างร่างกายหรือสามารถใช้ชุดการ์ด เมื่อใช้โครงสร้างร่างกายเอกสารจะถูกสร้างขึ้นโดยใช้องค์ประกอบของร่างกาย องค์ประกอบของเนื้อหาประกอบด้วยเนื้อหาของเอกสาร เมื่อใช้ชุดการ์ดเอกสารจะถูกสร้างขึ้นโดยใช้ wml: card elements

งาน WML2

งานต่อไปนี้กำหนดไว้ใน WML2.0 งานเหล่านี้คล้ายกับ WML1.0 มาก

  • งานไป
  • งานก่อนหน้า
  • งาน noop
  • งานรีเฟรช

เหตุการณ์ WML2:

ประเภทเหตุการณ์ต่อไปนี้กำหนดไว้ใน WML2:

  • Intrinsic event: เหตุการณ์ที่สร้างโดยตัวแทนผู้ใช้และรวมเหตุการณ์ต่อไปนี้ที่คล้ายกับ WML1.0

    • ontimer
    • onenterforward
    • onenterbackward
    • onpick
  • Extrinsic event:เหตุการณ์ที่ส่งไปยังตัวแทนผู้ใช้โดยตัวแทนภายนอกบางส่วน ข้อกำหนด WML 2 ไม่ได้ระบุคลาสใด ๆ ของเหตุการณ์ภายนอก ตัวอย่างหนึ่งของคลาสเหตุการณ์ภายนอก WML อาจเป็นเหตุการณ์ WTA

ประเภทเอกสาร WML2:

เอกสาร WML2 ระบุโดยประเภทสื่อ MIME "application / wml + xml" สามารถใช้ประเภท "application / xhtml + xml" เพื่อระบุเอกสารจากภาษามาร์กอัปที่ใช้ XHTML รวมถึง XHTML Basic

การประกาศ DOCTYPE อาจรวมถึง XHTML Basic Formal Public Identifier และอาจรวมถึง URI ของ XHTML Basic DTD ตามที่ระบุด้านล่าง:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
"http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">

สไตล์ชีทพร้อม WML2

สไตล์ชีตสามารถใช้เพื่อจัดรูปแบบเอกสาร WML2 ข้อมูลสไตล์สามารถเชื่อมโยงกับเอกสารได้ 3 วิธี:

สไตล์ชีตภายนอก:

สไตล์ชีตภายนอกสามารถเชื่อมโยงกับเอกสารโดยใช้คำสั่งการประมวลผล XML พิเศษหรือองค์ประกอบลิงก์ นอกจากนี้ยังสามารถใช้คำสั่งการประมวลผล XML ได้

ในตัวอย่างต่อไปนี้คำสั่งการประมวลผล XML ใช้เพื่อเชื่อมโยงสไตล์ชีตภายนอก "mobile.css"

<?xml-stylesheet href="mobile.css" 
                    media="handheld" type="text/css" ?>

ในตัวอย่างต่อไปนี้องค์ประกอบลิงก์ถูกใช้เพื่อเชื่อมโยงสไตล์ชีตภายนอก "mystyle.css":

<html>
<head>
<link href="mystyle.css" type="text/css" rel="stylesheet"/>
...
</head>
...
</html>

สไตล์ชีทภายใน:

ข้อมูลสไตล์สามารถอยู่ภายในเอกสารโดยใช้องค์ประกอบสไตล์ องค์ประกอบนี้เช่นลิงก์ต้องอยู่ในส่วนหัวของเอกสาร

ต่อไปนี้แสดงตัวอย่างของสไตล์ชีตภายใน:

<html>
<head>
<style type="text/css">
p { text-align: center; }
</style>
...
</head>
...
</html>

สไตล์อินไลน์:

คุณสามารถระบุข้อมูลสไตล์สำหรับองค์ประกอบเดียวโดยใช้แอตทริบิวต์style สิ่งนี้เรียกว่าสไตล์อินไลน์

ในตัวอย่างต่อไปนี้ข้อมูลการจัดรูปแบบอินไลน์ถูกนำไปใช้กับองค์ประกอบย่อหน้าเฉพาะ:

<p style="text-align: center">...</p>

สไตล์ชีตเริ่มต้นของ WML2:

นี่คือตัวอย่างสไตล์ชีตสำหรับ WML 2.0:

body, card, div, p, center, hr, h1, h2, h3, h4, h5, h6,
address, blockquote, pre, ol, ul, dl, dt, dd,
form, fieldset, object { display: block }
li      { display: list-item }
head    { display: none }
table   { display: table }
tr      { display: table-row }
td, th  { display: table-cell }
caption { display: table-caption }
th      { font-weight: bolder; text-align: center }
caption { text-align: center }
h1, h2, h3, h4, h5, h6, b, strong { font-weight: bolder }
i, cite, em, var,address { font-style: italic }
pre, code, kbd, pre { white-space: pre }
big     { font-size: larger}
small   { font-size: smaller}
hr      { border: 1px inset }
ol      { list-style-type: decimal }
u       { text-decoration: underline }

องค์ประกอบ WML2:

นี่คือลิงค์ไปยังรายการองค์ประกอบ WML2 ทั้งหมด องค์ประกอบส่วนใหญ่มีอยู่ในข้อกำหนด XHTML ยกเว้นองค์ประกอบบางส่วนที่เริ่มต้นด้วยWML:องค์ประกอบเหล่านี้เฉพาะสำหรับ WML

องค์ประกอบทั้งหมดที่มีความหมายเดียวกันนี่คือสิ่งที่มีในข้อกำหนด XHTML

การอ้างอิงแท็ก WML2

สรุป:

เราสามารถสรุปได้ว่าถ้าคุณรู้จัก XHTML และ WML1.0 คุณก็ไม่มีอะไรต้องเรียนรู้ WML2.0

หากคุณสนใจอ่านเพิ่มเติมคุณสามารถค้นหาข้อกำหนดที่สมบูรณ์สำหรับWAP2.0 และ WML2.0 ได้ที่นี่

เอนทิตี WML ใช้แทนสัญลักษณ์ที่ไม่สามารถพิมพ์ได้ง่ายหรือมีความหมายพิเศษใน WML

ตัวอย่างเช่นหากคุณใส่อักขระ <ลงในข้อความของคุณตามปกติเบราว์เซอร์จะคิดว่าเป็นจุดเริ่มต้นของแท็ก จากนั้นเบราว์เซอร์จะบ่นเมื่อไม่พบอักขระ> ที่ตรงกันเพื่อปิดท้ายแท็ก

ตารางต่อไปนี้แสดงเอนทิตีสามรูปแบบใน WML เอนทิตีที่มีชื่อเป็นสิ่งที่คุณอาจคุ้นเคยจาก HTML: มีลักษณะเหมือน & amp; หรือ & lt; และแสดงถึงอักขระที่มีชื่อเดียวผ่านชื่อช่วยในการจำ นอกจากนี้ยังสามารถป้อนเอนทิตีในรูปแบบตัวเลขหนึ่งในสองรูปแบบ (ทศนิยมหรือเลขฐานสิบหก) ทำให้คุณสามารถป้อนอักขระ Unicode ลงใน WML ของคุณได้

ชื่อเอนทิตี เอนทิตีทศนิยม Hexa เอนทิตี ตัวละคร
& quot; & # 34; & # x22; เครื่องหมายคำพูดคู่ (")
& amp; & # 38; & # x26; เครื่องหมายและ (&)
& apos; & # 39; & # x27; เครื่องหมายอะพอสทรอฟี (')
& lt; & # 60; & # x3C; น้อยกว่า (<)
& gt; & # 62; & # x3E; มากกว่า (>)
& nbsp; & # 160; & # xA0; พื้นที่ไม่แตก
&อาย; & # 173; & # xAD; ยัติภังค์อ่อน

โปรดสังเกตว่าเอนทิตีทั้งหมดเริ่มต้นด้วยเครื่องหมายและ (&) และลงท้ายด้วยอัฒภาค (;) อัฒภาคนี้มีความสำคัญมาก: บางหน้าเว็บลืมสิ่งนี้และทำให้เกิดปัญหากับเบราว์เซอร์ที่ต้องการ HTML ที่ถูกต้อง นอกจากนี้เบราว์เซอร์ WAP ยังมีความเข้มงวดเกี่ยวกับข้อผิดพลาดเช่นนี้

ตารางต่อไปนี้แสดงรายการองค์ประกอบ WML ที่ถูกต้องทั้งหมด คลิกลิงก์เพื่อดูรายละเอียดเพิ่มเติมขององค์ประกอบนั้น

องค์ประกอบสำรับและการ์ด

องค์ประกอบ WML วัตถุประสงค์
  กำหนดข้อคิดเห็น WML
กำหนดเด็ค WML (รูท WML)
กำหนดข้อมูลส่วนหัว
กำหนดข้อมูลเมตา
กำหนดการ์ดในเด็ค
<การเข้าถึง> กำหนดข้อมูลเกี่ยวกับการควบคุมการเข้าถึงเด็ค
<เทมเพลต> กำหนดเทมเพลตรหัสสำหรับการ์ดทั้งหมดในสำรับ

องค์ประกอบข้อความ

องค์ประกอบ WML วัตถุประสงค์

กำหนดเส้นแบ่ง

 

กำหนดย่อหน้า
กำหนดตาราง
Defines a table cell (table data)
Defines a table row
Defines preformatted text

Text Formatting Tags

WML Elements Purpose
Defines bold text
  Defines big text
Defines emphasized text
Defines italic text
Defines small text
Defines strong text
Defines underlined text

Image Elements

WML Elements Purpose
Defines an image

Anchor Elements

WML Elements Purpose
Defines an anchor
  Defines an anchor

Event Elements

WML Elements Purpose
Defines a do event handler
Defines an onevent event handler
Defines a postfield event handler
Defines an ontimer event handler
Defines an onenterforward handler
Defines an onenterbackward handler
Defines an onpick event handler

องค์ประกอบของงาน

องค์ประกอบ WML วัตถุประสงค์
แสดงถึงการดำเนินการเปลี่ยนไปใช้การ์ดใหม่
บอกว่าไม่มีอะไรควรทำ
แสดงถึงการย้อนกลับไปยังการ์ดก่อนหน้า
<รีเฟรช> รีเฟรชตัวแปรการ์ดที่ระบุ

องค์ประกอบการป้อนข้อมูล

องค์ประกอบ WML วัตถุประสงค์
  กำหนดช่องป้อนข้อมูล
กำหนดกลุ่มที่เลือก
กำหนดตัวเลือกในรายการที่เลือกได้
กำหนดชุดของช่องป้อนข้อมูล
กำหนดกลุ่มตัวเลือกในรายการที่เลือกได้

องค์ประกอบตัวแปร

องค์ประกอบ WML วัตถุประสงค์
กำหนดและตั้งค่าตัวแปร
กำหนดตัวจับเวลา

แทนที่จะติดตั้ง WAP SDK ทั้งหมดคุณสามารถติดตั้งโปรแกรมจำลอง WML ได้ โปรแกรมจำลองช่วยให้คุณสามารถดูเนื้อหาของไฟล์ WML ของคุณได้ตามที่เห็นบนหน้าจอของอุปกรณ์ที่เปิดใช้งาน WAP

ในขณะที่อีมูเลเตอร์ทำงานได้ดี แต่ก็ไม่สมบูรณ์แบบ ลองดูสักสองสามอันแล้วคุณจะตัดสินใจได้อย่างรวดเร็วว่าคุณชอบอะไรมากที่สุด เมื่อถึงเวลาพัฒนาไซต์ WAP จริง (เชิงพาณิชย์) คุณจะต้องทำการทดสอบเพิ่มเติมมากขึ้นก่อนอื่นด้วย SDK / อีมูเลเตอร์อื่น ๆ จากนั้นจึงใช้อุปกรณ์ที่เปิดใช้งาน WAP ทั้งหมดที่คุณวางแผนจะรองรับ

รายการต่อไปนี้แสดงรายการอีมูเลเตอร์ WAP บางรายการที่สามารถใช้ได้ฟรี:

  • Klondike WAP Browser : ผลิตโดย Apache Software Klondike ดูเหมือนเว็บเบราว์เซอร์มากดังนั้นจึงใช้งานง่ายมากสำหรับผู้เริ่มต้น คุณสามารถเข้าถึงไฟล์ WML ในเครื่องได้อย่างง่ายดาย นอกจากนี้ยังรองรับการลากและวางทำให้การใช้งานไฟล์ภายในเครื่องทำได้ง่ายมาก

  • Yospace : ผลิตโดย Yospace นักพัฒนา WAP สามารถใช้อีมูเลเตอร์รุ่นเดสก์ท็อปเพื่อดูแอปพลิเคชัน WAP จากเดสก์ท็อปได้อย่างปลอดภัยด้วยความรู้ที่ว่าอีมูเลเตอร์ให้การจำลองผลิตภัณฑ์โทรศัพท์มือถือจริงอย่างสมเหตุสมผล

  • Ericsson R380 Emulator : ผลิตโดย Ericsson R380 WAP emulator มีไว้เพื่อใช้ทดสอบแอปพลิเคชัน WML ที่พัฒนาขึ้นสำหรับเบราว์เซอร์ WAP ใน Ericsson R380 โปรแกรมจำลองประกอบด้วยเบราว์เซอร์ WAP และฟังก์ชันการตั้งค่า WAP ที่พบได้ใน R380

  • WinWAP : ผลิตโดย Slob-Trot Software WinWAP เป็นเบราว์เซอร์ WML ที่ทำงานบนคอมพิวเตอร์ทุกเครื่องที่ติดตั้ง Windows แบบ 32 บิต คุณสามารถเรียกดูไฟล์ WML ในเครื่องจากฮาร์ดไดรฟ์หรืออินเทอร์เน็ตด้วย HTTP (เช่นเดียวกับเว็บเบราว์เซอร์ปกติของคุณ)

  • Nokia WAP simulator - ผลิตโดย Nokia และเต็มไปด้วยฟังก์ชันการทำงานเกือบทั้งหมด ลองอันนี้.

ตรวจสอบเนื้อหา WML:

คัดลอกและวางเนื้อหา WML ในช่องต่อไปนี้จากนั้นคลิกตรวจสอบความถูกต้องWMLเพื่อดูผลลัพธ์ที่ด้านล่างของหน้านี้:

ตรวจสอบไฟล์ WML:

พิมพ์ URL ของหน้า WML ของคุณแล้วคลิกตรวจสอบ WMLเพื่อดูผลลัพธ์ที่ด้านล่างของหน้านี้: