<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>燕之庐网站建设 &#187; 未分类</title>
	<atom:link href="http://www.yanzhilu.com/blog/archives/category/uncategorized/feed" rel="self" type="application/rss+xml" />
	<link>http://www.yanzhilu.com/blog</link>
	<description>优质网站设计公司</description>
	<lastBuildDate>Sat, 31 Jul 2010 07:40:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>中国移动飞信免费发短信API接口（第三方 Fetion API）</title>
		<link>http://www.yanzhilu.com/blog/archives/5018</link>
		<comments>http://www.yanzhilu.com/blog/archives/5018#comments</comments>
		<pubDate>Thu, 29 Jul 2010 14:55:16 +0000</pubDate>
		<dc:creator>changboter</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[飞信]]></category>

		<guid isPermaLink="false">http://www.yanzhilu.com/blog/?p=5018</guid>
		<description><![CDATA[[文章作者：张宴 本文版本：v1.0 最后修改：2009.12.14 转载请注明原文链接：http://blog.s135.com/fetion_api/]
备注：2009年12月9日移动飞信升级造成影响的 sms.api.bz 免费发送短信API接口，已于12月14日恢复正常。
飞信是由中国移动通信集团公司推出的一款集商务应用和娱乐功能为一体的，基于手机应用以及与Internet深度互通的即时通讯产品，可免费给好友发送短信。
1、下载中国移动飞信PC客户端软件（http://www.fetion.com.cn/downloads/pc.aspx），并注册开通飞信。注册成为飞信用户，下载飞信PC客户端、使用PC客户端基本功能，不收取费用。
2、通过PC客户端，邀请并添加免费短信接收方的手机号码（仅限中国移动）到您的飞信好友，该手机号需要通过通过PC客户端、或回复短信接受您的邀请；
3、通过 http://sms.api.bz/ 提供的 API 接口，即可免费给飞信好友或给你自己的手机发短信。利用本API接口可进行日程提醒、服务器监控、报警、故障通知或短信自动控制等功能。
飞信免费发短信API接口在线演示页面：
http://sms.api.bz/
https://sms.api.bz/ （HTTPS加密接口）
飞信免费发短信API接口调用方式（通过HTTP访问以下网址、支持GET和POST）：
http://sms.api.bz/fetion.php?username=您的移动飞信登录手机号&#38;password=您的移动飞信登录密码&#38;sendto=接收短信的飞信好友手机号（也可以是你自己的手机号）&#38;message=短信内容
注：短信内容最大长度为180个汉字，超过180个汉字不发送。返回的信息为UTF-8编码的中文文本信息。
2009年5月28日新增：飞信免费发短信API接口调用方式（通过HTTPS加密隧道访问以下网址、支持GET和POST，进一步保证您的密码安全）：
https://sms.api.bz/fetion.php?username=您的移动飞信登录手机号&#38;password=您的移动飞信登录密码&#38;sendto=接收短信的飞信好友手机号（也可以是你自己的手机号）&#38;message=短信内容
注：短信内容最大长度为180个汉字，超过180个汉字不发送。返回的信息为UTF-8编码的中文文本信息。

例1：在Linux命令行下通过curl命令给自己的手机号（假设为13800138000）发送短信（HTTP GET 方式）
curl &#8220;http://sms.api.bz/fetion.php?username=13800138000&#38;password=123456&#38;sendto=13800138000&#38;message=短信内容&#8221;
例2：在PHP5中通过file_get_contents函数发送短信（HTTP GET 方式）
&#60;?php
$url = &#8220;http://sms.api.bz/fetion.php?username=13812345678&#38;password=123456&#38;sendto=13512345678&#38;message=短信内容&#8221;;
$result = file_get_contents($url);
echo $result; //返回信息默认为UTF-8编码的汉字，如果你的页面编码为gb2312，请使用下行语句输出返回信息。
//echo iconv(&#8221;UTF-8&#8243;, &#8220;GBK&#8221;, $result);
?&#62;
&#60;?php
$url = &#8220;http://sms.api.bz/fetion.php?username=13812345678&#38;password=123456&#38;sendto=13512345678&#38;message=短信内容&#8221;;
$result = file_get_contents($url);
echo $result; //返回信息默认为UTF-8编码的汉字，如果你的页面编码为gb2312，请使用下行语句输出返回信息。
//echo iconv(&#8221;UTF-8&#8243;, &#8220;GBK&#8221;, $result);
?&#62;
例3：在PHP中通过curl发送短信（HTTP POST 方式）
&#60;?php
$data["username"] = 13812345678;
$data["password"] = &#8220;password123&#8243;;
$data["sendto"] = 13512345678;
$data["message"] = &#8220;这是一条测试短信！&#8221;;
$curl = new Curl_Class();
$result = @$curl-&#62;post(&#8221;http://sms.api.bz/fetion.php&#8221;, $data);
echo $result; //返回信息默认为UTF-8编码的汉字，如果你的页面编码为gb2312，请使用下行语句输出返回信息。
//echo iconv(&#8221;UTF-8&#8243;, &#8220;GBK&#8221;, $result);
//curl类
class Curl_Class
{
function [...]]]></description>
			<content:encoded><![CDATA[<p>[文章作者：张宴 本文版本：v1.0 最后修改：2009.12.14 转载请注明原文链接：<a style="text-decoration: none; color: #4f6371;" href="http://blog.s135.com/fetion_api/" target="_blank">http://blog.s135.com/fetion_api/</a>]</p>
<p><span style="color: #ff0000;">备注：2009年12月9日移动飞信升级造成影响的 sms.api.bz 免费发送短信API接口，已于12月14日恢复正常。</span></p>
<p><a style="text-decoration: none; color: #4f6371;" href="http://www.fetion.com.cn/" target="_blank">飞信</a>是由中国移动通信集团公司推出的一款集商务应用和娱乐功能为一体的，基于手机应用以及与Internet深度互通的即时通讯产品，可免费给好友发送短信。</p>
<p>1、下载中国移动飞信PC客户端软件（<a style="text-decoration: none; color: #4f6371;" href="http://www.fetion.com.cn/downloads/pc.aspx" target="_blank">http://www.fetion.com.cn/downloads/pc.aspx</a>），并注册开通飞信。注册成为飞信用户，下载飞信PC客户端、使用PC客户端基本功能，不收取费用。<br />
2、通过PC客户端，邀请并添加免费短信接收方的手机号码（仅限中国移动）到您的飞信好友，该手机号需要通过通过PC客户端、或回复短信接受您的邀请；<br />
3、通过 <a style="text-decoration: none; color: #4f6371;" href="http://sms.api.bz/" target="_blank">http://sms.api.bz/</a> 提供的 API 接口，即可免费给飞信好友或给你自己的手机发短信。利用本API接口可进行日程提醒、服务器监控、报警、故障通知或短信自动控制等功能。</p>
<p><span style="color: #ff0000;">飞信免费发短信API接口在线演示页面：</span></p>
<p><a style="text-decoration: none; color: #4f6371;" href="http://sms.api.bz/" target="_blank">http://sms.api.bz/</a></p>
<p><a style="text-decoration: none; color: #4f6371;" href="https://sms.api.bz/" target="_blank">https://sms.api.bz/</a> （HTTPS加密接口）</p>
<p>飞信免费发短信API接口调用方式（通过HTTP访问以下网址、支持GET和POST）：</p>
<p><a style="text-decoration: none; color: #4f6371;" href="http://sms.api.bz/fetion.php?username=" target="_blank">http://sms.api.bz/fetion.php?username=</a>您的移动飞信登录手机号&amp;password=您的移动飞信登录密码&amp;sendto=接收短信的飞信好友手机号（也可以是你自己的手机号）&amp;message=短信内容</p>
<p>注：短信内容最大长度为180个汉字，超过180个汉字不发送。返回的信息为UTF-8编码的中文文本信息。</p>
<p><span style="color: #ff0000;">2009年5月28日新增：</span>飞信免费发短信API接口调用方式（通过HTTPS加密隧道访问以下网址、支持GET和POST，进一步保证您的密码安全）：</p>
<p><a style="text-decoration: none; color: #4f6371;" href="https://sms.api.bz/fetion.php?username=" target="_blank">https://sms.api.bz/fetion.php?username=</a>您的移动飞信登录手机号&amp;password=您的移动飞信登录密码&amp;sendto=接收短信的飞信好友手机号（也可以是你自己的手机号）&amp;message=短信内容</p>
<p>注：短信内容最大长度为180个汉字，超过180个汉字不发送。返回的信息为UTF-8编码的中文文本信息。</p>
<p><a style="text-decoration: none; color: #4f6371;" href="http://blog.s135.com/fetion_api/attachment.php?fid=70" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://blog.s135.com/fetion_api/attachment.php?fid=70" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p>例1：在Linux命令行下通过curl命令给自己的手机号（假设为13800138000）发送短信（HTTP GET 方式）</p>
<p>curl &#8220;http://sms.api.bz/fetion.php?username=13800138000&amp;password=123456&amp;sendto=13800138000&amp;message=短信内容&#8221;</p>
<p>例2：在PHP5中通过file_get_contents函数发送短信（HTTP GET 方式）</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 681px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">&lt;?php</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 681px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">$url = &#8220;http://sms.api.bz/fetion.php?username=13812345678&amp;password=123456&amp;sendto=13512345678&amp;message=短信内容&#8221;;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 681px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">$result = file_get_contents($url);</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 681px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">echo $result; //返回信息默认为UTF-8编码的汉字，如果你的页面编码为gb2312，请使用下行语句输出返回信息。</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 681px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">//echo iconv(&#8221;UTF-8&#8243;, &#8220;GBK&#8221;, $result);</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 681px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">?&gt;</div>
<p>&lt;?php</p>
<p>$url = &#8220;http://sms.api.bz/fetion.php?username=13812345678&amp;password=123456&amp;sendto=13512345678&amp;message=短信内容&#8221;;</p>
<p>$result = file_get_contents($url);</p>
<p>echo $result; //返回信息默认为UTF-8编码的汉字，如果你的页面编码为gb2312，请使用下行语句输出返回信息。</p>
<p>//echo iconv(&#8221;UTF-8&#8243;, &#8220;GBK&#8221;, $result);</p>
<p>?&gt;</p>
<p><span style="font-family: Tahoma, Arial; line-height: normal; font-size: 12px;">例3：在PHP中通过curl发送短信（HTTP POST 方式）</span></p>
<p><span style="font-family: Tahoma, Arial; line-height: normal; font-size: 12px;">&lt;?php</p>
<p>$data["username"] = 13812345678;</p>
<p>$data["password"] = &#8220;password123&#8243;;</p>
<p>$data["sendto"] = 13512345678;</p>
<p>$data["message"] = &#8220;这是一条测试短信！&#8221;;</p>
<p>$curl = new Curl_Class();</p>
<p>$result = @$curl-&gt;post(&#8221;http://sms.api.bz/fetion.php&#8221;, $data);</p>
<p>echo $result; //返回信息默认为UTF-8编码的汉字，如果你的页面编码为gb2312，请使用下行语句输出返回信息。</p>
<p>//echo iconv(&#8221;UTF-8&#8243;, &#8220;GBK&#8221;, $result);</p>
<p>//curl类</p>
<p>class Curl_Class</p>
<p>{</p>
<p>function Curl_Class()</p>
<p>{</p>
<p>return true;</p>
<p>}</p>
<p>function execute($method, $url, $fields = &#8221;, $userAgent = &#8221;, $httpHeaders = &#8221;, $username = &#8221;, $password = &#8221;)</p>
<p>{</p>
<p>$ch = Curl_Class::create();</p>
<p>if (false === $ch)</p>
<p>{</p>
<p>return false;</p>
<p>}</p>
<p>if (is_string($url) &amp;&amp; strlen($url))</p>
<p>{</p>
<p>$ret = curl_setopt($ch, CURLOPT_URL, $url);</p>
<p>}</p>
<p>else</p>
<p>{</p>
<p>return false;</p>
<p>}</p>
<p>//是否显示头部信息</p>
<p>curl_setopt($ch, CURLOPT_HEADER, false);</p>
<p>//</p>
<p>curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);</p>
<p>if ($username != &#8221;)</p>
<p>{</p>
<p>curl_setopt($ch, CURLOPT_USERPWD, $username . &#8216;:&#8217; . $password);</p>
<p>}</p>
<p>$method = strtolower($method);</p>
<p>if (&#8217;post&#8217; == $method)</p>
<p>{</p>
<p>curl_setopt($ch, CURLOPT_POST, true);</p>
<p>if (is_array($fields))</p>
<p>{</p>
<p>$sets = array();</p>
<p>foreach ($fields AS $key =&gt; $val)</p>
<p>{</p>
<p>$sets[] = $key . &#8216;=&#8217; . urlencode($val);</p>
<p>}</p>
<p>$fields = implode(&#8217;&amp;&#8217;,$sets);</p>
<p>}</p>
<p>curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);</p>
<p>}</p>
<p>else if (&#8217;put&#8217; == $method)</p>
<p>{</p>
<p>curl_setopt($ch, CURLOPT_PUT, true);</p>
<p>}</p>
<p>//curl_setopt($ch, CURLOPT_PROGRESS, true);</p>
<p>//curl_setopt($ch, CURLOPT_VERBOSE, true);</p>
<p>//curl_setopt($ch, CURLOPT_MUTE, false);</p>
<p>curl_setopt($ch, CURLOPT_TIMEOUT, 10);//设置curl超时秒数</p>
<p>if (strlen($userAgent))</p>
<p>{</p>
<p>curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);</p>
<p>}</p>
<p>if (is_array($httpHeaders))</p>
<p>{</p>
<p>curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeaders);</p>
<p>}</p>
<p>$ret = curl_exec($ch);</p>
<p>if (curl_errno($ch))</p>
<p>{</p>
<p>curl_close($ch);</p>
<p>return array(curl_error($ch), curl_errno($ch));</p>
<p>}</p>
<p>else</p>
<p>{</p>
<p>curl_close($ch);</p>
<p>if (!is_string($ret) || !strlen($ret))</p>
<p>{</p>
<p>return false;</p>
<p>}</p>
<p>return $ret;</p>
<p>}</p>
<p>}</p>
<p>function post($url, $fields, $userAgent = &#8221;, $httpHeaders = &#8221;, $username = &#8221;, $password = &#8221;)</p>
<p>{</p>
<p>$ret = Curl_Class::execute(&#8217;POST&#8217;, $url, $fields, $userAgent, $httpHeaders, $username, $password);</p>
<p>if (false === $ret)</p>
<p>{</p>
<p>return false;</p>
<p>}</p>
<p>if (is_array($ret))</p>
<p>{</p>
<p>return false;</p>
<p>}</p>
<p>return $ret;</p>
<p>}</p>
<p>function get($url, $userAgent = &#8221;, $httpHeaders = &#8221;, $username = &#8221;, $password = &#8221;)</p>
<p>{</p>
<p>$ret = Curl_Class::execute(&#8217;GET&#8217;, $url, &#8221;, $userAgent, $httpHeaders, $username, $password);</p>
<p>if (false === $ret)</p>
<p>{</p>
<p>return false;</p>
<p>}</p>
<p>if (is_array($ret))</p>
<p>{</p>
<p>return false;</p>
<p>}</p>
<p>return $ret;</p>
<p>}</p>
<p>function create()</p>
<p>{</p>
<p>$ch = null;</p>
<p>if (!function_exists(&#8217;curl_init&#8217;))</p>
<p>{</p>
<p>return false;</p>
<p>}</p>
<p>$ch = curl_init();</p>
<p>if (!is_resource($ch))</p>
<p>{</p>
<p>return false;</p>
<p>}</p>
<p>return $ch;</p>
<p>}</p>
<p>}</p>
<p>?&gt;</p>
<p><span style="color: #ff0000;">备注：9日移动飞信升级造成影响的 sms.api.bz 免费发送短信API接口，已于2009年12月14日恢复正常。</span><br />
2009年12月9日中国移动飞信服务器升级，变更了登录地址和部分协议。升级后的协议无法直接给接收方手机号(tel)发送短信，只能给飞信号(sip uri)、自己的手机号发送短信。本人通过重新抓包，对飞信协议进行分析，修改了sms.api.bz接口代码，通过将接收方手机号(tel)转换为user-id，再通过user-id转换为飞信号(sip uri)，进行短信发送，一切OK。</p>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yanzhilu.com/blog/archives/5018/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux &#8211; yum</title>
		<link>http://www.yanzhilu.com/blog/archives/3738</link>
		<comments>http://www.yanzhilu.com/blog/archives/3738#comments</comments>
		<pubDate>Sun, 31 Jan 2010 15:28:36 +0000</pubDate>
		<dc:creator>changboter</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.yanzhilu.com/blog/?p=3738</guid>
		<description><![CDATA[linux - yum]]></description>
			<content:encoded><![CDATA[<div id="blog_text">
<p>yum是什么?(<span style="text-decoration: underline;"><strong><span style="color: #009999;">linux</span></strong></span>命令)<br />
一. yum是什么<br />
yum = Yellow dog Updater, Modified<br />
主要功能是更方便的添加/删除/更新RPM包.<br />
它能自动解决包的倚赖性问题.<br />
它能便于管理大量系统的更新问题<br />
注:为什么要使用yum而不用apt,最简单的原因,Fedora自带</p>
<p>二. yum特点<br />
*可以同时配置多个资源库(Repository)<br />
*简洁的配置文件(/etc/yum.conf)<br />
*自动解决增加或删除rpm包时遇到的倚赖性问题<br />
*使用方便<br />
*保持与RPM数据库的一致性</p>
<p>三. yum安装<br />
Fedora自带<br />
#rpm -ivh yum-2.0.4-2.noarch.rpm</p>
<p>四. yum配置<br />
注:修改和增加配置文件中的资源库,加快下载速度和拥有更多可更新的rpm包<br />
将/etc/yum.conf的内容全部替换为<br />
[main]<br />
cachedir=/var/cache/yum<br />
debuglevel=2<br />
logfile=/var/log/yum.log<br />
pkgpolicy=newest<br />
distroverpkg=fedora-release<br />
tolerant=1<br />
exactarch=1</p>
<p>[fedora-us-1]<br />
name=Fedora Core 1 &#8212; Fedora US mirror<br />
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/os</p>
<p>[fedora-us-1-updates]<br />
name=Fedora Core 1 updates &#8212; Fedora US mirror<br />
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/updates</p>
<p>[fedora-us-1-stable]<br />
name=Fedora Linux (stable) for Fedora Core 1 &#8212; Fedora US mirror<br />
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/stable</p>
<p>[freshrpms]<br />
name=Fedora Linux $releasever &#8211; $basearch &#8211; freshrpms<br />
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms<br />
五. yum应用<br />
注:当第一次使用yum或yum资源库有更新时,yum会自动下载所有所需的headers放置于/var/cache/yum目录下,所需时间可能较长.</p>
<p>检查有哪些可更新的rpm包<br />
#yum check-update</p>
<p>安装rpm包,使<span style="text-decoration: underline;"><strong><span style="color: #009999;">xmms</span></strong></span>可以播放mp3<br />
#yum install xmms-mp3</p>
<p>安装mplayer,同时自动安装相关的软件<br />
#yum install mplayer</p>
<p>删除licq包,同时删除与该包有倚赖性的包<br />
#yum remove licq<br />
注:同时会提示删除licq-gnome,licq-qt,licq-text,非常方便</p>
<p>系统更新(更新所有可以升级的rpm包,包括kernel)<br />
#yum -y update</p>
<p>每天定期执行系统更新<br />
#chkconfig yum on<br />
#service yum start<br />
六. yum指令详解<br />
*rpm包的更新</p>
<p>检查可更新的rpm包<br />
#yum check-update</p>
<p>更新所有的rpm包<br />
#yum update</p>
<p>更新指定的rpm包,如更新kernel和kernel source<br />
#yum update kernel kernel-source</p>
<p>大规模的版本升级,与yum update不同的是,连旧的淘汰的包也升级<br />
#yum upgrade<br />
*rpm包的安装和删除</p>
<p>安装rpm包,如xmms-mp3<br />
#yum install xmms-mp3</p>
<p>删除rpm包,包括与该包有倚赖性的包<br />
#yum remove licq<br />
注:同时会提示删除licq-gnome,licq-qt,licq-text<br />
*yum暂存(/var/cache/yum/)的相关参数<br />
清除暂存中rpm包文件<br />
#yum clean packages</p>
<p>清除暂存中rpm头文件<br />
#yum clean headers</p>
<p>清除暂存中旧的rpm头文件<br />
#yum clean oldheaders</p>
<p>清除暂存中旧的rpm头文件和包文件<br />
#yum clean 或#yum clean all<br />
注:相当于yum clean packages + yum clean oldheaders<br />
*rpm包列表</p>
<p>列出资源库中所有可以安装或更新的rpm包<br />
#yum list</p>
<p>列出资源库中特定的可以安装或更新以及已经安装的rpm包<br />
#yum list mozilla<br />
#yum list mozilla*<br />
注:可以在rpm包名中使用匹配符,如列出所有以mozilla开头的rpm包</p>
<p>列出资源库中所有可以更新的rpm包<br />
#yum list updates</p>
<p>列出已经安装的所有的rpm包<br />
#yum list installed</p>
<p>列出已经安装的但是不包含在资源库中的rpm包<br />
#yum list extras<br />
注:通过其它网站下载安装的rpm包<br />
*rpm包信息显示(info参数同list)</p>
<p>列出资源库中所有可以安装或更新的rpm包的信息<br />
#yum info</p>
<p>列出资源库中特定的可以安装或更新以及已经安装的rpm包的信息<br />
#yum info mozilla<br />
#yum info mozilla*<br />
注:可以在rpm包名中使用匹配符,如列出所有以mozilla开头的rpm包的信息</p>
<p>列出资源库中所有可以更新的rpm包的信息<br />
#yum info updates</p>
<p>列出已经安装的所有的rpm包的信息<br />
#yum info installed</p>
<p>列出已经安装的但是不包含在资源库中的rpm包的信息<br />
#yum info extras<br />
注:通过其它网站下载安装的rpm包的信息<br />
*搜索rpm包<br />
搜索匹配特定字符的rpm包<br />
#yum search mozilla<br />
注:在rpm包名,包描述等中搜索</p>
<p>搜索有包含特定文件名的rpm包<br />
#yum provides realplay</p>
<p>七. 安全的更新freshrpms.net的rpm包<br />
安装freshrpms.net的GPG key<br />
#rpm &#8211;import <span style="color: #000066;">http://freshrpms.net/packages/RPM-GPG-KEY.txt</span></p>
<p>编辑/etc/yum.conf,增加以下信息到尾部<br />
[freshrpms]<br />
name=Fedora Linux $releasever &#8211; $basearch &#8211; freshrpms<br />
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms<br />
gpgcheck=1</p>
<p>注:<br />
检查GPG Key<br />
# rpm -qa gpg-pubkey*</p>
<p>显示Key信息<br />
#rpm -qi gpg-pubkey-e42d547b-3960bdf1</p>
<p>删除Key<br />
#rpm -e gpg-pubkey-e42d547b-3960bdf1</p>
<p>yum是干什么的<br />
使用redhat，fedora的linuxer肯定都为rpm著名的dependency hell而头疼(这也是所有基于rpm发行版都有的问题)。foo is needed by bar，bar is needed by foo。要装卸个软件，还得辛辛苦苦地梳理清楚所有依赖性问题，rpm的几个搜索站点成了时常光顾的场所，如果不幸碰到循环依赖，那就只有干瞪眼的分了。 有时加个&#8211;nodeps参数，倒是眼不见，心不烦，但这样装上的软件，你能保证正常使用吗，这样卸载软件，你能保证不影响其它软件工作吗，恐怕谁也不能 给出肯定的答案。每到这时，帽子们只有看着<span style="text-decoration: underline;"><strong><span style="color: #009999;">debian</span></strong></span>的 apt暗自羡慕了。好在，这些都已经成为过去时了。基于rpm的发行版现在也有了像apt那样自 动解决依赖关系的包管理工具了。其中一个著名的就是apt4rpm,这基本上是debian系统apt的在rpm发行版的移植。但是使用Redhat和 Fedora的linuxer你们知道吗，还有一个与apt功能类似的rpm包管理系统，那就是yum。Fedora系统已经自带，Redhat也有相应 的rpm下载。与apt相比，yum的功能一点也不弱，甚至还有许多胜过apt 之处。比如说，yum是Fedora系统自带的，因此它能使用fedora官方的软件源，完成各种官方<span style="text-decoration: underline;"><strong><span style="color: #009999;">发布</span></strong></span>的各种升级。对于第三方软件源的支持，yum也 不差，大多数支持apt的repository注，也能支持yum，比如说freshrpms,fedora.us,livna等等。此外yum有一个比较 详细的<span style="text-decoration: underline;"><strong><span style="color: #009999;">log</span></strong></span>，可以查看何时升级安装了什么软件包等。yum的代码较apt更为精简等。</div>
]]></content:encoded>
			<wfw:commentRss>http://www.yanzhilu.com/blog/archives/3738/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>新版SQL Developer提高Oracle数据库开发员效率</title>
		<link>http://www.yanzhilu.com/blog/archives/2908</link>
		<comments>http://www.yanzhilu.com/blog/archives/2908#comments</comments>
		<pubDate>Thu, 31 Dec 2009 12:42:32 +0000</pubDate>
		<dc:creator>changboter</dc:creator>
				<category><![CDATA[产业新闻]]></category>
		<category><![CDATA[开源动态]]></category>
		<category><![CDATA[未分类]]></category>
		<category><![CDATA[技术文章]]></category>

		<guid isPermaLink="false">http://www.yanzhilu.com/blog/?p=2908</guid>
		<description><![CDATA[新版SQL Developer提高Oracle数据库开发员效率]]></description>
			<content:encoded><![CDATA[<div id="article_body">
<div id="article">
<p><strong><span style="color: #bc0e07;"><a onclick="javascript:tagshow(event, '%B1%B1%BE%A9');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>北京</strong></span></a>，2009年12月28日——</span></strong></p>
<p>l 为了进一步提高<a onclick="javascript:tagshow(event, '%BF%AA%B7%A2');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>开发</strong></span></a>人员效率，简化<a onclick="javascript:tagshow(event, 'Oracle');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>Oracle</strong></span></a><a onclick="javascript:tagshow(event, '%CA%FD%BE%DD%BF%E2');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong></strong></span></a><span style="text-decoration: underline;"><strong><a onclick="javascript:tagshow(event, '%CA%FD%BE%DD');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>数据</strong></span></a>库</strong></span>开发，甲骨文公司日前宣布Oracle <a onclick="javascript:tagshow(event, 'SQL');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>SQL</strong></span></a> Developer 2.1版上市，这是广受欢迎的数据库开发和迁移工具Oracle SQL Developer的最新版本。</p>
<p>l Oracle SQL Developer 2.1版是一个免费且全面的工具，该新版<a onclick="javascript:tagshow(event, '%C8%ED%BC%FE');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>软件</strong></span></a>的很多<a onclick="javascript:tagshow(event, '%B9%A6%C4%DC');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>功能</strong></span></a>都得到了增强，此外还引入了两种关键的新功能――PL/SQL单元测试(Unit Testing)和数据<a onclick="javascript:tagshow(event, '%BD%A8%C4%A3');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>建模</strong></span></a>器浏览器(Data Modeler Viewer)。Oracle SQL Developer 2.1版的两项关键新功能和所有增强功能都是应Oracle SQL Developer社区的要求和建议而开发的。</p>
<p>l 新版软件引入了迁移工作台(Migration Workbench)，以支持Teradata和面向<a onclick="javascript:tagshow(event, 'Linux');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>Linux</strong></span></a>、UNIX和<a onclick="javascript:tagshow(event, 'Windows');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>Windows</strong></span></a>操作系统的IBM DB2 UDB。</p>
<p>l Oracle SQL Developer 2.1版可从Oracle技术网(OTN)下载。</p>
<p><strong><span style="color: #bc0e07;">最新版软件简化数据库测试和迁移</span></strong></p>
<p>l Oracle SQL Developer 2.1版引入了一种单元测试<a onclick="javascript:tagshow(event, '%BF%F2%BC%DC');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>框架</strong></span></a>，开发人员可利用该框架建立并共享单元测试和测试套件，这些单元测试和测试套件可以批处理方式运行，并根据不同数据库的命令行运行。PL/SQL单元测试为数据库开发人员提供了强大的预置功能，用这些功能可以开发并运行数据库<a onclick="javascript:tagshow(event, '%B4%FA%C2%EB');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>代码</strong></span></a>回归测试，从而实现质量更高的数据库开发，同时减少为单元测试编写脚本程序的需求。</p>
<p>l 最新版Oracle SQL Developer新增一个数据建模器浏览器，可以使用只读方式访问最近推出的Oracle SQL Developer数据建模器(Data Modeler)。这使得开发人员、数据建模人员、IT架构师以及其他相关人员能够利用该工具打开和浏览用独立的Oracle SQL Developer数据建模器建立的数据模型，并通过将表格拖到模型图上，以图形方式浏览<a onclick="javascript:tagshow(event, '%BC%DC%B9%B9');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>架构</strong></span></a><a onclick="javascript:tagshow(event, '%B6%D4%CF%F3');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>对象</strong></span></a>。</p>
<p>l Oracle SQL Developer中新增加的数据建模器浏览器的关键好处是，<a onclick="javascript:tagshow(event, '%D3%C3%BB%A7');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>用户</strong></span></a>可以用这个单一工具浏览第三方数据库表格，并在一张图上浏览关键的外部关系，然后利用这个工具将数据和对象迁移到Oracle数据库中，从而降低成本、工作量以及与向Oracle数据库迁移第三方数据库的风险。</p>
<p>l Oracle SQL Developer 2.1版现在增加了迁移工作台，该工作台除了支持以前宣布的Sybase ASE 第12和15版、Microsoft SQL <a onclick="javascript:tagshow(event, 'Server');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>Server</strong></span></a> 2000和2005以及Microsoft Access，现在还支持Teradata(第12版)以及面向Linux、UNIX和Windows操作系统的IBM DB2 UDB(第7、8和9版)。</p>
<p><strong><span style="color: #bc0e07;">l 这个最新版软件还具有：</span></strong></p>
<p>· 新的后台任务功能，使用户能够在后台运行耗时的SQL任务的同时，执行其他任务;</p>
<p>· 增强的数据网格功能，为用户提供更强的控制能力，如动态搜索、过滤和高亮显示;</p>
<p>· 版本控制，现在的支持范围包括Perforce和Serena Dimensions。</p>
<p>l Oracle SQL Developer可用于Oracle数据库11g的所有版本，并可在Windows、Linux和Mac OS X操作系统上运行。该工具还可用于Oracle数据库10g以及Oracle 9i数据库第二版。</p>
<p><strong><span style="color: #bc0e07;">甲骨文高管及客户引言</span></strong></p>
<p>l 甲骨文公司软件开发副总裁Mike Hichwa表示：“增加PL/SQL单元测试使Oracle SQL Developer领先于其他很多数据库开发工具。我们知道，几乎每一个Oracle数据库客户都使用PL/SQL，而拥有一个可靠的单元测试框架将使我 们的客户降低成本并提高软件质量。”</p>
<p>OPITZ CONSULTING公司高级架构师Gerd Volberg表示：“专业软件开发需要强大的工具。这就是我们公司每一位开发人员都有专属的、安装了完整Oracle SQL Developer记忆棒的原因。我们的业务环境常常不允许在客户的计算机上安装软件。因此对于我们来说，有一个能从记忆棒上即时启动工作的工具非常重 要。Oracle SQL Developer 2.1版是一个极好的成套工具，其中包括强大的、新的PL/SQL单元测试，正适用于我们的咨询服务。”</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.yanzhilu.com/blog/archives/2908/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>程序员助手 Orion 6.0浏览器发布</title>
		<link>http://www.yanzhilu.com/blog/archives/2663</link>
		<comments>http://www.yanzhilu.com/blog/archives/2663#comments</comments>
		<pubDate>Mon, 14 Dec 2009 10:07:04 +0000</pubDate>
		<dc:creator>changboter</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[技术文章]]></category>

		<guid isPermaLink="false">http://www.yanzhilu.com/blog/?p=2663</guid>
		<description><![CDATA[程序员助手 Orion 6.0浏览器发布]]></description>
			<content:encoded><![CDATA[<p><ins style="border: medium none; margin: 0pt; padding: 0pt; display: inline-table; height: 200px; position: relative; visibility: visible; width: 200px;"><ins style="border: medium none; margin: 0pt; padding: 0pt; display: block; height: 200px; position: relative; visibility: visible; width: 200px;"></ins></ins> <span>日本的三引擎浏览器Lunascape已经发布了Lunascape 6 ORION的首个beta版本。</p>
<p>Lunascape可能最适合Web开发者使用，因为他们可以在一个应用程序中测试三种渲染引擎：Trident(IE)、 Gecko(Firefox)和WebKit，而且它还提供了诸如关闭脚本、Java和ActiveX(使用Trident引擎)的功能。最新的 Lunascape 6.0 Orion支持Firefox扩展功能，只适用于使用Gecko引擎，不能在WebKit和Trident下工作。它的界面使用Qt4，视觉效果不佳，不 支持Windows Aero特效。</p>
<p>Lunascape刚刚发布了一款名叫Orion的浏览器产品，这也是Lunascape浏览器系列的第六个版本，主打卖点一样：三核心浏览器，包含IE、Firefox和Webkit核心，并且开始支持扩展。</p>
<p>Lunascape表示，这款浏览器非常适合Web设计和开发人员，因为它可以随时在引擎之间进行切换，浏览器兼容目前最新的Windows 7系统，跑分速度也要明显更快。</p>
<p><a title="北京网站建设公司" href="http://www.yanzhilu.com">北京网站建设公司</a></p>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yanzhilu.com/blog/archives/2663/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AS3放大镜效果</title>
		<link>http://www.yanzhilu.com/blog/archives/2621</link>
		<comments>http://www.yanzhilu.com/blog/archives/2621#comments</comments>
		<pubDate>Fri, 11 Dec 2009 16:18:24 +0000</pubDate>
		<dc:creator>changboter</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[技术文章]]></category>

		<guid isPermaLink="false">http://www.yanzhilu.com/blog/?p=2621</guid>
		<description><![CDATA[AS3放大镜效果]]></description>
			<content:encoded><![CDATA[<p>m2.mask=m3.masks;<br />
m3.buttonMode=true;<br />
stage.addEventListener(MouseEvent.MOUSE_MOVE,Pmove);<br />
function Pmove(e:MouseEvent):void {<br />
if (mouseX&gt;m1.x &amp;&amp; mouseX&lt;m1.x+m1.width &amp;&amp; mouseY&lt;(m1.y+m1.height) &amp;&amp; mouseY&gt;m1.y) {<br />
m2.visible=true;<br />
m3.x=mouseX-m3.masks.width/2;<br />
m3.y=mouseY-m3.masks.height/2;<br />
var tpx:int = (m1.x-mouseX)*(m2.width/m1.width)*0.5+90;<br />
var tpy:int = (m1.y-mouseY)*(m2.height/m1.height)*0.5+40;<br />
trace(tpx,tpy);<br />
if ((tpx+m2.width)&gt;m1.width&amp;&amp;tpx&lt;0) {<br />
m2.x=tpx;<br />
}<br />
if ((tpy+m2.height)&gt;m1.height&amp;&amp;tpy&lt;0) {<br />
m2.y=tpy;<br />
}<br />
} else {<br />
m2.visible=false;<br />
}</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yanzhilu.com/blog/archives/2621/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux系统内核中的Device Mapper机制 （1）</title>
		<link>http://www.yanzhilu.com/blog/archives/2227</link>
		<comments>http://www.yanzhilu.com/blog/archives/2227#comments</comments>
		<pubDate>Sat, 21 Nov 2009 03:09:31 +0000</pubDate>
		<dc:creator>changboter</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.yanzhilu.com/blog/?p=2227</guid>
		<description><![CDATA[Linux系统内核中的Device Mapper机制 （1）]]></description>
			<content:encoded><![CDATA[<div id="articlebody">
<p style="text-indent: 2em;">本文 结合具体代码对 Linux 内核中的 device mapper 映射机制进行了介绍。Device mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制，在该机制下，用户可以很方便的根据自己的需要制定实现存储资源的管理策略，当前比较流行的 Linux 下的逻辑卷管理器如 LVM2（Linux Volume Manager 2 version)、EVMS(Enterprise Volume Management System)、dmraid(Device Mapper Raid Tool)等都是基于该机制实现的。理解该机制是进一步分析、理解这些卷管理器的实现及设计的基础。通过本文也可以进一步理解 Linux 系统块一级 IO的设计和实现。</p>
<p style="text-indent: 2em;">Device Mapper 是 Linux2.6 内核中支持逻辑卷管理的通用设备映射机制，它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构，如图 1。</p>
<p><img style="border: 1px solid black;" src="http://www.phpchina.cn/attachments/robot/b87c400e87b53d7981a8d8e864fd74c6.gif" alt="" /> 图1 Device Mapper的内核体系架构</p>
<p style="text-indent: 2em;">在内核中它通过一个一个模块化的 target driver 插件实现对 IO 请求的过滤或者重新定向等工作，当前已经实现的 target driver 插件包括软 raid、软加密、逻辑卷条带、多路径、镜像、快照等，图中 linear、mirror、snapshot、multipath 表示的就是这些 target driver。Device mapper 进一步体现了在 Linux 内核设计中策略和机制分离的原则，将所有与策略相关的工作放到用户空间完成，内核中主要提供完成这些策略所需要的机制。Device mapper 用户空间相关部分主要负责配置具体的策略和控制逻辑，比如逻辑设备和哪些物理设备建立映射，怎么建立这些映射关系等等，而具体过滤和重定向 IO 请求的工作由内核中相关代码完成。因此整个 device mapper 机制由两部分组成&#8211;内核空间的 device mapper 驱动、用户空间的device mapper 库以及它提供的 dmsetup 工具。在下文中，我们分内核和用户空间两部分进行介绍。</p>
<p style="text-indent: 2em;"><strong>内核部分</strong></p>
<p style="text-indent: 2em;">Device mapper 的内核相关代码已经作为 Linux 2.6 内核发布版的一部分集成到内核源码中了，相关代码在内核源码的 driver/md/ 目录中，其代码文件可以划分为实现 device mapper 内核中基本架构的文件和实现具体映射工作的 target driver 插件文件两部分。文章下面的分析结果主要是基于上述源码文件得到的。</p>
<p style="text-indent: 2em;"><strong>重要概念</strong></p>
<p style="text-indent: 2em;">Device mapper 在内核中作为一个块设备驱动被注册的，它包含三个重要的对象概念，mapped device、映射表、target device。Mapped device 是一个逻辑抽象，可以理解成为内核向外提供的逻辑设备，它通过映射表描述的映射关系和 target device 建立映射。从 Mapped device 到一个 target device 的映射表由一个多元组表示，该多元组由表示 mapped device 逻辑的起始地址、范围、和表示在 target device 所在物理设备的地址偏移量以及target 类型等变量组成（这些地址和偏移量都是以磁盘的扇区为单位的，即 512 个字节大小）。Target device 表示的是 mapped device 所映射的物理空间段，对 mapped device 所表示的逻辑设备来说，就是该逻辑设备映射到的一个物理设备。Device mapper 中这三个对象和 target driver 插件一起构成了一个可迭代的设备树。在该树型结构中的顶层根节点是最终作为逻辑设备向外提供的 mapped device，叶子节点是 target device 所表示的底层物理设备。最小的设备树由单个 mapped device 和 target device 组成。每个 target device 都是被mapped device 独占的，只能被一个 mapped device 使用。一个 mapped device 可以映射到一个或者多个 target device 上，而一个 mapped device 又可以作为它上层 mapped device的 target device 被使用，该层次在理论上可以在 device mapper 架构下无限迭代下去。</p>
<p><img style="border: 1px solid black;" src="http://www.phpchina.cn/attachments/robot/838b8a934cf208eccfca9be2ab220373.gif" alt="" /> 图2 Device mapper 内核中各对象的层次关系</p>
<p style="text-indent: 2em;">在图2 中我们可以看到 mapped device1 通过映射表和 a、b、c 三个 target device 建立了映射关系，而 target device a 又是通过 mapped device 2 演化过来，mapped device 2 通过映射表和 target device d 建立映射关系。</p>
<p style="text-indent: 2em;">
<p style="text-indent: 2em;"><a title="北京网站建设公司" href="http://www.yanzhilu.com">网站建设</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.yanzhilu.com/blog/archives/2227/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux系统内核中的Device Mapper机制 （1）(2)</title>
		<link>http://www.yanzhilu.com/blog/archives/2225</link>
		<comments>http://www.yanzhilu.com/blog/archives/2225#comments</comments>
		<pubDate>Sat, 21 Nov 2009 03:08:49 +0000</pubDate>
		<dc:creator>changboter</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.yanzhilu.com/blog/?p=2225</guid>
		<description><![CDATA[Linux系统内核中的Device Mapper机制 （1）(2)]]></description>
			<content:encoded><![CDATA[<p style="text-indent: 2em;">我们进一步看一下上述三个对象在代码中的具体实现，dm.c 文件定义的 mapped_device 结构用于表示 mapped device，它主要包括该 mapped device 相关的锁，注册的请求队列和一些内存池以及指向它所对应映射表的指针等域。Mapped device 对应的映射表是由 dm_table.c 文件中定义的 dm_table 结构表示的，该结构中包含一个 dm_target结构数组，dm_target 结构具体描述了 mapped_device 到它某个 target device 的映射关系。而在 dm_table 结构中将这些 dm_target 按照 B 树的方式组织起来方便 IO 请求映射时的查找操作。Dm_target 结构具体记录该结构对应 target device 所映射的 mapped device 逻辑区域的开始地址和范围，同时还包含指向具体 target device 相关操作的 target_type 结构的指针。Target_type 结构主要包含了 target device 对应的 target driver 插件的名字、定义的构建和删除该类型target device的方法、该类target device对应的IO请求重映射和结束IO的方法等。而表示具体的target device的域是dm_target中的private域，该指针指向mapped device所映射的具体target device对应的结构。表示target device的具体结构由于不同的target 类型而不同，比如最简单的线性映射target类型对应target device的结构是dm-linear.c文件中定义的linear_c结构。其定义如下：</p>
<table border="1" cellspacing="0" cellpadding="2" width="400" align="center">
<tbody>
<tr>
<td style="font-size: 9pt;" bgcolor="#e6e6e6">
<pre>struct linear_c {

 struct dm_dev *dev;

 sector_t start;

};</pre>
</td>
</tr>
</tbody>
</table>
<p style="text-indent: 2em;">该target device的定义相当简单，就只包括了表示对应物理设备的dm_dev结构指针和在该物理设备中以扇区为单位的偏移地址start。上述几个数据结构关系如图3所示：</p>
<p><img style="border: 1px solid black;" src="http://www.phpchina.cn/attachments/robot/e38b23689034e8d351b21dd665fc778c.gif" alt="" /> 图3 device mapper中几个重要数据结构的关系</p>
<p style="text-indent: 2em;"><strong>内核中建立过程</strong></p>
<p style="text-indent: 2em;">在下面我们结合具体的代码简要介绍下在内核中创建一个mapped device的过程：</p>
<p style="text-indent: 2em;">1、 根据内核向用户空间提供的ioctl 接口传来的参数，用dm-ioctl.c文件中的dev_create函数创建相应的mapped device结构。这个过程很简单，主要是向内核申请必要的内存资源，包括mapped device和为进行IO操作预申请的内存池，通过内核提供的blk_queue_make_request函数注册该mapped device对应的请求队列dm_request。并将该mapped device作为磁盘块设备注册到内核中。</p>
<p style="text-indent: 2em;">2、 调用dm_hash_insert将创建好的mapped device插入到device mapper中的一个全局hash表中，该表中保存了内核中当前创建的所有mapped device。</p>
<p style="text-indent: 2em;">
<p style="text-indent: 2em;"><a title="北京网站建设公司" href="http://www.yanzhilu.com">网站建设</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yanzhilu.com/blog/archives/2225/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>winbinder开发php桌面程序[连载一:安装配置篇]</title>
		<link>http://www.yanzhilu.com/blog/archives/2083</link>
		<comments>http://www.yanzhilu.com/blog/archives/2083#comments</comments>
		<pubDate>Sat, 14 Nov 2009 07:14:58 +0000</pubDate>
		<dc:creator>changboter</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[winbinder]]></category>

		<guid isPermaLink="false">http://www.yanzhilu.com/blog/?p=2083</guid>
		<description><![CDATA[winbinder开发php桌面程序[连载一:安装配置篇]]]></description>
			<content:encoded><![CDATA[<p>趁着今天有空，给大家说说<a onclick="javascript:tagshow(event, 'winbinder');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>winbinder</strong></span></a>吧，今天讲一下winbinder的安装与配置<br />
首先去<a href="http://winbinder.org/files/WinBinder-0.46.0.exe" target="_blank">http://winbinder.org/files/WinBinder-0.46.0.exe</a>下载winbinder，这是一个安装版的，下载后双击安装。</p>
<p>1、next<br />
<a href="http://www.phpchina.com/html/88/batch.download.php?aid=11" target="_blank"><img src="http://www.phpchina.com/html/88/attachments/2006/09/2006922_a1eed714bc2eaa8605891e844a275573.gif" border="0" alt="" /></a></p>
<p>2、next<br />
<a href="http://www.phpchina.com/html/88/batch.download.php?aid=12" target="_blank"><img src="http://www.phpchina.com/html/88/attachments/2006/09/2006922_0daeccf904f1ed14185a0a43e7e66e15.gif" border="0" alt="" /></a></p>
<p>3、选择安装路径然后next，这里我选择的是d;/winbinder<br />
<a href="http://www.phpchina.com/html/88/batch.download.php?aid=13" target="_blank"><img src="http://www.phpchina.com/html/88/attachments/2006/09/2006922_3e8dc524b78993ca7be9b8af803788f8.gif" border="0" alt="" /></a></p>
<p>4、选择php的版本，我这里的是php5.1<br />
<a href="http://www.phpchina.com/html/88/batch.download.php?aid=14" target="_blank"><img src="http://www.phpchina.com/html/88/attachments/2006/09/2006922_80798e06b72b002fee9bfe06cc866eb7.gif" border="0" alt="" /></a></p>
<p>5、选择下载的服务器，选择台湾比较快(又只有台湾的选项而没有中国的，气愤)<br />
<a href="http://www.phpchina.com/html/88/batch.download.php?aid=15" target="_blank"><img src="http://www.phpchina.com/html/88/attachments/2006/09/2006922_cc1d119ea4c959d7a09c92345c66c07e.gif" border="0" alt="" /></a></p>
<p>6、next<br />
<a href="http://www.phpchina.com/html/88/batch.download.php?aid=16" target="_blank"><img src="http://www.phpchina.com/html/88/attachments/2006/09/2006922_75e95b5be77f6f0f86f45cded1034e87.gif" border="0" alt="" /></a></p>
<p>7、install<br />
<a href="http://www.phpchina.com/html/88/batch.download.php?aid=17" target="_blank"><img src="http://www.phpchina.com/html/88/attachments/2006/09/2006922_7adbe33f7f5941bc9b042b2280cfbf8b.gif" border="0" alt="" /></a></p>
<p>8、等待<br />
<a href="http://www.phpchina.com/html/88/batch.download.php?aid=18" target="_blank"><img src="http://www.phpchina.com/html/88/attachments/2006/09/2006922_47721aadca6f287e15af1a7f72228989.gif" border="0" alt="" /></a></p>
<p>9、安装完成<br />
<img src="http://www.haitangshuma.com/pic/pic/9.gif" alt="" /></p>
<p>10、安装好后打开D:\WinBinder\phpcode\examples，任找一个.phpw扩展名的文件，选择打开方式为D:\WinBinder\binaries\php51\php-win.exe。<br />
<a href="http://www.phpchina.com/html/88/batch.download.php?aid=10" target="_blank"><img src="http://www.phpchina.com/html/88/attachments/2006/09/2006922_08fc975f9d233e7783d2a6a5fe09ba78.gif" border="0" alt="" /></a></p>
<p>现在已经可以运行以.phpw为扩展名的文件了。例如<br />
<a href="http://www.phpchina.com/html/88/batch.download.php?aid=9" target="_blank"><img src="http://www.phpchina.com/html/88/attachments/2006/09/2006922_5560c0c732c152cab8422272ae2774e5.gif" border="0" alt="" /></a></p>
<p>这里要讲解几个问题<br />
1:我们可以选择的打开方式有三种，分别是php.exe php-win.exe  php-cgi.exe如果打开方式选择的是php-cgi.exe<br />
那么在运行的时候，就会有一个命令提示符窗口出现，在实际应用中这个窗口也许看来很多余，但是在调试的时候可是很有用的哦<br />
他能够提示你程序中有哪些错误。</p>
<p>2: 刚才我们选择的打开方式为D:\WinBinder\binaries\php51\下的.exe文件，可能有朋友要问了，为什么不能选择本机中已经安装 好的php(假设是D:/php)文件夹下的.exe文件呢？其实是可以的，但是这里有一个问题，如果选择php文件夹下的.exe文件，那么它使用的是 c:\windows下的php.ini配置文件，这样的话winbinder运行时加载的.dll文件，实际上是D:/php/ext/文件夹中的文 件。所以这个时候需要把php.ini中的extension_dir设置为./ext因为ext文件夹是和.exe文件在同一文件夹中的(即 D:\php文件夹)。然后还需要把D:\WinBinder\binaries\php51\ext中的php_winbinder.dll文件放到 D:\php\ext中，然后相应的在c:\windows下的php.ini文件中加上extension=php_winbinder.dll。另外 如果需要使用相应的库文件的话，需要在php.ini中对应的文件名前的;号去掉，这个我想大家都知道吧。</p>
<p>如果选择打开方式为D:\WinBinder\binaries\php51\下的.exe文件则就没有这么麻烦，它使用的是D:\WinBinder\binaries\php51\下的php.ini文件，你可以不作任何的配置就可以使用，但是他只默认支持<a onclick="javascript:tagshow(event, 'mysql');" href="javascript:;" target="_self"><span style="text-decoration: underline;"><strong>mysql</strong></span></a>和 sqlite这两个库，如果你希望使用其他的库例如gd那么就需要修改D:\WinBinder\binaries\php51\下的php.ini文 件，然后把对应的库文件(例如php_gd.dll)放到D:\WinBinder\binaries\php51\ext下</p>
<p>以上就是全部的配置过程了，如果还有什么不明白的地方可以联系我，或在这里提出</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yanzhilu.com/blog/archives/2083/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XML的术语</title>
		<link>http://www.yanzhilu.com/blog/archives/1985</link>
		<comments>http://www.yanzhilu.com/blog/archives/1985#comments</comments>
		<pubDate>Wed, 11 Nov 2009 12:14:10 +0000</pubDate>
		<dc:creator>changboter</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.yanzhilu.com/blog/?p=1985</guid>
		<description><![CDATA[XML的术语]]></description>
			<content:encoded><![CDATA[<p>提纲：</p>
<p>导言</p>
<p>一.XML文档的有关术语</p>
<p>二.DTD的有关术语</p>
<p>导言</p>
<p>初 学XML最令人头疼的就是有一大堆新的术语概念要理解。由于XML本身也是一个崭新的技术，正在不断发展和变化，各组织和各大网络公司(微 软,IBM,SUN等)都在不断推出自己的见解和标准，因此新概念漫天飞就不足为奇了。而国内又缺乏权威的机构或组织来对这些术语正式定名，你所看见的有 关XML的中文教材大部分是靠作者本身的理解翻译过来的，有些是正确的，有些是错误的，更加妨碍了我们对这些概念的理解和学习。</p>
<p>你 下面将要看到的关于XML术语的解释，也是作者本身的理解和翻译。阿捷是以W3C组织发布的XML1.0标准规范和相关的正式说明文档为根据来讲述。可以 确保这些理解是基本正确的，至少不是错误的。你如果想进一步阅读和了解，我在本文的最后部分列明了相关资源的出处和链接，你可以直接访问。好，我们转入正 题：</p>
<p>一.XML文档的有关术语</p>
<p>什么是XML文档？知道HTML原代码文件吧，XML文档就是用XML标识写的 XML原代码文件。XML文档也是ASCII的纯文本文件，你可以用Notepad创建和修改。XML文档的后缀名为.XML，例如 myfile.xml。用IE5.0以上浏览器也可以直接打开.xml文件，但你看到的就是&#8221;XML原代码&#8221;，而不会显示页面内容。你可以将下面代码存为 myfile.xml试试：</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;GB2312&#8243;?&gt;</p>
<p>&lt;myfile&gt;</p>
<p>&lt;title&gt;XML轻松学习手册&lt;/title&gt;</p>
<p>&lt;author&gt;ajie&lt;/author&gt;</p>
<p>&lt;email&gt;<a href="mailto:ajie@aolhoo.com"><span style="color: #003366;">ajie@aolhoo.com</span></a>&lt;/email&gt;</p>
<p>&lt;date&gt;20010115&lt;/date&gt;</p>
<p>&lt;/myfile&gt;</p>
<p>XML文档包含三个部分：</p>
<p>1. 一个XML文档声明；</p>
<p>2. 一个关于文档类型的定义；</p>
<p>3. 用XML标识创建的内容。</p>
<p>举例说明:</p>
<p>&lt;?xml version=&#8221;1.0&#8243;?&gt;</p>
<p>&lt;!DOCTYPE filelist SYSTEM &#8220;filelist.dtd&#8221;&gt;</p>
<p>&lt;filelist&gt;</p>
<p>&lt;myfile&gt;</p>
<p>&lt;title&gt;QUICK START OF XML&lt;/title&gt;</p>
<p>&lt;author&gt;ajie&lt;/author&gt;</p>
<p>&lt;/myfile&gt;</p>
<p>&#8230;&#8230;</p>
<p>&lt;/filelist&gt;</p>
<p>其中第一行&lt;?xml version=&#8221;1.0&#8243;?&gt;就是一个XML文档的声明，第二行说明这个文档是用filelist.dtd来定义文档类型的，第三行以下就是内容主体部分。<br />
我们来了解XML文档中有关的术语：</p>
<p>1.Element(元素)：</p>
<p>元素在HTML我们已经有所了解，它是组成HTML文档的最小单位，在XML中也一样。一个元素由一个标识来定义，包括开始和结束标识以及其中的内容，就象这样：&lt;author&gt;ajie&lt;/author&gt;</p>
<p>唯一不同的就是：在HTML中，标识是固定的，而在XML中，标识需要你自己创建。</p>
<p>2.Tag(标识)</p>
<p>标识是用来定义元素的。在XML中，标识必须成对出现，将数据包围在中间。标识的名称和元素的名称是一样的。例如这样一个元素：</p>
<p>&lt;author&gt;ajie&lt;/author&gt;</p>
<p>其中&lt;author&gt;就是标识。</p>
<p>3.Attribute(属性):</p>
<p>什么是属性？看这段HTML代码:&lt;font color=&#8221;red&#8221;&gt;word&lt;/font&gt;。其中color就是font的属性之一。</p>
<p>属性是对标识进一步的描述和说明，一个标识可以有多个属性，例如font的属性还有size。XML中的属性与HTML中的属性是一样的，每个属性都有它自己的名字和数值，属性是标识的一部分。举例：</p>
<p>&lt;author sex=&#8221;female&#8221;&gt;ajie&lt;/author&gt;</p>
<p>XML中属性也是自己定义的，我们建议你尽量不使用属性，而将属性改成子元素，例如上面的代码可以改成这样：</p>
<p>&lt;author&gt;ajie</p>
<p>&lt;sex&gt;female&lt;/sex&gt;</p>
<p>&lt;/author&gt;</p>
<p>原因是属性不易扩充和被程序操作。</p>
<p>4.Declaration(声明)</p>
<p>在所有XML文档的第一行都有一个XML声明。这个声明表示这个文档是一个XML文档，它遵循的是哪个XML版本的规范。一个XML的声明语句就象这样：</p>
<p>&lt;?xml version=&#8221;1.0&#8243;?&gt;</p>
<p>5.DTD(文件类型定义)</p>
<p>DTD是用来定义XML文档中元素，属性以及元素之间关系的。</p>
<p>通过DTD文件可以检测XML文档的结构是否正确。但建立XML文档并不一定需要DTD文件。关于DTD文件的详细说明我们将在下面单独列项。</p>
<p>6.Well-formed XML(良好格式的XML)</p>
<p>一个遵守XML语法规则，并遵守XML规范的文档称之为&#8221;良好格式&#8221;。如果你所有的标识都严格遵守XML规范，那么你的XML文档就不一定需要DTD文件来定义它。</p>
<p>良好格式的文档必须以一个XML声明开始，例如：</p>
<p>&lt;?xml version=&#8221;1.0&#8243; standalone=&#8221;yes&#8221; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>其中你必须说明文档遵守的XML版本，目前是1.0；其次说明文档是&#8221;独立的&#8221;，它不需要DTD文件来验证其中的标识是否有效；第三，要说明文档所使用的语言编码。默认的是UTF-8，如果使用中文，你需要设置为GB2312。</p>
<p>良好格式的XML文档必须有一个根元素，就是紧接着声明后面建立的第一个元素，其它元素都是这个根元素的子元素，属于根元素一组。</p>
<p>良好格式的XML文档的内容书写时必须遵守XML语法。(有关XML语法我们将在下一章仔细讲解)</p>
<p>7.Valid XML(有效的XML)</p>
<p>一个遵守XML语法规则，并遵守相应DTD文件规范的XML文档称为有效的XML文档。注意我们比较&#8221;Well-formed XML&#8221;和&#8221;Valid<br />
XML&#8221;，它们最大的差别在于一个完全遵守XML规范，一个则有自己的&#8221;文件类型定义(DTD)&#8221;。</p>
<p>将XML文档和它的DTD文件进行比较分析，看是否符合DTD规则的过程叫validation(确认)。这样的过程通常我们是通过一个名为parser的软件来处理的。</p>
<p>有效的XML文档也必须以一个XML声明开始，例如：</p>
<p>&lt;?xml version=&#8221;1.0&#8243; standalone=&#8221;no&#8221; encode=&#8221;UTF-8&#8243;?&gt;</p>
<p>和上面例子不同的，在standalone(独立)属性中，这里设置的是&#8221;no&#8221;，因为它必须和相应的DTD一起使用，DTD文件的定义方法如下：</p>
<p>&lt;!DOCTYPE type-of-doc SYSTEM/PUBLIC &#8220;dtd-name&#8221;&gt;</p>
<p>其中：</p>
<p>&#8220;!DOCTYPE&#8221;是指你要定义一个DOCTYPE;</p>
<p>&#8220;type-of-doc&#8221;是文档类型的名称，由你自己定义，通常于DTD文件名相同；</p>
<p>&#8220;SYSTEM/PUBLIC&#8221;这两个参数只用其一。SYSTEM是指文档使用的私有DTD文件的网址，而PUBLIC则指文档调用一个公用的DTD文件的网址。</p>
<p>&#8220;dtd-name&#8221; 就是DTD文件的网址和名称。所有DTD文件的后缀名为&#8221;.dtd&#8221;。</p>
<p>我们还是用上面的例子，应该写成这样：</p>
<p>&lt;?xml version=&#8221;1.0&#8243; standalone=&#8221;no&#8221; encode=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;!DOCTYPE filelist SYSTEM &#8220;filelist.dtd&#8221;&gt;</p>
<p><a title="北京网站建设公司" href="http://www.yanzhilu.com">网站建设</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yanzhilu.com/blog/archives/1985/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XML轻松学习手册（2）XML概念</title>
		<link>http://www.yanzhilu.com/blog/archives/1983</link>
		<comments>http://www.yanzhilu.com/blog/archives/1983#comments</comments>
		<pubDate>Wed, 11 Nov 2009 12:13:26 +0000</pubDate>
		<dc:creator>changboter</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[技术文章]]></category>

		<guid isPermaLink="false">http://www.yanzhilu.com/blog/?p=1983</guid>
		<description><![CDATA[XML轻松学习手册（2）XML概念]]></description>
			<content:encoded><![CDATA[<p>第二章 XML概念</p>
<p>导言</p>
<p>经过第一章的快速入门学习，你已经知道了XML是一种能够让你自己创造标识的语言，它可以将数据 与格式从网页中分开，它可以储存数据和共享数据的特性使得XML无所不能。如果你希望深入学习XML，系统掌握XML的来龙去脉，那么我们首先还是要回到 XML概念的问题上来。XML(Extensible Markup Language)，一种扩展性标识语言。&#8221;扩展性&#8221;"标识&#8221;"语言&#8221;。每一个词都明确的点明了XML的重要特点和功能。我们来仔细分析：</p>
<p>一. 扩展性<br />
二. 标识<br />
三. 语言<br />
四. 结构化<br />
五. Meta数据<br />
六. 显示<br />
七. DOM</p>
<p>一.扩展性&#8212;使用XML，你可以为你的文档建立自己的标记(tags)。</p>
<p>XML的第一个词是&#8221;扩展性&#8221;，这正是XML强大的功能和弹性的原因。<br />
在 HTML里，有许多固定的标记，我们必须记住然后使用它们，你不能使用HTML规范里没有的标记。而在XML中，你能建立任何你需要的标记。你可以充分发 挥你的想象力，给你的文档起一些好记的标记名称。比如，你的文档里包含一些游戏的攻略，你可以建立一个名为&lt;game&gt;的标记，然后 在&lt;game&gt;下再根据游戏类别建立&lt;RPG&gt;,&lt;SLG&gt;等标记。只要清晰，易于理解你可以建立任何数量的标记。</p>
<p>一 开始你也许会不适应，因为我们在学习HTML时，有固定的标记可以直接学习和使用；(很多人包括我自己都是边分析别人的代码和标识，边建立自己的网页)， 而XML却没有任何标记可以学，也很少有文档的标记是一模一样的。我们怎么办？呵呵，没有就自己创建呀。一旦你真正开始写XML文档，你会发现随心所欲的 创造新标记也是一份很有趣的事。你可以建立有自己特色的标记，甚至建立你自己的HTML语言。</p>
<p>扩展性使你有更多的选择和强大的能力，但同时也产生一个问题就是你必须学会规划。你自己要理解自己的文档，知道它由哪几部分组成，相互之间的关系和如何识别它们。</p>
<p>关 于建立标识还需要说明一点，标识是描述数据的类型或特性，比如&lt;width&gt;，年龄&lt;age&gt;，姓名&lt;name&gt; 等，而不是数据的内容，比如：&lt;10pxl&gt;,&lt;18&gt;,&lt;张三&gt;，这些都是无用的标记。如果你学过数据库，你可以 这样理解，标识就是一种字段名。</p>
<p>二.标识&#8212;使用XML你可以识别文档中的元素。</p>
<p>XML的第二个词是&#8221;标识&#8221;，这表明了XML的目的是标识文档中的元素。</p>
<p>不论你是HTML,还是XML，标识的本质在于便于理解，如果没有标识，你的文档在计算机看来只是一个很长的字符串，每个字看起来都一样，没有重点之分。</p>
<p>通过标识，你的文档才便于阅读和理解，你可以划分段落，列明标题。XML中，你更可以利用其扩展性 来为文档建立更合适的标识。</p>
<p>不过，有一点要提醒大家注意：标识仅仅是用来识别信息，它本身并不传达信息。例如这样的HTML代码：</p>
<p>&lt;b&gt;frist step&lt;b&gt;<br />
这里&lt;b&gt;表示粗体，只用来说明是用粗体来显示&#8221;frist step&#8221;字符，&lt;b&gt;本身并不包含任何实际的信息，在页面上你看不到&lt;b&gt;，真正传达信息的是&#8221;frist step &#8220;。</p>
<p>三.语言&#8212;使用XML你要遵循特定的语法来标识你的文档。</p>
<p>XML第三个词是&#8221;语言&#8221;。这表明了作为一种语言XML必须遵循一定的规则。虽然XML的扩展性允许你创建新标识，但它仍然必须遵循特定的结构，语法和明确的定义。</p>
<p>在计算机领域，语言常常表示一?quot;程序语言&#8221;，用来编程实现一些功能和应用，但不是所有的&#8221;语言&#8221;都是用来编程的，XML就只是一种用来定义标识和描述信息的语言。</p>
<p>下面我们来深入了解一下XML应用的其本原理，可能会很枯燥，但是对于整体的理解很重要，你可以先快速过一遍，心里有一个模糊的概念，具体精髓则需要在实践中慢慢领会。</p>
<p>四.结构化&#8212;XML促使文档结构化，所有的信息按某种关系排列。</p>
<p>&#8220;结构化&#8221;听起来太抽象了，我们这样理解，结构化就是为你的文档建立一个框架，就象写文章先写一个提纲。结构化使你的文档看起来不会杂乱无章，每一部分都紧密联系，形成一个整体。</p>
<p>结构化有两个原则：<br />
1.每一部分(每一个元素)都和其他元素有关联。关联的级数就形成了结构。<br />
2.标识本身的含义与它描述的信息相分离。</p>
<p>我们来看一个简单的例子帮助理解：<br />
&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;GB2312&#8243;?&gt;<br />
&lt;myfile&gt;<br />
&lt;title&gt;XML轻松学习手册&lt;/title&gt;<br />
&lt;chapter&gt;XML快速入门<br />
&lt;para&gt;什么是XML&lt;/para&gt;<br />
&lt;para&gt;使用XML的好处&lt;/para&gt;<br />
&lt;/chapter&gt;<br />
&lt;chapter&gt;XML的概念<br />
&lt;para&gt;扩展性&lt;/para&gt;<br />
&lt;para&gt;标识&lt;/para&gt;<br />
&lt;/chapter&gt;<br />
&lt;/myfile&gt;<br />
这是本文的XML描述文档，可以看到标识分三级关联,非常清晰：<br />
&lt;myfile&gt;<br />
&lt;chapter&gt;<br />
&lt;para&gt;<br />
&#8230;<br />
&lt;/para&gt;<br />
&lt;/chapter&gt;<br />
&lt;/myfile&gt;<br />
上面这样的文档结构，我们又称之为&#8221;文档树&#8221;，主干是父元素，如&lt;myfile&gt;，分支和页是子元素，如&lt;chapter&gt;和&lt;para&gt;。</p>
<p>五.Meta数据(Metadata)&#8212;专业的XML使用者会使用meta数据来工作。</p>
<p>在HTML中我们知道可以使用meta标识来定义网页的关键字，简介等，这些标识不会显示在网页中，但可以被搜索引擎搜索到，并影响搜索结果的排列顺序。</p>
<p>XML对这一原理进行了深化和扩展，用XML，你可以描述你的信息在哪里，你可以通过meta来验证信息，执行搜索，强制显示，或者处理其他的数据。</p>
<p>下面是一些XML metadata在实际应用中的用途：</p>
<p>1.可以验证数字签名，使在线商务的提交动作(submission)有效。<br />
2.可以被方便的建立索引和进行更有效搜索。<br />
3.可以在不同语言之间传输数据。</p>
<p>W3C组织正在研究一种名为RDF(Resource Description Framework)的metadata处理方法，可以自动交换信息，W3C宣称，使用RDF配合数字签名，将使网络中存在&#8221;真实可信&#8221;的电子商务。</p>
<p>六.显示</p>
<p>单独用XMl不能显示页面，我们使用格式化技术，比如CSS或者XSL，才能显示XML标记创建的文档。</p>
<p>我 们在前面第一章讲到XML是将数据和格式分离的。XML文档本身不知道如何来显示，必须有辅助文件来帮助实现。(XML取消了所有标识，包括 font,color,p等风格样式定义标识，因此XML全部是采用类似DHTML中CSS的方法来定义文档风格样式。)，XML中用来设定显示风格样式 的文件类型有：</p>
<p>1.XSL</p>
<p>XSL全称是Extensible Stylesheet Language(可扩展样式语言), 是将来设计XML文档显示样式的主要文件类型。它本身也是基于XML语言的。使用XSL，你可以灵活的设置文档显示样式，文档将自动适应任何浏览器和PDA(掌上电脑)。</p>
<p>XSL也可以将XML转化为HTML，那样，老的浏览器也可以浏览XML文档了。</p>
<p>2.CSS</p>
<p>CSS大家很熟悉了，全称是Cascading Style Sheets(层叠样式表)，是目前用来在浏览器上显示XML文档的主要方法。</p>
<p>3.Behaviors</p>
<p>Behaviors现在还没有成为标准。它是微软的IE浏览器特有的功能，用它可以对XML标识设定一些有趣动作。</p>
<p>七.DOM</p>
<p>DOM全称是document object model(文档对象模型)，DOM是用来干什么的呢？假设把你的文档看成一个单独的对象，DOM就是如何用HTML或者XML对这个对象进行操作和控制的标准。</p>
<p>面 向对象的思想方法已经非常流行了，在编程语言(例如java，js)中，都运用面向对象的编程思想。在XML中，就是要将网页也作为一个对象来操作和控 制，我们可以建立自己的对象和模板。与对象进行交流，如何命令对象，就要用到API。API全称Application Programming Interface，它是访问和操作对象的规则。而DOM就是一种详细描述HTML/XML文档对象规则的API。它规定了HTML/XML文档对象的命 名协定，程序模型，沟通规则等。在XML文档中，我们可以将每一个标识元素看作一个对象&#8212;它有自己的名称和属性。</p>
<p>XML创建了标识，而DOM的作用就是告诉script如何在浏览器窗口中操作和显示这些标识</p>
<p>上面我们已经简要的讲述了一些XML的基本原理。</p>
<p>1.XML描述数据类型。例如:&#8221;King lear&#8221;是一个标题元素；<br />
2.CSS储存并控制元素的显示样式。例如：标题将被以18pt字体显示<br />
3.script脚本控制元素如何动作。例如：当一个title元素&#8221;out of stock&#8221;，将被用红色显示。<br />
4.DOM则为脚本和对象的交流提供一个公共平台，并将结果显示在浏览器窗口。</p>
<p>如果任何一个部分发生错误，都不会得到正确结果。</p>
<p><a title="北京网站建设公司" href="http://www.yanzhilu.com">网站建设</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yanzhilu.com/blog/archives/1983/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
