網頁

搜尋此網誌

2013年12月19日 星期四

Debian package 套件開發工具

Debian 套件 (Debian package) 有兩種類型,一種是執行檔套件 (Binary package),另一種是原始檔套件 (Source package),一般使用套件管理工具 (如 apt-get ) 安裝的都是執行檔套件。
  • Binary package
    以 .deb 為副檔名,套件裡面包含可直執行檔、組態檔 (configuration file)、man/info 頁面、版權資訊與相關文件。
  • Source package
    包含兩個部分,以 .dsc 為副檔名的描述檔,以及以 .orig.tar.gz 為副檔名的壓縮原始檔,另外也有可能包含一個以 .diff.gz 為副檔名的壓縮檔。
這裡我主要討論最常使用的 Binary package ,說明建置一個執行檔套件需要有哪些套件?在這裡我將採取最原始的 Debian 套件管理程式 (dpkg) 進行這項工作,使用 dpkg-deb 指令建置 Debain 套件。當然,也有其他高階的工具可以使用,不過那隱藏了一些細節,我認為不利於學習,所以我還是採用 dpkg。

由於系統預設已安裝 debconf 和 dpkg 兩個套件,下列是 Ubuntu 內建的指令:
  • 屬於 dpkg 套件
    • dpkg
    • dpkg-deb
    • dpkg-divert
    • dpkg-maintscript-helper
    • dpkg-query
    • dpkg-split
    • dpkg-statoverride
    • dpkg-trigger
  • 屬於 debconf 套件
    • debconf
    • debconf-apt-progress
    • debconf-communicate
    • debconf-copydb
    • debconf-escape
    • debconf-set-selections
    • debconf-show
    • dpkg-preconfigure
    • dpkg-reconfigure
  • 補充:其中有一個 dpkg-log-summary 指令是屬於 xdiagnose 套件,在此不列入。
當我們想要建立一個執行檔套件時,使用內建的 dpkg-deb 指令就可以開始建置,不需要再安裝其他套件。但是一個 Debain 套件包含相關設定,該如何開始學習呢?這時候就必須參考說明文件,除了線上文件之外,建議安裝 dpkg-dev 套件,或是 build-essential 套件 (build-essential已包含 dpkg-dev),dpkg-dev 除了提供一些指令之外,還包含很多有關 Debain 套件的說明文件,對於學習相當有用。

安裝指令是 sudo apt-get install dpkg-dev 或 sudo apt-get install build-essential,安裝完成之後,Ubuntu 將增加下列說明文件,請使用 man 指令讀取:
  • deb-control
  • deb-extra-override
  • deb-old
  • deb-override
  • deb-shlibs
  • deb-split
  • deb-src-control
  • deb-substvars
  • deb-symbols
  • deb-triggers
  • deb-version
  • deb
  • dpkg-architecture
  • dpkg-buildflags
  • dpkg-buildpackage
  • dpkg-checkbuilddeps
  • dpkg-distaddfile
  • dpkg-genchanges
  • dpkg-gencontrol
  • dpkg-gensymbols
  • dpkg-mergechangelogs
  • dpkg-name
  • dpkg-parsechangelog
  • dpkg-scanpackages
  • dpkg-scansources
  • dpkg-shlibdeps
  • dpkg-source
  • dpkg-vendor
參考資料:
補充:還有 debconf-doc 套件有其他的說明文件。
###

2013年12月11日 星期三

nginx 網頁伺服器

nginx (念作 engine x )是一個由 Igor Sysoev 所開發的伺服器軟體,主要用作 HTTP 和反向代理伺服器,也可以用作郵件代理伺服器。

在 Ubuntu 上安裝只需要使用 apt-get 安裝即可,指令是:sudo apt-get install -y nginx

總共會安裝 3 個套件:nginx, nginx-common, 與 nginx-full,nginx 套件設定的套件相依性,提供 nginx 安裝的進入點,nginx-full 套件包含 nginx 的執行檔,而 nginx-common 則是預設設定檔和說明文件。

安裝完 nginx 之後,預設是沒有開啟伺服器,請用 sudo service nginx start 或 sudo service nginx restart 啟動服務,在瀏覽器輸入 http://127.0.0.1 將會看到「Welcome to nginx」的訊息。

nginx 的設定檔是 /etc/nginx/nginx.conf , 預設的使用者名稱是 www-data,有一個預設虛擬主機的設定檔在 /etc/nginx/sites-available/default ,相關的參數設定可以參考 nginx 核心功能的說明。

