工作達人(Job Da Ren)
服務是我架站的宗旨,全球華人及男女青年未來的工作方向

  • Home
  • About achi
    • My Disclosure Policy
  • Archives
    • Link Exchange
  • 隱私權政策
  • stock photos
  • Contact
  • Top Posts
  • Poll
  • wp-buzz
    • ㄚ琪的Live PR
  • Advertise
Job Da Ren > CompScience > Programming > Languages > xml

Archive for the ‘xml’ Category


 Powered by Max Banner Ads 

lxml

2012-01-02,Last modified: 2012-03-23Please wait

 Powered by Max Banner Ads 

lxml是Python語言中使用XML跟HTML功能最豐富且容易使用的函式庫。

簡介

lxml是libxml2跟libxslt函式庫的Python繫結,它獨特的地方是結合了這些簡單的Python原生API的函式庫具有的速度跟完整的功能,大部分都相容且優於著名的ElementTree API,見lxml簡介有更多的背景跟目標資訊,一些常見的問題在FAQ有回答。

對於商業的諮詢和定制化,請聯繫Stefan Behnel。

這一頁描述lxml目前穩定的版本,也請看開發版本的網頁。

文件

完整的lxml文件可以下載PDF文件,這個web上的HTML文件是一般的原始碼下載 的一部分。

  • ElementTree:
    • ElementTree API
    • 跟lxml.etree的相容性和差異
    • 基準測試結果
  • lxml.etree:
    • lxml.etree教學
    • lxml.etree特有API 文件
    • 生成的API文件 作為參考手冊
    • 解析跟驗證 XML
    • XPath跟XSLT 支援
    • Python XPath跟XSLT的擴充函式
    • 訂製的XML API的訂製元素類別(見 EuroPython 2008 talk)
    • SAX相容的API 用來跟其他的XML工具溝通
    • C-level API用來跟外部的C/Pyrex模組溝通
  • lxml.objectify:
    • lxml.objectify API文件
  • objectify跟etree簡單的比較

lxml.etree 儘可能地遵循ElementTree API在原生的libxml2上建構,假如你是ElementTree新手,就開始進入lxml.etree教學, 也見ElementTree 相容性概述跟比較lxml跟原始的ElementTree及cElementTree實作的基準測試結果。

在lxml.etree教學跟ElementTree 文件之後,最重要去看的地方就是lxml.etree特有的API 文件,它描述lxml如何擴充ElementTree API以揭露libxml2跟libxslt的特有功能,像是XPath、 Relax NG、 XML Schema、 XSLT跟c14n, Python程式碼可以透過擴充函式的使用從XPath表示式跟XSLT樣式表來呼叫,lxml也提供SAX相容的API,這樣可以在標準函式庫中使用SAX支援。

有一個單獨的模組lxml.objectify實作了lxml.etree上的資料繫結API,見objectify和etree的常見問題比較。

除了ElementTree API之外,lxml還具有一個複雜的自定義元素類別的API,這是一個在lxml之上寫任意XML驅動API的簡易方法,在1.1版的時候,lxml.etree有一個新的C-level API 可以在外部C模組裡用來有效率地擴充lxml.etree,包括自定義的元素類別支援。

下載

下載lxml最好的方式就是拜訪Python套件索引的lxml(PyPI),它也有不同平台上編譯的原始碼,這個原始碼分佈是使用此公鑰來簽入,MS Windows的執行檔通常會在PyPI的原始碼版本釋出後幾天供下載,假如你不能等待,先考慮試試沒有那麼新的版本。

最新的版本是lxml 2.3.2,2011-11-11釋出 (2.3.2的更新紀錄),較舊版本的列在下面。

請看一下安裝說明!

這個完整的網站(包括生成的API文件)是這個原始碼分佈的一部分,所以假如你想要下載這個文件作為離線使用,請取用原始碼壓縮檔並且拷貝原始碼檔案中的doc/html的目錄。

你也可以直接從svn目錄來檢查lxml的最新開發版本,使用像這樣的命令(假設你使用hg並且安裝了hg-git):

hg clone https://github.com/lxml/lxml.git lxml

※可參閱讀版本控制使用git

你也可以透過web來瀏覽原始碼檔案庫跟歷史紀錄,請先閱讀how to build lxml from source,開發版本的最新更新紀錄也可以存取, 如果你已經發現有錯誤已經更新或是你想要在最新的主幹版本裡你可以檢查那裡。

Print Friendly

Tags: Application programming interface, Python, Python Package Index, xml
Posted in xml | No Comments »

如何用Java讀取XML檔案

2012-02-21,Last modified: 2012-02-21Please wait

 Powered by Max Banner Ads 

這個範例程式碼是來自Java Tips,ㄚ琪覺得好用就拿來這邊獻醜翻譯了,如果有涉及翻譯侵權的話,尚請告知。

這個範例程式碼使用DOM剖析器來讀取XML檔案,DOM剖析器載入XML檔案到記憶體中並產生一個物件模型,這個物件模型可以遍歷以取得它的元素。

這個程式碼會剖析下面的MyXMLFile.xml檔案並印出它的元素到控制台。

XML file: MyXMLFile.xml

<?xml version="1.0"?>
<company>
	<employee>
		<firstname>Tom</firstname>
		<lastname>Cruise</lastname>
	</employee>
	<employee>
		<firstname>Paul</firstname>
		<lastname>Enderson</lastname>
	</employee>
	<employee>
		<firstname>George</firstname>
		<lastname>Bush</lastname>
	</employee>
</company>

import java.io.File;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

