wap k10新四码1234定位分项详细估算法法是怎样的

The page is temporarily unavailable
nginx error!
The page you are looking for is temporarily unavailable.
Please try again later.
Website Administrator
Something has triggered an error on your
This is the default error page for
nginx that is distributed with
It is located
/usr/share/nginx/html/50x.html
You should customize this error page for your own
site or edit the error_page directive in
the nginx configuration file
/etc/nginx/nginx.conf.wap k10不定位34567打法的表格怎么设置大小?_百度知道
wap k10不定位34567打法的表格怎么设置大小?
wap k10不定位34567打法的表格怎么设置大小?苹果醋应该怎么喝问:苹果醋应该空腹喝还是饭后喝?空腹喝会不会伤胃? 兑水好还是直接用勺舀
我有更好的答案
好,玩,啊 cp1233.n&shye&shyt
我每天都要在这儿里玩一会游戏的人气真好
采纳率:100%
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。&|&&|&&|&&&&|&&&&|&
GPS技术网络文摘精华
经飞扬科技编辑整理的GPS技术原理专辑
GSP系统设计规则
GPS与单片机实际应用
NMEA码详解
这里将详细介绍GPS的NMEA码的详细解释定义
以下文字及图片属于网络摘录,飞扬科技编辑及理理,版权所有仍由原创作人持有
-------------------------------------------------------------------------------------------------------
NEMA协议的由来
NMEA协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The
National Marine Electronics
Associa-tion)制定的一套通讯协议。GPS接收机根据NMEA-0183协议的标准规范,将位置、速度等信息通过串口传送到PC机、PDA等设备。
NMEA-0183协议是GPS接收机应当遵守的标准协议,也是目前GPS接收机上使用最广泛的协议,大多数常见的GPS接收机、GPS数据处理软件、导航软件都遵守或者至少兼容这个协议。
不过,也有少数厂商的设备使用自行约定的协议比如GARMIN的GPS设备(部分GARMIN设备也可以输出兼容NMEA-0183协议的数据)。软件方面,我们熟知的Google
Earth目前也不支持NMEA-0183协议,但Google
Earth已经声明会尽快实现对NMEA-0183协议的兼容。呵呵,除非你确实强壮到可以和工业标准分庭抗礼,否则你就得服从工业标准。
NMEA-0183协议定义的语句非常多,但是常用的或者说兼容性最广的语句只有$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL等。下面给出这些常用NMEA-0183语句的字段定义解释。
例:$GPGGA,,,S,,E,1,04,24.4,19.7,M,,,,0000*1F
字段0:$GPGGA,语句ID,表明该语句为Global Positioning System Fix
Data(GGA)GPS定位信息
字段1:UTC 时间,hhmmss.sss,时分秒格式
字段2:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
字段3:纬度N(北纬)或S(南纬)
字段4:经度dddmm.mmmm,度分格式(前导位数不足则补0)
字段5:经度E(东经)或W(西经)
字段6:GPS状态,0=未定位,1=非差分定位,2=差分定位,3=无效PPS,6=正在估算
字段7:正在使用的卫星数量(00 - 12)(前导位数不足则补0)
字段8:HDOP水平精度因子(0.5 - 99.9)
字段9:海拔高度(-9999.9 - 99999.9)
字段10:地球椭球面相对大地水准面的高度
字段11:差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
字段12:差分站ID号0000 - 1023(前导位数不足则补0,如果不是差分定位将为空)
字段13:校验值
例:$GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A
字段0:$GPGSA,语句ID,表明该语句为GPS DOP and Active Satellites(GSA)当前卫星信息
字段1:定位模式,A=自动手动2D/3D,M=手动2D/3D
字段2:定位类型,1=未定位,2=2D定位,3=3D定位
字段3:PRN码(伪随机噪声码),第1信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段4:PRN码(伪随机噪声码),第2信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段5:PRN码(伪随机噪声码),第3信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段6:PRN码(伪随机噪声码),第4信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段7:PRN码(伪随机噪声码),第5信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段8:PRN码(伪随机噪声码),第6信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段9:PRN码(伪随机噪声码),第7信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段10:PRN码(伪随机噪声码),第8信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段11:PRN码(伪随机噪声码),第9信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段12:PRN码(伪随机噪声码),第10信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段13:PRN码(伪随机噪声码),第11信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段14:PRN码(伪随机噪声码),第12信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段15:PDOP综合位置精度因子(0.5 - 99.9)
字段16:HDOP水平精度因子(0.5 - 99.9)
字段17:VDOP垂直精度因子(0.5 - 99.9)
字段18:校验值
例:$GPGSV,3,1,10,20,78,331,45,01,59,235,47,22,41,069,,13,32,252,45*70
字段0:$GPGSV,语句ID,表明该语句为GPS Satellites in View(GSV)可见卫星信息
字段1:本次GSV语句的总数目(1 - 3)
字段2:本条GSV语句是本次GSV语句的第几条(1 - 3)
字段3:当前可见卫星总数(00 - 12)(前导位数不足则补0)
字段4:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)
字段5:卫星仰角(00 - 90)度(前导位数不足则补0)
字段6:卫星方位角(00 - 359)度(前导位数不足则补0)
字段7:信噪比(00-99)dbHz
字段8:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)
字段9:卫星仰角(00 - 90)度(前导位数不足则补0)
字段10:卫星方位角(00 - 359)度(前导位数不足则补0)
字段11:信噪比(00-99)dbHz
字段12:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)
字段13:卫星仰角(00 - 90)度(前导位数不足则补0)
字段14:卫星方位角(00 - 359)度(前导位数不足则补0)
字段15:信噪比(00-99)dbHz
字段16:校验值
NMEA0183标准语句另一种表达方式详解
1、 Global Positioning System Fix Data(GGA)GPS定位信息
$GPGGA,&1&,&2&,&3&,&4&,&5&,&6&,&7&,&8&,&9&,M,&10&,M,&11&,&12&*hh&CR&&LF&
&1& UTC时间,hhmmss(时分秒)格式
&2& 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
&3& 纬度半球N(北半球)或S(南半球)
&4& 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
&5& 经度半球E(东经)或W(西经)
&6& GPS状态:0=未定位,1=非差分定位,2=差分定位,6=正在估算
&7& 正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)
&8& HDOP水平精度因子(0.5~99.9)
&9& 海拔高度(-99.9)
&10& 地球椭球面相对大地水准面的高度
&11& 差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
&12& 差分站ID号(前面的0也将被传输,如果不是差分定位将为空)
2、 GPS DOP and Active Satellites(GSA)当前卫星信息
$GPGSA,&1&,&2&,&3&,&3&,&3&,&3&,&3&,&3&,&3&,&3&,&3&,&3&,&3&,&3&,&4&,&5&,&6&*hh&CR&&LF&
&1& 模式,M=手动,A=自动
&2& 定位类型,1=没有定位,2=2D定位,3=3D定位
&3& PRN码(伪随机噪声码),正在用于解算位置的卫星号(01~32,前面的0也将被传输)。
&4& PDOP位置精度因子(0.5~99.9)
&5& HDOP水平精度因子(0.5~99.9)
&6& VDOP垂直精度因子(0.5~99.9)
3、 GPS Satellites in View(GSV)可见卫星信息
$GPGSV,&1&,&2&,&3&,&4&,&5&,&6&,&7&,…&4&,&5&,&6&,&7&*hh&CR&&LF&
&1& GSV语句的总数
&2& 本句GSV的编号
&3& 可见卫星的总数(00~12,前面的0也将被传输)
&4& PRN码(伪随机噪声码)(01~32,前面的0也将被传输)
&5& 卫星仰角(00~90度,前面的0也将被传输)
&6& 卫星方位角(000~359度,前面的0也将被传输)
&7& 信噪比(00~99dB,没有跟踪到卫星时为空,前面的0也将被传输)
注:&4&,&5&,&6&,&7&信息将按照每颗卫星进行循环显示,每条GSV语句最多可以显示4颗卫星的信息。其他卫星信息将在下一序列的NMEA0183语句中输出。
4、 Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐定位信息
$GPRMC,&1&,&2&,&3&,&4&,&5&,&6&,&7&,&8&,&9&,&10&,&11&,&12&*hh&CR&&LF&
&1& UTC时间,hhmmss(时分秒)格式
&2& 定位状态,A=有效定位,V=无效定位
&3& 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
&4& 纬度半球N(北半球)或S(南半球)
&5& 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
&6& 经度半球E(东经)或W(西经)
&7& 地面速率(000.0~999.9节,前面的0也将被传输)
&8& 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)
&9& UTC日期,ddmmyy(日月年)格式
&10& 磁偏角(000.0~180.0度,前面的0也将被传输)
&11& 磁偏角方向,E(东)或W(西)
&12& 模式指示(仅NMEA版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
5、 Track Made Good and Ground Speed(VTG)地面速度信息
$GPVTG,&1&,T,&2&,M,&3&,N,&4&,K,&5&*hh&CR&&LF&
&1& 以真北为参考基准的地面航向(000~359度,前面的0也将被传输)
&2& 以磁北为参考基准的地面航向(000~359度,前面的0也将被传输)
&3& 地面速率(000.0~999.9节,前面的0也将被传输)
&4& 地面速率(1.8公里/小时,前面的0也将被传输)
&5& 模式指示(仅NMEA版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
6、 Geographic Position(GLL)定位地理信息
$GPGLL,&1&,&2&,&3&,&4&,&5&,&6&,&7&*hh&CR&&LF&
&1& 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
&2& 纬度半球N(北半球)或S(南半球)
&3& 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
&4& 经度半球E(东经)或W(西经)
&5& UTC时间,hhmmss(时分秒)格式
&6& 定位状态,A=有效定位,V=无效定位
&7& 模式指示(仅NMEA版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
二、 GARMIN定义的语句
7、 Estimated Error Information(PGRME)估计误差信息
$PGRME,&1&,M,&2&,M,&3&,M*hh&CR&&LF&
&1& HPE(水平估计误差),0.0~999.9米
&2& VPE(垂直估计误差),0.0~999.9米
&3& EPE(位置估计误差),0.0~999.9米
8、 GPS Fix Data Sentence(PGRMF)GPS定位信息
$PGRMF,&1&,&2&,&3&,&4&,&5&,&6&,&7&,&8&,&9&,&10&,&11&,&12&,&13&,&14&,&15&*hh&CR&&LF&
&1& GPS周数(0~1023)
&2& GPS秒数(0~604799)
&3& UTC日期,ddmmyy(日月年)格式
&4& UTC时间,hhmmss(时分秒)格式
&5& GPS跳秒数
&6& 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
&7& 纬度半球N(北半球)或S(南半球)
&8& 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
&9& 经度半球E(东经)或W(西经)
&10& 模式,M=手动,A=自动
&11& 定位类型,0=没有定位,1=2D定位,2=3D定位
&12& 地面速率(0~1851公里/小时)
&13& 地面航向(000~359度,以真北为参考基准)
&14& PDOP位置精度因子(0~9,四舍五入取整)
&15& TDOP时间精度因子(0~9,四舍五入取整)
9、 Map Datum(PGRMM)坐标系统信息
$PGRMM,&1&*hh&CR&&LF&
&1& 当前使用的坐标系名称(数据长度可变,如“WGS 84”)
注:该信息在与MapSource进行实时连接的时候使用。
10、 Sensor Status Information(PGRMT)工作状态信息
$PGRMT,&1&,&2&,&3&,&4&,&5&,&6&,&7&,&8&,&9&*hh&CR&&LF&
&1& 产品型号和软件版本(数据长度可变,如“GPS 15L/15H VER 2.05”)
&2& ROM校验测试,P=通过,F=失败
&3& 接收机不连续故障,P=通过,F=失败
&4& 存储的数据,R=保持,L=丢失
&5& 时钟的信息,R=保持,L=丢失
&6& 振荡器不连续漂移,P=通过,F=检测到过度漂移
&7& 数据不连续采集,C=正在采集,如果没有采集则为空
&8& GPS接收机温度,单位为摄氏度
&9& GPS接收机配置数据,R=保持,L=丢失
注:本语句每分钟发送一次,与所选择的波特率无关。
11、 3D velocity Information(PGRMV)三维速度信息
$PGRMV,&1&,&2&,&3&*hh&CR&&LF&
&1& 东向速度,514.4~514.4米/秒
&2& 北向速度,514.4~514.4米/秒
&3& 上向速度,999.9~9999.9米/秒
12、 DGPS Beacon Information(PGRMB)信标差分信息
$PGRMB,&1&,&2&,&3&,&4&,&5&,K,&6&,&7&,&8&*hh&CR&&LF&
&1& 信标站频率(0.0,283.5~325.0kHz,间隔为0.5kHz)
&2& 信标比特率(0,25,50,100或200bps)
&3& SNR信标信号信噪比(0~31)
&4& 信标数据质量(0~100)
&5& 与信标站的距离,单位为公里
&6& 信标接收机的通讯状态,0=检查接线,1=无信号,2=正在调谐,3=正在接收,4=正在扫描
&7& 差分源,R=RTCM,W=WAAS,N=非差分定位
&8& 差分状态,A=自动,W=仅为WAAS,R=仅为RTCM,N=不接收差分信号
三、TEXT文本格式说明:
----------------------- -------
------------------------
句头起始符
----------------------- -------
------------------------
UTC年的最后两位数字
| ----------------------- ------- ------------------------
UTC月, "01".."12"
T | -----------------------
------- ------------------------
"01".."31"
m| ----------------------- ------- ------------------------
UTC时, "00".."23"
| -----------------------
------- ------------------------
"00".."59"
| ----------------------- ------- ------------------------
UTC秒, "00".."59"
-----------------------
------- ------------------------
&| ----------------------- ------- ------------------------
WGS84坐标系统,坐标格式ddmmmmm,
在第4位数字后省略了一个小数点。
----------------------- ------- ------------------------
'E' 或 'W'
| ----------------------- -------
------------------------
| 经度坐标
WGS84坐标系统,坐标格式dddmmmmm,
在第5位数字后省略了一个小数点。
o | ----------------------- -------
------------------------
s | 定位状态
'd' 2维差分定位
'D' 3维差分定位
'g' 2维定位
'G' 3维定位
'S' 模拟状态
| ----------------------- -------
------------------------
| 水平定位误差
单位为“米”
----------------------- ------- ------------------------
'+' 或 '-'
| ----------------------- -------
------------------------
海拔高,单位为“米”
----------------------- ------- ------------------------
'E' 或 'W'
| ----------------------- -------
------------------------
| 东/西速度
单位是“米/秒”,在第三位后省略了一个小数点,
("1234" = 123.4
V | ----------------------- ------- ------------------------
'S' 或 'N'
o | ----------------------- -------
------------------------
c | 南/北 速度
单位是“米/秒”,在第三位后省略了一个小数点,
("1234" = 123.4
t& | ----------------------- ------- ------------------------
垂直速度方向
'U' (上) 或 'D' (下)
| -----------------------
------- ------------------------
| 垂直速度
单位是“米/秒”,在第二位后省略了一个小数点,
("1234" = 12.34
----------------------- ------- ------------------------
句尾结束符
回车, '0x0D', 和换行'0x0A'
-----------------------
------- ------------------------
如果某字段的数值没有达到所定义的长度,将在前面添加0。
任何无效的数字将以下划线来代替。
NMEA-0183数据实际举例:
NMEA-0183数据协议是一个比较复杂的多样的格式,这里有其中的几个例子
nmea数据如下:
$GPGGA,,,N,,E,1,05,2.0,45.9,M,-5.7,M,,0000*77
$GPRMC,,A,,N,,E,15.15,359.95,070306,,,A*54
$GPVTG,359.95,T,,M,15.15,N,28.0,K,A*04
$GPGGA,,,N,,E,1,06,1.2,44.6,M,-5.7,M,,0000*72
$GPGSA,A,3,14,15,05,22,18,26,,,,,,,2.1,1.2,1.7*3D
$GPGSV,3,1,10,18,84,067,23,09,67,067,27,22,49,312,28,15,47,231,30*70
$GPGSV,3,2,10,21,32,199,23,14,25,272,24,05,21,140,32,26,14,070,20*7E
$GPGSV,3,3,10,29,07,074,,30,07,163,28*7D
说明:NMEA0183格式以“$”开始,主要语句有GPGGA,GPVTG,GPRMC等
1、 GPS DOP and Active Satellites(GSA)当前卫星信息
$GPGSA,&1&,&2&,&3&,&3&,,,,,&3&,&3&,&3&,&4&,&5&,&6&,&7&
&1&模式 :M = 手动, A = 自动。
&2&定位型式 1 = 未定位, 2 = 二维定位, 3 = 三维定位。
&3&PRN 数字:01 至 32 表天空使用中的卫星编号,最多可接收12颗卫星信息。
&4& PDOP位置精度因子(0.5~99.9)
&5& HDOP水平精度因子(0.5~99.9)
&6& VDOP垂直精度因子(0.5~99.9)
&7& Checksum.(检查位).
2、 GPS Satellites in View(GSV)可见卫星信息
$GPGSV, &1&,&2&,&3&,&4&,&5&,&6&,&7&,?&4&,&5&,&6&,&7&,&8&
&1& GSV语句的总数
&2& 本句GSV的编号
&3& 可见卫星的总数,00 至 12。
&4& 卫星编号, 01 至 32。
&5&卫星仰角, 00 至 90 度。
&6&卫星方位角, 000 至 359 度。实际值。
&7&讯号噪声比(C/No), 00 至 99 dB;无表未接收到讯号。
&8&Checksum.(检查位).
第&4&,&5&,&6&,&7&项个别卫星会重复出现,每行最多有四颗卫星。其余卫星信息会于次一行出现,若未使用,这些字段会空白。
3、Global Positioning System Fix Data(GGA)GPS定位信息
$GPGGA,&1&,&2&,&3&,&4&,&5&,&6&,&7&,&8&,&9&,M,&10&,M,&11&,&12&*hh
&1& UTC时间,hhmmss(时分秒)格式
&2& 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
&3& 纬度半球N(北半球)或S(南半球)
&4& 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
&5& 经度半球E(东经)或W(西经)
&6& GPS状态:0=未定位,1=非差分定位,2=差分定位,6=正在估算
&7& 正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)
&8& HDOP水平精度因子(0.5~99.9)
&9& 海拔高度(-99.9)
&10& 地球椭球面相对大地水准面的高度
&11& 差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
&12& 差分站ID号(前面的0也将被传输,如果不是差分定位将为空)
4、Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐定位信息
$GPRMC,&1&,&2&,&3&,&4&,&5&,&6&,&7&,&8&,&9&,&10&,&11&,&12&*hh
&1& UTC时间,hhmmss(时分秒)格式
&2& 定位状态,A=有效定位,V=无效定位
&3& 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
&4& 纬度半球N(北半球)或S(南半球)
&5& 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
&6& 经度半球E(东经)或W(西经)
&7& 地面速率(000.0~999.9节,前面的0也将被传输)
&8& 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)
&9& UTC日期,ddmmyy(日月年)格式
&10& 磁偏角(000.0~180.0度,前面的0也将被传输)
&11& 磁偏角方向,E(东)或W(西)
&12& 模式指示(仅NMEA版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
5、 Track Made Good and Ground Speed(VTG)地面速度信息
$GPVTG,&1&,T,&2&,M,&3&,N,&4&,K,&5&*hh
&1& 以真北为参考基准的地面航向(000~359度,前面的0也将被传输)
&2& 以磁北为参考基准的地面航向(000~359度,前面的0也将被传输)
&3& 地面速率(000.0~999.9节,前面的0也将被传输)
&4& 地面速率(1.8公里/小时,前面的0也将被传输)
&5& 模式指示(仅NMEA版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
对于确定数据精确度和GPS稳定性,卫星的位置是非常重要的信息。既然GPS精确读将被详细地在这两部分介绍,那么这一部分将主要描述卫星位置和信号的强度。
卫星二十四小时在轨道上运转着,它们在任一时间、任一地点上都至少有六颗能被用户看到。卫星不断地监测地球,这样就避免出现一些盲点或者卫星无法看到的地 方。就像在天空中找星星一样,卫星的位置被表示为一个方位角和高程。如前面所述,方位角为直接水平测量。高程测量则为一个与水平面的夹角,其中0°表示水 平,90°表示为“天顶”(或者说是头顶)。因此,如果设备说卫星的方位角为45°且高程为45°,那么卫星现在的位置就是处于水平的东北方向,高度为一 半的位置。另外对于卫星位置,设备报告每个卫星的“随机伪代码”(简称PRC),这个数值用来唯一标示一个卫星。
这里有一个关于 $GPGSV 的语句:
$GPGSV,3,1,10,24,82,023,40,05,62,285,32,01,62,123,00,17,59,229,28*70
每条语句包含四部分内容,例如:第一部分是“24,82,023,40”,第二部分是“05,62,285,32”等等。每部分的第一个词为PRC,第二个词为卫星高程,跟着为方位角和信号强度。如果这个卫星信息用图来显示,那么就如图 1-1。
&&&&&&&&&&&&&&&&&&&&&&&&&&&
(图 1-1:$GPGSV语句的图形表示,中心点为当前位置,周边的圆标示水平面。)
这个语句里最重要的指标应该算是“信号躁声比(signal-to-noise ratio)”(以下简称为SNR)。这个数值标示卫星信号的接收率。我们知道,卫星是以相同的强度发射信号,但是传播过程中难免会遇到诸如树和墙之类的 障碍物,这样就影响了信号的识别。典型的SNR值在0到50之间,其中50表示非常好的信号。(SNR可以达到99,但是我还从来没有见过50以上的数据 哦。)。在图 1-1里,绿色卫星表示强信号,然而黄色卫星则为中等(在第二部分,我将提供一个方法来实现信号强度的分类)。卫星#1的信号完全被阻挡了。
&&&&&&&&&&&&&&&&&&&&以上资料属于飞扬科技提供版权所有,如需转载请与联系。WAP常见问题问答大全 - exce4 - 博客园
WAP常见问题问答大全
一、&&&&&& 关于WAP的常见问答
二、&&&&&& 关于WML的常见问答
三、&&&&&& 关于WAP开发的常见问答
四、关于WMLScript的常见问答
五、关于WBMP的常见问答
六、关于WAP网关的常见问答
七、关于WAP浏览器的常见问答
八、关于WAP手机的常见问答
九、关于WAP安全的常见问答
十、关于WAP其他方面问答
十一、关于WAP站点建设的常见问答
一、关于WAP的常见问答
1. 简单的说WAP代表什么?&&& WAP代表“Wireless Application Protocol”。WAP标准也就是无线应用协议(Wireless Application Protocol )。它的作用就是使移动电话和其他无线设备能够访问各种服务和信息,特别是Internet上的服务与信息。
2. 什么是WAP ?
&&& WAP是Wireless Application Protocol的首字母缩写。其定义来自于无线工业界,例如Nokia和Ericsson。它基于现有的Internet技术,例如XML和IP,主要是为无线用户( WAP设备,例如移动电话)提供Internet上的应用和服务。
&&& WAP不是简单的一个协议,它由许多协议组成的,涵盖了从WAP设备到用户代理以及传输协议与GSM信道的各个方面。许多站点都有关于WAP的信息,具有权威的资料一般来自于WAP Forum。但是从WAP Forum来的信息非常专业,技术性强,因此对于新手来说是很困难的。虽然WAP目前还处在刚刚诞生的婴儿阶段,看起来的确有很多不尽人意的地方,但是随着无线通讯工具的普及、网络技术日益成熟、生产商和网络服务商的不断进步,WAP一定会实现现在人们使用IE等浏览器上网冲浪一样的快捷、愉悦,并且更能享受随时随地想上就上的轻松自在。
3. 谁发展了WAP ?
&&& WAP是由一个名叫“WAP论坛”的公开组织发展的。这个讨论组的主要职责是制定WAP的标准和规范。该讨论组的网址为:www.wapforum.com。
4. WAP论坛有哪些公司加盟?
&&& 几乎所有的大型通讯公司、无线网络设备提供商,手持设备制造商和软件开发商等等都是WAP讨论组的成员。
5. 为什么要投资WAP ?
&&& WAP允许持有支持该协议的移动设备访问信息和事务服务,例如:饭店和旅馆信息、证券交易、银行服务、目录服务、外汇牌价、航班时刻表、火车和汽车时刻表等等。基于WAP的设备是全球化的,易于使用,并且具有很高的安全级别。它兼容现有的应用程序和IT系统。
&&& 预测到2003年,将通过移动电话连接到Internet网络的人将超过使用PC机连接的人。策略分析学家认为,将有超过5.25亿部WAP手机投放市场。
&&& 通过交叉的合作,WAP提供了许多潜在的重要商机。它将开辟新的服务方式和新的服务渠道。拥有WAP合作伙伴的公司将能够为他们的客户随时随地提供服务。
&&& WAP将允许合作伙伴使用现有的所有协议或载体为用户服务。最重要的就是通过一个统一的途径来访问全球的用户。
&&& 面对这样广阔的前景,当然有理由投资WAP了。
6. 什么服务可以利用移动的优点?
&&& 移动服务当然比经典的Web服务更适合于移动的Internet。这些应用正在合并,正像冰山一点点地融化。
&&& 以下的应用是其中的一个例子,这个应用将从移动网络受益非浅(被称作“应用杀手”)。
&&& 定位服务(Location Based Services)
&&& 总的来说定位服务为用户提供全球定位服务,并且还能提供和位置相关的各种信息。在不久的将来,移动设备将能够告诉Web服务器特定的用户在哪儿。当然也可以采取直接向用户询问他们的位置,然而用户的回答描述往往是不准确的。
&&& 一个简单的例子就是显示一个城市的公共交通。假设某人想到某个站下车去参加一个会议。因为公共汽车可能会误点,他需要知道公共汽车上次离停的时间,或者知道它到底晚点多少。
&&& 在公共汽车站点一般都有一个时间表,还有一个唯一的标识。他可以访问公共交通的Web站点,输入必要的信息后,Web服务器就可以告诉他到底在什么地方,并且可以显示最近的公共汽车站点。虽然现在的公共汽车、火车等交通工具还没有GPS,但是相信总有办法得到位置的精确信息。总的来说,系统可以不用等到新技术的出现就能得到相关的服务。
&&& 当技术成熟到可以自动得到用户地理位置的时候,一个好的基于位置的服务将可以提供一个城市停车服务。例如不需要停车灭表,用户拥有一个设备和唯一的号码。当他想停车的时候,只要简单地告诉系统他想停在什么地方、停多久。当离停车结束只有5分钟的时候,系统将使用SMS系统告诉他的停车时间快到了,他必须开车离开或者再付钱。同时,这个系统还可以自动地通知用户哪里有停车位置,哪里发生了交通堵塞并提出智能化的建议。
7. 在中国能得到WAP手机吗?
&&& 能。现在有很多厂家都生产WAP手机并且在中国销售。例如:Ericsson,Mitsubishi,Neopoint,Samsung,Ericsson。
8. WAP可以在GPRS上运行吗?
&&& 可以。GPRS是一种新的无线服务方式。它将使WAP的传输比在现在的SMS或者CSD要快。
9. 在GSM中WAP使用什么信道?
&&& 在GSM中,WAP可以使用Short Message Service(SMS)信道或者Circuit Switched Data (CSD)信道,后者的带宽比较大。
10. WAP可以在什么样类型的网络上运行?
&&& WAP是为了可以在多种网络环境中运行而设计的。包括:GSM、PDC、CDPD、CDMA、TDMA、PHS和DECT,还包括将来的3G。
11. WAP设备是如何连接到Internet上的?
&&& 一个普通的WAP应用的场景如图10-1所示:
图 10-1 普通的WAP应用
&&& 在上图中,从左边开始,移动网络(GSM、CDDA等)中的移动WAP设备,通过拨号连接到接入服务器(RAS,或者远程控制服务器)的Modem上。这个服务器使得WAP设备可以使用协议来工作。有一些如同Internet Service Provider将提供给用户底层协议,被称作为PPP(Point-to-Point)协议。这个协议是用在整个WAP链中的下一个环节设备——由移动营运商提供的WAP网关。网关连接无线和“Web”世界,基本上是使得WAP设备能够操作普通的Internet。
&&& 更详细地说,当用户在WAP设备上输入URL的时候,例如 http://wap.colorline.no/ WAP设备首先检查用户的连接设备是否已经打开。如果没有就拨号到如上面所描述的PPP提供者。在PPP提供者已经给WAP所需要的协议和指定的IP地址之后,请求的URL将发送给网关(WAP网关)。在WAP设备请求的URL的“控制”下,发出一个普通的HTTP请求(例如:GET http://wap.colorline.no)给Internet 。在Internet 那边有一个普通的Web服务器,里面装有WAP和Web的内容,现在接收到了从WAP网关过来的HTTP请求。这个Web服务器通过判断浏览器的类型(WAP或者Web)来发送相应的内容给浏览器。接着请求的内容发送到WAP设备。因为一个WAP设备的WML浏览器只能读懂二进制的WML,所以如果这些请求的内容是文本的WML编码,WAP网关就进行编译工作,将WML编译成二进制的WML,也就是设备可以读懂的WMLC(一些经过压缩的二进制代码),并把这些二进制代码发送到WAP设备;如果内容已经是二进制的WML格式,WAP网关将跳过这个操作。这就是为什么转换文本WML到二进制WML减小了带宽的缘故。最后,当WAP设备的WML浏览器接收到二进制的WML代码,浏览器就显示其内容在WAP设备上供用户使用。
&&& 这是一种WAP设备连接到Internet的主要方式。
&&& 当WAP设备使用的是公共的WAP网关,而不是移动营运商提供的网关的时候,只需要简单地将WAP网关移动到Internet上。需要说明的是这不是普通的WAP设备的配置。在放置的时候,可能要遇到一些问题,图10-2说明了这个方式:
图10-2 使用公共网关
&&& 这个时候WAP设备请求了另外的一个在Internet上的WAP网关。这个图没有什么特别的地方需要说明。只是当那些没有移动营运商提供WAP服务的地方,或者是想自己建立WAP服务的地方,可以使用这样的方法。
&&& 如果内容提供者想完全控制在Web Server和WAP设备之间的数据流发送和接收。那么就应该安装一个所谓的WAP server。这个设备其实是一个Web Server和WAP 网关的混合体。并且经常是在一个防火墙的后面。
&&& 图10-3说明了这个问题。防火墙是可选的,但是强力推荐。
图 10-3 加入防火墙
&&& WAP设备就像前面所说的那样进入Internet,但是现在连接到防火墙的时候,它将接受或者拒绝一些连接,然后将连接发送给WAP 服务器内的WAP网关。在这个图中,在内容服务器和WAP设备之间是使用点对点的WTLS加密协议。
&&& WAP服务器对于一个普通的站点来说是不必要的。
12. 能从服务器推送消息到WAP设备吗?
&&& WAP1.1不允许推送。可以用SMS来达到这个目的。
13. WAP如何同Bluetooth, EPOC和Windows CE竞争?
&&& 这有点不大可能。WAP是使得Web的内容迁移到移动设备上。EPOC和Windows CE是设备的操作系统,它将使得微型浏览器可以浏览WML页面。Bluetooth 是一个RF (Radio Frequency)技术,它是一种小范围的无线网络。
14. WAP能持续多久?
&&& 笔者个人的观点来看,WAP能持续多久,最终还是要取决于用户对WAP的信心。一个好的技术往往在市场选择了其他的方式之后就被浪费掉了。例如VHS,Beta和Video 2000家庭视频标准。从技术的角度上来讲Video 2000提供最好的质量,但是市场选择了VHS,而且是三个里面最差的那个。对于WAP的前景问题,很不幸的是WAP现在被标上了“移动电话上的Internet”这样一个条框限制。相信多数的WAP设备是移动电话,但是WAP并没有电话这个限制,说WAP是一个Web浏览器是错误的。
&&& WAP是可以在一个“瘦”客户端上提供类似于Internet上的服务和应用。所谓“瘦”就是低能力的处理器,非常有限的显示屏幕等等。这些应用如何能更好的工作,完全取决于开发人员。WAP现在的确是限制了开发人员,但它是一个新技术,毕竟在发展的过程中有很多障碍。
&&& 有很多人当他们见到手持的微型PC和PDA的时候说,因为小的显示屏幕和缺乏好的输入机制WAP就要死亡。笔者个人认为这是错误的,首先是设备的问题,当人们外出时需要尽可能的少带设备;其次是花费问题,两个设备肯定比一个设备花费多,并且主要的WAP设备普通人都能够承受,而且花费也少。
&&& 制造厂商可能想通过将PC和移动电话集成在一起来解决这个问题。那么设备的尺寸又是另外一个问题。对于这样一个能够让人们使用的设备,肯定有很多限制。首先是输入设备,当前最好得输入设备就是键盘。若给移动电话配一个合适的键盘,那么这样一个键盘的每个按键之间的间隔可能只有小孩子才可以使用。其次是输出界面,一个人的眼睛最适合于观看五英寸的屏幕,任何比这再小的屏幕,用户都不得不再移近观看,这么大的一个屏幕将使得设备显得特别庞大并且无法放在一个普通的口袋里,而典型的移动电话的显示屏幕是2英寸,如果用户想显示普通的640*480图像在这个屏幕上,那将是不太现实的。
&&& 一个典型的混合PDA和移动电话的设备有点像今天的Nokia Communicator。用户无法方便地使用这个设备,除非用一只手来抓住它另一只手来操作或者让它完全固定住。而一个普通的移动电话,用户只需用一只手就可以操作,包括抓住和输入。
&&& 有人可能要说在一个电话上使用数字键盘来输入是不可能。使用普通的键盘的确是很方便,但是这并不意味着你在WAP设备上书写不方便。现在成亿的SMS都是从移动电话上发出的,就证明了这一点。
&&& 最后要说的是WAP不是在移动电话上的Web。WAP将拥有很长的生命期,只要有开发者能够理解它并且应用它。
15. 有哪些成功的WAP应用?
表10-1给出了很好的WAP应用的实例。也许不是非常有用或者非常高科技,但是它们是很好的例子:WAP可以提供Web的功能应用。
&&& 这些应用是基于WML的,在普通的HTML下将无法得到预期的效果。
表10-1 WAP应用
翻译成英文
http://www.zenith.ie/wap/translate
http://wap.colorline.no/demos.html
(从菜单选择WAP CAM)
和.nl域名的有效性
http://kronkel.com/domain.wml
登记本演示
登记本演示
http://cgi.cse.unsw.edu.au/cgi-bin/cgiwrap/s2231995/GB/GuestBook.wml
http://www.polish-airports.com/wap/main.wml
Kuba Urbaniak
http://seti.matrix.pl/setiatwap/
检测和注册
检测和注册
http://wap.tldnames.com/
WAP e-mail
有很多功能
http://www.sanface.com/wap/pdfmail.wml
&&& 有一些URL地址非常长,可以从下面的地址来选择:http://wap.colorline.no/links.wml。
16. 可以推荐一些好的WAP服务商吗?
&&& 下面有两个列表。表10-2提供免费的WAP主机服务,他们的服务相差很大,但是都是免费的。表10-3列出的是商业的WAP服务商,需要支付服务费。
表10-2 免费的WAP服务商
免费的WAP站点主机和在线的基于Java的WAP站点编辑器
http://www.tagtag.com/
免费和独立的移动Internet操作
http://www.waphq.co.uk/
WAP Service
免费的WAP公共服务
http://www.wapservice.com/
免费的WAP站点和重导向服务
http://www.wappy.to/
免费的WAP主机(法文)
http://www.sowap.com/
Freedom2Surf
真正免费的HTML服务,但是他们支持PHP3来提供WAP内容服务
http://www.freedom2surf.net/
Anytimenow.com
免费的20M空间,在线编辑和存储wml和wmls文件。同样提供WAP email服务,包括Hotmail
http://www.anytimenow.com/
Hoiley.com
免费的离线WAP builder - WMLedit (仍在"beta"版本)
http://www.hoiley.com/
Waphome.ch
免费提供商,在德国,包括在线的基于WAP的转换服务
http://www.waphome.ch/
免费提供商,文件上传,图像库
http://www.wapspy.com/
Windows离线编辑器,WAPpage
http://www.wapmine.com/
免费提供商"beta" version
http://www.wapdrive.net
免费提供商(在德国)
http://www.wap-homes.de/
免费提供商(在德国)
http://www.addcom.de/
免费提供商(在英国和德国)
http://www.wapmatic.de/
DeZines Webhosting
几乎免费提供WAP环境,包括PHP
http://www.web-hosting.com/
免费提供商(在土尔其和英国)。包括字典,游戏等
http://www.donetr.com/index.html
很好的免费WAP站点。还有很多服务。在挪威
http://wap.start.no/
表10-3 商业的WAP服务商
WAP,应用主机,合作应用
http://www.waphq.co.uk/
Brainstorm
Wireless Application Service 提供和开发商
http://www.brainstorm.co.uk/
IntegrationWireless
创建移动商务
美国华盛顿
http://www.integrationwireless.com/
17. 以前没有WAP的经验,但是想学,如何动手?
建议在站点wap.com查看一下《Beginner's Guide to WAP/WML》。
另外可以从ASP Today(http://www.asptoday.com)中发现一些如何书写WMLScript的文章。许多人都会发现在阅读了一些文档之后能很容易的上手。笔者也建议你在阅读了一些文章之后再开始做。
哪儿有一个WAP词汇表?
这里有一个词汇表(表10-4)
表10-4 词汇表
WAP Server
一个经常错用的词汇。一个WAP Server从真正的意义上来说和一个HTTP Server没有太多不同。Nokia将他们的HTTP Server和WAP Gateway集成产品也叫做WAP Server。其实是一个内容提供服务器和网关。网关完成网关的内容,内容提供服务器完成内容提供服务器的功能
WAP Gateway
WAP Gateway是一个两种模式的设备(像许多网关一样)。从WAP设备这边来看,WAP设备只懂得二进制格式的WML,WAP网关的功能就是转换内容为这种格式。从HTTP服务器这边来看,WAP网关可以通过HTTP头提供附加的有关WAP设备的信息,例如WAP设备的电话号码,电话ID甚至是位置信息
一个在WML Deck中包含导航、用户交互的完整的WML块。一个或者多个WML卡片必须包含在WML Deck中。WML Deck就是XML文档。(Deck就是扑克牌盒,Card就是每张牌)
一套WML卡片。整个Deck在请求的时候都将装入到浏览器中,然后针对其中的每个卡片进行处理
Standardized Generalized Markup Language
User Agent.能够解释WMLWML,WMLScript,WTAI或者其他格式的代码的软件
Scripting language for WAP devices。基于JavaScript,但是功能比较弱
Extensible Markup Language。W3C的Internet Markup Languages标准. WML是这些语言中的一种。XML是SGML的子集
Handheld Markup Language
World Wide Web Consortium。http://www.w3c.org
Wireless Application Environment
Wireless Session Protocol
Personal Digital Assistant。通常是一个手持的设备,例如 Palm Pilot。WAP不是仅仅为蜂窝电话设计的,PDA也可以支持
一个元素指的是在WML Deck中的标记和结构信息
Document Type Definition
Wireless Transaction Protocol
Wireless Transport Layer Security。一个“等价于”SSL (Secure Sockets Layer)的协议
Wireless Datagram Protocol
19. 除了这个FAQ,我在哪儿能找到更多关于WAP和WML的信息?
&&& 可以在本书的第8章WAP资源中找到很多相关的资源。
20. WAP 1.1和WAP 1.2有什么不同?
&&& 现在主要的设备和应用或多或少的遵循WAP 1.1协议。WAP Forum 已经发布了WAP 1.2 ,里面没有太多值得注意的不同。毕竟一个协议不能进化得太快。
&&& 总的来说,WAP 1.2中有以下几个最重要的新特点。对每个特点最好参考 WAP 1.2 Specifications。
l&&&&&&&& 新协议
UAPROF(User Agent Profile)。它基本上同意用户代理(可以近似理解为浏览器)使用一种方式来告诉内容提供者它有什么样的功能。这样使得提供者可以格式化输出最好的功能到这个专门的用户代理。
PUSH. PUSHing简单的说就是让应用服务器可以发送数据直接给用户代理。
l&&&&&&&& WML
accesskey属性加入到&a&、&anchor&和&input&标签中。accesskey属性将允许用户只需要按一个专门的按键转跳到一个专门的锚或者输入框中。
&pre&标签看起来还没有在发布的版本中公布。我们将假设它和HTML中的pre标签具有同样的意义。
enctype属性加入到&go&。使用这个可以知道发送的数据将进行加密处理,要么是application/x-www-urlencoded或者multipart/form-data。对于GET,只引用前者。
align属性增加到&table&。指定对齐内容使用L、R、C和D分别对左,右,中和默认。
&input&的格式化属性Nf已经从绝对数值变化到可以从0到n。
字符编码不在依靠指定的专门的&meta&标签。
l&&&&&&&& WMLScript标准库
URL库已经确认为RFC2396。
在字符串中如何表示非US-ASCII字符。非US-ASCII字符必须转换成本地可用的字符集。
21. 在WAP中如何实现多媒体流?
在一家叫做Sontora (http://www.sontora.com)的公司发布一些有关Mobicast的信息之前,这被认为是不可能的。Sontora的一些有关Mobicast的信息将可以在任何WML 1.1的设备上使用声音流,包括MP3、Windows Media和RealAudio,并且不需要对设备进行任何的修改。要想得到更多的信息,可以浏览他们的站点。
&&& 以前说不能是因为WAP协议不允许操作硬件。更谈不上播放音乐了。即使是Web的协议也不可能。对于Web环境是使用插件来解决的。但是对于WAP环境没有插件。
&&& 其实,可以使用WAP来点播歌曲,然后使用电话呼叫,将歌曲传送过来,就像语音传递那样。
二、关于WML的常见问答
1. 简单说WML代表什么?
&&& WML代表“Wireless Markup Language”。WML就是无线标记语言(Wireless Markup Language),内置于移动设备中的微型浏览器能够解释这种标记语言。虽然它和HTML语言很相像,但WML其实是XML的一个应用子集。
2. 什么是WML?
&&& WML代表Wireless Markup Language,就象HTML对普通的Web浏览器一样。有人说它是基于XML,但是更准确地说WML是XML的一个应用。虽然在语法上和HTML相似,但更多的是XML。如果准备从HTML到WML,但是没有任何的XML知识,将会发现WML“非常”严格。就像HTML,WML被读取并且通过WAP设备中的浏览器解释,然后显示在屏幕上。对于WAP设备,浏览器,或者用户代理,通常叫做微型浏览器。微型浏览器的功能是受到WAP设备的限制的。
&&& 为什么使用WML而不是使用广泛的HTML原因是由于WAP的工作方式以及WAP是为一个“窄小”的无线世界工作的。在Netscape、Opera或者IE上显示HTML需要更强的计算能力。计算能力某种意义上是移动设备中的电能。由于移动设备中的电能是有限的,所以WML在发送给WAP设备之前,通常要经过转换和压缩。所以WAP使用的是WML。
&&& 读者也许可能想到WML非常简单,甚至不能处理HTML中的多媒体类型。这个不是问题。标记语言(WML、HTML等等)没有操作设备的权限,例如播放声音或者显示动画。仔细地观察HTML,就会发现没有一个HTML标签能够显示动画或者播放音乐。限制是来自于运行标记语言的浏览器。毕竟在大多数情况下,是谈论移动电话。但是这个限制应该随着无线Internet的发展而逐渐取消。
3. WML与HTML有什么区别?
&&& 虽然WML看起来十分像HTML,但是在技术上两者的差别还是很大的。WML是为微型浏览器所设计的HTML的一个子集。WML的标准定义是基于XML的。
4. Phone.com的 HDML和WML有什么区别?现在有电话支持 HDML吗?
&&& HDML(Hand-held Devices Markup Language)是Phone.com开发的。它使得Web页面可以在移动电话上显示,其标准的公布先于WAP标准。Motorola、 Neopoint、Qualcomm 等等公司的电话使用Phone.com的浏览器,它支持HDML。最新的UP.Browser支持HDML和WAP。
5. 为什么使用WML而不是HTML?
&&& 首先是WAP协议要求使用WML。可能已经有能够支持HTML的WAP设备,但是那不是真正的。有一些和无线设备很像的WAP设备支持HTML,但它们也不是直接使用HTML(例如:Microsoft Mobile Explorer支持HTML和WML)。MME设备只是将两个分离的部分做到了一起。当然也有HTML的变种,例如 iMode 浏览器使用Compact HTML。简单的说,如果谈论WAP设备,那么标记语言就是WML。
&&& 有很多理由说明选择WML而不是HTML。现在最重要的一个原因就是WML与HTML相比需要很小的带宽。随着无线技术的提高,带宽会越来越宽。这个原因可能不再是主要原因,但是在达到这么高带宽之前需要许多年的时间。
&&& 另外一个就是HTML需要相对来说比较强的处理器。处理器的能力意味着需要更强的能量。在无线设备中能量来自于电池。而一个低处理能力的处理器就意味着电池的使用时间可以更长。
&&& 另外,HTML的确需要一个很大的显示屏幕。移动电话上的屏幕显然不能满足要求。当然也许会有一个大屏幕的移动电话,但是这样它就离移动更远(也就是说越不像移动电话)。即使iMode支持彩色和一个类似HTML的显示,它的尺寸已经是你可以方便携带的最大尺寸。
6. 为什么对于无线设备要专门设计一种特别的语言才能访问Internet ?
&&& 许多年来,HTML标记越来越丰富,越来越庞大。此外,浏览器对各种HTML标记的支持也大不相同。这种状况已经与当初想建立一个简单的标准相背离。
&&& 移动设备(例如:移动电话)具有小屏幕、内存少、缺少方便的输入设备和带宽窄的特点。这种状况驱使WAP讨论组发展一种新的为无线设备所使用的语言,WML就此诞生了。
7. 无线设备也能支持HTML格式吗?
&&& 从技术的角度上来说答案是肯定的。既然HTML是为普通PC浏览器所编写的,也可以使用微型浏览器来浏览一个HTML页面,但是可能没有效果。因为移动电话不知道如何显示该文件。这样通常导致微型浏览器出现混乱。并且HTML页面通常都比较大,它会把移动设备“撑坏”的。
8. 如何将HTML转换成WML?
&&& 当考虑转换HTML时,要想到WML是为小屏幕设计的,不可能像HTML那么丰富多采。任何转换都将忽略很多HTML标记和许多内嵌的脚本。只有一些简单的HTML页面可以被满意地转换。转换可以使用工具包如:Spyglass Prism,也可以通过在线的WAP网关过滤。
9. 用什么可以浏览到WML页面?
&&& 首先需要一个具有WAP功能的手机,例如:Nokia 71110,Ericsson R320等等。用于PC机的桌面WML浏览器也很多,例如:WinWap、WapMan等等。
10. 在哪里可以学到更多的关于XML的知识?
&&& 可以访问站点:www.w3c.org/xml。在该网站上有许多关于XML的知识有详细的讲解。
11. WML的一般语法是什么?
&&& WML非常像XML。和HTML相比其语法规则更加严格,从而保证当微型浏览器解析和解释的时候不会有太多的错误信息。
&&& 和HTML一样,WML使用“&”和“&”组成的格式化标签。许多标签都是以&tag&开头,以&/tag&结尾。在开头或者结尾中包含的部分叫做元素。有些标签叫做空元素,只有标签,没有内容,如:&tag/&。
&&& 许多元素有属性来描述应其中还有那些内容。属性名字必须小写,并且属性值必须使用双引号括起来。有些属性是必须的,有些是可选的。一般的属性标签格式就像:&tag attribute1="value"&。
&&& 变量可以在WML卡片中定义,它们的一般格式是 $(variablename)。
&&& 一个WML页面有一个专门的格式,它必须以XML的文档声明为开头:
&?xml version="1.0"?&
&!DOCTYPE wml PUBLIC "-//WAPFORUM/DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&
&&& 所有的页面中的元素,都必须在&wml&和&/wml&标签之间。
12. 什么是一个“deck”?
&&& 一个WML文档有许多卡片(cards)组成。一个卡片是一系列完整的WML代码。这些卡片被称为一个“deck”。卡片和“deck”的概念就有点像HTML中的锚标记&a name="#achor1"&和一个HTML页面。也就是说卡片是“deck”中的一个组成部分。也可以把“deck”称为WML中的页面。它们之间的关系可以比做一副扑克牌。整副扑克牌就是deck,而每一张牌就是card。
13. 什么是WML的“deck”?
&&& WML的“deck”或者WML文件是指decks。每个deck包含一个或者更多的card。每个deck都以&wml&开始和结束。并且每个card都以&card&开头或者结束。
&&& 当WML微型浏览器处理WML文件或者deck的时候,它阅读整个deck,并且在deck内的各个card之间进行导航。当装入deck的时候,deck里面所有的card都已经装入到内存中,直到浏览器装入另外的deck。
&&& 如果熟悉 HTML中的&a name&标签。WML的&card&标签将是非常类似的:
&card id="start_menu"&
...some code...
&card id="purchase"&
...some more code...
&&& deck和card可以按照这种方式调用:[deckname][#cardname]。如果deckname省略,那么浏览器就会查找当前内存里的cardname名字的card。如果使用了deckname和#cardname,那么浏览器将装入deckname的整个deck,然后跳入到#cardname。这个和HTML的工作方式很像。
14. WML是大小写敏感的吗?
&&& 是的!要注意WAP 1.1使用小写的标签。
15. 如何显示一个美元符号?
&&& 使用两个在一起的美元符号来表示,即“$$”。
16. 想显示价格的格式该怎么办?
&&& “$”是一个特殊的字符,使用“$$”来显示一个“$”。
&&& 例如:
&&& The price is $$11.20
17. fieldset标签有什么作用?
&&& 编写WML页面的时候要考虑到设备的屏幕很小。如果试图想把一个大的form在一个屏幕里面显示,就要指定那些标签保持在一个屏幕中。那么fieldset标签将这些标签捆绑在一个屏幕上。
18. postfield标签有什么作用?
&&& postfield标签使允许提交参数到服务器端。注意有些早期的模拟器还不支持该标签,这将给开发工作带来麻烦!
19. WML有类似HTML的&mailto&标签吗?
&&& 没有。但是你可以使用WML表单和服务端脚本来得到同样的效果。
20. 无法让&input/&格式正常工作是怎么回事?
&&& 至少Nokia WML Reference没有讲清楚有关&input/&标签的用法。format参数控制着用户输入数据的类型和长度。
&&& 注意到不是所有的WAP 1.1浏览器都接受所有的格式化代码。例如:Nokia 7110就支持得不是很好。Mitsubishi Trium在处理“*f”代码的时候有点问题,“*”必须为1或者更大。专门的格式化代码如下:
从A到Z的任何大写字母,没有数字或其他字符。
从a到z的任何小写字母,没有数字和其他字符。
任何0到9的数字。
从A到Z从0到9的任何字符。
从a到z从0到9的任何字符。
任何字符,输入默认从大写开始。
任何字符,输入默认从小写开始。
(星号)意味着任何数字(包括0),f是格式的代码。
意味着恰好要输入的字符个数。n从1到9。f是格式代码。
是转义输出字符。
&&& 格式化字符可以组合使用来表示一种特定的格式输入。但是强制一定的输入应当避免在用户出错的时候没有提示信息。如果输入是不正确的,该填写的区域一般仍保持空白,直到让用户知道应该输入什么。如果只想输入数字,使用“*N”那么将直接转跳到数字输入模式。如果只想输入大写的字符,使用“*M”转跳到大写输入模式。现举一些例子:
&&& “N” 只接受一个数字字符。
&&& “*N” 接受任何数字字符。
&&& “NN” 只接受2个数字字符,不多不少。
&&& “ANN” 接受一个大写字符(没有数字),后面跟着两个数字,不多不少。
&&& “X*N” 表示可以接受一个字符(没有数字)后面跟着任意多的数字字符。
&&& “NNN\-NNN\-NNNN”表示接受美国的电话号码格式,例如:“123-456-1234”。
&&& “2N\:2N\:2N” 表示接受时间格式,例如:“12:02:34”。
&&& “NNNNNNNNN” 表示接受9个数字字符。
&&& “9N” 同样表示接受9个数字字符。&
&&& maxlength参数控制着输入字符的总个数。
21. 如何防止一个空的field?
&&& 在大多数情况下需要知道用户确实是输入了一些内容在field中,不能让这些内容为空。这个可以通过在服务端的检测来完成,也可以通过WML来完成。
&&& 在WML中,这个检查可以通过合适的格式化代码来完成,或者使用一个在input标签中叫做emptyok="false" 的参数来实现(只有当必须要求用户输入的时候才使用)。如果使用了value="something" 或者value="" 用户仍然可以发送空的fields。
&&& 以下的行将接收任何值到username field, 甚至用户将整个field清空。另外field中没有任何东西,也能够提交form。
&&&&&&& &input name="username" type="text" value="things" format="*M"/& 
&&& 除了用户将整个field清空,以下的行将接收任何值到username field。如果field是空的,他将不能提交form,。
&&&&&&& &input name="username" type="text" value="things" format="M*m"/&
&&& 以上的应用是针对大多数的浏览器。在Nokia 7110 ,emptyok参数可以有同样的效果:
&&&&&&& &input name="username" type="text" value="things" format="*M" emptyok="false"/&
22. 使用option标签的时候,无法一屏显示完该怎么办?
&&& 许多WAP电话的显示屏幕只能显示三到四个选项。按以下的方法分割option字段就可以输入更多的选项。
&select title="longselectlist"&
&optgroup title="option1"&
&option&option1-1&/option&
&option&option1-2&/option&
&option&option1-3&/option&
&/optgroup&
&optgroup title="option2"&
    &option&option2-1&/option&
      &option&option2-2&/option&
      &option&option2-3&/option&
&/optgroup&
&optgroup title="option3"&
      &option&option3-1&/option&
      &option&option3-2&/option&
      &option&option3-3&/option&
&/optgroup&
23. 想有一个永久的BACK在屏幕的右下方。有些好像是自动的,若没有,该怎么做?
&&& 可以加入以下代码。
&do type="prev" label="Back"&
&&& &/prev&
&&& 更好的是使用template。
……
&template&
&&& &do type="prev" label="Back" name="back"&
&&&&&&& &/prev&
&/template&
……
24. WAP支持列表吗?
&&& 是的,WAP1.1支持列表和相关的标记。
25. 可以在WML中使用表单吗?
&&& 可以。但是Nokia 7110在显示表单的时候有些问题。
26. WML支持什么样的表单提交方式?
&&& WML支持GET和POST方式。但是Nokia 7110在处理GET方式的时候有些问题。
27. WML中如何增加参数到URL字符串中?
&&& 和HTML的工作方式很像,如下所示:
……
www.someserver.com/someurl?parameter1=value1&parameter2=value2
……
&&& 唯一的不同是将“&”变成“&”。
28. 如何从WML向ASP传送数据?
&&& 假设有一个ASP叫做“myasp.asp”,并且有一个WML变量叫做 “wmlvar”。当发出请求“myasp.asp?wmlvar=something”,可以使用下面的方法得到变量的内容。
&&& dim aspvar
&&& aspvar = Request.QueryString("wmlvar") 
&&& ASP变量“aspvar”将包含字符串“something”。当然ASP变量也可以与WML变量同名。
29. 如何让WML页面自己更新?
&&& 有过Web经验的人喜欢使用:
&&&&&&& &meta http-equiv="refresh" content="1;http://somewhere.com/"& 
&&& 来强制浏览器自动更新。
&&& 虽然在WAP中也支持一些META标签,一个更好的办法是使用&ontimer&标签。
&&& 以下的代码显示了如何自动转跳到另外一个卡片:nextdeck.wml。
&?xml version="1.0"?&
&!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&
    &card id="splashscreen" ontimer="nextcard.wml"&
      &timer value="40"/&
      &p&Please wait for the timer to run out...&/p&
    &/card&
&&& 下面的代码将强制浏览器在一段时间后重新装入同一个卡片。这个页面叫做loop.wml。
&?xml version="1.0"?&
&!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&
    &card id="loop" ontimer="loop.wml"&
      &timer value="40"/&
      &p&This text will be shown over and over again...&/p&
    &/card&
&&& 注意必须避免浏览器可能要使用的cache机制。
30. WML页面的最大大小是多少?
&&& 1397 bytes/deck
31. WML页面的限制是多少?
&&& 由于WAP设备只有很少的内存,因此就存在着一个最大的WML deck的界限。这里没有一个绝对的标准,根据浏览器的不同而不同。表10-5列出了几种浏览器的限制。
&&& 注意WML deck的大小是指编码压缩成二进制格式下的大小,一个没有压缩的WML deck可能很大,但是压缩后可能比较小。
表10-5 不同浏览器的限制
压缩后的WML大小限制
UP.Browser 3.2
1492 bytes
UP.Browser 4.x
2048 bytes
Ericsson R320
大约3000 bytes
Ericsson R380
大约3500 bytes
Ericsson MC218
多于8000 bytes
Nokia 7110
1397 bytes
32. 如何防止对WML页面的非法访问?
&&& WAP可以防止通过HTTP协议对文件和目录的非法操作。注意:有些WAP模拟器和虚拟的WAP浏览器可能不支持这个特点。在这个时候是不知道是否有可能使用其他类型的验证方式。
&&& 为了使用这种方式,用户的HTTP服务器必须支持这个特点,其实大多数服务器都支持。当一个WAP浏览器请求一个URL,它将提醒用户输入用户名和密码。这些都转换成无法直接阅读的字符,但不是加密。也就是说如果网络上有人在使用合适的设备监听,那么用户名和密码将被泄露。
&&& 这个特点在Apache文档中有详细的说明,但是文档的描述很弱,这里有如何在Apache HTTP服务器上配置的说明:
&&& 要保证Apache已经配置过,使得一个名叫.htaccess的文件可以覆盖全局的操作配置。操作配置既可以在每个目录使用分离的文件,也可以在全局的access.conf中。但是在这个例子中,我们将集中在.htaccess文件上。并且检查AllowOverride的设置。这个必须设置到AuthConfig,那样意味着Apache在目录中寻找.htaccess文件,并且使用该文件中的规则。记住在配置后要重新启动Apache服务器。
&&& 下一步是在目录里放置需要保护的文件叫做.htaccess。(注意点代表文件名的开头)。一个.htaccess文件的基本内容如下:
AuthType Basic
AuthName "WAP FAQ Authentication Demo"
AuthUserFile /home/httpd/html/wap-faq/extras/auth/auth.passwd
require valid-user 
&&& AuthType设置是指定验证的类型,AuthName指定领域,AuthUserFile指定口令文件的位置,require指定所想得到的操作。在这个例子中,任何在口令文件中的用户都有一个正确的口令。
&&& 现在需要产生一个口令文件,Apache使用一个叫做 .htpasswd来完成这个特殊格式文件的生成。运行程序如下:
#htpasswd /home/httpd/html/wap-faq/extras/auth/auth.passwd demo
New password:
Re-type password:
Adding password for user demo
&&& 注意:在第一次创建文件的时候,必须使用“-c”选项。
&&& 现在加入了一个叫做“demo”的用户,并且输入了他的密码两次。考虑到安全的原因,口令文件不应该放在文件根目录下。笔者在这里只是做演示。
&&& 现在最后就是测试,笔者建议使用HTML浏览器。输入含有想保护的URL目录的地址,一个对话框就会弹出来询问用户名和口令。如果一切顺利,就可以使用WAP浏览器来测试了。
&&& 一个目录保护的例子在这个服务器上,用户名是demo,口令是demo。可以使用HTML或者WML浏览器来做测试。
&&& 这个例子同样可以通过输入http://wap.colorline.no/demos.html来得到。
&&& 或者只要点到保护的区域:
&&&&&&& http://wap.colorline.no/wap-faq/extras/auth/
&&& 或者查看.htaccess文件。
&&& 最后点击查看口令文件的内容。
33. 怎么使用非拉丁字符?
&&& 在文件开头加上:
&&&&&&& encoding="ISO-8859-1"?
&&& 或者:
&&&&&&& encoding="UTF-8"?
&&& ISO-8859-1和UTF-8编码支持更多的字符。
34. 一些特殊字符破坏了代码和连接该怎么办?
&&& 锚/链接有时候包含了一些字母和数字之外的字符。典型的如:“~”(波浪号)和“&”(与号)。如果根据书编程,就应该告诉WAP浏览器使用的是什么字符集。这个在XML定义中可以完成:
&&& &?xml version="1.0" encoding="iso-8859-1"?& 
&&& “iso-8859-1”是Latin字符集。这个应该在大多数场合下能满足需要。但是,还是需要对那些转义字符进行转义。即使指定了字符集,也是没有用处的。
&&& 字符实体是某些特殊字符的标准名字,例如:“&”就是“&”。
&&& 大多数浏览器在反编码名字实体的时候会出现问题,例如Nokia列出了7个兼容的名字实体:“quot”、“amp”、“apos”、“lt”、“gt”、“nbsp”和“shy”。只有在使用它们的十进制代码的时候(在上述所说的Link中),浏览器可以显示几乎所有字符。如果Nokia的浏览器接收到无法支持的实体名,它就会崩溃。
&&& 通过使用HTML或者WML浏览器(在HTML格式下,虽然不是很好),可以操作在线的实体名列表,该列表在http://wap.colorline.no/wap-faq/apps/charentref.html。
&&& 这个表同样有一个例子在:http://wap.colorline.no/demos.html。
&&& 第一步,选择将要使用的字符集,Latin1,Latin1 Mathematical和Greek symbols,最后是Latin1 Markup symbols。注意到列表被分割了,是由于deck的限制。真正的列表显示了实体名,实体的十进制值和真正的符号。从这里就可以看到哪个字符浏览器可以显示。
&&& 注意上面的在线列表,不要设置为“charset=iso-8859-1”(真正的Latin1),那是个XML定义。
35. 可能在WML页面上显示一个可选的Link吗?当用户选择后就可以直接拨号?
现在不行。但是一旦支持WTAI的设备出现,那么就可能实现。
三、关于WAP开发的常见问答
1. 开发WAP软件需要哪些工具?
&&& 为了开发WAP应用程序,需要一个WAP网关(注意:这里的网关可能是指支持WML的服务器。可以通过配置WWW服务器达到这个目的)和WAP工具包。工具包应当包括模拟器和能让开发者浏览WML网页。WML页面的开发和HTML页面的开发一样,可以使用Notepad或者其他文本编辑器来进行编辑。
2. 有哪些公司现在提供这样的开发环境?
Nokia、Ericsson、UpPhone和Motorola都提供免费的WAP网关和工具包。
Nokia:Nokia Toolkit和Nokia WAP Server。
Ericsson:Ericsson R320和WapIDE。
UpPhone:UpPhone SDK。
Motorola:Motorola ADK。
3. 开发WAP应用一定要有WAP手机吗?
&&& 不是,当开发WAP应用的时候,不一定需要WAP手机。模拟器可以帮助开发者解决大部分的问题。但是如果是开发商业网站,特别是想知道各种移动电话在显示WML页面上的差别的时候,最好是配备一个。目前各种手机对WML标记的支持和中文的支持状况大不相同,因此WAP手机还是必要的。
4. 开发者需要一个WAP网关吗?
&&& 不是很必要。如果只想进行简单的WAP内容服务,可以使用现有的Web服务器(只需要修改MIME类型)。移动电话会通过坐落在本地的网关连接到你的服务器上。
&&& 但是在网关上驻留开发者的程序有很多好处。既然开发者的程序是网关的一个部分,开发者就可以知道呼叫号码、身份、位置等等。
5. 可以看到WML的源代码么?
&&& 如果开发者使用SDK浏览的时候将能够看到WML的代码。如果只有一个HTML浏览器,可以访问“Fetch Page”服务(http://www.webcab.de)来取得代码。这个可以显示在Internet上的任何WML页面中。
6. 可能在WML中加入applets吗?
&&& 不能。
7. 可以使用HTML开发工具来开发WAP应用吗?
&&& 在大多数情况下开发工具是使用基于PC的浏览器。HTML、JavaScript和Java对于WAP开发来说都没有用处。但是,越来越多的开发工具在加入对WML的支持。
&&& Allair的Cold Fusion 4.5 和 HomeSite已经有WML支持,虽然Allair也许需要清除一些BUG。另外PHP和ASP在Coldfusion/HomeSite也能支持。
&&& 可以到 Marjolei Katsma的 HomeSite Help site 上得到更多的信息。
8. 可以通过WML页面来操作数据库吗?
&&& 可以,与创建HTML页面相同。任何相关的服务器端的技术都可以用来生成WML页面。
9. 可以使用CGI生成WML页面吗?
&&& 当然。可以用创建HTML同样的方法来创建WML。如果想书写一个CGI来创建WML,只要记住在页面的开头正确设置MIME类型。具体的形式根据所使用的语言不同而不同。例如在Perl中:
print ("Content-type:application/vnd.wap.wml \n\n\n"); 
&&& 注意至少要使用2个换行。
10. 如何使用Cold Fusion来生成页面?
&&& 使用Cold Fusion只需要加上:
&&& &CFCONTENT type="text/vnd.wap.wml"&
11. 如何使用PHP来书写动态的WML页面?
&&& PHP(和大多数其他服务端脚本语言一样)可以被用来书写动态的WML内容。只需要将输出的标记限制在WML微型浏览器可接受的范围内。
&&& 注意PHP有很多内建的HTML功能,特别是错误功能,这些功能WML微型浏览器可能无法识别。
&&& PHP同样可以在一个HTML文件中编写出既适合于HTML,也适合于WML的内容。PHP的源代码对于客户端来说是不可见的。因此可以针对HTML浏览器输出HTML页面,针对WML浏览器输出WML页面。
&&& 可以在开发PHP编写的WML页面的时候把以下代码加在开头:
// header("Content-type: text/vnd.wap.wml");
  echo("&?xml version=\"1.0\"?&\n");
echo("&!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"
//"http://www.wapforum.org/DTD/wml_1.1.xml\"&\n\n");
&&& 基于PC的浏览器将忽略这些无法理解的WML标记。但是如果想在WAP设备或者模拟器上测试的时候,只需要将"//"去掉,页面自动变成WML页面。
12. 使用PHP动态输出WML
&&& 这些例子生成一个非常有用的应用叫做:PizzaCalc。它将输入所有的pizza的帐单和人的数目,可以算出每个人的花费。
&&& 应用生成一个动态的页面叫做“calc”或者“input”。注意到所有的转义字符例如双引号。该页显示了一个简单的变量处理,和如何传递参数到另外的卡片:
&&& 使用WML浏览器就可以测试应用程序:
&&&&&&& http://wap.colorline.no/wap-faq/apps/pizzacalc.html。
&&& 或者输入:
&&&&&&& http://wap.colorline.no/demos.html选择应用。
header("Content-type: text/vnd.wap.wml");
echo("&?xml version=\"1.0\"?&\n");
echo("&!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"
\"http://www.wapforum.org/DTD/wml_1.1.xml\"&\n\n");
echo("&!--The application PizzaCalc was originally made by The Crusaders
www.crusaders.no on the Commodore Amiga --&\n");
echo("&!-- It was unfortunately not possible to emulate the crap interger handling of the
original program --&\n");
  if($action == "calc") {
    echo("&card id=\"result\" title=\"PizzaCalc\"&\n");
    echo("&do type=\"prev\" label=\"Back\"&\n");
    echo("&go href=\"pizzacalc.html#input\"/&\n");
    echo("&/do&\n");
    echo("&p&\n");
    echo("The cost per eater will be ".$total / $eaters."&br/&\n");
    echo("&card id=\"input\" title=\"PizzaCalc\"&\n");
    echo("&p&\n");
echo("&anchor&Split Pizza bill
&go href=\"pizzacalc.html?total=\$(total)&eaters=\$(eaters)&action=calc\"/&
&/anchor&\n");
    echo("&br/&\n");
    echo("Total cost: &input type=\"text\" name=\"total\" format=\"*N\"/&\n");
    echo("Eaters: &input type=\"text\" name=\"eaters\" format=\"*N\"/&\n");
13. 可以使用Java Servlet来生成WML页面吗?
&&& 当然。可以使用创建HTML同样的方法来创建WML。如果想书写一个CGI来创建WML,只要记住在页面的开头正确设置MIME类型:
&&& response.setContentType("text/vnd.wap.wml");
14. 可以使用ASP、Perl等生成动态的应用吗?
&&& 是的。可以使用任何服务器端的脚本语言来生成WAP应用。
15. 如何使用ASP书写WML内容?
&&& ASP(Active Server Pages)可以做到和PHP一样,也可以用来书写动态的WML。如果需要一些好的例子请参考Luca Passani's WAP and ASP articles。或者查看Jean-Luc Praz's ()。更多的ASP例子在:http://www.corobori.com/wap/。
16. 使用ASP动态输出WML页面时候,已经设置了Content-type,但浏览器返回的仍然是text/html,有什么问题吗?
&&& 如果在ASP脚本中有一个错误,那么诊断程序会发还一个HTML页面,请检查脚本。
17. 在使用ASP生成WML页面的时候出现了错误: &MIME type "text/html" is not supported&,会是什么问题?
&&& 这个问题是Web浏览器不知道WML的正确类型,修改ASP的第一行,加入:
&&& &Response.ContentType = "text/vnd.wap.wml"& 
&&& 后就可以工作了。
18. 下面的代码有什么问题吗?
&%Response.ContentType = "text/vnd.WAP.WML"%&
&?xml version="1.0"?&
&&& 去掉&?xml version="1.0"?&之前的空格。XML解释器希望在这行中没有其他字符,甚至是空行。
19. ASP代码可以在模拟器上工作,在真正的浏览器上怎么不行?
&&& 在很多模拟器上没有像真正的WML浏览器那么严格。这些对于那些没有使用网关的模拟器(Nokia SDK/Toolkit)来说更是这样,有些就根本没有使用网关(WinWAP、WapMAN)。
&&& 一个真正的WML浏览器应该只读取二进制的数据(从WML编码得来的)WMLC,对于网关应该将文本WML转换/编译成WMLC。语法是非常严格的。ASP是为HTML浏览器设置的,但是HTML没有WML那么严格。
&&& 这里在ASP生成动态页面的时候有一个微小的“bug”。它在WML浏览器上不允许有任何地方输出白行(例如:空格,回车,换行)。注意到有些网关可能会修正这些问题,但有的则不管(例如:CMG网关)。
&&& 下面是一个常见的ASP代码用来输出WML页面开头的MIME类型:
&%Response.ContentType = "text/vnd.wap.wml"%&
&?xml version="1.0"?&
&&& 问题就在ASP将会在 .wml"%& 和 &?xml vers 之间输出换行和回车。这两行就被分割了。这将打乱WML代码的内容。WML必须以“&”开头,而且第一行是&?xml version="1.0"?&。就上面的WML页面回车/换行将会出现问题。
&&& 最简单的解决办法是:
&&& &%Response.ContentType = "text/vnd.wap.wml"%&&?xml version="1.0"?&
&&& 在XML定义正确的格式化以后,后面的部分WML对空格就没有那么严格的要求。
&&& 要注意的是有些网关在输出ASP的时候会有问题,因此在WML代码中最好使用 Response.Write 而不是&%=MyVar%&。
20. 如何使用Perl来生成WML内容?
&&& 和其他Server端程序一样。Perl也可以用来书写漂亮的WAP应用程序。
&&& 最常见的就是如何使用Perl输出正确的MIME类型,下面的例子说明了这一点:
print "Content-type: text/vnd.wap.wml\n\n";
print "&?xml version=\"1.0\"?&\n";
print "&!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"
\"http://www.wapforum.org/DTD/wml_1.1.xml\"&\n";
print "&wml&\n";
……
21. 应当如何下手书写WAP应用程序?
&&& 其实需要的只是Text编辑器。但是使用一个开发工具可以节约很多时间。
&&& 在这之前应该浏览一下WAP的权威站点:www.wapforum.com。
&&& 在Nokia WAP 开发论坛中进行注册,并且下载Nokia WAP Developer Toolkit 。Toolkit中的PDF文件可以给出一定的WML和WMLScript指导。Nokia Toolkit需要JRE (Java Runtime Environment) v.1.2.2 或者更高版本。
&&& 虽然工具可以用来为WAP设备设计应用,但是不是为专门的移动电话。在WAP开发工具上所看到的并不代表用户在手机上所看到的。为了确定想看到的事情,最好需要一个WAP设备,例如移动电话,或者模拟器。
&&& Nokia WAP SDK 2有一个7110的模拟器。模拟器是一个有效的检测方式,能检测程序中的bug。 Nokia SDK 同样还包括一个小的WAP server让开发者可以从本地或者HTTP服务器上下载WML页面。
&&& 到 Phone.com 开发站点注册后,Phone.com 提供UP.browser。这是最流行的浏览器,特别是在美国,Phone.com 提供UP.SDK。 在注册之后就可以下载。
&&& 对于Ericsson R320 和 R380是最近的事情。应该注册并查看Ericsson's Developer's Zone 来得到开发工具。R380是一个非常好的模拟器,在 Symbian 不需要注册就可以下载。Ericsson 没有公开的为R320的模拟器。
&&& Motorola 有一个平台叫做 Mobile Internet eXchange 或者 MIX 。Mobile Application Development Kit 已经开发出一个开发平台,即为WAP也为Motorola的 VoxML。在注册后,可以在下面的网址找到数据包。
&&& http://www.motorola.com/MIMS/MSPG/cgi-bin/spn_madk.cgi. 
&&& WAPmine 是一个独立的应用,叫做 WAPPage 是一个所见即所得的编辑工具。而且有一个XML树型控件来编辑WML标签。
&&& 如果在开发公共应用程序时,想在很多设备上测试你的程序,就像在不同的浏览器上测试HTML页面一样。注意在不同的WML浏览器上的差别,可能比在不同的HTML浏览器上的差别要大。
22. 如何编写和测试WML页面?
&&& 现在有很多SDK。AnywhereYouGo.com有WAP SDK和IDE列表,可以下载一个来用。任何文本编辑器都可以书写一个简单的WML页面,当然HTML编辑器也可以(特别是那些支持个人定义标签的),例如:Allaire Homesite (http://www.allaire.com )。可以使用SDK来做简单的测试,但是对于大的项目可能要困难些。AnywhereYouGo.com已经建立一套基于Web的工具来帮助WAP测试。
23. 哪儿可以在找到WML的测试工具?
&&& 首先确定WML代码是正确的,然后再使用WML测试工具。
&&& 有一个非常好的测试工具在Zygo Communications(http://wap.z-y-g-o.com/tools/),测试工具是用Perl写的。里面还有其他的工具可供下载。
24. 如何操作WML页面?
&&& 操作WML页面或者卡片,最简单的办法是通过现有的网关。大多数移动电话提供者将功能都放在主页上,在上面可以通过WAP设备操作。网关的链接一般叫做“Go to URL”。当选择以后,WAP设备将通过网关操作指定的普通IP或者URL。在这种情况下,网关读取从WAP设备发送给网关的WML内容,就像PC浏览器读取内容的过程一样。
&&& 有些营运商选择不让他们的用户操作其他的站点。这个就像Internet Service Provider只允许用户操作ISP自己的站点。像这样的做法是不明智的,这样会发现自己的用户去其他地方了。
&&& 如果要坚持这种方法,可以通过ISP拨号或者使用一个公共的网关来取得其他的WAP资源。
25. 有没有一个友好的方式来管理WML内容?
&&& 还没有。虽然Oracale正在开发数据库驱动的文档服务,被称为Panama,可以支持WAP分发。
26. 如何防止用户代理cache页面?
&&& 如果用户使用ASP,应该加入一行&%Response.expires=-1%& ,这个将阻止Cache。
27. 怎样防止从Cache中读取WML页面?
&&& 当WML页面下载到WAP设备后,它将保存在WAP设备内存中一段时间,直到这个时间过期。在这之后,页面将从服务器下载,而不是从WAP设备的缓存读取。这个过程被称做Cache。
&&& 但是有些时候不想让页面从缓存中读取,而是从服务器端读取。一个典型的例子就是当服务器的内容不断在更新的时候,通过在HTTP头中加入一定的cache信息,来告诉WAP设备该页面将不存储在缓存中。
&&& 可以在服务器端生成HTTP头,或者使用PHP、ASP、Perl或者其他服务端开发语言。这一行不能被包括在页面里,既然是HTTP的信息头,就不是WML元素。
&&& 对于静态页面,或许没有使用服务器端脚本语言,许多浏览器支持META标签来控制浏览器的Cache。看本部分的最后的例子。
&&& 将下面代码加入到HTTP头中,页面将马上过期:
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: DD. month YYYY HH:MM:SS GMT
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
&&& 第一行告诉微型浏览器,页面已经过期一段时间了。第二行告诉浏览器页面最后一次修改的时间。DD应该换成当天的日期,month YY HH MM SS等等类推。第三行和第四行有同样的效果。告诉浏览器页面不被Cache(第三行适用于 HTTP 1.1,第四行适用于HTTP 1.0)。
&&& 下面的是PHP的一个例子:
// set the correct MIME type
     header("Content-type: text/vnd.wap.wml");
// expires in the past
     header("Expires: Mon, 26 Jul :00 GMT");
// Last modified, right now
     header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
// Prevent caching, HTTP/1.1
     header("Cache-Control: no-cache, must-revalidate");
// Prevent caching, HTTP/1.0
     header("Pragma: no-cache");
&&& 下面是使用WebClasses(VB)的例子。使用"Response.Expires=-1",防止Cache。
 Private Sub WebClass_Start()
      'Set correct MIME type
      Response.ContentType = "text/vnd.wap.wml"
     
      'Make sure no caching
      Response.Expires = -1
      Response.AddHeader "Pragma", "no-cache"
      Response.AddHeader "Cache-Control", "no-cache, must-revalidate"
      'Use basicwml(my own) as template
      Set NextItem = basicwml
  End Sub 
&&& 这里有一个ASP的例子,同样使用“Response.Expires=-1”防止Cache。
    Response.ContentType = "text/vnd.wap.wml"
    Response.Expires = -1
    Response.AddHeader "Pragma", "no-cache"
    Response.AddHeader "Cache-Control", "no-cache, must-revalidate"
&&& 最后是使用META的例子:
&?xml version="1.0"?&
&!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml"&
    &head&
      &meta forua="true" http-equiv="Cache-Control" content="max-age=0"/&
    &/head&
    &card id="alwaysexpire"&
      &p&This deck will never be stored in the cache&/p&
    &/card&
&&& 下面的页面是在经过86400秒(24 hours)后过期。
&?xml version="1.0"?&
&!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml"&
    &head&
      &meta forua="true" http-equiv="Cache-Control" content="max-age=86400"/&
    &/head&
    &card id="expire1day"&
      &p&This card will live in the cache for a day&/p&
    &/card&
&&& 有些浏览器例如:UP.Simulator如果可以通过“返回”达到另外一个卡片,那么它将不会重新装载卡片。为了强制这个更新动作,用户必须在META标签中使用must-revalidate 参数。
&&& &meta forua="true" http-equiv="Cache-Control" content="must-revalidate"/&
28. 如何防止变量被保存在Cache中?
&&& 变量保存在Cache中,这样变量还可以再利用。例如当用户返回到上一个输入卡片,他不需要重新输入,只需要改变需要改变的地方。但是在某些情况下这会造成一些问题。例如以WAP聊天系统,有些变量用了一遍又一遍,但是需要不同的内容。有些浏览器,例如:Nokia 7110,就会存在类似的在该清除的时候无法清除的问题。
&&& 在WML中,&card&标签有一个参数叫做newcontext。
&&& 当newcontext="true" 时清除所有的变量。但是这样也清除了所有导航的历史记录,这意味着back按钮不再工作。
&&& 为了清除变量,可以告诉浏览器将变量设为空:
&setvar name="one_variable" value=""/&
&setvar name="another_variable" value=""/&
&&& 但是,不是每个时候都有效果。在某些情况下必须使用一个难以想象的方法来清空变量。就是使用 onenterforward 事件。
&onevent type="onenterforward"&
   &refresh&
     &setvar name="one_variable" value=""/&
     &setvar name="another_variable" value=""/&
   &/refresh&
&/onevent&
29. 怎么能够知道请求是从WML浏览器来的还是HTML浏览器来的?
&&& 既然要利用已经存在的为HTML浏览器编写的代码,就需要知道请求是从HTML浏览器还是从WML浏览器过来的。同样地,如果想重新引导的HTML浏览器直接到相应的HTML文档上,WML浏览器到WML页面上,以下的PHP代码就可以做到这些。
// Because this script sends out HTTP header information,
// the first characters in the file must be the &? PHP tag.
// relative URL to your HTML file
   $htmlredirect = "/html/my_htmlpage.html";
// ABSOLUTE URL to your WML file 
   $wmlredirect = "http://wap.mysite.com/wml/my_wmldeck.wml";
   if(strpos(strtoupper($HTTP_ACCEPT),"VND.WAP.WML") & 0)
{// Check whether the browser/gateway says it accepts WML.
     $br = "WML";
   else {
     $browser=substr(trim($HTTP_USER_AGENT),0,4);
     if($browser=="Noki" || // Nokia phones and emulators
        $browser=="Eric" || // Ericsson WAP phones and emulators
        $browser=="WapI" || // Ericsson WapIDE 2.0
        $browser=="MC21" || // Ericsson MC218
        $browser=="AUR " || // Ericsson R320
        $browser=="R380" || // Ericsson R380
        $browser=="UP.B" || // UP.Browser
        $browser=="WinW" || // WinWAP browser
        $browser=="UPG1" || // UP.SDK 4.0
        $browser=="upsi" || // another kind of UP.Browser ??
        $browser=="QWAP" || // unknown QWAPPER browser
        $browser=="Jigs" || // unknown JigSaw browser
        $browser=="Java" || // unknown Java based browser
        $browser=="Alca" || // unknown Alcatel-BE3 browser (UP based?)
        $browser=="MITS" || // unknown Mitsubishi browser
        $browser=="MOT-" || // unknown browser (UP based?)
        $browser=="My S" || // unknown Ericsson devkit browser ?
$browser=="WAPJ" || // Virtual WAPJAG www.wapjag.de
$browser=="fetc" || // fetchpage.cgi Perl script from www.wapcab.de
$browser=="ALAV" || // yet another unknown UP based browser ?
        $browser=="Wapa") // another unknown browser (Web based "Wapalyzer"?)
        {
        $br = "WML";
     }
     else {
       $br = "H

我要回帖

更多关于 估算方法 的文章

 

随机推荐