最後介紹一本參考書籍,由佳魁資訊所出版的「Nginx-完全取代Apache,超輕、快、強的Web伺服器」,這大概是中文第一本有關 nginx 的書籍,全書共分為四篇:基礎篇、進階篇、實戰篇與模組篇,大致上涵蓋所有 nginx 所需要的知識。不過書上所介紹的 nginx 版本是 0.6.x 版,目前已經是 1.4.x 版,Google 之後發現原簡體書是 2010 年所發行的,目前看來內容稍微舊了一點,但這不影響學習與參考的價值。

張宴,Nginx-完全取代Apache,超輕、快、強的Web伺服器,台北:佳魁資訊,2012。
譯自:實戰Nginx:取代Apache的高性能Web伺服器,電子工業出版社,2010年3月。

補充,目前2013年佳魁資訊已再出版另一本「王者歸來:進擊的伺服器 - 用Nginx取代Apache建立全語言種類的雲端網站」,有興趣者可以參考。

###

2013年12月3日 星期二

Lexical structure of JavaScript and Python 詞彙結構

詞彙結構 (Lexical Structure) 是程式語言最基礎的規則,說明如何使用一個程式語言撰寫程式。當程式語言定義一套詞彙結構之後,程式開發人員撰寫程式碼,詞彙分析器 (Lexical Analyzer) 將程式碼分析為標記 (token),解析器 (parser) 處理標記才能給編譯器或解析器處理,由此可知,一個程式語言最底層的是詞彙結構,若要設計一個程式語言,也應該要從詞彙結構開始。

這裡我將比較 JavaScript 和 Python 這兩種程式語言的詞彙結構。

JavaScript (ECMAScript 3) Python (2.6)
字元集 (character set) Unicode 預設是7-bit ASCII
可使用特殊註解指定字元集
# -*- coding: encoding -*-
識別字 (identifier) 區分大小寫 (case-sensitive)
字母、底線或錢字符號開始
區分大小寫
字母或底線開始
註解 (comment) //雙斜線表示單行註解
/*斜線與星號之間為多行註解*/
#數字符號 (number sign) 表示單行註解
"""多行註解可用3個單引號或雙引號"""
空白 (space) space (\u0020)
tabulation (\u0009)
vertical tabulation (\u000B)
form feed (\u000C)
no-break space (\u00A0)
byte order mark (\uFEFF)
space (\u0020)
tabulation (\u0009)
form feed (\u000C)
行結束字元 (line terminator) line feed (\u000A),即LF
carriage return (\u000D),即CR
line separator (\u2028)
paragraph separator (\u2029)
基本上是line feed (\u000A)
Windows平台則是CRLF
Unix平台則是LF
多行程式碼 程式碼直接分行,最後必須用分號 (semicolon ;) 結束 每行結尾必須用反斜線 (backslash \) 表示分行
關鍵字 (keyword)
保留字 (reserved words)
基本上共29個
break case catch
continue debugger default
delete do else
false finally for
function if in
instanceof new null
return switch this
throw true try
typeof var void
while with

ECMAScript 5增加下列幾個
class const enum export 
extends import super
共31個
and as assert  
break class continue
def del elif
else except exec
finally for from
global if import
in is lambda
not or pass
print raise return
try while with
yield
字面值 (literal) 數字(整數、浮點數)
字串
布林
正規表示式
物件
陣列
字串
數字(整數、浮點數、複數)


###

2013年11月23日 星期六

Knockout JavaScript Library

Knockout 是一個 JavaScript 的程式庫,簡稱 KO ,Knockout 是基於 MVVM (Model-View-View Model) 的設計模式,主要是提供資料繫結 (data-binding) 的功能,讓 UI 與資料模型之間能夠自動地動態更新。

MVVM 設計模式將 Web Application 分成下列三個部分:
  • Model
    模型是指 Web App處理的資料本身,與 UI 沒有任何關係,通常是伺服端資料庫儲存的資料,瀏覽器透過 Ajax 方式取得。
  • View Model
    檢視模型是指 UI 上資料 (data) 與操作 (operations) 的部分,在 Web App 中是一個 JavaScript 物件,物件的屬性對應至 UI 上的資料,而物件的方法則是操作的部分。
  • View
    檢視是檢視模型中可見的 (visible)、互動的部分,在 Web App 中是 HTML 文件,檢視顯示 View Model 的資訊,將命令傳送給 View Model ,並依據 View Model 的狀態更新顯示內容。