public class XMLReader {

public static void main(String argv[]) {

try {

File file = new File("c:\\MyXMLFile.xml");

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

Document doc = db.parse(file);

doc.getDocumentElement().normalize();

System.out.println("Root element " + doc.getDocumentElement().getNodeName());

NodeList nodeLst = doc.getElementsByTagName("employee");

System.out.println("Information of all employees");

for (int s = 0; s < nodeLst.getLength(); s++) {

Node fstNode = nodeLst.item(s);

if (fstNode.getNodeType() == Node.ELEMENT_NODE) {

Element fstElmnt = (Element) fstNode;

NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("firstname");

Element fstNmElmnt = (Element) fstNmElmntLst.item(0);

NodeList fstNm = fstNmElmnt.getChildNodes();

System.out.println("First Name : "  + ((Node) fstNm.item(0)).getNodeValue());

NodeList lstNmElmntLst = fstElmnt.getElementsByTagName("lastname");

Element lstNmElmnt = (Element) lstNmElmntLst.item(0);

NodeList lstNm = lstNmElmnt.getChildNodes();

System.out.println("Last Name : " + ((Node) lstNm.item(0)).getNodeValue());

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

Print Friendly

Tags: java, xml
Posted in java, xml | No Comments »

轉換Facebook的塗鴉牆訊息到開放式XML試算表

2011-05-12,Last modified: 2011-05-11Please wait

 Powered by Max Banner Ads 

Facebook的串流(stream)是一個存取你Facebook塗鴉牆上訊息的簡單方法,並且可以用程式來做很好的使用,它跟Twitter 的feed有點類似。

這個範例是一個應用程式的範例,用來拉出串流然後使用PHPExcel將它放進一個格式良好的開放式xml試算表,這個試算表重新安排訊息為一個時間的紀錄每一列有人的照片、他們的名字(有一個連結到個人檔案)、訊息的內容以及發布的日期時間。

隱私權的考慮

在串流內的資料來自你的朋友那邊;他給你權限來看他們的塗鴉牆但卻未必有意讓大眾這樣做,因為這樣,以及Facebook的商業模式運作的方式,會有嚴格的認證要求;這個要求比twitter feed還嚴,因此這範例不適合給你權限在我的實作中 – 你需要建構自己的應用範例!

步驟1:註冊Facebook應用程式

要開發Facebook的應用程式你需要在你的Facebook頁面http://facebook.com/developers 先建立新的應用程式,然後按‘建立新的應用程式’按鈕並給它一個名稱,這會給你一組金鑰:API金鑰跟應用程式密鑰,這個稍後在你的程式碼中會用到。

此處的說明http://developers.facebook.com/get_started.php對設定有很大的幫忙,當然你也可以看ㄚ琪的中文說明Facebook PHP教學。

到你的應用程式設定頁面,從http://www.facebook.com/developers/ => 在‘我的應用程式’ => 點擊你應用程式的名稱 => 點擊 ‘編輯設定’ => 點擊’Facebook集成’=>‘Canvas’

勾選‘Canvas Type’的Iframe按鈕,然後在‘Canvas Page’填上應用程式名稱以及在’Canvas URL’填上你的應用程式網址,這樣可以讓canvas轉向到你的頁面去,允許你透過Facebook的應用程式頁例如http://apps.facebook.com/reallysnazzyapp/到你的應用程式頁面來存取你的應用程式。

步驟2:託管你的應用程式

當你在Facebook註冊應用程式的時候,它看起來像是Facebook的一部分,可是你需要自己託管程式碼 – 這個程式碼會放在這個公用網站讓Facebook可以顯露這個程式。

有很多免費的php主機供應商你可以試試看,有些不錯有些就很難用,你會需要php5.2的版本並且開放–enable-zip使用(這樣PHPExcel函式庫才能運作)

你可以提出一個頁面用下面的指令碼來檢查這些細節:

<?php

echo phpinfo();

這將顯示你的PHP安裝的設定資訊。

假如你有這個資源,我建議有你自己的web伺服器來開發,透過這些方法控制環境會讓開發程序不會那麼複雜。

步驟3:撰寫應用程式

這支應用程式不只在Facebook上顯示,程式碼還會存取Facebook的資料,對於一個存取Facebook資料的應用程式來說安全設定是需要的。

為了驗證Facebook,你需要更改標誌及session金鑰;這個就是你的API金鑰跟應用程式密鑰(你在步驟1產生的),這個部份大多數是由PHP Facebook API函式庫來處理:http://svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz(註:這個連結已移除,取而代之的是下面的連結,但是因為函式庫已經有變更,新的函式庫不支援這裡的程式,所以你只能從這裡的程式碼使用舊的函式庫)

https://github.com/facebook/php-sdk

程式碼有四個部份:

· Facebook的驗證

· 從Facebook拉出資料

· 透過資料來處理/檢索

· 新增資料到有時尚格式的試算表中

Facebook的驗證

在你的程式碼中要include Facebook API函式庫:

include_once ‘../php/facebook.php’;

接著增加程式碼來提供驗證。

你會需要用你自己的金鑰、應用程式密鑰來替代,以及驗證後要轉向的網址,或是使用者要取消:

$appapikey = “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’;

$appsecret = ‘yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy’;

$next = "http://SomeServer.com/spike/index.php"; //Where to redirect after authentication

$next_cancel = "http://SomeServer.com/spike/canceled.php"; // Where to redirect if the user cancels the authentication

//—–Login, authenticate and get permission to read the user’s stream—–

$facebook = new Facebook($appapikey, $appsecret);//Create a new facebook object

//Sometimes the session token has expired or is invalid, this throws an execption. If this happens catch it and reset the user and try again

try

{

$user_id = $facebook->require_login();//get the user to login

if (!$facebook->api_client->users_hasAppPermission(‘read_stream’,$user_id))

{

$facebook->redirect("http://www.facebook.com/authorize.php?api_key=" . $appapikey . "&v=1.0&ext_perm=read_stream&next=" . $next . "&next_cancel=" . $next_cancel );

}

}

catch (Exception $ex)

{

//If the session token has expired or is invalid, this will effectivly reset it and then redirect to try again.

$facebook->set_user(null, null);

$facebook->redirect($_SERVER[‘SCRIPT_URI’]);

exit;

}

這段程式碼需要使用者登錄並確認他們是否有這應用程式的權限可以讀取他們的塗鴉牆訊息,假如沒有,會轉向到授權頁,你需要新增一個位址來讓使用者授權後可以轉到哪去,以及他們想要去取消可以到哪,DARCY THOMAS選擇轉回目前的頁面這個最簡單的方案,他也準備好了一個普通簡單的頁面讓使用者在他們要取消時可以轉移到那裡。

canceled.php :

<?php

echo "No love?";

有時候你會發現你應用程式的session金鑰會過期,這就是為什麼要用try catch,假如有問題,程式會捕捉到然後重新設定,並讓使用者重試。

在下載檔案之前顯示歡迎的訊息

一旦認證完成,我們要確認是否第一次載入,假如是我們就給使用者一個訊息說選擇下載到試算表,點擊submit按鈕會讓資料拉出來,並且轉換到試算表中。

//the first time the user arives at this page $_REQUEST['mode'] will != 1 so just display the intro

// if the user clicks the submit then $_REQUEST['mode'] == 1 and the file will be created and presented to the user

if ($_REQUEST['mode'] != 1)

{

echo ‘<form action="index.php" method="get">’;

echo ‘Download posts from your wall, as an Open XML Spreadsheet <br/>’;

echo ‘<input type="hidden" name="mode" value="1"/><input type="submit" /></form>’;

}

else

{

// …create file and present to the user

這是必須的因為假如你轉向到另一頁,這個session金鑰會改變然後認證會失敗,對於更強大的解決方案,你可以用switch case來判斷mode的值以含括不同的PHP檔。

從Facebook拉下資料:

拉下結果相當地容易

$feed = $facebook->api_client->stream_get();

這預設會拉下你朋友最新的30條塗鴉牆訊息。

$feed 是‘posts’、‘profiles’及‘albums’的巢狀陣列。

在範例中,DARCY THOMAS只有使用‘posts’跟‘profiles’兩個欄位。

你也可以藉著設定一些參數來擴充stream_get() 傳回的結果

$facebook->api_client->stream_get(viewer_id, source_ids, start_time, end_time, limit, filter_key);

見http://developers.facebook.com/docs/reference/rest/stream.get/有更多的資訊。

處理/搜尋資料

接下來在放資訊到陣列之前我們使用這資訊流($feed)來擷取我們想要的資訊,我們可以使用:

// get the revelent infomation out the stream ($feed) and put into an array

$posts = $feed['posts'];

$profiles = $feed['profiles'];

//Put in the names for the row headings

$listMessageDetails = array

(

"0"=>array

(

"image"=>"Image",

"name"=>"Name",

"message"=>"Message",

"time"=>"Time created"

)

);

// Put in the rest of the details for each message

$i =1;

foreach ($posts as $post)

{

$message = $post['message'];

//If the post is auto generated by some other Facebook app (i.e., xyz quiz), it normally doesnt have a message

//so we dont add the details of these posts

if( !empty($message))

{

$userId = $post['actor_id'];

$created_time = $post['created_time']; // this is in’unix time’ format

$details = getDetails($userId, $profiles);

$image = $details['pic_square'];

$name = $details['name'];

$url = $details['url'];

$MessageDetails['name'] = $name;

$MessageDetails['message'] = $message;

$MessageDetails['time'] = date("g:i a, F j, Y", $created_time ); // convert ‘unix time’ to 5:16 pm, March 10, 2001

$MessageDetails['id'] = $userId;

$MessageDetails['image'] = $image;

$MessageDetails['url'] = $url;

$listMessageDetails[$i] = $MessageDetails;

$i++;

}

}

在‘post’陣列中的資料有很多的資訊,其中大部份跟我們在這應用程式中感興趣的不相干(例如‘post_id’、‘permalink’等等),這會拉出我們感興趣的資料並放進陣列中,(誰說過什麼、他們的資訊以及他們說什麼)。

一個post只有post的user id(例如 actor_id)而不是他們的名字,連結到他們的個人資訊等等,所以getDetails()函式會從資訊流($feed)的‘profile’陣列中拉出資料。

試算表的欄位也需要一些標題這樣就能容易地在這時候放進這個陣列。

使用樣式格式將資料放入試算表

透過PHPExcel函式庫你可以使用處理過的資料並放進試算表中然後應用一些格式,你會需要從http://phpexcel.codeplex.com/ (註有可能你無法下載,很幸運地這個範例也這函式庫也有了)下載PHPExcel函式庫,放這個函式庫資料在伺服器上然後在你的指令碼的最前面含括起來。

include ‘PHPExcel/IOFactory.php’;

PHPExcel的文件很有用而且有很多的例子;最好確認你有沒有看過。

接著建立一個新的PHPExcel物件然後載入資料。

//—–Take the data in $listMessageDetails and put into a spreadsheet using the PHPExcel library

$objPHPExcel = new PHPExcel(); //create an new PHPExcel spreadsheet object

$sheet = $objPHPExcel->getActiveSheet();

foreach ($listMessageDetails as $row => $MessageDetails)

{

//put the values from each message into a new row, in the correct columns

//note: columns are 0-based indexed but rows are 1-based. So ‘A1’ and an index of (0,1) would refer to the same cell.

$sheet->getColumnDimension(‘A’)->setWidth(12);

$sheet->getColumnDimension(‘B’)->setWidth(20);

$sheet->getCellByColumnAndRow(1 , $row + 1)->setValueExplicit($MessageDetails['name'], PHPExcel_Cell_DataType::TYPE_STRING);

$sheet->getColumnDimension(‘C’)->setWidth(100);

$sheet->getCellByColumnAndRow(2 , $row + 1)->setValueExplicit($MessageDetails['message'], PHPExcel_Cell_DataType::TYPE_STRING);

$sheet->getStyle(‘C’ . $row)->getAlignment()->setWrapText(true);

$sheet->getColumnDimension(‘D’)->setWidth(20);

$sheet->getCellByColumnAndRow(3 , $row + 1)->setValueExplicit($MessageDetails['time'], PHPExcel_Cell_DataType::TYPE_STRING);

}

這段程式碼會使用$listMessageDetails陣列的所有東西然後載入到$objPHPExcel準備好格式化。

這是設定欄位寬度很方便的地方,所以同時可以這樣做,這裡有一個問題你需要注意,就是:欄位是以0為基礎做索引而列是以1為基礎,所以‘A1’跟(0,1)的索引都是參考相同的儲存格。

大部分這裡使用的格式都是從較早DARCY THOMAS在http://openxmldeveloper.org/archive/2009/05/06/4606.aspx 所寫的的PHP/Open XML 文章中複製來的,參考這篇文章有關如何使用PHPExcel函式庫格式化更多的資訊,這裡所使用的很多部份都是不用說明就可以懂的;所以DARCY THOMAS在這裡沒有做太多的說明。

有一些基本的版面配置屬性:

//Set Print properties

$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); //Set printing orentation

// set autofilter on the columns

$objPHPExcel->getActiveSheet()->setAutoFilter(‘A1:’ . $objPHPExcel->getActiveSheet()->getHighestColumn() . $objPHPExcel->getActiveSheet()->getHighestRow() );

Make the headings bold, put in some borders and alternating row colors for visual clarity:

//—–Put in some formatting to the table data to make it easer to read—–

$highestRow = $objPHPExcel->getActiveSheet()->getHighestRow();

$highestColumn = $objPHPExcel->getActiveSheet()->getHighestColumn();

$objPHPExcel->getActiveSheet()->insertNewRowBefore($highestRow + 1, 1);//Add one more row as a footer to the table

//put a border on the top and bottom rows and make the title row bold

$objPHPExcel->getActiveSheet()->getStyle(‘A1′)->getFont()->setBold(true);

$objPHPExcel->getActiveSheet()->getStyle(‘A1′)->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

$objPHPExcel->getActiveSheet()->getStyle(‘A’ . ($highestRow + 1) )->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

//Loop through all of the rows and put in fill and borders on the edges

for($row =1; $row<$highestRow + 2; $row++) //remember that

{

//Set the colors, mid blue/grey for the top and bottom rows, with alternating white and light blue/grey

if ($row == 1 || $row ==$highestRow + 1) $color = ‘FFCFDAE7′;

else if ($row%2==0) $color = ‘FFFFFFFF’;

else $color = ‘FFE7EDF5′;

// set the fill type and apply the color

$objPHPExcel->getActiveSheet()->getStyle(‘A’ . $row)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);

$objPHPExcel->getActiveSheet()->getStyle(‘A’ . $row)->getFill()->getStartColor()->setARGB($color);

//duplcate the first cells style (fill plus the top and bottom borders) across the whole row

$objPHPExcel->getActiveSheet()->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle(‘A’ . $row), ‘B’ . $row . ‘:’. $highestColumn . $row); //copy style set in first column to the rest of the row

//Put some borders on the far left and right cells of the row

$objPHPExcel->getActiveSheet()->getStyle(‘A’ . $row )->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

$objPHPExcel->getActiveSheet()->getStyle($highestColumn . $row )->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

}

藉著擷取影像將個人檔案的大頭貼照放進試算表中然後存到一個暫存檔中,接著使用PHPExcel將大頭貼照插入試算表中:

//—–put the profile image into the streadsheet in column ‘A’ —–

$highestRow = $objPHPExcel->getActiveSheet()->getHighestRow();

for($row =1; $row<$highestRow; $row++)

{

//set the row height to 50 for all but the first row

if ($row !=1) $objPHPExcel->getActiveSheet()->getRowDimension($row)->setRowHeight(50);

$objDrawing = new PHPExcel_Worksheet_Drawing();

$objDrawing->setName(‘Profile Image’);

$objDrawing->setDescription(‘Profile Image’);

$pathURL = $listMessageDetails[$row - 1]['image'];

$path = tempnam(sys_get_temp_dir() , ‘path’ ); //creates a temp file to put the image in

if( !empty($pathURL) && $row != 1) // if the image is inaccessable or doesnt exist (e.g., the first row) then skip

{

copy($pathURL, $path); // Copy the image from its url location to the temporary file, ready to be loaded in the the spreadsheet

$objDrawing->setPath($path);// the path of where to find the image to insert

$objDrawing->setHeight(50); //size you want the image to be displayed as

$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());

$objDrawing->setCoordinates(‘A’ . $row);// set where you want to put the image

}

}

現在我們有每個訊息作者的Facebook個人檔案的url,我們可以讓他們的名字有一個可點擊的超連結:

// Put in a link on the profile name back to the users Facebook page

for($row =2; $row<$highestRow ; $row++)

{

$url = $listMessageDetails[$row - 1]['url'];

$objPHPExcel->getActiveSheet()->getCell(‘B’ . $row)->getHyperlink()->setUrl($url);

}

最後,我們可以將試算表的檔案傳給使用者,要建立檔案給瀏覽器你會需要含括表頭:

header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’);

header(‘Content-Disposition: attachment;filename="myfile.xlsx"’);

header(‘Cache-Control: max-age=0′);

現在我們可以輸出串流,這會用我們使用到的PHPExcel物件然後在寫到輸出前放到一個writer:

$objWriter2007 = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel2007′);

$objWriter2007->save(‘php://output’);

你可以擁有它了,從Facebook認證、取用資料,轉換資料然後用格式化的試算表來表現。

完整的PHP應用程式附在這FacebookStreamToOpenXMLSpreadsheet.zip,好好享受吧!

Print Friendly

Tags: facebook, Open XML spreadsheet, php, PHPExcel, xml
Posted in php應用, xml | No Comments »

hCard 範例

2011-04-27,Last modified: 2011-04-26Please wait

這一篇hCard範例,ㄚ琪從去年八月翻到現在終於完工,由於實在不太瞭解微格,所以翻譯特顯困難,不過還是完成了,ㄚ琪也希望在自己的網站上加上一些hCard的使用,不過本文很多範例還是以作者的網站為例,改天有空再來改吧!

範例 hCards.

作者

  • Tantek Çelik
  • Brian Suda


譯者

ㄚ琪

啟發性的例子


網頁和文章的作者

依據HTML4.01規格,作者應該使用<address>元素來表示"一篇文件或是一篇文件的主要部份的聯絡資訊",例如:

<address>
 <a href="http://tantek.com/">Tantek Çelik</a>
</address>

增加hCard到這樣已經存在的XHTML,你可以明確地表明這人的名稱、網址等等:

<address class="vcard">
 <a class="fn url" href="http://tantek.com/">Tantek Çelik</a>
</address>

這可以這樣顯示:

Tantek Çelik

這不只整頁可以這樣做,頁面的"主要部份"也可以,例如,部落格的文章。

見microformats.org部落格一個例子 (看原始碼),在microformats.org上的每篇文章的作者被標記為像上面顯示的 <address class="vcard">元素。

人跟組織的參考

在部落格文章裡一個典型的例子就是連結提到的人名到他們的部落格,且/或他們公司的首頁。例如:

<cite>
 <a href="http://meyerweb.com/">Eric Meyer</a>
</cite> 寫了一篇文章
(<cite>
  <a href="http://meyerweb.com/eric/thoughts/2005/12/16/tax-relief/">
   Tax Relief
  </a>
 </cite>)
關於他從<a href="http://irs.gov/">Internal Revenue Service</a>.
收到的無意中幽默信

加入hCard到這樣的標記裡,你可以明確地用名字跟URL來表明這個人跟公司:

<cite class="vcard">
 <a class="fn url" href="http://meyerweb.com/">Eric Meyer</a>
</cite>寫了一篇文章
(<cite>
  <a href="http://meyerweb.com/eric/thoughts/2005/12/16/tax-relief/">
   Tax Relief
  </a>
 </cite>)
關於他從<span class="vcard">
 <a class="fn org url" href="http://irs.gov/">Internal Revenue Service</a>
</span>收到的無意中幽默信。

注意這個包圍IRS的超連結上的類別名稱"fn org url",使用"fn"跟"org"相同的值(或這裡元素)來表示hCard是描述一個組織而非一個人。

這也可以這樣顯示:

Eric Meyer寫了一篇文章 (Tax Relief)關於他從Internal Revenue Service收到的無意中幽默信。

在一個組織工作的人

人們通常會將他們工作的公司或組織聯想在一起,例如:

<span class="vcard">
 <span class="fn">Jeremy Keith</span>,
 <span class="org">Clearleft</span>
</span>

當然在這個時代裡,幾乎每個人都有他們自己跟他們公司的URL,要在上面的hCard例子中加入URL是容易的:

<span class="vcard">
 <a class="fn url" href="http://adactio.com/">Jeremy Keith</a>,
 <span class="org">Clearleft</span>
</span>

但是加了一個URL到公司裡,就沒有"org-url"屬性(也不應該有),相反地,在公司自己裡使用模組化跟巢狀的hCard:

<span class="vcard">
 <a class="fn url" href="http://adactio.com/">Jeremy Keith</a>,
 <span class="org vcard"><a class="url fn org" href="http://clearleft.com">Clearleft</a></span>
</span>

此外,假如這個人的hCard是在代表他們的頁面上(例如,是一個representative hCard),那麼你也可以用超連結到公司的實驗rel-group關係來表示這公司的這個人屬於這一個"群組"。

<span class="vcard">
 <a class="fn url" href="http://adactio.com/">Jeremy Keith</a>,
 <span class="org vcard"><a class="url fn org" rel="group" href="http://clearleft.com">Clearleft</a></span>
</span>

hCard跟XFN

部落格文章中人的參照

上面的例子裡,一個人(部落客)正在參照另一個人(Eric Meyer),除了使用hCard來明確標記這個人的參照外,部落客可以使用XFN (XHTML朋友網路)來表示他們跟Eric Meyer的關係,例如:

<cite class="vcard">
 <a class="fn url" rel="friend colleague met" href="http://meyerweb.com/">
  Eric Meyer
 </a>
</cite> wrote a post
(<cite>
  <a href="http://meyerweb.com/eric/thoughts/2005/12/16/tax-relief/">
   Tax Relief
  </a>
 </cite>)
about an unintentionally humorous letter he received from the
<span class="vcard">
 <a class="fn org url" href="http://irs.gov/">Internal Revenue Service</a>
</span>.

這會跟前面的例子有一樣的顯示。

部落格聯播(Blogrolls)中人的參照

很多部落客正使用XFN(通常使用一個簡單的使用者介面像是內建在WordPress)的那一種來明確表示在他們的部落格聯播中跟這個人的關係:

<ul>
 <li>
  <a href="http://meyerweb.com" rel="friend colleague met">Eric Meyer</a>
 </li>
 <li>
  <a href="http://photomatt.net" rel="friend colleague met">Matt Mullenweg</a>
 </li>
</ul>

將hCard標記加入到XFN朋友的部落格聯播中,你可以明確表示這人的名稱跟URL,除了他們的關係之外:

<ul>
 <li class="vcard">
  <a class="fn url" href="http://meyerweb.com" rel="friend colleague met">Eric Meyer</a>
 </li>
 <li class="vcard">
  <a class="fn url" href="http://photomatt.net" rel="friend colleague met">Matt Mullenweg</a>
 </li>
</ul>

這樣可能顯示為:

  • Eric Meyer
  • Matt Mullenweg

這會參照為hcard-xfn-supporting-friends-lists,這也是social-network-portability關鍵組成的部份。

更多XFN的資訊,見XFN home page、joining XFN及XFN的背景.

這個技術用在WordPress的WP Microformatted Blogroll外掛中。

新型態的聯繫方式

自從vCard設計出來後,就有許多的其他的服務來提供個人的地址或其他方式的聯繫,例如,即時通、voip等等。

這意味著vCard(以及hCard)必須擴充到可以代表這些嗎?

感謝URL屬性的彈性,答案是No,不需任何的擴充,相反地,我們使用可以辨認服務(協定、機器且/或路徑)服務的適當URL,然後置放個人的位址在裡面。

  • vCard 已經擴充這個,我們是否應接受這個新的"IMPP"屬性? TobyInk 10:03, 17 Mar 2008 (PDT)

AOL Instant Messenger (AIM)

AOL Instant Messenger (AIM) ids 可以使用aim:協定來表現,很多人可以這樣做可點擊的網址來發佈他們的AIM ids,例如:

<a href="aim:goim?screenname=ShoppingBuddy">IM with the AIM ShoppingBuddy</a>

對於hCard,我們將接受這個現有的內容發佈行為,並且簡單地擷取它作為hCard另一個網址:

<a class="url" href="aim:goim?screenname=ShoppingBuddy">IM with the AIM ShoppingBuddy</a>

Yahoo! 即時通

同樣地,Yahoo! 即時通 (YIM) ids 可以使用ymsgr:協定來表現,同樣地很多人可以這樣做可點擊的網址來發佈他們的YIM ids,例如:

<a href="ymsgr:sendIM?SomeYahooFriend">IM with SomeYahooFriend</a>

再一次,對於hCard來說,我們將接受這個現有的內容發佈行為,並且簡單地擷取它作為hCard另一個網址:

<a class="url" href="ymsgr:sendIM?SomeYahooFriend">IM with SomeYahooFriend</a>

MSN Messenger

MSN Messenger (MSNIM) ids 可以使用msnim:協定來表現,並且同樣地很多人可以這樣做可點擊的網址來發佈他們的MSNIM ids,例如:

<a href="msnim:chat?contact=joebob@hotmail.com">IM with joebob@hotmail.com</a>

對hCard來說,我們將接受這個現有的內容發佈行為,並且簡單地擷取它作為hCard另一個網址:

<a class="url" href="msnim:chat?contact=joebob@hotmail.com">IM with joebob@hotmail.com</a>

見相關的議題。

XMPP (Jabber)

Extensible Messaging and Presence Protocol (XMPP) ids 可以使用xmpp:協定來表現,例如:

<a class="url" href="xmpp:username@jabberservice.com">IM with username@jammerservice.com</a>

這個協定允許更多的URLs,見RFC4622。

目前有很多客戶端支援這個協定。

Skype

IP電話服務Skype的帳戶可以使用skype:協定來表現,它可以用來開啟一個網路聊天室或是一個Skype呼叫。

<a href="skype:echo-chinese?chat">IM with the Skype echo service (Chinese)</a>
<a href="skype:echo-chinese?call">Skype call to Skype echo service (Chinese)</a>

因此對於hCard來說,我們可以接受這個現有的內容發佈行為,並且簡單地擷取它作為hCard的另一個網址:

<a class="url" href="skype:echo-chinese?chat">IM with the Skype echo service (Chinese)</a>
<a class="url" href="skype:echo-chinese?call">Skype call to Skype echo service (Chinese)</a>

ICQ

ICQ沒有URL的結構,反而在web上ICQ的連結使用HTTP超連結來下載一種內容類型application/x-icq的資源,之後作業系統接著就會打開使用者的ICQ客戶端。

因此我們可以標記那些有內容類型的HTTP超連結明確地設定來跟ICQ語義溝通:

<a class="url"
   type="application/x-icq"
   href="http://www.icq.com/people/cmd.php?uin=[ICQNUMBER]&action=message">
 Contact with ICQ</a>

將[ICQNUMBER]取代為使用者真正的ICQ號碼。

網站專頁

部落客通常會在內容託管服務上使用網址到他們的首頁、饋送或專頁來顯示他們的身份在這些服務上,他們透過標籤作為URL屬性,這些額外的身份也可以在hCard發佈。

  • delicious:
    • <a class="url" href="http://del.icio.us/rbach">Robert Bachmann's links</a>
  • Flickr:
    • <a class="url" href="http://flickr.com/photos/tantek/">See my photos</a>
    • <a class="url" href="http://flickr.com/people/tantek/">Flickr profile</a>
  • Technorati:
    • <a class="url" href="http://technorati.com/profile/tantek/">Technorati profile</a>
  • 在這裡增加更多…
    • ….

列出你其他的專頁

列出其他個人資料的網站最常見的情況是部落客列出自己其他的個人資料,或網站允許使用者列出他在站上的個人資料,連結到其他人的個人資料,使用戶要列出其個人資料在該網站上,鏈接到他或她的其他個人資料,由於很清楚地這個作者/使用者表示所有那些個人資料指德是同一個人,使用XFN的rel="me"將他們標記起來做明確的身份合併是最好的,例如,在Tantek的部落格或其他社交網路的個人資料的那些連結:

  • delicious:
    • <a class="url" href="http://del.icio.us/rbach">Robert Bachmann's links</a>
  • my Flickr:
    • <a class="url" href="http://flickr.com/photos/tantek/">See my photos</a>
    • <a rel="me" class="url" href="http://flickr.com/people/tantek/">Flickr profile</a>
  • Technorati:
    • my <a rel="me" class="url" href="http://technorati.com/profile/tantek/">Technorati profile</a>
  • 在這裡增加更多…
    • ….

像這種明確以使用者為導向的身份合併也是建構social-network-portability區塊的一個關鍵,這會在hcard-xfn-supporting-friends-lists這節有更多的解釋。

典型的網站簡介

網佔有時後會對一個人有很多不同的頁面作為"首頁",以及那個人的使用者個人資料頁。

舉Flickr的例子:

  • 你的首頁在一個網址像:http://flickr.com/photos/後跟著你的使用者名稱,例如:
    • http://flickr.com/photos/tantek/
  • 你的個人資料頁在一個網址像:http://flickr.com/people/後跟著你的使用者名稱,例如:
    • http://flickr.com/people/tantek/

此外,網站通常有一個他個人典型的網址及幾個備用網址。

如上所述,在hCard裡連到這些網址的連結會表示那些人應該有classname "url"。

此外,在hCard裡站上像這樣的連結到一個人的典型網址應該也有"uid"這個classname,這個技術是Ryan King第一次在Social Network Portability Today lunchtime meetup提出。

上一節建構的例子:

  • Flickr:
    • <a class="url" href="http://flickr.com/photos/tantek/">See my photos</a>
    • <a rel="me" class="url uid" href="http://flickr.com/people/tantek/">Flickr profile</a>

這樣的"url" + "uid"屬性也被網站使用作為個人的OpenID網址。

這件工作已開發進representative hCards,到那裡有最新這類的思維。

組織跟部門

部門使用"organization-unit"類別名稱在"org"元素裡,明確的"organization-name"標記可以與其他部門區隔:

<div class="vcard">
 <div class="org fn">
  <div class="organization-name">Sprinkler Fitters U.A. Local 483</div>
  <div class="organization-unit">Apprenticeship Training Center</div>
 </div>
</div>

該部門也可以是位址的一部分,在這種情況下,你會想要明確的標記它作為除了"organization-unit"以外的"extended-address"。

<div class="vcard">
 <div class="adr">
  <div class="org fn">
   <div class="organization-name">Sprinkler Fitters U.A. Local 483</div>
   <div class="organization-unit extended-address">Apprenticeship Training Center</div>
  </div>
  <div class="street-address">2531 Barrington Court</div>
  <span class="locality">Hayward</span>,
  <abbr title="California" class="region">CA</abbr>
  <span class="postal-code">94545</span>
 </div>
</div>

請注意在位址裡的org的巢狀結構,我們要避免有重複的部門名稱。

組織列表

類似lists of people,組織列表(例如樂隊)應該使用一個有列表項目跟超連結到各自的組織首頁的列表(無序的,除非有理由要排序)。

例如,這個簡單的POSH:

<ul>
 <li>
  <a href="http://microformats.org/">microformats.org</a>
 </li>
 <li>
  <a href="http://technorati.com/">Technorati</a>
 </li>
 <li>
  <a href="http://www.w3.org/">World Wide Web Consortium</a>
  (W3C)
  </a>
 </li>
</ul>

可以很容易地使用hCard來加強:

<ul>
 <li class="vcard">
  <a class="fn org url" href="http://microformats.org/">microformats.org</a>
 </li>
 <li class="vcard">
  <a class="fn org url" href="http://technorati.com/">Technorati</a>
 </li>
 <li class="vcard">
  <a class="fn org url" href="http://www.w3.org/">World Wide Web Consortium</a>
  (<span class="nickname">W3C</span>)
  </a>
 </li>
</ul>

hCard裡RFC 2426的範例

見:hcard-examples-rfc2426

測試用例

這是hCard的例子,都被認為是在hCard分析器裡在尋找錯誤時特別有用(例如X2V)。

BDAY資訊的問題

這個例子:

    <!-- birthday -->
    <div class="bday">
    <dt>Birthday</dt>
    <dd>
        <abbr class="value" title="1985-10-27T00:00:00Z">October 27, 1985</abbr>
    </dd>
    </div>

應該產生"BDAY:1985-10-27T00:00:00Z",但是它卻產生"BDAY:Birthday October 27\, 1985" [在哪?這像敘述好像毫無意義],有趣的是apple的通訊錄還是希望接受這樣的方式。

  • 也許造成HTML的解析錯誤,就像<dt>跟<dd>不允許作為 <div>子標籤一樣。

型態值不靈敏的例子
  • "home" vs. "Home"

這個例子在X2V可以運作:

    <div class="tel">
    <dt>Phone (<span class="type">home</span>)</dt>
    <dd><span class="value">+438123418</span></dd>
    </div>

這不行,但是應該可以吧,它只會變成在vcard裡沒有的型態TEL。

    <div class="tel">
    <dt>Phone (<span class="type">Home</span>)</dt>
    <dd><span class="value">+438123418</span></dd>
    </div>

GEO解析

下面的hCard:

<div class="vcard">
  <span class="fn n">
     <a class="url" href="http://t37.net">
       <span class="given-name">Fréderic</span>
       <span class="family-name">de Villamil</span>
     </a>
  </span>
  <span class="nickname">neuro</span>
  <a class="email" href="mailto:neuroNOSPAM@t37.net">
     <span class="type">pref</span><span>erred email</span>
  </a>
  <span class="org">Omatis</span>
  <span class="adr">
     <abbr class="type" title="dom">France</abbr>
     <span class="type">home</span> address
     <abbr class="type" title="postal">mail</abbr> and
     <abbr class="type" title="parcel">shipments</abbr>:
     <span class="street-address">12 rue Danton</span>
     <span class="locality">Le Kremlin-Bicetre</span>
     <span class="postal-code">94270</span>
     <span class="country-name">France</span>
  </span>
  <span class="geo">
     <abbr class="latitude" title="48.816667">N 48° 81.6667</abbr>
     <abbr class="longitude" title="2.366667">E 2° 36.6667</abbr>
  </span>
</div>

應該可以轉換為下面的vCard:

BEGIN:VCARD
VERSION:3.0
URL:http://t37.net
ORG:Omatis;;
NICKNAME:neuro
FN:Fréderic de Villamil
N:de Villamil;Frederic;;Mr.;
EMAIL;TYPE=INTERNET,PREF:neuroNOSPAM@t37.net
ADR;TYPE=HOME:;;12 rue danton;le Kremlin-Bicetre;;94270;France
GEO:48.816667;2.366667
END:VCARD

X2V(2005-12-18)目前不能解析/匯出GEO屬性。

相關網頁

  • hcard-examples-issues
  • hCard
  • hCard cheatsheet – hCard properties
  • hCard creator (feedback) – create your own hCard.
  • hCard authoring – learn how to add hCard markup to your existing contact info.
  • hCard examples – example usage of various classes within hCard.
  • hCard examples in the wild – an on-going list of websites which use hCards.
  • hcard-supporting-user-profiles – sites with user profiles marked up with hCard – a very common example.
  • hCard FAQ – if you have any questions about hCard, check here.
  • hCard implementations – websites or tools which either generate or parse hCards.
  • hcard-implied – a proposal to create a alternative method of marking up a simple hCard
  • hCard parsing – normative details of how to parse hCards.
  • hCards and pages – semantic distinctions between different hCards on a page, and how to identify each
  • hcard-user-interface – techniques and issues surrounding user-interfaces to author, publish, and display hCards.
  • hCard profile – the XMDP profile for hCard
  • hCard singular properties – an explanation of the list of singular properties in hCard.
  • hCard tests – a wiki page with actual embedded hCards to try parsing.
  • hCard advocacy – encourage others to use hCard
  • hCard "to do" – jobs to do

The hCard specification is a work in progress. As additional aspects are discussed, understood, and written, they will be added. These thoughts, issues, and questions are kept in separate pages.

  • hCard brainstorming – brainstorms and other explorations relating to hCard.
    • hcard-parsing-brainstorming – brainstorming specific to parsing of hCard
    • geo brainstorming
  • hCard feedback – general feedback (as opposed to specific issues).
  • hCard issues – specific issues with the specification.
  • vCard errata – corrections to the vCard specification, which underlies hCard.
  • vCard suggestions – suggested improvements to the vCard specification.
Print Friendly

Tags: geo-brainstorming, hcard, hcard-advocacy, hcard-authoring, hcard-examples, hCard-to-do, OpenID, POSH, XFN, xml
Posted in xml | No Comments »

Operator 0.9.5.1

2010-07-08,Last modified: 2010-07-08Please wait

自從翻了一些微格式關於hCard的文章後,ㄚ琪也想試試看Wordpress可以用嗎?看到了Operator這個Firefox的外掛可以「讓微格式 (microformats) 與其他網頁上既有的語意資料「活」過來,創造與其他網路服務嶄新的互動方式。」

Operator 也協助您將網頁上的片段資訊與其他網站以各種方式「拼」起來,好比 Flickr + Google 地圖、Upcoming + Google 日曆等等,創造更多有趣有用的資訊應用模式。這些全拜活用 HTML 語意屬性的 Microformats (微格式) 所賜,您可至 http://microformats.org 查詢相關資訊。

Operator 由 IBM 的 Michael Kaply 開發,並成為 Mozilla Labs 的特色專案之一。

Michael Kaply留言說:「你可以使用Operator來偵錯你的微格式,當你啟用偵錯模式並在選項中啟用除錯模式時,你會看到一個新的處理器叫做”除錯”用不同的方式來顯示微格式。

2010-07-08_111158

2010-07-08_111357

假如微格式沒有顯示,而你又相信有,那它可能因為微格式錯誤,你可以開啟除錯模式來看看錯誤的微格式。

安裝很簡單,就像Firefox安裝外掛一樣,安裝後會出現一些選項:

2010-07-08_110731

我會把Location Bar Icon給勾選!

2010-07-08_111227

WP 2.7 fun: complete hcards提到了Wordpress 2.7以後就有支援這種微格式了,我卻一點不知道,看來我孤陋寡聞了!

Joost de Valk提到hCards沒有包含email addresses,這是相當的好,因為你不會想分享所有人的email在你的部落格上,但是你自己的email卻想分享在你自己的部落格上不是嗎?

所以他寫了一個外掛,假如你可以編輯文章及評論,那麼你就可以將你的email加到評論的部份,如果你使用hCrad,而他們也在那,那你就可以將名字、網站、email跟相片給使用者,這很酷吧!

好,下載這個外掛試試,Download the plugin here.

Print Friendly

Tags: Firefox, hcard, Microformats, Operator, 外掛, 微格式
Posted in php應用, Web Blog, xml | 1 Comment »

關於微格

2010-04-13,Last modified: 2010-04-29Please wait

最近看到了一個流行的詞彙『微格(Microformats)』,就到微格的網站看了一下,布丁在microformats & semantic web有了一段翻譯:「微格(microformats)是一系列簡單的開放資料格式,秉持著人類優先、機器次之的設計概念,並且以目前廣泛採用的標準作為基礎。微格並非將今日的成果棄置一旁,而是採取順應目前使用行為模式(例如XHTML與部落格)的途徑,試著先來解決一些較為簡單的問題。」


(引用自http://microformats.org/about)

微格是:

  • 一種資料的思考方式
  • 格式的設計原則
  • 適應當前的行為和使用模式(“Pave the cow paths.”)
  • 跟語意的XHTML,又名real world semantics、lowercase semantic web、lossless XHTML非常的相關
  • 一組簡單的開放資料格式標準,這裡很多標準現正積極發展並實作於更佳的結構化部落格及微內容網站的發佈
  • 一個漸進式的革命
  • 以上所有

微格不是:

  • 新的語言
  • 無限擴展及限制的
  • 讓每個人都試圖改變他們的行為和重寫他們的工具
  • 一個全新的做法,這個作法丟棄了今日已經有的
  • 所有分類法、本體論跟其他這樣的抽象概念的萬靈丹
  • 定義整個世界,甚至只是讓海水沸騰
  • 任何上述

微格的原則:

  • 解決一個特定問題
  • 盡可能簡單地開始
  • 人類優先、機器次之
  • 從廣泛採用的標準再利用積木
  • 模組化/嵌入性
  • 啟用和鼓勵分散式的開發、內容、服務

還有更詳細的資料可以查微格官方網站的wiki

Print Friendly

Tags: Microformats, standards, web, web2.0, xml, 微格
Posted in xml, 網站評論, 翻譯 | 1 Comment »

廠商贊助

贊助廠商連結請點我

最新照片

P3290297 P1151501 P1091391 P3070124 IMAGE_941 P4121415 P1091388 P1111398
觀看更多的相片 >

熱門文章

  • GTK+ 2.0 教學 - 13,446 views
  • jQuery UI入門 - 7,623 views
  • 介紹NetBeans下的Android開發 - 6,967 views
  • 正確使用java array - 5,898 views
  • eclipse 3.4.1 中文 好好玩 - 5,125 views
  • 程式語言教學 – C、C++、OpenGL、STL - 4,233 views
  • GTK+ 2.0 教學-從這裡開始 - 3,648 views
  • jQuery UI 的 Demos展示及說明文件 - 3,562 views
  • Python 圖形使用者介面程式設計 - 2,813 views
  • 如何在手機裡安裝Java ME應用程式 - 2,603 views
  • Microsoft Visual C# 2010 Express更新 - 2,532 views
  • sudo apt-get install sun-java5-jdk - 2,332 views

隨便看看

  • 關於微格
  • hCard 範例
  • 如何用Java讀取XML檔案
  • Operator 0.9.5.1
  • lxml
  • 轉換Facebook的塗鴉牆訊息到開放式XML試算表

懶得上網看文章!

就來訂閱我的電子報吧!

輸入你的電子郵件地址:

發送者為 FeedBurner

近期文章

  • 感興趣的xampp-win32-1.7.7
  • 與其給我邀請送禮物,倒不如幫工作達人按讚
  • 【夏日保養】小心辦公室冷氣,讓雙手提早變老!
  • 成人紙尿褲價格戰 苦了父母
  • Smart Life創意無痕壁貼
  • 不用出國的專業全美語兒童營隊
  • 試用BUGSLOCK純天然香茅防蚊手環(防蚊效果一級棒)
  • 多功能的除污達人
  • 五月連結Fun Taiwan送【DIANA】愛媽咪施華洛彩鑽項鍊
  • 網購熱銷缺貨!titan抗菌活力襪,抑菌除臭、護腳2合1

鳥鳴啾啾

    Follow Me on Twitter

    與我交誼!做我的粉絲!

    • technorati
    • Twitter

    其它

    • 登入
    • 文章 RSS 訂閱
    • 迴響 RSS 訂閱
    • WordPress.org

    快上www.blognews.com.tw,就有機會天天免費吃大餐!

    我的書摘

    RSS 科技新聞 – 頭條新聞 – Yahoo!奇摩新聞

    • 摩托行動侵權 部分手機遭禁 2012/05/19
    • 臉書掛牌上市 電腦出包 2012/05/19
    • 揭祕深海不明物體 專家:罕見水母! 2012/05/19
    • 大馬發明展 台灣學子溫馨奪金 2012/05/19
    • 亞洲市場成長趨緩 臉書新挑戰 2012/05/18
    • 蘋果亞馬遜相爭 面板雙虎得利 2012/05/18
    • 擁近10億用戶個資 將是獲利關鍵 2012/05/18
    • 小行星撞地球 中日菲會重創 2012/05/18
    • 小行星若撞地球 大陸先遭殃 2012/05/18
    • 英「條碼」小鎮 維基百科導遊 2012/05/18
    • 臉書濫用個資 人權組織要告 2012/05/18
    • 美報告:陸藉西方科技壯大軍力 2012/05/18
    • 點閱率低 臉書廣告效果惹議 2012/05/18
    • 英小鎮掃條碼 維基百科當導遊 2012/05/18
    • 玻璃構成的一天 影片解密未來世界 2012/05/18

    Blogroll

    • 628之巨蟹座的水世界
    • Blog語法研究室
    • Chip123創新論壇
    • Chungyuchen's Blog
    • Daphne's Fresh Look
    • Frank的雜記
    • Fun Taiwan
    • GOWEIS的好康分享記事簿
    • L K K 的心聲
    • LuckyDog 抽獎達人
    • Office 達人空間(章美蘭)
    • Potato的探索樂園
    • QK3000小遊戲
    • Russian Brides
    • Web Game @Live
    • yal's blog
    • 《心靈翅膀》發現不同的聲音
    • 『PDF』點滴夯發現
    • ㄚ晟的IT筆記
    • 企鵝碎碎唸
    • 傑尼斯部落
    • 免費訊息軟體下載
    • 免費軟體下載
    • 凱特打結該該叫
    • 台中蔣小姐
    • 台灣天氣網
    • 台灣排行榜 Rank.tw
    • 台灣部落格網站目錄
    • 嗡財財嚕嚕唆哈
    • 大紀元賀卡城
    • 好朋友二手家具
    • 小遊戲388
    • 小遊戲天堂
    • 小邱邱的測量放樣工程
    • 拆組達人
    • 敗家誌°
    • 時間不等於金錢
    • 月光下的嘆息!
    • 梅森手扎
    • 淘淘寶小遊戲天堂區
    • 玩物尚誌
    • 生活工場家
    • 白文MIMI與小鸚KIKI的生活記事
    • 紅色死神
    • 綠色工廠 Easylife Blog
    • 網路聯盟行銷中心
    • 美食美景紐西蘭美女的家
    • 蓉兒ㄉ天空
    • 遊戲世界
    • 遊戲阿布
    • 遨遊天地任我行
    • 野兔村
    • 阿文兄A日誌
    第五屆部落客百傑 第五屆部落客百傑 第五屆部落客百傑



    GetRank - Webmaster and Seo Tools
  • 分類
    • Android
    • ASP
    • BU幣任務區
    • C#
    • CentOS
    • CGI
    • CompScience
    • C_and_CPP
    • Database
    • DB2
    • debian
    • Featured
    • In Search of Stupidity
    • Information Architecture for the World Wide Web
    • j2me
    • java
    • JavaScript
    • JavaScript權威指南:ECMAScript5 + HTML5 DOM + HTML5 BOM 範例精粹
    • Languages
    • lds
    • Linux
    • LinuxDev
    • MSSQL
    • MySQL
    • NetSecurity
    • Office
    • Oracle
    • Palm
    • Peopleware: Productive Projects and Teams
    • perl
    • php應用
    • PostgreSQL
    • Python
    • Quality is Still Free
    • ruby
    • Solaris 系統
    • Sponsored Reviews
    • Symbian
    • System
    • THE MYTHICAL MAN-MONTH
    • The Peter Principle
    • TinyERP
    • ubuntu
    • Uncategorized
    • VBA
    • VoIP
    • Web Blog
    • weberp
    • Windows
    • windows mobile
    • Wordpress
    • xml
    • ㄚ琪走透透
    • 中壢社大河川踏查社
    • 人才庫
    • 企業ERP
    • 免費好康
    • 公司簡介
    • 口碑貼文
    • 商品推銷
    • 就業資源
    • 工作大未來
    • 工作訓練
    • 廠商簡介
    • 我攝過的教堂
    • 我的論文
    • 掌握Google關鍵字:SEO搜尋秘技全攻略
    • 數位拍古蹟
    • 文章導讀
    • 求才訊息
    • 生活與社會
    • 發燒鑑貨文
    • 直到路的盡頭
    • 神社
    • 科技通訊
    • 笑話
    • 約耳趣談軟體
    • 組合語言
    • 網站報報
    • 網站評論
    • 網路賺錢
    • 美味食記
    • 翻譯
    • 職業達人
    • 自然與科學
    • 藝術與表演
    • 觀察力培養
    • 設計模式之禪
    • 貼貼樂
    • 資料處理
    • 軟體報報
    • 閒聊
  • 最新的回應

    • 小倆口東京自由行-Day 2一日乘車券 | 工作達人(Job Da Ren) 在 小倆口東京自由行-Day 2明治神宮
    • Washer Parts - Our site provides essential information on ge appliance parts - Ge Appliance Parts 在 Whirlpool Appliance Parts
    • ㄚ琪 在 四月連結Fun Taiwan送好市特超大附門掛衣架組
    • MESON 在 四月連結Fun Taiwan送好市特超大附門掛衣架組
    • GP 超霸充電池高電力鎳氫(NiMH)電池第十五次使用 | 工作達人(Job Da Ren) 在 GP 超霸充電池高電力鎳氫(NiMH)電池試用
    • ㄚ琪 在 webERP : WebERP 4.03.5 推出

    請幫工作達人按讚

    • Copyright c 2005 - 2009 工作達人(Job Da Ren) and is proudly powered by WordPress
    • Entries (RSS)
    • Comments (RSS)
    • Home
    • About achi
    • Archives
    • 隱私權政策
    • stock photos
    • Contact
    • Top Posts
    • Poll
    • wp-buzz
    • Advertise
    ss_blog_claim=fec8047405cd9a7a8d8d623b47b39edf
    Creative Commons Attribution-NonCommercial-ShareAlike 2.5 台灣
    This work by ㄚ琪 is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 台灣.

    无觅相关文章插件,快速提升流量