使用 KO 開發  Web App 時,我們通常會在前端(用戶端)撰寫 JavaScript 程式,做為 View Model,並設計  HTML 做為 View 的顯示,在 HTML 中使用 data-bind 屬性繫結 View Model。另一方面,後端(伺服端)則是以 Python 或 PHP 等提供資料庫存取的功能,接收或傳送Model 的 JSON 資料。

Knockout 中最重要的是物件「observable」,當 View Model 物件的屬性是 observable 物件時,KO 將自動提供雙向的資料繫結,在 KO 中有 3 種 observable:
  • ko.observable
  • ko.computed
  • ko.observableArray
一般最常使用的是 ko.observable,提供最基本的資料繫結,適合單一個物件的繫結,而 ko.observableArray 則是多個物件的繫結,KO 用的是陣列方式處理物件集合。最後 ko.computed 則提供將 observable 物件計算出新的 observable 物件,例如姓氏是 ko.observable,而名子是另一個  ko.observable,我們則可以利用 ko.computed 計算出姓名。

有了 MVVM 和 observable 的概念,已經可以著手開發以 KO 為基礎的 Web App 了,剩下只是認識 KO 提供的語彙,所幸內容不多很容易快速上手。如果你常常開發 CRUD 類型的 Web App,可以考慮採用 Knockout 程式庫。

###

2013年11月21日 星期四

JavaScript: The Definitive Guide

溫故知新:複習已經學過的知識,也能有新的認識和體會,這是我閱讀「JavaScript 大全」這本書的心得。不論你是 JavaScript 的初學者,或是已經熟悉 JavaScript 的使用者,這本書都能讓你學習並精通 JavaScript 。

David Flanagan著,黃銘偉譯,JavaScript大全,台北:碁峯資訊,2012。(共1080頁,定價  NT$1200 )
譯自:JavaScript: The Definitive Guide, O'Reilly Media, 1100 pages

「JavaScript 大全」總共分成四個部分,實際上內容只有兩個主幹,分別是核心 JavaScript客戶端 JavaScript。前兩部分說明核心與客戶端 JavaScript,後兩部分則是參考資料,因此這本書兼具學習手冊與參考手冊兩種用途。

核心 JavaScript (Core JavaScript) 這一部分主要講述 JavaScript 程式語言本身,包含程式語言的語彙結構、型別、運算式、運算子、陳述式、物件、陣列、函式等,一切有關程式語言的基本要素。

客戶端 JavaScript (Client-Side JavaScript)這部分則是介紹運行 JavaScript 的環境,包含瀏覽器和 HTML5 所提供的 API,其中一章介紹 jQuery 程式庫,讓開發 Web App更加方便,大致上已經涵蓋客戶端所需的相關知識。

我認為這本「JavaScript 大全」是 JavaScript 的聖經本,厚度與價格都是第一名,建議每位  Web 開發人員都必須擁有一本。
###

2013年11月4日 星期一

Development Environment 開發環境

在 Ubuntu 上面開發 Python 應用程式時,需要準備開發環境 (Development Environment),包含編輯器與 Python 相關套件,過去我常常手動逐一安裝,雖然一一安裝並不麻煩,但卻需要花費時間等待,於是寫了一個 Python Script 讓開發環境完全自動化安裝如下。

這個 Script 會安裝 JRE 用於執行 Eclipse IDE,並且安裝 Web Tools Platform 和 PyDev Eclipse Plugin,還有安裝 bpython 便於操作 Python Interpreter,以及 Python 套件管理程式 (pip)。其他 Git 版本管理工具和 Vim 編輯器也一併安裝。

執行 Eclipse 的參數可以參考 Provisioning platform (p2) 或 Running Eclipse

#!/usr/bin/env python
import subprocess
import sys

# JRE
subprocess.call(['wget',
                 '--no-cookies',
                 '--no-check-certificate',
                 '--header', 'Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F',
                 'http://download.oracle.com/otn-pub/java/jdk/7u45-b18/jre-7u45-linux-x64.tar.gz'])
subprocess.call(['mkdir', '/usr/java'])
subprocess.call(['tar', 'xzvf', 'jre-7u45-linux-x64.tar.gz', '-C', '/usr/java', '--no-same-owner'])
subprocess.call(['update-alternatives', '--install', '/usr/bin/java', 'java', '/usr/java/jre1.7.0_45/bin/java', '1'])
subprocess.call(['java', '-version'])

# Eclipse
subprocess.call(['wget', 'http://eclipse.stu.edu.tw/technology/epp/downloads/release/kepler/SR1/eclipse-standard-kepler-SR1-linux-gtk-x86_64.tar.gz'])
subprocess.call(['tar', 'xzvf', 'eclipse-standard-kepler-SR1-linux-gtk-x86_64.tar.gz', '-C', '/opt', '--no-same-owner'])
subprocess.call(['chgrp', '-R', 'sudo', '/opt/eclipse/'])
subprocess.call(['/opt/eclipse/eclipse',
                 '-application', 'org.eclipse.equinox.p2.director',
                 '-repository', 'http://download.eclipse.org/releases/kepler',
                 '-destination', '/opt/eclipse',
                 '-installIU', 'org.eclipse.wst.web_ui.feature.feature.group'])
subprocess.call(['/opt/eclipse/eclipse',
                 '-application', 'org.eclipse.equinox.p2.director',
                 '-repository', 'http://pydev.org/updates',
                 '-destination', '/opt/eclipse',
                 '-installIU', 'org.python.pydev.feature.feature.group'])
subprocess.call(['chmod', '-R', '775', '/opt/eclipse'])

# APT package
subprocess.call(['apt-get', 'update'])
subprocess.call(['apt-get', '-y', 'install', 'vim'])
subprocess.call(['apt-get', '-y', 'install', 'bpython'])
subprocess.call(['apt-get', '-y', 'install', 'git'])
subprocess.call(['apt-get', '-y', 'install', 'python-pip'])

# Desktop Menu
f=open('/usr/share/applications/eclipse.desktop','w')
f.write('''[Desktop Entry]
Type=Application
Name=Eclipse
Exec=/opt/eclipse/eclipse
Icon=/opt/eclipse/icon.xpm
Terminal=false
''')
f.close()

# exit
sys.exit()

歡迎大家參考利用。
###

2013年11月1日 星期五

Multiple Instances of Apache2 多網頁伺服器實體

這篇文章記錄如何將 Apache 設定成多個實體執行。所謂的實體 (instance) 指的是一個完整的執行環境,由多個程序 (process) 或執行緒 (thread),與一個設定組態 (configuration) 所組成。一個主機 (host) 上可以同時擁有多個執行實體,但為何需要多個 Apache 實體呢?

如果需要在一台主機上提供多個網站,使用虛擬主機 (virtual host) 的方式就可以達成,其實不需要多個 Apache 實體。不過採用虛擬主機的前提是:這些虛擬主機都是用相同的模組  (module) 的情況,例如所有的虛擬主機都是執行 PHP 而使用 php5_module 模組,或是為了執行 Python 而使用 mod_wsgi 模組。

當然,你也可以一起載入所有的模組,只是這樣不太好,明明我的虛擬主機只要執行 PHP,卻要載入其他 mod_wsgi 、 mod_perl 之類的模組,造成記憶體的浪費,對於電腦資源的利用不是很有效率。因此,面對這種「多語言」的使用情境,我們就有可能需要多個 Apache 實體。

在 Ubuntu 上建立多個 Apache 實體其實不難,先利用 apt-get install apache2 安裝完 Apache 之後,我們可以在範例中找到建立多個 Apache 實體的 script 程式碼,這個 script 基本上就是建立一組全新的設定組態和 daemon 啟動程式。使用語法如下:

usage: /usr/share/doc/apache2/examples/setup-instance <suffix>

例如:bash /usr/share/doc/apache2/examples/setup-instance mysite,就會建立一個新的mysite實體,原本常用的 apache2ctl 指令會變成 apache2ctl-mysite,其他設定檔也會多了「 -mysite」的字尾。

如果你要啟動新的 Apache 實體,記得去利用 Listen 指令修改伺服器的埠號,不然會與原本的 Apache 發生衝突。以上面例子來說,修改 /etc/apache2-mysite/ports.conf 設定檔,然後執行 sudo service apache2-mysite start 就能啟動新的 Apache 實體。

參考文件:
###

2013年9月25日 星期三

Ubuntu 上安裝與部署 Django

在很久以前曾經說明 Django 在 Windows 的安裝步驟,這篇文章將說明如何在 Ubuntu 上安裝 Django ,並且使用 mod_wsgi 部署在 Apache 伺服器上運行。

廢話不多說,直接提供 Shell Script 安裝部署,可以將下列程式碼儲存為檔案,利用 Bash 執行後將建立一個mysite的網站,你也可以修改 NAME 變數使用不同的網站名稱。

#! /bin/bash

#安裝 Apache HTTP Server, WSGI模組, Python套件安裝器
apt-get -y install apache2
apt-get -y install libapache2-mod-wsgi
apt-get -y install python-pip

#安裝Django web framework
pip install django

#網站名稱變數
NAME=mysite

cd /var/www

#新增一個名稱為NAME的Django專案
django-admin.py startproject $NAME

#新增虛擬主機的組態檔,最精簡的設定
(
cat <<EOF
<virtualhost *:80>
        WSGIScriptAlias / /var/www/$NAME/$NAME/wsgi.py
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</virtualhost>
EOF
) > /etc/apache2/sites-available/$NAME

#設定PYTHONPATH,Python執行時尋找程式庫的位置
(
cat <<EOF
import sys
PROJECT_PATH=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(PROJECT_PATH)
EOF
) >> /var/www/$NAME/$NAME/wsgi.py

#啟用Django專案的虛擬主機,關閉預設的虛擬主機
a2ensite $NAME
a2dissite default

#使Apache伺服器重新載入設定檔
service apache2 reload

正確執行後,打開瀏覽器,輸入主機IP或本機位置 (http://127.0.0.1),將可以看到 Django 的歡迎畫面:



其他參考資料

###

2013年9月23日 星期一

NetworkManager 網路管理員

Ubuntu Desktop 的網路設定是由 NetworkManager 管理,NetworkManager 簡稱 NM,目前最新的版本是 0.9.8.x, NM 提供圖形化介面讓使用者設定網路連線,使用者不用去修改 /etc/network/interfaces 這個設定檔,這裡將介紹 NetworkManager 的相關資料與PPPoE的設定方式。

相關資料

設定資訊

  • NetworkManager 的組態檔資料夾位置
    /etc/NetworkManager
  • NetworkManager 的系統組態檔
    /etc/NetworkManager/NetworkManager.conf
  • 系統組態檔的設定意義
    參考:https://wiki.gnome.org/NetworkManager/SystemSettings
    或是:man NetworkManager.conf

預設系統組態檔內容:
[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

意思是使用 ifupdown 和 keyfile 兩個外掛,dns使用dnsmasq這個DNS快取。
ifupdown 從 /etc/network/interfaces 讀取連線,managed=false 是指 /etc/network/interfaces 中的連線不受管理,會被 NetworkManager 忽略。

其他指令

  • 重新啟動 NetworkManager:
    sudo service network-manager restart
  • NetworkManager 完整的使用說明:
    man NetworkManager
  • 命令列工具:
    nmcli
  • 列出連線狀態與裝置資訊(實用!)
    nm-tool

PPPoE

有關PPPoE的設定不建議使用 NetworkManager ,因為經過測試發現,開機後不會自動連線,需要手動點選連線實在不方便,我建議使用pppoeconf這項工具程式,在terminal中輸入pppoeconf會出現對話視窗,輸入使用者帳號和密碼,完成設定後輸入pon dsl-provider手動連線。重新開機後,一樣會自動建立PPPoE連線。

參考資料:https://help.ubuntu.com/community/ADSLPPPoE

###

2013年9月22日 星期日

HTML4 第二講

結構 (structure) 元素是 HTML 最重要的一個部份,數量也是最多的一類,結構元素將網頁內容組織成有系統的結構,用來標示那些內容是文字、清單或表格等等。結構元素包括5大項目:文字、清單、表格、連結與物件,如下表總共有 46 個元素。

分類文字(text)清單 (list)表格 (table)連結 (link)物件 (object)
數量1981036
元素名稱
em
strong
dfn
code
samp
kbd
var
cite
abbr
acronym
blockquote
q
sub
sup
p
br
pre
ins
del

ul
ol
li
dl
dt
dd
dir
menu

table
caption
thead
tbody
tfoot
colgroup
col
tr
th
td

a
link
base

img
object
param
applet
map
area

接著我將概略介紹各類結構元素,詳細內容請參閱 HTML 的規範。

文字類

最常使用的大就是 p 元素,代表的是段落 (paragraph) ,一個段落代表的是作者的思想或論點,與文字如何呈現沒有任何關係,可以是左右對齊 (double-justified) 或是靠左對齊 (left-justified) ,結構上都是相同的。

如果要強制在段落中的文字分行 (line break) ,則是使用 br 元素。不然瀏覽器會在英文段落中空白或連字符號 (hyphen) 的地方自動分行,中文段落則是每個字的地方都能自動分行。如果不想要在空白的地方分行,則可以使用&nbsp;實體,如果要指定文字在何處分行,則在英文字中插入&shy;實體。

另外,HTML 文件中的 Carriage Return (\r) 和 Line Feed (\n) 控制字元都會變成空白字元,如果想讓這些控制字元原汁原味呈現,那麼就要使用 pre 元素,pre 是指預先編排 (preformatted)的

意思。

對於內容的變動,使用 ins 元素標示新增的內容,使用 del 元素標示刪除的內容。對於引用的內容,HTML 提供兩個元素標示引用資料, blockquote 元素用於區塊元素,q 元素則用於行內元素。

文字上若需要下標 (subscript) 與上標 (superscript) 的文字標示,使用 sub 元素標示下標符號,上標符號則使用 sup 元素。

最後介紹文字類中的詞組元素 (phrase elements),這些都是用來組織文字片段的結構,總共有10個。
  • em:強調
  • strong:比em更強調
  • dfn:定義
  • code:程式碼片段
  • samp:程式碼的輸出結果
  • kbd:使用者的輸入
  • var:變數或引數
  • cite:引用或參考
  • abbr:縮寫詞
  • acronym:首字母縮略字

清單類

HTML 提供三種清單結構,分別是無次序 (unordered)、有次序 (ordered) 與定義 (definition) 。無次序清單使用 ul 元素,而有次序清單使用 ol 元素,不論有無次序,這兩種元素都要包含一個以上的清單項目,也就是 li 元素。

定義的清單結構是使用 dl 元素,dl 元素中不是包含 li 元素,而是使用名稱 (term) 與描述 (description) 的組合當作清單項目,名稱和描述個別使用的是 dt 元素和 dd 元素。

在清單類中還有兩個 dir 元素和 menu 元素,dir 使用來做路徑清單,而 menu 則用來做選單清單,這兩個元素 HTML 規格已經標示為棄用 (deprecated),建議改用 ul 元素取代。

表格類

表格類元素的使用大概是僅次於文字類,表格除了可以呈現資料外,也可以用來做排版設計。一個表格由 table 元素組成, table 元素內有 cpation 元素顯示表格標題,表格的每列 (row) 是由 tr 元素組成,表格中最小的單位則是單元格 (cell),單元格使用的是 td 或 th 元素。

一個表格中包含多列,我們可以群組這些列, HTML 中有三種元素可以使用,thead 元素是表頭 (table header),tbody 是表體 (table body) ,thead是表尾 (table footer)。這些群組元素的用途在於,如果有一個很多列的表格,表體的內容會橫跨多個頁面,但表頭和表尾則會固定在頁面上顯示欄 (column) 資訊。

除了表格列群組,欄也可以群組,使用 colgroup 和 col 元素,這些用途是在設定欄的寬度和樣式,平常很少使用。

連結類

一個連結包含兩個部分,錨點 (anchor)和方向 (direction),連結的方向是從來源錨點 (source anchor) 指向目標錨點 (destination anchor)。

在文件標頭設定連結是使用 link 元素,不會顯示給使用者,而在文件主體中使用連結則是用 a 元素。 link 元素通常是設定外部樣式表,或是設定個網頁之間的關係。 一般在頁面上看到的超連結都是指 a 元素,將頁面上的資訊連結至目標錨點。

另外還有一個 base 元素, base 元素是用來設定路徑資訊,當使用相對路徑時,利用 base 元素指定參考的基礎路徑位置,這個元素必須放在文件標頭裡面。

物件類

物件類的元素是用來組織多媒體資訊,如圖像、媒體播放器、Java Applet等,最常使用的是 img 元素,img 元素用來插入圖像到 HTML 文件之中。此外,插入圖像也可以使用 object 元素,object 元素是通用類型的物件,通常是用來嵌入媒體播放器,物件執行時期的參數設定使用 param 元素。目前,applet 標示為棄用 (deprecated),建議 Java Applet 使用 object 元素。

在使用圖像的時候, HTML 提供影像地圖的功能,利用 map 和 area 元素設定圖像上特定區域的動作,通常是用來設定圖像上的超連結。

###

熱門文章