HTML_Primer

Transcription

HTML_Primer
HTML Primer
This is a collection of relevant pages extracted
from Wikipedia and organized through the use
of its Book Creator software. The collection
was created on March 16, 2013, so pages
included herein may have been updated and/or
superseded since then. This file also includes several
tutorials dealing with basic aspects of HTML
composition. The tutorials begin after page 265
of this document.
PDF generated using the open source mwlib toolkit. See http://code.pediapress.com/ for more information.
PDF generated at: Sat, 16 Mar 2013 15:59:25 UTC
Contents
Articles
Basic Concepts
1
Hypertext
1
Hypertext Transfer Protocol
6
World Wide Web
15
Uniform resource locator
25
Markup language
28
Markup Languages
33
Standard Generalized Markup Language
33
Document Type Definition
42
HTML
55
XHTML
71
XML
84
HTML5
96
Document Object Model
103
Internet media type
107
JavaScript
113
Formatting
Cascading Style Sheets
Related Technologies
131
131
142
Application programming interface
142
Scalable Vector Graphics
147
Web browser
156
Web Browsers
160
Firefox
160
Internet Explorer
188
Google Chrome
205
Opera (web browser)
219
Safari (web browser)
227
Key Organizations
236
Internet Engineering Task Force
236
International Organization for Standardization
239
World Wide Web Consortium
246
References
Article Sources and Contributors
251
Image Sources, Licenses and Contributors
263
Article Licenses
License
265
1
Basic Concepts
Hypertext
Hypertext is text displayed on a computer display or other electronic device with references (hyperlinks) to other
text that the reader can immediately access, usually by a mouse click, keypress sequence or by touching the screen.
Apart from text, hypertext is sometimes used to describe tables, images and other presentational content forms with
hyperlinks. Hypertext is the underlying concept defining the structure of the World Wide Web.[1] It enables an
easy-to-use and flexible connection and sharing of information over the Internet.
Etymology
The English prefix hyper- comes from the Greek prefix "ὑπερ-" and means "over" or "beyond"; it has a common
origin with the prefix "super-" which comes from Latin. It signifies the overcoming of the previous linear constraints
of written text. The term "hypertext" is often used where the term "hypermedia" might seem appropriate. In 1992,
author Ted Nelson – who coined both terms in 1963 – wrote:
By now the word "hypertext" has become generally accepted for branching and responding text, but the
corresponding word "hypermedia", meaning complexes of branching and responding graphics, movies
and sound – as well as text – is much less used. Instead they use the strange term "interactive
multimedia": this is four syllables longer, and does not express the idea of extending hypertext. —
Nelson, Literary Machines, 1992
Types and uses of hypertext
Hypertext documents can either be static (prepared and stored in advance) or dynamic (continually changing in
response to user input, such as dynamic web pages). Static hypertext can be used to cross-reference collections of
data in documents, software applications, or books on CDs. A well-constructed system can also incorporate other
user-interface conventions, such as menus and command lines. Links used in a hypertext document usually replace
the current piece of hypertext with the destination document. A less known and used feature is StretchText, which
expands or contracts the content in place giving more control to the reader in determining the level of detail of the
displayed document. Hypertext can develop very complex and dynamic systems of linking and cross-referencing.
The most famous implementation of hypertext is the World Wide Web, first deployed in 1992.
History
In 1941, Jorge Luis Borges created The Garden of Forking Paths, a branching style short story that is often
considered an inspiration for the concept of hypertext.[2]
In 1945, Vannevar Bush wrote an article in The Atlantic Monthly called "As We May Think", about a futuristic
proto-hypertext device he called a Memex. This was a microfiche that stopped where you told it to, but not a
punctuation nor a network document standard.
Hypertext
2
In 1963, Ted Nelson coined the terms 'hypertext' and 'hypermedia' in a model
he developed for creating and using linked content (first published reference
1965[3]). He later worked with Andries van Dam to develop the Hypertext
Editing System (text editing) in 1967 at Brown University.
Douglas Engelbart independently began working on his NLS system in 1962
at Stanford Research Institute, although delays in obtaining funding,
personnel, and equipment meant that its key features were not completed until
1968. In December of that year, Engelbart demonstrated a 'hypertext'
(meaning editing) interface to the public for the first time, in what has come
to be known as "The Mother of All Demos". The word processor had been
born.
The first hypermedia application was the Aspen Movie Map in 1977. This
allowed users to choose which way they wanted to drive in a virtual
cityscape.
Ted Nelson gives a presentation on
Project Xanadu
In 1980, Tim Berners-Lee created ENQUIRE, an early hypertext database system somewhat like a wiki but without
hypertext punctuation, which was not invented until 1987. The early 1980s also saw a number of experimental
"hyperediting" functions in word processors and hypermedia programs, many of whose features and terminology
were later analogous to the World Wide Web. Guide, the first significant hypertext system for personal computers,
was developed by Peter J. Brown at UKC in 1982.
In August 1987, Apple Computer released HyperCard for the Macintosh line at the MacWorld convention. Its
impact, combined with interest in Peter J. Brown's GUIDE (marketed by OWL and released earlier that year) and
Brown University's Intermedia, led to broad interest in and enthusiasm for databases and new media. The first ACM
Hypertext (hyperediting and databases) academic conference took place in November 1987, in Chapel Hill NC,
where many other applications, including the branched literature writing software Storyspace, were also
demonstrated.[4]
Meanwhile Nelson, who had been working on and advocating his Xanadu system for over two decades, along with
the commercial success of HyperCard, stirred Autodesk to invest in his revolutionary ideas. The project continued at
Autodesk for four years, but no product was released.
In 1990, Tim Berners-Lee, then a scientist at CERN, proposed and later prototyped a new hypertext project in
response to a request for a simple, immediate, information-sharing facility, to be used among physicists working at
CERN and other academic institutions. He called the project "WorldWideWeb".[5]
"HyperText is a way to link and access information of various kinds as a web of nodes in which the user can
browse at will. Potentially, HyperText provides a single user-interface to many large classes of stored
information such as reports, notes, data-bases, computer documentation and on-line systems help. We propose
the implementation of a simple scheme to incorporate several different servers of machine-stored information
already available at CERN, including an analysis of the requirements for information access needs by
experiments...A program which provides access to the hypertext world we call a browser." - T. Berners-Lee,
R. Cailliau, 12 November 1990, CERN[5]
In 1992, Lynx was born as an early Internet web browser. Its ability to provide hypertext links within documents that
could reach into documents anywhere on the Internet began the creation of the Web on the Internet.
As new web browsers were released, traffic on the World Wide Web quickly exploded from only 500 known web
servers in 1993 to over 10,000 in 1994. As a result, all previous hypertext systems were overshadowed by the
success of the Web, even though it originally lacked many features of those earlier systems, such as an easy way to
edit what you were reading.
Hypertext
3
Implementations
Besides the already mentioned Project Xanadu, Hypertext Editing System, NLS, HyperCard, and World Wide Web,
there are other noteworthy early implementations of hypertext, with different feature sets:
• FRESS – A 1970s multi-user successor to the Hypertext Editing
System.
• ZOG - A 1970s hypertext system developed at Carnegie Mellon
University.
• Electronic Document System – An early 1980s text and graphic
editor for interactive hypertexts such as equipment repair manuals
and computer-aided instruction.
• Information Presentation Facility – Used to display online help in
IBM operating systems.
• Intermedia – A mid-1980s program for group web-authoring and
information sharing.
Hypertext Editing System (HES) IBM 2250 Display
console – Brown University 1969
• KMS - a 1980s successor to ZOG developed as a commercial
product.
• Storyspace – A mid-1980s program for hypertext narrative.
• Texinfo – The GNU help system.
• XML with the XLink extension – A newer hypertext markup language that extends and expands capabilities
introduced by HTML.
• Wikis – aim to compensate for the lack of integrated editors in most Web browsers. Various wiki software have
slightly different conventions for formatting, usually simpler than HTML.
• Adobe's Portable Document Format – A widely used publication format for electronic documents including links.
• Windows Help
• PaperKiller - A document editor specifically designed for hypertext. Started in 1996 as IPer (educational project
for ED-Media 1997).
• Amigaguide - released on Amiga Workbench 1990.
Academic conferences
Among the top academic conferences for new research in hypertext is the annual ACM Conference on Hypertext and
Hypermedia ([6] ACM SIGWEB Hypertext Conference page). Although not exclusively about hypertext, the World
Wide Web series of conferences, organized by IW3C2 [7], include many papers of interest. There is a list [8] on the
web with links to all conferences in the series.
Hypertext fiction
Hypertext writing has developed its own style of fiction, coinciding with the growth and proliferation of hypertext
development software and the emergence of electronic networks. Two software programs specifically designed for
literary hypertext, Storyspace and Intermedia became available in the 1990s.
Storyspace 2.0, a professional level hypertext development tool, is available from Eastgate Systems, which has also
published many notable works of electronic literature, including Michael Joyce's afternoon, a story, Shelley
Jackson's Patchwork Girl, Stuart Moulthrop's Victory Garden, and Judy Malloy's its name was Penelope, Forward
Anywhere. Other works include Julio Cortázar's Rayuela and Milorad Pavić's Dictionary of the Khazars. The first
Italian hypertextual novel by Lorenzo Miglioli, "Ra-Dio", was written using Storyspace.
An advantage of writing a narrative using hypertext technology is that the meaning of the story can be conveyed
through a sense of spatiality and perspective that is arguably unique to digitally networked environments. An author's
Hypertext
creative use of nodes, the self-contained units of meaning in a hypertextual narrative, can play with the reader's
orientation and add meaning to the text.
One of the most successful computer games of all time, Myst, was first written in Hypercard. The game was
constructed as a series of Ages, each Age consisting of a separate Hypercard stack. The full stack of the game
consists of over 2500 cards. In some ways Myst redefined interactive fiction, using puzzles and exploration as a
replacement for hypertextual narrative.[9]
Critics of hypertext claim that it inhibits the old, linear, reader experience by creating several different tracks to read
on, and that this in turn contributes to a postmodernist fragmentation of worlds. In some cases, hypertext may be
detrimental to the development of appealing stories (in the case of hypertext Gamebooks), where ease of linking
fragments may lead to non-cohesive or incomprehensible narratives.[10] However, they do see value in its ability to
present several different views on the same subject in a simple way.[11] This echoes the arguments of 'medium
theorists' like Marshall McLuhan who look at the social and psychological impacts of the media. New media can
become so dominant in public culture that they effectively create a "paradigm shift" (Lelia Green, 2001:15) as people
have shifted their perceptions, understanding of the world and ways of interacting with the world and each other in
relation to new technologies and media. So hypertext signifies a change from linear, structured and hierarchical
forms of representing and understanding the world into fractured, decentralized and changeable media based on the
technological concept of hypertext links.
Critics and theorists
•
•
•
•
•
•
•
•
•
•
•
•
•
Tim Berners-Lee
Jay David Bolter
Vannevar Bush
Robert Coover
J. Yellowlees Douglas
N. Katherine Hayles
Michael Joyce
George Landow
Lev Manovich
Stuart Moulthrop
Ted Nelson
Paul Otlet
Pierre Lévy
References
[2] Hypertext and creative writing (http:/ / dl. acm. org/ citation. cfm?id=317431)
[3] Did Ted Nelson first use the word "hypertext" (sic), meaning fast editing" at Vassar College?" (http:/ / faculty. vassar. edu/ mijoyce/ Ted_sed.
html)
[4] Hawisher, Gail E., Paul LeBlanc, Charles Moran, and Cynthia L. Selfe (1996). Computers and the Teaching of Writing in American Higher
Education, 1979-1994: A History Ablex Publishing Corporation, Norwood NJ, p. 213
[5] WorldWideWeb: Proposal for a HyperText Project (http:/ / www. w3. org/ Proposal. html)
[6] http:/ / www. sigweb. org/ conferences/ ht-cover. shtml
[7] http:/ / www. iw3c2. org
[8] http:/ / www. iw3c2. org/ conferences/
[10] Biblumliteraria (http:/ / biblumliteraria. blogspot. com/ 2008/ 07/ es-el-hipertexto-una-bendicin-o-un. html)
[11] The Game of Reading an Electronic Sir Gawain and the Green Knight (http:/ / www. acs. ucalgary. ca/ ~scriptor/ papers/ arthur. html)
4
Hypertext
Further reading
• Barnet, Belinda (2004). Lost In The Archive: Vision, Artefact And Loss In The Evolution Of Hypertext. University
of New South Wales, PhD thesis.
• Bolter, Jay David (2001). Writing Space: Computers, Hypertext, and the Remediation of Print. New Jersey:
Lawrence Erlbaum Associates. ISBN 0-8058-2919-9.
• Buckland, Michael (2006). Emanuel Goldberg and His Knowledge Machine. Libraries Unlimited.
ISBN 0-313-31332-6.
• Byers, T. J. (April 1987). "Built by association". PC World 5: 244–251.
• Cicconi, Sergio (1999). "Hypertextuality" (http://www.cisenet.com/cisenet/writing/essays/hypertextuality.
htm). Mediapolis. Ed. Sam Inkinen. Berlino & New York: De Gruyter.: 21–43.
• Conklin, J. (1987). "Hypertext: An Introduction and Survey". Computer 20 (9): 17–41. doi:
10.1109/MC.1987.1663693 (http://dx.doi.org/10.1109/MC.1987.1663693).
• Crane, Gregory (1988). "Extending the boundaries of instruction and research". T.H.E. Journal (Technological
Horizons in Education) (Macintosh Special Issue): 51–54.
• Engelbart, Douglas C. (1962). Augmenting Human Intellect: A Conceptual Framework, AFOSR-3233 Summary
Report, SRI Project No. 3579 (http://www.dougengelbart.org/pubs/augment-3906.html).
• Ensslin, Astrid (2007). Canonizing Hypertext: Explorations and Constructions. London: Continuum.
ISBN 0-8264-9558-3.
• Heim, Michael (1987). Electric Language: A Philosophical Study of Word Processing. New Haven: Yale
University Press. ISBN 0-300-07746-7.
• Landow, George (2006). Hypertext 3.0 Critical Theory and New Media in an Era of Globalization: Critical
Theory and New Media in a Global Era (Parallax, Re-Visions of Culture and Society). Baltimore: The Johns
Hopkins University Press. ISBN 0-8018-8257-5.
• Nelson, Theodor H. (September 1965). "Complex information processing: a file structure for the complex, the
changing and the indeterminate" (http://portal.acm.org/citation.cfm?id=806036). ACM/CSC-ER Proceedings
of the 1965 20th national conference.
• Nelson, Theodor H. (September 1970). "No More Teachers’ Dirty Looks" (http://www.newmediareader.com/
excerpts.html). Computer Decisions.
• Nelson, Theodor H. (1973). "A Conceptual framework for man-machine everything". AFIPS Conference
Proceedings VOL. 42. pp. M22–M23.
• Nelson, Theodor H. (1992). Literary Machines 93.1. Sausalito CA: Mindful Press. ISBN 0-89347-062-7.
• van Dam, Andries (July 1988). "Hypertext: '87 keynote address" (http://www.cs.brown.edu/memex/
HT_87_Keynote_Address.html). Communications of the ACM 31 (7): 887–895. doi: 10.1145/48511.48519
(http://dx.doi.org/10.1145/48511.48519).
• Yankelovich, Nicole; Landow, George P., and Cody, David (1987). "Creating hypermedia materials for English
literature students". SIGCUE Outlook 20 (3): All.
5
Hypertext
6
External links
• Hypertext: Behind the Hype (http://www.ericdigests.org/pre-9212/hype.htm)
• Reviving Advanced Hypertext (http://www.useit.com/alertbox/20050103.html) (whether and how concepts
from hypertext research can be used on the Web)
Hypertext Conferences
• Ed-Media World Conference on Educational Multimedia, Hypermedia, and Telecommunications (http://www.
aace.org/conf/edmedia/)
• The ACM Conference on Hypertext and Hypermedia (http://www.interaction-design.org/references/
conferences/series/acm_conference_on_hypertext_and_hypermedia.html)
Hypertext Transfer Protocol
Internet
protocol suite
Application layer
•
DHCP
•
DHCPv6
•
DNS
•
FTP
•
HTTP
•
IMAP
•
IRC
•
LDAP
•
MGCP
•
NNTP
•
BGP
•
NTP
•
POP
•
RPC
•
RTP
•
RTSP
•
RIP
•
SIP
•
SMTP
•
SNMP
•
SOCKS
•
SSH
•
Telnet
•
TLS/SSL
•
XMPP
•
(more)
Transport layer
•
TCP
•
UDP
•
DCCP
•
SCTP
Hypertext Transfer Protocol
7
•
RSVP
•
(more)
Internet layer
IP
•
•
•
IPv4
IPv6
•
ICMP
•
ICMPv6
•
ECN
•
IGMP
•
IPsec
(more)
•
Link layer
•
ARP/InARP
•
NDP
•
OSPF
•
Tunnels
•
L2TP
•
PPP
•
Media access control
•
•
•
•
•
Ethernet
DSL
ISDN
FDDI
(more)
The Hypertext Transfer Protocol (HTTP) is an application protocol for distributed, collaborative, hypermedia
information systems.[] HTTP is the foundation of data communication for the World Wide Web.
Hypertext is a multi-linear set of objects, building a network by using logical links (the so-called hyperlinks)
between the nodes (e.g. text or words). HTTP is the protocol to exchange or transfer hypertext.
The standards development of HTTP was coordinated by the Internet Engineering Task Force (IETF) and the World
Wide Web Consortium (W3C), culminating in the publication of a series of Requests for Comments (RFCs), most
notably RFC 2616 (June 1999), which defines HTTP/1.1, the version of HTTP in common use.
Technical overview
HTTP functions as a request-response protocol in the client-server
computing model. A web browser, for example, may be the client and
an application running on a computer hosting a web site may be the
server. The client submits an HTTP request message to the server. The
server, which provides resources such as HTML files and other
content, or performs other functions on behalf of the client, returns a
response message to the client. The response contains completion
status information about the request and may also contain requested
content in its message body.
A web browser is an example of a user agent (UA). Other types of user
agent include the indexing software used by search providers (web
URI beginning with the HTTP scheme and the
WWW domain name label.
Hypertext Transfer Protocol
8
crawlers), voice browsers, mobile apps and other software that accesses, consumes or displays web content.
HTTP is designed to permit intermediate network elements to improve or enable communications between clients
and servers. High-traffic websites often benefit from web cache servers that deliver content on behalf of upstream
servers to improve response time. Web browsers cache previously accessed web resources and reuse them when
possible to reduce network traffic. HTTP proxy servers at private network boundaries can facilitate communication
for clients without a globally routable address, by relaying messages with external servers.
HTTP is an application layer protocol designed within the framework of the Internet Protocol Suite. Its definition
presumes an underlying and reliable transport layer protocol,[1] and Transmission Control Protocol (TCP) is
commonly used. However HTTP can use unreliable protocols such as the User Datagram Protocol (UDP), for
example in Simple Service Discovery Protocol (SSDP).
HTTP resources are identified and located on the network by Uniform Resource Identifiers (URIs)—or, more
specifically, Uniform Resource Locators (URLs)—using the http or https URI schemes. URIs and hyperlinks
in Hypertext Markup Language (HTML) documents form webs of inter-linked hypertext documents. On the Internet
the World Wide Web was established in 1990 by English computer scientist and innovator Tim Berners-Lee.
HTTP/1.1 is a revision of the original HTTP (HTTP/1.0). In HTTP/1.0 a separate connection to the same server is
made for every resource request. HTTP/1.1 can reuse a connection multiple times to download images, scripts,
stylesheets et cetera after the page has been delivered. HTTP/1.1 communications therefore experience less latency
as the establishment of TCP connections presents considerable overhead.
History
The term HyperText was coined by Ted Nelson who in turn was
inspired by Vannevar Bush's microfilm-based "memex". Tim
Berners-Lee first proposed the "WorldWideWeb" project — now
known as the World Wide Web. Berners-Lee and his team are
credited with inventing the original HTTP along with HTML and the
associated technology for a web server and a text-based web
browser. The first version of the protocol had only one method,
namely GET, which would request a page from a server.[2] The
response from the server was always an HTML page.[3]
Tim Berners-Lee
The first documented version of HTTP was HTTP V0.9 [4] (1991).
Dave Raggett led the HTTP Working Group (HTTP WG) in 1995 and wanted to expand the protocol with extended
operations, extended negotiation, richer meta-information, tied with a security protocol which became more efficient
by adding additional methods and header fields.[][5] RFC 1945 officially introduced and recognized HTTP V1.0 in
1996.
The HTTP WG planned to publish new standards in December 1995[6] and the support for pre-standard HTTP/1.1
based on the then developing RFC 2068 (called HTTP-NG) was rapidly adopted by the major browser developers in
early 1996. By March 1996, pre-standard HTTP/1.1 was supported in Arena,[] Netscape 2.0,[] Netscape Navigator
Gold 2.01,[] Mosaic 2.7,[citation needed] Lynx 2.5[citation needed], and in Internet Explorer 2.0[citation needed]. End-user
adoption of the new browsers was rapid. In March 1996, one web hosting company reported that over 40% of
browsers in use on the Internet were HTTP 1.1 compliant.[citation needed] That same web hosting company reported
that by June 1996, 65% of all browsers accessing their servers were HTTP/1.1 compliant.[7] The HTTP/1.1 standard
as defined in RFC 2068 was officially released in January 1997. Improvements and updates to the HTTP/1.1
standard were released under RFC 2616 in June 1999.
Hypertext Transfer Protocol
HTTP session
An HTTP session is a sequence of network request-response transactions. An HTTP client initiates a request by
establishing a Transmission Control Protocol (TCP) connection to a particular port on a server (typically port 80; see
List of TCP and UDP port numbers). An HTTP server listening on that port waits for a client's request message.
Upon receiving the request, the server sends back a status line, such as "HTTP/1.1 200 OK", and a message of its
own. The body of this message is typically the requested resource, although an error message or other information
may also be returned.[]
Request methods
HTTP defines methods (sometimes referred to as verbs) to indicate the
desired action to be performed on the identified resource. What this
resource represents, whether pre-existing data or data that is generated
dynamically, depends on the implementation of the server. Often, the
resource corresponds to a file or the output of an executable residing
on the server.
The HTTP/1.0 specification[]:section 8 defined the GET, POST and
HEAD methods and the HTTP/1.1 specification[]:section 9 added 5 new
An HTTP request made using telnet. The request,
methods: OPTIONS, PUT, DELETE, TRACE and CONNECT. By
response headers and response body are
being specified in these documents their semantics are well known and
highlighted.
can be depended upon. Any client can use any method and the server
can be configured to support any combination of methods. If a method
is unknown to an intermediate it will be treated as an unsafe and non-idempotent method. There is no limit to the
number of methods that can be defined and this allows for future methods to be specified without breaking existing
infrastructure. For example WebDAV defined 7 new methods and RFC5789 specified the PATCH method.
GET
Requests a representation of the specified resource. Requests using GET should only retrieve data and should
have no other effect. (This is also true of some other HTTP methods.)[] The W3C has published guidance
principles on this distinction, saying, "Web application design should be informed by the above principles, but
also by the relevant limitations."[8] See safe methods below.
HEAD
Asks for the response identical to the one that would correspond to a GET request, but without the response
body. This is useful for retrieving meta-information written in response headers, without having to transport
the entire content.
POST
Requests that the server accept the entity enclosed in the request as a new subordinate of the web resource
identified by the URI. The data POSTed might be, as examples, an annotation for existing resources; a
message for a bulletin board, newsgroup, mailing list, or comment thread; a block of data that is the result of
submitting a web form to a data-handling process; or an item to add to a database.[]
PUT
Requests that the enclosed entity be stored under the supplied URI. If the URI refers to an already existing
resource, it is modified; if the URI does not point to an existing resource, then the server can create the
resource with that URI.[]
DELETE
9
Hypertext Transfer Protocol
Deletes the specified resource.
TRACE
Echoes back the received request so that a client can see what (if any) changes or additions have been made by
intermediate servers.
OPTIONS
Returns the HTTP methods that the server supports for specified URL. This can be used to check the
functionality of a web server by requesting '*' instead of a specific resource.
CONNECT
Converts the request connection to a transparent TCP/IP tunnel, usually to facilitate SSL-encrypted
communication (HTTPS) through an unencrypted HTTP proxy.[9]
PATCH
Is used to apply partial modifications to a resource.[]
HTTP servers are required to implement at least the GET and HEAD methods[10] and, whenever possible, also the
OPTIONS method.[citation needed]
Safe methods
Some methods (for example, HEAD, GET, OPTIONS and TRACE) are defined as safe, which means they are
intended only for information retrieval and should not change the state of the server. In other words, they should not
have side effects, beyond relatively harmless effects such as logging, caching, the serving of banner advertisements
or incrementing a web counter. Making arbitrary GET requests without regard to the context of the application's state
should therefore be considered safe.
By contrast, methods such as POST, PUT and DELETE are intended for actions that may cause side effects either on
the server, or external side effects such as financial transactions or transmission of email. Such methods are therefore
not usually used by conforming web robots or web crawlers; some that do not conform tend to make requests
without regard to context or consequences.
Despite the prescribed safety of GET requests, in practice their handling by the server is not technically limited in
any way. Therefore, careless or deliberate programming can cause non-trivial changes on the server. This is
discouraged, because it can cause problems for Web caching, search engines and other automated agents, which can
make unintended changes on the server.
Idempotent methods and web applications
Methods PUT and DELETE are defined to be idempotent, meaning that multiple identical requests should have the
same effect as a single request (Note that idempotence refers to the state of the system after the request has
completed, so while the action the server takes (e.g. deleting a record) or the response code it returns may be
different on subsequent requests, the system state will be the same every time). Methods GET, HEAD, OPTIONS
and TRACE, being prescribed as safe, should also be idempotent, as HTTP is a stateless protocol.[]
In contrast, the POST method is not necessarily idempotent, and therefore sending an identical POST request
multiple times may further affect state or cause further side effects (such as financial transactions). In some cases this
may be desirable, but in other cases this could be due to an accident, such as when a user does not realize that their
action will result in sending another request, or they did not receive adequate feedback that their first request was
successful. While web browsers may show alert dialog boxes to warn users in some cases where reloading a page
may re-submit a POST request, it is generally up to the web application to handle cases where a POST request
should not be submitted more than once.
10
Hypertext Transfer Protocol
Note that whether a method is idempotent is not enforced by the protocol or web server. It is perfectly possible to
write a web application in which (for example) a database insert or other non-idempotent action is triggered by a
GET or other request. Ignoring this recommendation, however, may result in undesirable consequences, if a user
agent assumes that repeating the same request is safe when it isn't.
Security
Implementing methods such as TRACE, TRACK and DEBUG is considered potentially insecure by some security
professionals because attackers can use them to gather information or bypass security controls during attacks.
Security software tools such as Tenable Nessus and Microsoft UrlScan Security Tool report on the presence of these
methods as being security issues.[11]
Status codes
In HTTP/1.0 and since, the first line of the HTTP response is called the status line and includes a numeric status
code (such as "404") and a textual reason phrase (such as "Not Found"). The way the user agent handles the
response primarily depends on the code and secondarily on the response headers. Custom status codes can be used
since, if the user agent encounters a code it does not recognize, it can use the first digit of the code to determine the
general class of the response.[12]
Also, the standard reason phrases are only recommendations and can be replaced with "local equivalents" at the web
developer's discretion. If the status code indicated a problem, the user agent might display the reason phrase to the
user to provide further information about the nature of the problem. The standard also allows the user agent to
attempt to interpret the reason phrase, though this might be unwise since the standard explicitly specifies that status
codes are machine-readable and reason phrases are human-readable.
Persistent connections
In HTTP/0.9 and 1.0, the connection is closed after a single request/response pair. In HTTP/1.1 a
keep-alive-mechanism was introduced, where a connection could be reused for more than one request. Such
persistent connections reduce request latency perceptibly, because the client does not need to re-negotiate the TCP
connection after the first request has been sent. Another positive side effect is that in general the connection becomes
faster with time due to TCP's slow-start-mechanism.
Version 1.1 of the protocol also made bandwidth optimization improvements to HTTP/1.0. For example, HTTP/1.1
introduced chunked transfer encoding to allow content on persistent connections to be streamed rather than buffered.
HTTP pipelining further reduces lag time, allowing clients to send multiple requests before waiting for each
response. Another improvement to the protocol was byte serving, where a server transmits just the portion of a
resource explicitly requested by a client.
HTTP session state
HTTP is a stateless protocol. A stateless protocol does not require the HTTP server to retain information or status
about each user for the duration of multiple requests. However, some web applications implement states or server
side sessions using one or more of the following methods:
• HTTP cookies.
• Query string parameters, for example, /index.php?session_id=some_unique_session_code.
• Hidden variables within web forms.
11
Hypertext Transfer Protocol
Secure HTTP
There are three methods of establishing a secure HTTP connection: HTTP Secure, Secure Hypertext Transfer
Protocol and the HTTP/1.1 Upgrade header. Browser support for the latter two is, however, nearly
non-existent,[citation needed] so HTTP Secure is the dominant method of establishing a secure HTTP connection.
Request message
The request message consists of the following:
• A request line, for example GET /images/logo.png HTTP/1.1, which requests a resource called
/images/logo.png from the server.
• Headers, such as Accept-Language: en
• An empty line.
• An optional message body.
The request line and headers must all end with <CR><LF> (that is, a carriage return character followed by a line
feed character). The empty line must consist of only <CR><LF> and no other whitespace.[] In the HTTP/1.1
protocol, all headers except Host are optional.
A request line containing only the path name is accepted by servers to maintain compatibility with HTTP clients
before the HTTP/1.0 specification in RFC 1945.[13]
Response message
The response message consists of the following:
•
•
•
•
A Status-Line (for example HTTP/1.1 200 OK, which indicates that the client's request succeeded)
Headers, such as Content-Type: text/html
An empty line
An optional message body
The Status-Line and headers must all end with <CR><LF> (a carriage return followed by a line feed). The empty
line must consist of only <CR><LF> and no other whitespace.[]
Example session
Below is a sample conversation between an HTTP client and an HTTP server running on www.example.com, port
80.
Client request
GET /index.html HTTP/1.1
Host: www.example.com
A client request (consisting in this case of the request line and only one header) is followed by a blank line, so that
the request ends with a double newline, each in the form of a carriage return followed by a line feed. The "Host"
header distinguishes between various DNS names sharing a single IP address, allowing name-based virtual hosting.
While optional in HTTP/1.0, it is mandatory in HTTP/1.1.
12
Hypertext Transfer Protocol
Server response
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Etag: "3f80f-1b6-3e1cb03b"
Content-Type: text/html; charset=UTF-8
Content-Length: 131
Connection: close
<html>
<head>
<title>An Example Page</title>
</head>
</body>
Hello World, this is a very simple HTML document.
</body>
</html>
The ETag (entity tag) header is used to determine if a cached version of the requested resource is identical to the
current version of the resource on the server. Content-Type specifies the Internet media type of the data conveyed by
the HTTP message, while Content-Length indicates its length in bytes. The HTTP/1.1 webserver publishes its ability
to respond to requests for certain byte ranges of the document by setting the header Accept-Ranges: bytes. This is
useful, if the client needs to have only certain portions[14] of a resource sent by the server, which is called byte
serving. When Connection: close is sent in a header, it means that the web server will close the TCP connection
immediately after the transfer of this response.
Most of the header lines are optional. When Content-Length is missing the length is determined in other ways.
Chunked transfer encoding uses a chunk size of 0 to mark the end of the content. Identity encoding without
Content-Length reads content until the socket is closed.
A Content-Encoding like gzip can be used to compress the transmitted data.
Notes
[1] Fielding, et al. Internet RFC 2616." (http:/ / www. w3. org/ Protocols/ rfc2616/ rfc2616-sec1. html#sec1. 4), section 1.4. Retrieved on January
21, 2009.
[4] http:/ / www. w3. org/ pub/ WWW/ Protocols/ HTTP/ AsImplemented. html
[13] 090502 apacheweek.com
[14] Tools.ietf.org (http:/ / tools. ietf. org/ html/ draft-ietf-http-range-retrieval-00), Byte Range Retrieval Extension to HTTP
References
• HTTP 0.9 - As Implemented in 1991 (http://www.w3.org/Protocols/HTTP/AsImplemented.html)
13
Hypertext Transfer Protocol
External links
• "Change History for HTTP" (http://www.w3.org/Protocols/History.html). W3.org. Retrieved 2010-08-01. A
detailed technical history of HTTP.
• "Design Issues for HTTP" (http://www.w3.org/Protocols/DesignIssues.html). W3.org. Retrieved 2010-08-01.
Design Issues by Berners-Lee when he was designing the protocol.
• "Classic HTTP Documents" (http://www.w3.org/Protocols/Classic.html). W3.org. 1998-05-14. Retrieved
2010-08-01. list of other classic documents recounting the early protocol history
14
World Wide Web
15
World Wide Web
World Wide Web
The Web's logo designed by Robert Cailliau
[]
Inventor
Tim Berners-Lee
Robert Cailliau
Company
CERN
Availability
Worldwide
Internet
An Opte Project visualization of routing paths through a portion of the Internet.
Internet portal
The World Wide Web (abbreviated as WWW or W3,[1] commonly known as the Web), is a system of interlinked
hypertext documents accessed via the Internet. With a web browser, one can view web pages that may contain text,
images, videos, and other multimedia, and navigate between them via hyperlinks.
Using concepts from his earlier hypertext systems like ENQUIRE, British engineer, computer scientist and at that
time employee of CERN, Sir Tim Berners-Lee, now Director of the World Wide Web Consortium (W3C), wrote a
proposal in March 1989 for what would eventually become the World Wide Web.[] At CERN, a European research
organisation near Geneva situated on Swiss and French soil,[2] Berners-Lee and Belgian computer scientist Robert
Cailliau proposed in 1990 to use hypertext "to link and access information of various kinds as a web of nodes in
which the user can browse at will",[3] and they publicly introduced the project in December of the same year.[4]
World Wide Web
16
History
In the May 1970 issue of Popular Science magazine, Arthur C. Clarke
predicted that satellites would someday "bring the accumulated
knowledge of the world to your fingertips" using a console that would
combine the functionality of the photocopier, telephone, television and
a small computer, allowing data transfer and video conferencing
around the globe.[5]
In March 1989, Tim Berners-Lee wrote a proposal that referenced
ENQUIRE, a database and software project he had built in 1980, and
described a more elaborate information management system.[6]
The NeXT Computer used by Berners-Lee. The
handwritten label declares, "This machine is a
server. DO NOT POWER IT DOWN!!"
With help from Robert Cailliau, he published a more formal proposal
(on 12 November 1990) to build a "Hypertext project" called
"WorldWideWeb" (one word, also "W3") as a "web" of "hypertext
documents" to be viewed by "browsers" using a client–server architecture.[3] This proposal estimated that a
read-only web would be developed within three months and that it would take six months to achieve "the creation of
new links and new material by readers, [so that] authorship becomes universal" as well as "the automatic notification
of a reader when new material of interest to him/her has become available." While the read-only goal was met,
accessible authorship of web content took longer to mature, with the wiki concept, blogs, Web 2.0 and RSS/Atom.[7]
The proposal was modeled after the Dynatext SGML reader by Electronic Book Technology, a spin-off from the
Institute for Research in Information and Scholarship at Brown University. The Dynatext system, licensed by CERN,
was technically advanced and was a key player in the extension of SGML ISO 8879:1986 to Hypermedia within
HyTime, but it was considered too expensive and had an inappropriate licensing policy for use in the general high
energy physics community, namely a fee for each document and each document alteration.
A NeXT Computer was used by Berners-Lee as the world's first web
server and also to write the first web browser, WorldWideWeb, in
1990. By Christmas 1990, Berners-Lee had built all the tools necessary
for a working Web:[8] the first web browser (which was a web editor as
well); the first web server; and the first web pages,[9] which described
the project itself. On 6 August 1991, he posted a short summary of the
World Wide Web project on the alt.hypertext newsgroup.[10]
This date also marked the debut of the Web as a publicly available
The CERN datacenter in 2010 housing some
service on the Internet. Many newsmedia have reported that the first
WWW servers
photo on the web was uploaded by Berners-Lee in 1992, an image of
the CERN house band Les Horribles Cernettes taken by Silvano de
Gennaro; Gennaro has disclaimed this story, writing that media were "totally distorting our words for the sake of
cheap sensationalism."[11] The first server outside Europe was set up at the Stanford Linear Accelerator Center
(SLAC) in Palo Alto, California, to host the SPIRES-HEP database. Accounts differ substantially as to the date of
this event. The World Wide Web Consortium says December 1992,[12] whereas SLAC itself claims 1991.[13][14] This
is supported by a W3C document titled A Little History of the World Wide Web.[15]
The crucial underlying concept of hypertext originated with older projects from the 1960s, such as the Hypertext
Editing System (HES) at Brown University, Ted Nelson's Project Xanadu, and Douglas Engelbart's oN-Line System
(NLS). Both Nelson and Engelbart were in turn inspired by Vannevar Bush's microfilm-based "memex", which was
described in the 1945 essay "As We May Think".[]
Berners-Lee's breakthrough was to marry hypertext to the Internet. In his book Weaving The Web, he explains that he
had repeatedly suggested that a marriage between the two technologies was possible to members of both technical
World Wide Web
communities, but when no one took up his invitation, he finally tackled the project himself. In the process, he
developed three essential technologies:
1. a system of globally unique identifiers for resources on the Web and elsewhere, the universal document identifier
(UDI), later known as uniform resource locator (URL) and uniform resource identifier (URI);
2. the publishing language HyperText Markup Language (HTML);
3. the Hypertext Transfer Protocol (HTTP).[16]
The World Wide Web had a number of differences from other hypertext systems that were then available. The Web
required only unidirectional links rather than bidirectional ones. This made it possible for someone to link to another
resource without action by the owner of that resource. It also significantly reduced the difficulty of implementing
web servers and browsers (in comparison to earlier systems), but in turn presented the chronic problem of link rot.
Unlike predecessors such as HyperCard, the World Wide Web was non-proprietary, making it possible to develop
servers and clients independently and to add extensions without licensing restrictions. On 30 April 1993, CERN
announced that the World Wide Web would be free to anyone, with no fees due.[17] Coming two months after the
announcement that the server implementation of the Gopher protocol was no longer free to use, this produced a rapid
shift away from Gopher and towards the Web. An early popular web browser was ViolaWWW for Unix and the X
Windowing System.
Scholars generally agree that a turning point for the World Wide Web
began with the introduction[18] of the Mosaic web browser[19] in 1993,
a graphical browser developed by a team at the National Center for
Supercomputing Applications at the University of Illinois at
Urbana-Champaign (NCSA-UIUC), led by Marc Andreessen. Funding
for Mosaic came from the U.S. High-Performance Computing and
Communications Initiative and the High Performance Computing and
Communication Act of 1991, one of several computing developments
initiated by U.S. Senator Al Gore.[20] Prior to the release of Mosaic,
Robert Cailliau, Jean-François Abramatic of
graphics were not commonly mixed with text in web pages and the
IBM, and Tim Berners-Lee at the 10th
Web's popularity was less than older protocols in use over the Internet,
anniversary of the World Wide Web Consortium.
such as Gopher and Wide Area Information Servers (WAIS). Mosaic's
graphical user interface allowed the Web to become, by far, the most popular Internet protocol.
The World Wide Web Consortium (W3C) was founded by Tim Berners-Lee after he left the European Organization
for Nuclear Research (CERN) in October 1994. It was founded at the Massachusetts Institute of Technology
Laboratory for Computer Science (MIT/LCS) with support from the Defense Advanced Research Projects Agency
(DARPA), which had pioneered the Internet; a year later, a second site was founded at INRIA (a French national
computer research lab) with support from the European Commission DG InfSo; and in 1996, a third continental site
was created in Japan at Keio University. By the end of 1994, while the total number of websites was still minute
compared to present standards, quite a number of notable websites were already active, many of which are the
precursors or inspiration for today's most popular services.
Connected by the existing Internet, other websites were created around the world, adding international standards for
domain names and HTML. Since then, Berners-Lee has played an active role in guiding the development of web
standards (such as the markup languages in which web pages are composed), and in recent years has advocated his
vision of a Semantic Web. The World Wide Web enabled the spread of information over the Internet through an
easy-to-use and flexible format. It thus played an important role in popularizing use of the Internet.[21] Although the
two terms are sometimes conflated in popular use, World Wide Web is not synonymous with Internet.[22] The Web is
a collection of documents and both client and server software using Internet protocols such as TCP/IP and HTTP.
Tim Berners-Lee was knighted in 2004 by Queen Elizabeth II for his contribution to the World Wide Web.
17
World Wide Web
Function
The terms Internet and World Wide Web are often used in everyday speech without much distinction. However, the
Internet and the World Wide Web are not the same. The Internet is a global system of interconnected computer
networks. In contrast, the Web is one of the services that runs on the Internet. It is a collection of text documents and
other resources, linked by hyperlinks and URLs, usually accessed by web browsers from web servers. In short, the
Web can be thought of as an application "running" on the Internet.[23]
Viewing a web page on the World Wide Web normally begins either by typing the URL of the page into a web
browser or by following a hyperlink to that page or resource. The web browser then initiates a series of
communication messages, behind the scenes, in order to fetch and display it. As an example, consider accessing a
page with the URL http://example.org/wiki/World_Wide_Web.
First, the browser resolves the server-name portion of the URL (example.org) into an Internet Protocol address using
the globally distributed database known as the Domain Name System (DNS); this lookup returns an IP address such
as 208.80.152.2. The browser then requests the resource by sending an HTTP request across the Internet to the
computer at that particular address. It makes the request to a particular application port in the underlying Internet
Protocol Suite so that the computer receiving the request can distinguish an HTTP request from other network
protocols it may be servicing such as e-mail delivery; the HTTP protocol normally uses port 80. The content of the
HTTP request can be as simple as the two lines of text
GET /wiki/World_Wide_Web HTTP/1.1
Host: example.org
The computer receiving the HTTP request delivers it to web server software listening for requests on port 80. If the
web server can fulfill the request it sends an HTTP response back to the browser indicating success, which can be as
simple as
HTTP/1.0 200 OK
Content-Type: text/html; charset=UTF-8
followed by the content of the requested page. The Hypertext Markup Language for a basic web page looks like
<html>
<head>
<title>Example.org – The World Wide Web</title>
</head>
<body>
<p>The World Wide Web, abbreviated as WWW and commonly known ...</p>
</body>
</html>
The web browser parses the HTML, interpreting the markup (<title>, <p> for paragraph, and such) that
surrounds the words in order to draw the text on the screen.
Many web pages use HTML to reference the URLs of other resources such as images, other embedded media, scripts
that affect page behavior, and Cascading Style Sheets that affect page layout. The browser will make additional
HTTP requests to the web server for these other Internet media types. As it receives their content from the web
server, the browser progressively renders the page onto the screen as specified by its HTML and these additional
resources.
18
World Wide Web
Linking
Most web pages contain hyperlinks to other related pages and perhaps to downloadable files, source documents,
definitions and other web resources. In the underlying HTML, a hyperlink looks like
<a href="http://example.org/wiki/Main_Page">Example.org, a free encyclopedia</a>
Such a collection of useful, related resources, interconnected via
hypertext links is dubbed a web of information. Publication on the
Internet created what Tim Berners-Lee first called the WorldWideWeb
(in its original CamelCase, which was subsequently discarded) in
November 1990.[3]
The hyperlink structure of the WWW is described by the webgraph:
the nodes of the webgraph correspond to the web pages (or URLs) the
directed edges between them to the hyperlinks.
Graphic representation of a minute fraction of the
Over time, many web resources pointed to by hyperlinks disappear,
WWW, demonstrating hyperlinks
relocate, or are replaced with different content. This makes hyperlinks
obsolete, a phenomenon referred to in some circles as link rot and the
hyperlinks affected by it are often called dead links. The ephemeral nature of the Web has prompted many efforts to
archive web sites. The Internet Archive, active since 1996, is the best known of such efforts.
Dynamic updates of web pages
JavaScript is a scripting language that was initially developed in 1995 by Brendan Eich, then of Netscape, for use
within web pages.[] The standardised version is ECMAScript.[] To make web pages more interactive, some web
applications also use JavaScript techniques such as Ajax (asynchronous JavaScript and XML). Client-side script is
delivered with the page that can make additional HTTP requests to the server, either in response to user actions such
as mouse movements or clicks, or based on lapsed time. The server's responses are used to modify the current page
rather than creating a new page with each response, so the server needs only to provide limited, incremental
information. Multiple Ajax requests can be handled at the same time, and users can interact with the page while data
is being retrieved. Web pages may also regularly poll the server to check whether new information is available.[24]
WWW prefix
Many domain names used for the World Wide Web begin with www because of the long-standing practice of naming
Internet hosts (servers) according to the services they provide. The hostname for a web server is often www, in the
same way that it may be ftp for an FTP server, and news or nntp for a USENET news server. These host names
appear as Domain Name System or [domain name server](DNS) subdomain names, as in www.example.com. The
use of 'www' as a subdomain name is not required by any technical or policy standard and many web sites do not use
it; indeed, the first ever web server was called nxoc01.cern.ch.[25] According to Paolo Palazzi,[26] who worked
at CERN along with Tim Berners-Lee, the popular use of 'www' subdomain was accidental; the World Wide Web
project page was intended to be published at www.cern.ch while info.cern.ch was intended to be the CERN home
page, however the dns records were never switched, and the practice of prepending 'www' to an institution's website
domain name was subsequently copied. Many established websites still use 'www', or they invent other subdomain
names such as 'www2', 'secure', etc. Many such web servers are set up so that both the domain root (e.g.,
example.com) and the www subdomain (e.g., www.example.com) refer to the same site; others require one form or
the other, or they may map to different web sites.
The use of a subdomain name is useful for load balancing incoming web traffic by creating a CNAME record that
points to a cluster of web servers. Since, currently, only a subdomain can be used in a CNAME, the same result
19
World Wide Web
cannot be achieved by using the bare domain root.
When a user submits an incomplete domain name to a web browser in its address bar input field, some web browsers
automatically try adding the prefix "www" to the beginning of it and possibly ".com", ".org" and ".net" at the end,
depending on what might be missing. For example, entering 'microsoft' may be transformed to
http://www.microsoft.com/ and 'openoffice' to http://www.openoffice.org. This feature started appearing in early
versions of Mozilla Firefox, when it still had the working title 'Firebird' in early 2003, from an earlier practice in
browsers such as Lynx.[27] It is reported that Microsoft was granted a US patent for the same idea in 2008, but only
for mobile devices.[28]
In English, www is usually read as double-u double-u double-u. Some users pronounce it dub-dub-dub, particularly
in New Zealand. Stephen Fry, in his "Podgrammes" series of podcasts, pronouncing it wuh wuh wuh. The English
writer Douglas Adams once quipped in The Independent on Sunday (1999): "The World Wide Web is the only thing
I know of whose shortened form takes three times longer to say than what it's short for". In Mandarin Chinese, World
Wide Web is commonly translated via a phono-semantic matching to wàn wéi wǎng (万 维 网), which satisfies
www and literally means "myriad dimensional net",[29] a translation that very appropriately reflects the design
concept and proliferation of the World Wide Web. Tim Berners-Lee's web-space states that World Wide Web is
officially spelled as three separate words, each capitalised, with no intervening hyphens.[30]
Use of the www prefix is declining as Web 2.0 web applications seek to brand their domain names and make them
easily pronounceable.[31] As the mobile web grows in popularity, services like Gmail.com, MySpace.com,
Facebook.com, Bebo.com and Twitter.com are most often discussed without adding www to the domain (or, indeed,
the .com).
Scheme specifiers: http and https
The scheme specifier http:// or https:// at the start of a Web URI refers to Hypertext Transfer Protocol or HTTP
Secure respectively. Unlike www, which has no specific purpose, these specify the communication protocol to be
used for the request and response. The HTTP protocol is fundamental to the operation of the World Wide Web and
the added encryption layer in HTTPS is essential when confidential information such as passwords or banking
information are to be exchanged over the public Internet. Web browsers usually prepend http:// to addresses too, if
omitted.
Web servers
The primary function of a web server is to deliver web pages on the request to clients. This means delivery of HTML
documents and any additional content that may be included by a document, such as images, style sheets and scripts.
Privacy
Every time a web page is requested from a web server the server can identify, and usually it logs, the IP address from
which the request arrived. Equally, unless set not to do so, most web browsers record the web pages that have been
requested and viewed in a history feature, and usually cache much of the content locally. Unless HTTPS encryption
is used, web requests and responses travel in plain text across the internet and they can be viewed, recorded and
cached by intermediate systems.
When a web page asks for, and the user supplies, personally identifiable information such as their real name,
address, e-mail address, etc., then a connection can be made between the current web traffic and that individual. If
the website uses HTTP cookies, username and password authentication, or other tracking techniques, then it will be
able to relate other web visits, before and after, to the identifiable information provided. In this way it is possible for
a web-based organisation to develop and build a profile of the individual people who use its site or sites. It may be
able to build a record for an individual that includes information about their leisure activities, their shopping
20
World Wide Web
interests, their profession, and other aspects of their demographic profile. These profiles are obviously of potential
interest to marketeers, advertisers and others. Depending on the website's terms and conditions and the local laws
that apply information from these profiles may be sold, shared, or passed to other organisations without the user
being informed. For many ordinary people, this means little more than some unexpected e-mails in their in-box, or
some uncannily relevant advertising on a future web page. For others, it can mean that time spent indulging an
unusual interest can result in a deluge of further targeted marketing that may be unwelcome. Law enforcement,
counter terrorism and espionage agencies can also identify, target and track individuals based on what appear to be
their interests or proclivities on the web.
Social networking sites make a point of trying to get the user to truthfully expose their real names, interests and
locations. This makes the social networking experience more realistic and therefore engaging for all their users. On
the other hand, photographs uploaded and unguarded statements made will be identified to the individual, who may
regret some decisions to publish these data. Employers, schools, parents and other relatives may be influenced by
aspects of social networking profiles that the posting individual did not intend for these audiences. On-line bullies
may make use of personal information to harass or stalk users. Modern social networking websites allow fine
grained control of the privacy settings for each individual posting, but these can be complex and not easy to find or
use, especially for beginners.[32]
Photographs and videos posted onto websites have caused particular problems, as they can add a person's face to an
on-line profile. With modern and potential facial recognition technology, it may then be possible to relate that face
with other, previously anonymous, images, events and scenarios that have been imaged elsewhere. Because of image
caching, mirroring and copying, it is difficult to remove an image from the World Wide Web.
Intellectual property
The intellectual property rights for any creative work initially rests with its creator. Web users who want to publish
their work onto the World Wide Web, however, need to be aware of the details of the way they do it. If artwork,
photographs, writings, poems, or technical innovations are published by their creator onto a privately owned web
server, then they may choose the copyright and other conditions freely themselves. This is unusual though; more
commonly work is uploaded to web sites and servers that are owned by other organizations. It depends upon the
terms and conditions of the site or service provider to what extent the original owner automatically signs over rights
to their work by the choice of destination and by the act of uploading.[citation needed]
Many users of the web erroneously assume that everything they may find on line is freely available to them as if it
was in the public domain. This is almost never the case, unless the web site publishing the work clearly states that it
is. On the other hand, content owners are aware of this widespread belief, and expect that sooner or later almost
everything that is published will probably be used in some capacity somewhere without their permission. Many
publishers therefore embed visible or invisible digital watermarks in their media files, sometimes charging users to
receive unmarked copies for legitimate use. Digital rights management includes forms of access control technology
that further limit the use of digital content even after it has been bought or downloaded.[citation needed]
Security
The Web has become criminals' preferred pathway for spreading malware. Cybercrime carried out on the Web can
include identity theft, fraud, espionage and intelligence gathering.[] Web-based vulnerabilities now outnumber
traditional computer security concerns,[33][34] and as measured by Google, about one in ten web pages may contain
malicious code.[35] Most Web-based attacks take place on legitimate websites, and most, as measured by Sophos, are
hosted in the United States, China and Russia.[] The most common of all malware threats is SQL injection attacks
against websites.[36] Through HTML and URIs the Web was vulnerable to attacks like cross-site scripting (XSS) that
came with the introduction of JavaScript[] and were exacerbated to some degree by Web 2.0 and Ajax web design
that favors the use of scripts.[37] Today by one estimate, 70% of all websites are open to XSS attacks on their
21
World Wide Web
users.[38]
Proposed solutions vary to extremes. Large security vendors like McAfee already design governance and compliance
suites to meet post-9/11 regulations,[39] and some, like Finjan have recommended active real-time inspection of code
and all content regardless of its source.[] Some have argued that for enterprise to see security as a business
opportunity rather than a cost center,[40] "ubiquitous, always-on digital rights management" enforced in the
infrastructure by a handful of organizations must replace the hundreds of companies that today secure data and
networks.[41] Jonathan Zittrain has said users sharing responsibility for computing safety is far preferable to locking
down the Internet.[42]
Standards
Many formal standards and other technical specifications and software define the operation of different aspects of the
World Wide Web, the Internet, and computer information exchange. Many of the documents are the work of the
World Wide Web Consortium (W3C), headed by Berners-Lee, but some are produced by the Internet Engineering
Task Force (IETF) and other organizations.
Usually, when web standards are discussed, the following publications are seen as foundational:
• Recommendations for markup languages, especially HTML and XHTML, from the W3C. These define the
structure and interpretation of hypertext documents.
• Recommendations for stylesheets, especially CSS, from the W3C.
• Standards for ECMAScript (usually in the form of JavaScript), from Ecma International.
• Recommendations for the Document Object Model, from W3C.
Additional publications provide definitions of other essential technologies for the World Wide Web, including, but
not limited to, the following:
• Uniform Resource Identifier (URI), which is a universal system for referencing resources on the Internet, such as
hypertext documents and images. URIs, often called URLs, are defined by the IETF's RFC 3986 / STD 66:
Uniform Resource Identifier (URI): Generic Syntax, as well as its predecessors and numerous URI
scheme-defining RFCs;
• HyperText Transfer Protocol (HTTP), especially as defined by RFC 2616: HTTP/1.1 and RFC 2617: HTTP
Authentication, which specify how the browser and server authenticate each other.
Accessibility
There are methods available for accessing the web in alternative mediums and formats, so as to enable use by
individuals with disabilities. These disabilities may be visual, auditory, physical, speech related, cognitive,
neurological, or some combination therin. Accessibility features also help others with temporary disabilities like a
broken arm or the aging population as their abilities change.[] The Web is used for receiving information as well as
providing information and interacting with society. The World Wide Web Consortium claims it essential that the
Web be accessible in order to provide equal access and equal opportunity to people with disabilities.[43] Tim
Berners-Lee once noted, "The power of the Web is in its universality. Access by everyone regardless of disability is
an essential aspect."[] Many countries regulate web accessibility as a requirement for websites.[44] International
cooperation in the W3C Web Accessibility Initiative led to simple guidelines that web content authors as well as
software developers can use to make the Web accessible to persons who may or may not be using assistive
technology.[][45]
22
World Wide Web
Internationalization
The W3C Internationalization Activity assures that web technology will work in all languages, scripts, and
cultures.[46] Beginning in 2004 or 2005, Unicode gained ground and eventually in December 2007 surpassed both
ASCII and Western European as the Web's most frequently used character encoding.[47] Originally RFC 3986
allowed resources to be identified by URI in a subset of US-ASCII. RFC 3987 allows more characters—any
character in the Universal Character Set—and now a resource can be identified by IRI in any language.[48]
Statistics
Between 2005 and 2010, the number of Web users doubled, and was expected to surpass two billion in 2010.[49]
Early studies in 1998 and 1999 estimating the size of the web using capture/recapture methods showed that much of
the web was not indexed by search engines and the web was much larger than expected.[50][51] According to a 2001
study, there were a massive number, over 550 billion, of documents on the Web, mostly in the invisible Web, or
Deep Web.[52] A 2002 survey of 2,024 million Web pages[53] determined that by far the most Web content was in
the English language: 56.4%; next were pages in German (7.7%), French (5.6%), and Japanese (4.9%). A more
recent study, which used Web searches in 75 different languages to sample the Web, determined that there were over
11.5 billion Web pages in the publicly indexable Web as of the end of January 2005.[54] As of March 2009[55], the
indexable web contains at least 25.21 billion pages.[56] On 25 July 2008, Google software engineers Jesse Alpert and
Nissan Hajaj announced that Google Search had discovered one trillion unique URLs.[57] As of May 2009[55], over
109.5 million domains operated.[] Wikipedia:Verifiability Of these 74% were commercial or other sites operating in
the .com generic top-level domain.[]
Statistics measuring a website's popularity are usually based either on the number of page views or on associated
server 'hits' (file requests) that it receives.
Speed issues
Frustration over congestion issues in the Internet infrastructure and the high latency that results in slow browsing has
led to a pejorative name for the World Wide Web: the World Wide Wait.[58] Speeding up the Internet is an ongoing
discussion over the use of peering and QoS technologies. Other solutions to reduce the congestion can be found at
W3C.[59] Guidelines for Web response times are:[60]
• 0.1 second (one tenth of a second). Ideal response time. The user does not sense any interruption.
• 1 second. Highest acceptable response time. Download times above 1 second interrupt the user experience.
• 10 seconds. Unacceptable response time. The user experience is interrupted and the user is likely to leave the site
or system.
Caching
If a user revisits a Web page after only a short interval, the page data may not need to be re-obtained from the source
Web server. Almost all web browsers cache recently obtained data, usually on the local hard drive. HTTP requests
sent by a browser will usually ask only for data that has changed since the last download. If the locally cached data
are still current, they will be reused. Caching helps reduce the amount of Web traffic on the Internet. The decision
about expiration is made independently for each downloaded file, whether image, stylesheet, JavaScript, HTML, or
other web resource. Thus even on sites with highly dynamic content, many of the basic resources need to be
refreshed only occasionally. Web site designers find it worthwhile to collate resources such as CSS data and
JavaScript into a few site-wide files so that they can be cached efficiently. This helps reduce page download times
and lowers demands on the Web server.
There are other components of the Internet that can cache Web content. Corporate and academic firewalls often
cache Web resources requested by one user for the benefit of all. (See also caching proxy server.) Some search
23
World Wide Web
engines also store cached content from websites. Apart from the facilities built into Web servers that can determine
when files have been updated and so need to be re-sent, designers of dynamically generated Web pages can control
the HTTP headers sent back to requesting users, so that transient or sensitive pages are not cached. Internet banking
and news sites frequently use this facility. Data requested with an HTTP 'GET' is likely to be cached if other
conditions are met; data obtained in response to a 'POST' is assumed to depend on the data that was POSTed and so
is not cached.
References
[2] Le Web a été inventé... en France ! – Le Point (http:/ / www. lepoint. fr/ technologie/
le-web-a-ete-invente-en-france-31-01-2012-1425943_58. php)
[3] "
[26] Palazzi, P (2011) 'The Early Days of the WWW at CERN' (http:/ / soft-shake. ch/ 2011/ en/ conference/ sessions. html?key=earlydays)
[37] and AJAX web applications can introduce security vulnerabilities like "client-side security controls, increased attack surfaces, and new
possibilities for Cross-Site Scripting (XSS)", in which cites
[50] S. Lawrence, C.L. Giles, "Searching the World Wide Web," Science, 280(5360), 98–100, 1998.
[51] S. Lawrence, C.L. Giles, "Accessibility of Information on the Web," Nature, 400, 107–109, 1999.
[55] http:/ / en. wikipedia. org/ w/ index. php?title=World_Wide_Web& action=edit
Further reading
• Niels Brügger, ed. Web History (2010) 362 pages; Historical perspective on the World Wide Web, including
issues of culture, content, and preservation.
• Fielding, R.; Gettys, J.; Mogul, J.; Frystyk, H.; Masinter, L.; Leach, P.; Berners-Lee, T. (June 1999). Hypertext
Transfer Protocol – HTTP/1.1 (ftp://ftp.isi.edu/in-notes/rfc2616.txt). Request For Comments 2616.
Information Sciences Institute.Wikipedia:Link rot
• Berners-Lee, Tim; Bray, Tim; Connolly, Dan; Cotton, Paul; Fielding, Roy; Jeckle, Mario; Lilley, Chris;
Mendelsohn, Noah; Orchard, David; Walsh, Norman; Williams, Stuart (15 December 2004). Architecture of the
World Wide Web, Volume One (http://www.w3.org/TR/webarch/). Version 20041215. W3C.
• Polo, Luciano (2003). "World Wide Web Technology Architecture: A Conceptual Analysis" (http://newdevices.
com/publicaciones/www/). New Devices. Retrieved 31 July 2005.
• Skau, H.O. (March 1990). "The World Wide Web and Health Information" (http://newdevices.com/
publicaciones/www/). New Devices. Retrieved 1989.
External links
• Early archive of the first Web site (http://www.w3.org/History/19921103-hypertext/hypertext/WWW/)
• Internet Statistics: Growth and Usage of the Web and the Internet (http://www.mit.edu/people/mkgray/net/)
• Living Internet (http://www.livinginternet.com/w/w.htm) A comprehensive history of the Internet, including
the World Wide Web.
• Web Design and Development (http://www.dmoz.org/Computers/Internet/Web_Design_and_Development/)
at the Open Directory Project
• World Wide Web Consortium (W3C) (http://www.w3.org/)
• W3C Recommendations Reduce "World Wide Wait" (http://www.w3.org/Protocols/NL-PerfNote.html)
• World Wide Web Size (http://www.worldwidewebsize.com/) Daily estimated size of the World Wide Web.
• Antonio A. Casilli, Some Elements for a Sociology of Online Interactions (http://cle.ens-lyon.fr/40528325/0/
fiche___pagelibre/)
• The Erdős Webgraph Server (http://web-graph.org/) offers weekly updated graph representation of a constantly
increasing fraction of the WWW.
Coordinates: 46°13′57″N 6°02′42″E46.23250°N 6.04500°E
24
Uniform resource locator
25
Uniform resource locator
A uniform resource locator, abbreviated URL, also known as web
address, is a specific character string that constitutes a reference to a
resource. In most web browsers, the URL of a web page is displayed
on top inside an address bar. An example of a typical URL would be
"http://en.example.org/wiki/Main_Page". A URL is technically a type
of uniform resource identifier (URI), but in many technical documents
and verbal discussions, URL is often used as a synonym for URI.[1]
History
This Euler diagram shows that a uniform resource
identifier (URI) is either a uniform resource
locator (URL), or a uniform resource name
(URN), or both.
The Uniform Resource Locator was created in 1994[2] by Tim
Berners-Lee and the URI working group of the Internet Engineering
Task Force (IETF) as an outcome of collaboration started at the IETF Living Documents "Birds of a Feather" session
in 1992.[][] The format combines the pre-existing system of domain names (created in 1985) with file path syntax,
where forward slashes are used to separate folder and file names. Conventions already existed where server names
could be prepended to complete file paths, preceded by a double-slash (//).[]
Syntax
Every URL consists of the following: the scheme name (commonly called protocol), followed by a colon, two
slashes,[3] </ref> then, depending on scheme, a server name (exp. ftp., www., smtp., etc.) followed by a dot (.) then a
domain name[4] (alternatively, IP address), a port number, the path of the resource to be fetched or the program to be
run, then, for programs such as Common Gateway Interface (CGI) scripts, a query string,[5][] and an optional
fragment identifier.[]
The syntax is:
scheme://domain:port/path?query_string#fragment_id
• The scheme name defines the namespace, purpose, and the syntax of the remaining part of the URL. Software
will try to process a URL according to its scheme and context. For example, a web browser will usually
dereference the URL http://example.org:80 by performing an HTTP request to the host at
example.org, using port number 80. The URL mailto:[email protected] may start an e-mail
composer with the address [email protected] in the To field.
Other examples of scheme names include https:, gopher:, wais:, ftp:. URLs with https as a scheme (such as
https://example.com/) require that requests and responses will be made over a secure connection to the
website. Some schemes that require authentication allow a username, and perhaps a password too, to be embedded in
the URL, for example ftp://[email protected]. Passwords embedded in this way are not conducive
to secure working, but the full possible syntax is
scheme://username:password@domain:port/path?query_string#fragment_id
• The domain name or IP address gives the destination location for the URL.
The domain google.com, or its IP address 72.14.207.99, is the address of Google's website.
• The domain name portion of a URL is not case sensitive since DNS ignores case:
http://en.example.org/ and HTTP://EN.EXAMPLE.ORG/ both open the same page.
• The port number is optional; if omitted, the default for the scheme is used.
Uniform resource locator
For example, http://vnc.example.com:5800 connects to port 5800 of vnc.example.com, which may
be appropriate for a VNC remote control session. If the port number is omitted for an http: URL, the browser
will connect on port 80, the default HTTP port. The default port for an https: request is 443.
• The path is used to specify and perhaps find the resource requested. It is case-sensitive, though it may be treated
as case-insensitive by some servers, especially those based on Microsoft Windows.
If the server is case sensitive and http://en.example.org/wiki/URL
is correct,
http://en.example.org/WIKI/URL or http://en.example.org/wiki/url will display an
HTTP 404 error page, unless these URLs point to valid resources themselves.
• The query string contains data to be passed to software running on the server. It may contain name/value pairs
separated by ampersands, for example
?first_name=John&last_name=Doe.
• The fragment identifier, if present, specifies a part or a position within the overall resource or document.
When used with HTTP, it usually specifies a section or location within the page, and the browser may scroll to
display that part of the page.
List of allowed URL characters
Unreserved
May be encoded but it is not necessary
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~
Reserved
Have to be encoded sometimes
! * ' ( ) ; : @ & = + $ , / ? % # [ ]
Further details can for example be found in RFC 3986 and http://www.w3.org/Addressing/URL/uri-spec.html .
URLs as locators
A URL is a URI that, in addition to identifying a web resource, provides a means of locating the resource by
describing its "primary access mechanism (e.g., its network location)".[6]
Internet hostnames
On the Internet, a hostname is a domain name assigned to a host computer. This is usually a combination of the
host's local name with its parent domain's name. For example, en.example.org consists of a local hostname (en) and
the domain name example.org. The hostname is translated into an IP address via the local hosts file, or the domain
name system (DNS) resolver. It is possible for a single host computer to have several hostnames; but generally the
operating system of the host prefers to have one hostname that the host uses for itself.
Any domain name can also be a hostname, as long as the restrictions mentioned below are followed. For example,
both "en.example.org" and "example.org" can be hostnames if they both have IP addresses assigned to them. The
domain name "xyz.example.org" may not be a hostname if it does not have an IP address, but "aa.xyz.example.org"
may still be a hostname. All hostnames are domain names, but not all domain names are hostnames.
26
Uniform resource locator
Modern usage
Major computer manufacturers such as Apple have begun to deprecate APIs that take local paths as parameters, in
favour of using URLs.[7] This is because remote and local resources (via the file:// scheme) may both be represented
using a URL, but may additionally provide a protocol (particularly useful for remote items) and credentials.
Notes
[1] RFC 3305 "URI Partitioning: There is some confusion in the web community over the partitioning of URI space, specifically, the relationship
among the concepts of URL, URN, and URI. The confusion owes to the incompatibility between two different views of URI partitioning,
which we call the 'classical' and 'contemporary' views."
[2] RFC 1738 (http:/ / www. ietf. org/ rfc/ rfc1738. txt) Uniform Resource Locators (URL). This RFC is now obselete. It has been superseded by
a newer RFC (see the RFC Index (http:/ / www. rfc-editor. org/ rfc-index. html))
[3] Berners-Lee has said that, given the colon following the URI scheme, the two forward slashes before the domain name were
unnecessary.<ref>
[4] Berners-Lee also later regretted the use of dots to separate the parts of the domain name, wishing he had used slashes throughout. For
example, http://en.example.org/wiki/Main_Page would have been written
UNIQ-nowiki-1-c13ead30cc5c94ec-QINU RFC 1738 (http:/ / www. ietf. org/ rfc/ rfc1738. txt) Uniform Resource Locators (URL).
This RFC is now obselete. It has been superseded by a newer RFC (see the RFC Index (http:/ / www. rfc-editor. org/ rfc-index. html))
[5] RFC 1738
[6] Tim Berners-Lee, Roy T. Fielding, Larry Masinter. (January 2005). " Uniform Resource Identifier (URI): Generic Syntax (http:/ / tools. ietf.
org/ html/ rfc3986)". Internet Society. UNIQ-nowiki-3-c13ead30cc5c94ec-QINU ; STD 66.
References
External links
• RFC 3986 Uniform Resource Identifier (URI): Generic Syntax (http://tools.ietf.org/html/rfc3986) ( ASCII
version (http://www.ietf.org/rfc/rfc3986.txt))
27
Markup language
Markup language
A markup language is a modern system for
annotating a document in a way that is
syntactically distinguishable from the text.
The idea and terminology evolved from the
"marking up" of manuscripts, i.e., the
revision instructions by editors, traditionally
written with a blue pencil on authors'
manuscripts. Examples are typesetting
instructions such as those found in troff,
TeX and LaTeX, or structural markers such
as XML tags. Markup instructs the software
displaying the text to carry out appropriate
actions, but is omitted from the version of
Example of RecipeBook, a simple markup language based on XML for creating
the text that is displayed to users. Some
recipes. The markup can be converted to HTML, PDF and Rich Text Format using
markup languages, such as HTML, have
a programming language or XSL.
pre-defined presentation semantics, meaning
that their specification prescribes how the
structured data are to be presented; others, such as XML, do not.
A widely used markup language is HyperText Markup Language (HTML), one of the document formats of the
World Wide Web. HTML, which is an instance of SGML (though, strictly, it does not comply with all the rules of
SGML), follows many of the markup conventions used in the publishing industry in the communication of printed
work between authors, editors, and printers.[citation needed]
Types
There are three general categories of electronic markup:[1][2]
Presentational markup
The kind of markup used by traditional word-processing systems: binary codes embedded in document text
that produce the WYSIWYG effect. Such markup is usually designed to be hidden from human users, even
those who are authors or editors.
Procedural markup
Markup is embedded in text and provides instructions for programs that are to process the text. Well-known
examples include troff, LaTeX, and PostScript. It is expected that the processor will run through the text from
beginning to end, following the instructions as encountered. Text with such markup is often edited with the
markup visible and directly manipulated by the author. Popular procedural-markup systems usually include
programming constructs, so macros or subroutines can be defined and invoked by name.
Descriptive markup
Markup is used to label parts of the document rather than to provide specific instructions as to how they should
be processed. The objective is to decouple the inherent structure of the document from any particular treatment
or rendition of it. Such markup is often described as "semantic". An example of descriptive markup would be
HTML's <cite> tag, which is used to label a citation.
There is considerable blurring of the lines between the types of markup. In modern word-processing systems,
presentational markup is often saved in descriptive-markup-oriented systems such as XML, and then processed
28
Markup language
procedurally by implementations. The programming constructs in descriptive-markup systems such as TeX may be
used to create higher-level markup systems which are more descriptive, such as LaTeX.
In recent years, a number of small and largely unstandardized markup languages have been developed to allow
authors to create formatted text via web browsers, for use in wikis and web forums. These are sometimes called
lightweight markup languages. The markup language used by Wikipedia is one example.
History
Etymology and origin
The term markup is derived from the traditional publishing practice of "marking up" a manuscript, which involves
adding handwritten annotations in the form of conventional symbolic printer's instructions in the margins and text of
a paper manuscript or printed proof. For centuries, this task was done primarily by skilled typographers known as
"markup men"[3] or "copy markers"[4] who marked up text to indicate what typeface, style, and size should be
applied to each part, and then passed the manuscript to others for typesetting by hand. Markup was also commonly
applied by editors, proofreaders, publishers, and graphic designers, and indeed by document authors.
GenCode
The first well-known public presentation of markup languages in computer text processing was made by William W.
Tunnicliffe at a conference in 1967, although he preferred to call it generic coding. It can be seen as a response to the
emergence of programs such as RUNOFF that each used their own control notations, often specific to the target
typesetting device. In the 1970s, Tunnicliffe led the development of a standard called GenCode for the publishing
industry and later was the first chair of the International Organization for Standardization committee that created
SGML, the first standard descriptive markup language. Book designer Stanley Rice published speculation along
similar lines in 1970.[5] Brian Reid, in his 1980 dissertation at Carnegie Mellon University, developed the theory and
a working implementation of descriptive markup in actual use.
However, IBM researcher Charles Goldfarb is more commonly seen today as the "father" of markup languages.
Goldfarb hit upon the basic idea while working on a primitive document management system intended for law firms
in 1969, and helped invent IBM GML later that same year. GML was first publicly disclosed in 1973.
In 1975, Goldfarb moved from Cambridge, Massachusetts to Silicon Valley and became a product planner at the
IBM Almaden Research Center. There, he convinced IBM's executives to deploy GML commercially in 1978 as part
of IBM's Document Composition Facility product, and it was widely used in business within a few years.
SGML, which was based on both GML and GenCode, was developed by Goldfarb in 1974.[6] Goldfarb eventually
became chair of the SGML committee. SGML was first released by ISO as the ISO 8879 standard in October 1986.
Some early examples of computer markup languages available outside the publishing industry can be found in
typesetting tools on Unix systems such as troff and nroff. In these systems, formatting commands were inserted into
the document text so that typesetting software could format the text according to the editor's specifications. It was a
trial and error iterative process to get a document printed correctly.[citation needed] Availability of WYSIWYG ("what
you see is what you get") publishing software supplanted much use of these languages among casual users, though
serious publishing work still uses markup to specify the non-visual structure of texts, and WYSIWYG editors now
usually save documents in a markup-language-based format.
29
Markup language
TeX
Another major publishing standard is TeX, created and continuously refined by Donald Knuth in the 1970s and '80s.
TeX concentrated on detailed layout of text and font descriptions in order to typeset mathematical books in
professional quality. This required Knuth to spend considerable time investigating the art of typesetting. TeX is
mainly used in academia, where it is the de facto standard in many scientific disciplines. A TeX macro package
known as LaTeX provides a descriptive markup system on top of TeX, and is widely used.
Scribe, GML and SGML
The first language to make a clean distinction between structure and presentation was Scribe, developed by Brian
Reid and described in his doctoral thesis in 1980.[7] Scribe was revolutionary in a number of ways, not least that it
introduced the idea of styles separated from the marked up document, and of a grammar controlling the usage of
descriptive elements. Scribe influenced the development of Generalized Markup Language (later SGML) and is a
direct ancestor to HTML and LaTeX.
In the early 1980s, the idea that markup should be focused on the structural aspects of a document and leave the
visual presentation of that structure to the interpreter led to the creation of SGML. The language was developed by a
committee chaired by Goldfarb. It incorporated ideas from many different sources, including Tunnicliffe's project,
GenCode. Sharon Adler, Anders Berglund, and James A. Marke were also key members of the SGML committee.
SGML specified a syntax for including the markup in documents, as well as one for separately describing what tags
were allowed, and where (the Document Type Definition (DTD) or schema). This allowed authors to create and use
any markup they wished, selecting tags that made the most sense to them and were named in their own natural
languages. Thus, SGML is properly a meta-language, and many particular markup languages are derived from it.
From the late '80s on, most substantial new markup languages have been based on SGML system, including for
example TEI and DocBook. SGML was promulgated as an International Standard by International Organization for
Standardization, ISO 8879, in 1986.
SGML found wide acceptance and use in fields with very large-scale documentation requirements. However, it was
generally found to be cumbersome and difficult to learn, a side effect of attempting to do too much and be too
flexible. For example, SGML made end tags (or start-tags, or even both) optional in certain contexts, because it was
thought that markup would be done manually by overworked support staff who would appreciate saving
keystrokes[citation needed].
HTML
By 1991, it appeared to manyWikipedia:Avoid weasel words that SGML would be limited to commercial and
data-based applications while WYSIWYG tools (which stored documents in proprietary binary formats) would
suffice for other document processing applications. The situation changed when Sir Tim Berners-Lee, learning of
SGML from co-worker Anders Berglund and others at CERN, used SGML syntax to create HTML. HTML
resembles other SGML-based tag languages, although it began as simpler than most and a formal DTD was not
developed until later. Steven DeRose[8] argues that HTML's use of descriptive markup (and SGML in particular) was
a major factor in the success of the Web, because of the flexibility and extensibility that it enabled (other factors
include the notion of URLs and the free distribution of browsers). HTML is quite likely the most used markup
language in the world today.
30
Markup language
XML
XML (Extensible Markup Language) is a meta markup language that is now widely used. XML was developed by
the World Wide Web Consortium, in a committee created and chaired by Jon Bosak. The main purpose of XML was
to simplify SGML by focusing on a particular problem — documents on the Internet.[9] XML remains a
meta-language like SGML, allowing users to create any tags needed (hence "extensible") and then describing those
tags and their permitted uses.
XML adoption was helped because every XML document can be written in such a way that it is also an SGML
document, and existing SGML users and software could switch to XML fairly easily. However, XML eliminated
many of the more complex and human-oriented features of SGML to simplify implementation environments such as
documents and publications. However, it appeared to strike a happy medium between simplicity and flexibility, and
was rapidly adopted for many other uses. XML is now widely used for communicating data between applications.
XHTML
Since January 2000, all W3C Recommendations for HTML have been based on XML rather than SGML, using the
abbreviation XHTML (Extensible HyperText Markup Language). The language specification requires that XHTML
Web documents must be well-formed XML documents. This allows for more rigorous and robust documents while
using tags familiar from HTML.
One of the most noticeable differences between HTML and XHTML is the rule that all tags must be closed: empty
HTML tags such as <br> must either be closed with a regular end-tag, or replaced by a special form: <br />
(the space before the '/' on the end tag is optional, but frequently used because it enables some pre-XML Web
browsers, and SGML parsers, to accept the tag). Another is that all attribute values in tags must be quoted. Finally,
all tag and attribute names must be lowercase in order to be valid; HTML, on the other hand, was case-insensitive.
Other XML-based applications
Many XML-based applications now exist, including the Resource Description Framework as RDF/XML, XForms,
DocBook, SOAP, and the Web Ontology Language (OWL). For a partial list of these, see List of XML markup
languages.
Features
A common feature of many markup languages is that they intermix the text of a document with markup instructions
in the same data stream or file. This is not necessary; it is possible to isolate markup from text content, using
pointers, offsets, IDs, or other methods to co-ordinate the two. Such "standoff markup" is typical for the internal
representations that programs use to work with marked-up documents. However, embedded or "inline" markup is
much more common elsewhere. Here, for example, is a small section of text marked up in HTML:
<h1> Anatidae </h1>
<p>
The family <i>Anatidae</i> includes ducks, geese, and swans,
but <em>not</em> the closely related screamers.
</p>
The codes enclosed in angle-brackets <like this> are markup instructions (known as tags), while the text
between these instructions is the actual text of the document. The codes h1, p, and em are examples of semantic
markup, in that they describe the intended purpose or meaning of the text they include. Specifically, h1 means "this
is a first-level heading", p means "this is a paragraph", and em means "this is an emphasized word or phrase". A
program interpreting such structural markup may apply its own rules or styles for presenting the various pieces of
text, using different typefaces, boldness, font size, indentation, colour, or other styles, as desired. A tag such as "h1"
31
Markup language
(header level 1) might be presented in a large bold sans-serif typeface, for example, or in a monospaced
(typewriter-style) document it might be underscored – or it might not change the presentation at all.
In contrast, the i tag in HTML is an example of presentational markup; it is generally used to specify a particular
characteristic of the text (in this case, the use of an italic typeface) without specifying the reason for that appearance.
The Text Encoding Initiative (TEI) has published extensive guidelines[10] for how to encode texts of interest in the
humanities and social sciences, developed through years of international cooperative work. These guidelines are
used by projects encoding historical documents, the works of particular scholars, periods, or genres, and so on.
Alternative usage
While the idea of markup language originated with text documents, there is an increasing usage of markup languages
in other areas which involve the presentation of various types of information, including playlists, vector graphics,
web services, content syndication, and user interfaces. Most of these are XML applications because it is a
well-defined and extensible language.
The use of XML has also led to the possibility of combining multiple markup languages into a single profile, like
XHTML+SMIL and XHTML+MathML+SVG.[11]
Because markup languages, and more generally data description languages (not necessarily textual markup), are not
programming languages[12] (they are data without instructions), they are more easily manipulated than programming
languages – for example, web pages are presented as HTML documents, not C code, and thus can be embedded
within other web pages, displayed when only partially received, and so forth. This leads to the web design principle
of the "Rule of Least Power", which advocates using the least (computationally) powerful language that satisfies a
task to facilitate such manipulation and reuse.
References
[3] Allan Woods, Modern Newspaper Production (New York: Harper & Row, 1963), 85; Stewart Harral, Profitable Public Relations for
Newspapers (Ann Arbor: J.W. Edwards, 1957), 76; and Chiarella v. United States, .
[4] From the Notebooks of H.J.H & D.H.A on Composition, Kingsport Press Inc., undated (1960s).
[5] Rice, Stanley. “Editorial Text Structures (with some relations to information structures and format controls in computerized composition).”
American National Standards Institute, March 17, 1970.
[7] Reid, Brian. "Scribe: A Document Specification Language and its Compiler." Ph.D. thesis, Carnegie-Mellon University, Pittsburgh PA. Also
available as Technical Report CMU-CS-81-100.
[8] DeRose, Steven J. "The SGML FAQ Book." Boston: Kluwer Academic Publishers, 1997. ISBN 0-7923-9943-9
[9] Extensible Markup Language (XML) (http:/ / www. w3. org/ TR/ 2004/ REC-xml11-20040204/ )
[10] (http:/ / www. tei-c. org/ Guidelines2/ index. html)
[11] An XHTML + MathML + SVG Profile (http:/ / www. w3. org/ TR/ 2002/ WD-XHTMLplusMathMLplusSVG-20020809/ )". W3C, August
9, 2002. Retrieved on 17 March 2007.
32
33
Markup Languages
Standard Generalized Markup Language
Standard Generalized Generic Markup Language
Internet media type
application/sgml, text/sgml
Uniform Type Identifier public.xml
Developed by
ISO
Type of format
Markup Language
Extended from
GML
Extended to
HTML, XML
Standard(s)
ISO 8879
[1]
The Standard Generalized Markup Language (ISO 8879:1986 SGML) is an ISO-standard technology for
defining generalized markup languages for documents. ISO 8879 Annex A.1 defines generalized markup:
Generalized markup is based on two novel postulates:[citation needed]
• Markup should be declarative: it should describe a document's structure and other attributes, rather than
specify the processing to be performed on it. Declarative markup is less likely to conflict with unforeseen
future processing needs and techniques.
• Markup should be rigorous so that the techniques available for processing rigorously-defined objects like
programs and databases can be used for processing documents as well.
HTML, XHTML, and XML are all examples of SGML-based languages.
Standard Generalized Markup Language
Standard versions
SGML is an ISO standard: "ISO 8879:1986 Information processing — Text and office systems — Standard
Generalized Markup Language (SGML)", of which there are three versions:
• Original SGML, which was accepted in October 1986, followed by a minor Technical Corrigendum.
• SGML (ENR), in 1996, resulted from a Technical Corrigendum to add extended naming rules allowing
arbitrary-language and -script markup.
• SGML (ENR+WWW or WebSGML), in 1998, resulted from a Technical Corrigendum [2] to better support
XML and WWW requirements.
SGML is part of a trio of enabling ISO standards for electronic documents developed by ISO/IEC
JTC1/SC34[][] (ISO/IEC Joint Technical Committee 1, Subcommittee 34 – Document description and
processing languages) :
• SGML (ISO 8879)—generalized markup language
• SGML was reworked in 1998 into XML, a successful profile of SGML. Full SGML is rarely found or used
in new projects.
• DSSSL (ISO/IEC 10179)—document processing and styling language based on Scheme.
• DSSSL was reworked into W3C XSLT and XSL-FO which use an XML syntax. Nowadays, DSSSL is
rarely used in new projects apart from Linux documentation.
• HyTime—Generalized hypertext and scheduling.[3]
• HyTime was partially reworked into W3C XLink. HyTime is rarely used in new projects.
SGML is supported by various technical reports, in particular
• ISO/IEC TR 9573 – Information processing – SGML support facilities – Techniques for using SGML[]
• Part 13: Public entity sets for mathematics and science
• In 2007, the W3C MathML working group agreed to assume the maintenance of these entity sets.
History
SGML descended from IBM's Generalized Markup Language (GML), which Charles Goldfarb, Edward
Mosher, and Raymond Lorie developed in the 1960s. Goldfarb, editor of the international standard, coined the
“GML” term using their surname initials.[] As a document markup language, SGML was originally designed to
enable the sharing of machine-readable large-project documents in government, law, and industry. Many such
documents must remain readable for several decades—a long time in the information technology field. SGML
also was extensively applied by the military, and the aerospace, technical reference, and industrial publishing
industries. The advent of the XML profile has made SGML suitable for widespread application for
small-scale, general-purpose use.
34
Standard Generalized Markup Language
35
Document validity
SGML (ENR+WWW) defines two kinds of validity. According
to the revised Terms and Definitions of ISO 8879 (from the
public draft[4]):
A conforming SGML document must be either a
type-valid SGML document, a tag-valid SGML document,
or both. Note: A user may wish to enforce additional
constraints on a document, such as whether a document
instance is integrally-stored or free of entity references.
A fragment of the OED (1985), showing SGML
markup
A type-valid SGML document is defined by the standard as
An SGML document in which, for each document instance, there is an associated document type
declaration (DTD) to whose DTD that instance conforms.
A tag-valid SGML document is defined by the standard as
An SGML document, all of whose document instances are fully tagged. There need not be a document
type declaration associated with any of the instances. Note: If there is a document type declaration, the
instance can be parsed with or without reference to it.
Terminology
Tag-validity was introduced in SGML (ENR+WWW) to support XML which allows documents with no
DOCTYPE declaration but which can be parsed without a grammar or documents which have a DOCTYPE
declaration that makes no XML Infoset contributions to the document. . The standard calls this fully tagged.
Integrally stored reflects the XML requirement that elements end in the same entity in which they started.
Reference-free reflects the HTML requirement that entity references are for special characters and do not
contain markup. SGML validity commentary, especially commentary that was made before 1997 or that is
unaware of SGML (ENR+WWW), covers type-validity only.
The SGML emphasis on validity supports the requirement for generalized markup that markup should be
rigorous. (ISO 8879 A.1)
Syntax
An SGML document may have three parts:
1. the SGML Declaration,
2. the Prologue, containing a DOCTYPE declaration with the various markup declarations that together make a
Document Type Definition (DTD), and
3. the instance itself, containing one top-most element and its contents.
An SGML document may be composed from many entities (discrete pieces of text). In SGML, the entities and
element types used in the document may be specified with a DTD, the different character sets, features,
delimiter sets, and keywords are specified in the SGML Declaration to create the concrete syntax of the
document.
Although full SGML allows implicit markup and some other kinds of tags, the XML specification (s4.3.1)
states:
Each XML document has both a logical and a physical structure. Physically, the document is composed
of units called entities. An entity may refer to other entities to cause their inclusion in the document. A
Standard Generalized Markup Language
document begins in a "root" or document entity. Logically, the document is composed of declarations,
elements, comments, character references, and processing instructions, all of which are indicated in the
document by explicit markup.
For introductory information on basic, modern SGML syntax, see XML. The following material concentrates
on features not in XML and is not a comprehensive summary of SGML syntax.
Optional features
SGML generalizes and supports a wide range of markup languages as found in the mid 1980s. These ranged
from terse Wiki-like syntaxes to RTF-like bracketed languages to HTML-like matching-tag languages. SGML
did this by a relatively simple default reference concrete syntax augmented with a large number of optional
features that could be enabled in the SGML Declaration. Not every SGML parser can necessarily process
every SGML document. Because each processor's System Declaration can be compared to the document's
SGML Declaration it is always possible to know whether a document is supported by a particular processor.
Many SGML features relate to markup minimization. Other features relate to parallel asynchronous markup
(CONCUR), to linking processing attributes (LINK), and to embedding SGML documents within SGML
documents (SUBDOC).
The notion of customizable features was not appropriate for Web use, so one goal of XML was to minimize
optional features. However XML's well-formedness rules cannot support Wiki-like languages, leaving them
unstandardized and difficult to integrate with non-text information systems.
Concrete and abstract syntaxes
The usual (default) SGML concrete syntax resembles this example, which is the default HTML concrete
syntax:
<QUOTE TYPE="example">
typically something like <ITALICS>this</ITALICS>
</QUOTE>
SGML provides an abstract syntax that can be implemented in many different types of concrete syntax.
Although the markup norm is using angle brackets as start- and end- tag delimiters in an SGML document (per
the standard-defined reference concrete syntax), it is possible to use other characters—provided a suitable
concrete syntax is defined in the document's SGML declaration.[] For example, an SGML interpreter might be
programmed to parse GML, wherein the tags are delimited with a left colon and a right full stop, thus, an :e
prefix denotes an end tag: :xmp.Hello, world:exmp.. According to the reference syntax, letter-case
(upper- or lower-) is not distinguished in tag names, thus the three tags: (i) <quote>, (ii) <QUOTE>, and (iii)
<quOtE> are equivalent. (NOTE: A concrete syntax might change this rule via the NAMECASE NAMING
declarations).
36
Standard Generalized Markup Language
Markup Minimization
SGML has features for reducing the number of characters required to mark up a document, which must be
enabled in the SGML Declaration. SGML processors need not support every available feature, thus allowing
applications to tolerate many types of inadvertent markup omissions; however, SGML systems usually are
intolerant of invalid structures. XML is intolerant of syntax omissions, and does not require a DTD for
validation.
OMITTAG
DTDs specify whether or not a markup element's start- or end- tags might be omitted; SGML has rules for
implying omitted tags, the OMITTAG feature. If a tag must be paired or not (as in the previous
<QUOTE></QUOTE> pair example) or if it can occur singly (as an HTML <HR>), those specifications are
defined in the DTD for the document (provided the OMITTAG feature is enabled). In this case, the XML
counterpart would be the specific empty tag <hr/>, equivalent to the SGML NET-enabling start-tag,
introduced in the TC2 (International Standard ISO 8879:1986, Technical Corrigendum 2, November 1999).
SHORTREF
Tags can be replaced with delimiter strings, for a terser markup, via the SHORTREF feature. This markup
style is now associated with Wiki markup, e.g. wherein two equals-signs (==), at the start of a line, are the
“heading start-tag”, and two equals signs (==) after that are the “heading end-tag”.
SHORTTAG
SGML markup languages whose concrete syntax enables the SHORTTAG VALUE feature, do not require
attribute values containing only alphanumeric characters to be enclosed within quotation marks—either double
“ ” (LIT) or single ’ ’ (LITA)—so that the previous markup example could be written:
<QUOTE TYPE=example>
typically something like <ITALICS>this</>
</QUOTE>
One feature of SGML markup languages is the "presumptuous empty tagging", such that the empty end tag
</> in <ITALICS>this</> "inherits" its value from the nearest previous full start tag, which, in this
example, is <ITALICS> (in other words, it closes the most recently opened item). The expression is thus
equivalent to <ITALICS>this</ITALICS>.
NET
Another feature is the NET (Null End Tag) construction: <ITALICS/this/, which is structurally equivalent
to <ITALICS>this</ITALICS>.
Other features
Additionally, the SHORTTAG NETENABL IMMEDNET feature allows shortening tags surrounding an
empty text value, but forbids shortening full tags:
<QUOTE></QUOTE>
can be written as:
<QUOTE// <!-- not a typo! -->
Wherein the first slash ( / ) stands for the NET-enabling “start-tag close” (NESTC), and the second slash stands
for the NET. NOTE: XML defines NESTC with a /, and NET with an > (angled bracket)—hence the
37
Standard Generalized Markup Language
corresponding construct in XML appears as <QUOTE/>.
The third feature is 'text on the same line', allowing a markup item to be ended with a line-end; especially
useful for headings and such, requiring using either SHORTREF or DATATAG minimization. For example, if
the DTD includes the following declarations:
<!ELEMENT lines (line*)
<!ELEMENT line O - (#PCDATA)>
<!ENTITY
line-tagc "</line>">
<!SHORTREF one-line "&#RE;&#RS;" line-tagc>
<!USEMAP
one-line line>
(and "&#RE;&#RS;" is a short-reference delimiter in the concrete syntax), then:
<lines>
first line
second line
</lines>
is equivalent to:
<lines>
<line>first line</line>
<line>second line</line>
</lines>
Formal characterization
SGML has many features that defied convenient description with the popular formal automata theory and the
contemporary parser technology of the 1980s and the 1990s. The standard warns in Annex H:
The SGML model group notation was deliberately designed to resemble the regular expression notation
of automata theory, because automata theory provides a theoretical foundation for some aspects of the
notion of conformance to a content model. No assumption should be made about the general
applicability of automata to content models.
A report on an early implementation of a parser for basic SGML, the Amsterdam SGML Parser,[] notes
the DTD-grammar in SGML must conform to a notion of unambiguity which closely resembles the
LL(1) conditions
and specifies various differences.
There appears to be no definitive classification of full SGML against a known class of formal grammar.
Plausible classes may include tree-adjoining grammars and adaptive grammars.
XML is described as being generally parsable like a two-level grammar for non-validated XML and a
Conway-style pipeline of coroutines (lexer, parser, validator) for valid XML.[] The SGML productions in the
ISO standard are reported to be LL(3) or LL(4).[] XML-class subsets are reported to be expressible using a
W-grammar.[] According to one paper,[] and probably considered at an information set or parse tree level
rather than a character or delimiter level:
The class of documents that conform to a given SGML document grammar forms an LL(1) language. ...
The SGML document grammars by themselves are, however, not LL(1) grammars.
The SGML standard does not define SGML with formal data structures, such as parse trees, however, an
SGML document is constructed of a rooted directed acyclic graph (RDAG) of physical storage units known as
“entities”, which is parsed into a RDAG of structural units known as “elements”. The physical graph is loosely
38
Standard Generalized Markup Language
characterized as an entity tree, but entities might appear multiple times. Moreover, the structure graph is also
loosely characterized as an element tree, but the ID/IDREF markup allows arbitrary arcs.
The results of parsing can also be understood as a data tree in different notations; where the document is the
root node, and entities in other notations (text, graphics) are child nodes. SGML provides apparatus for linking
to and annotating external non-SGML entities.
The SGML standard describes it in terms of maps and recognition modes (s9.6.1). Each entity, and each
element, can have an associated notation or declared content type, which determines the kinds of references
and tags which will be recognized in that entity and element. Also, each element can have an associated
delimiter map (and short reference map), which determines which characters are treated as delimiters in
context. The SGML standard characterizes parsing as a state machine switching between recognition modes.
During parsing, there is a stack of maps that configure the scanner, while the tokenizer relates to the
recognition modes.
Parsing involves traversing the dynamically-retrieved entity graph, finding/implying tags and the element
structure, and validating those tags against the grammar. An unusual aspect of SGML is that the grammar
(DTD) is used both passively — to recognize lexical structures, and actively — to generate missing structures
and tags that the DTD has declared optional. End- and start- tags can be omitted, because they can be inferred.
Loosely, a series of tags can be omitted only if there is a single, possible path in the grammar to imply them. It
was this active use of grammars that made concrete SGML parsing difficult to formally characterize.
SGML uses the term validation for both recognition and generation. XML does not use the grammar (DTD) to
change delimiter maps or to inform the parse modes, and does not allow tag omission; consequently, XML
validation of elements is not active in the sense that SGML validation is active. SGML without a DTD (e.g.
simple XML), is a grammar or a language; SGML with a DTD is a metalanguage. SGML with an SGML
declaration is, perhaps, a meta-metalanguage, since it is a metalanguage whose declaration mechanism is a
metalanguage.
SGML has an abstract syntax implemented by many possible concrete syntaxes, however, this is not the same
usage as in an abstract syntax tree and as in a concrete syntax tree. In the SGML usage, a concrete syntax is a
set of specific delimiters, while the abstract syntax is the set of names for the delimiters. The XML Infoset
corresponds more to the programming language notion of abstract syntax introduced by John McCarthy.
Derivatives
XML
The W3C XML (Extensible Markup Language) is a profile (subset) of SGML designed to ease the
implementation of the parser compared to a full SGML parser, primarily for use on the World Wide Web. In
addition to disabling many SGML options present in the reference syntax (such as omitting tags and nested
subdocuments) XML adds a number of additional restrictions on the kinds of SGML syntax. For example,
despite enabling SGML shortened tag forms, XML does not allow unclosed start or end tags. It also relied on
many of the additions made by the WebSGML Annex. XML currently is more widely used than full SGML.
XML has lightweight internationalization based on Unicode. Applications of XML include XHTML, XQuery,
XSLT, XForms, XPointer, JSP, SVG, RSS, Atom, XML-RPC, RDF/XML, and SOAP.
39
Standard Generalized Markup Language
HTML
While HTML was developed partially independently and in parallel with SGML, its creator Tim Berners-Lee,
intended it to be an application of SGML. The design of HTML (Hyper Text Markup Language) was therefore
inspired by SGML tagging, but, since no clear expansion and parsing guidelines were established, most actual
HTML documents are not valid SGML documents. Later, HTML was reformulated (version 2.0) to be more of
an SGML application, however, the HTML markup language has many legacy- and exception- handling
features that differ from SGML's requirements. HTML 4 is an SGML application that fully conforms to ISO
8879 – SGML.[]
The charter for the recently revived World Wide Web Consortium HTML Working Group says, "the Group
will not assume that an SGML parser is used for 'classic HTML'".[] Although HTML syntax closely resembles
SGML syntax with the default reference concrete syntax, HTML5 abandons any attempt to define HTML as
an SGML application, explicitly defining its own parsing rules [5] which more closely match existing
implementations and documents. (It does, however, define an alternative XML-based XHTML serialization,
which does conform to SGML (WWW).)[]
OED
The second edition of the Oxford English Dictionary (OED) is entirely marked up with an SGML-based
markup language.[]
The third edition is marked up as XML.
Others
Other document markup languages are partly related to SGML and XML, but — because they cannot be
parsed or validated or other-wise processed using standard SGML and XML tools — they are not considered
either SGML or XML languages; the Z Format markup language for typesetting and documentation, is an
example.
Several modern programming languages support tags as primitive token types, or now support Unicode and
regular expression pattern-matching. An example is the Scala programming language.
Applications
Document markup languages defined using SGML are called "applications" by the standard; many pre-XML
SGML applications were proprietary property of the organizations which developed them, and thus
unavailable in the World Wide Web. The following list is of pre-XML SGML applications.
• TEI (Text Encoding Initiative) is an academic consortium that designs, maintains, and develops technical
standards for digital-format textual representation applications.
• DocBook is a markup language originally created as an SGML application, designed for authoring technical
documentation; DocBook currently is an XML application.
• CALS (Continuous Acquisition and Life-cycle Support) is a US Department of Defense (DoD) initiative for
electronically capturing military documents and for linking related data and information.
• EDGAR (Electronic Data-Gathering, Analysis, and Retrieval) system effects automated collection, validation,
indexing, acceptance, and forwarding of submissions, by companies and others, who are legally required to file
data and information forms with the US Securities and Exchange Commission (SEC).
• LinuxDoc. Documentation for Linux packages has used the LinuxDoc SGML DTD and Docbook XML DTD.
40
Standard Generalized Markup Language
Open source implementations
Significant open source implementations of SGML have included:
•
•
•
•
•
ASP-SGML [6]
ARC-SGML [7], by Standard Generalized Markup Language Users', 1991, C language
SGMLS [8], by James Clark, 1993, C language
Project YAO [9], by Yuan-ze Institute of Technology, Taiwan, with Charles Goldfarb, 1994, object
SP [10] by James Clark, C++ language
SP and Jade, the associated DSSSL processors, are maintained by the OpenJade [11] project, and are common
parts of Linux distributions. A general archive of SGML software and materials resides at SUNET [12]. The
original HTML parser class, in Sun System's implementation of Java, is a limited-features SGML parser, using
SGML terminology and concepts.
References
[1] http:/ / www. iso. org/ iso/ en/ CatalogueDetailPage. CatalogueDetail?CSNUMBER=16387
[2] http:/ / www1. y12. doe. gov/ capabilities/ sgml/ wg8/ document/ 1929. htm
[3] ISO/IEC 10744 (http:/ / www1. y12. doe. gov/ capabilities/ sgml/ wg8/ document/ n1920/ pdf/ n1920. pdf) – Hytime (http:/ / www.
hytime. org/ )
[4] Terms and Definitions of ISO 8879 draft (http:/ / www1. y12. doe. gov/ capabilities/ sgml/ wg8/ document/ 1929. htm)
[5] http:/ / dev. w3. org/ html5/ spec/ parsing. html
[6] http:/ / ftp. sunet. se/ pub/ text-processing/ sgml/ ASP-SGML/
[7] http:/ / ftp. sunet. se/ pub/ text-processing/ sgml/ ARC-SGML/
[8] http:/ / ftp. sunet. se/ pub/ text-processing/ sgml/ SGMLS/
[9] http:/ / ftp. sunet. se/ pub/ text-processing/ sgml/ YAO/
[10] http:/ / www. jclark. com/ sp/ index. htm
[11] http:/ / openjade. sourceforge. net/
[12] http:/ / ftp. sunet. se/ pub/ text-processing/ sgml/
External links
• Overview of SGML Resources (http://www.w3.org/MarkUp/SGML/) at W3C's website.
• Introduction and Examples of Software Documentation in SGML (http://www.the-software-experts.de/
e_dta-sw-doku-principles.htm)
• SC34 Committee Records (http://purl.umn.edu/42431), Charles Babbage Institute – Collection on the
development of SGML and other standards influential in the development of current XML tools; documents
include early drafts of SGML administrative materials, documentation, working group papers, and standards
for computer languages.
• SGML Syntax Summary by Charles Goldfarb (http://xml.coverpages.org/sgmlsyn/sgmlsyn.htm#C6)
• SGML document introducing you to SGML (http://www.users.cloud9.net/~bradmcc/WhatIsSGML.html);
Some reasons why SGML is important (http://www.users.cloud9.net/~bradmcc/sgmlnote.html)
• The SGML Declaration (http://www.is-thought.co.uk/book/sgml-4.htm#Fig4-2), in SGML and HTML
Explained, Martin Bryan (1997)
• SGML Declarations (http://xml.coverpages.org/wlw11.html) Wayne Wohler, IBM Corporation, 1994.
• ISO 9069:1988 – Information processing – SGML support facilities – SGML Document Interchange Format
(SDIF) (http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=16643)
• ISO/IEC 9070:1991 – Information technology – SGML support facilities – Registration procedures for public
text owner identifiers (http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.
htm?csnumber=16645)
41
Document Type Definition
Document Type Definition
A Document Type Definition (DTD) is a set of markup declarations that define a document type for an
SGML-family markup language (SGML, XML, HTML).
A DTD uses a terse formal syntax that declares precisely which elements and references may appear where in the
document of the particular type, and what the elements’ contents and attributes are. A DTD can also declare entities
which may be used in the instance document.
XML uses a subset of SGML DTD.
As of 2009[1] newer XML namespace-aware schema languages (such as W3C XML Schema and ISO RELAX NG)
have largely superseded DTDs. A namespace-aware version of DTDs is being developed as Part 9 of ISO DSDL[2].
DTDs persist in applications which need special publishing characters such as the XML and HTML Character Entity
References, which were derived from the larger sets defined as part of the ISO SGML standard effort.
Associating DTDs with documents
A DTD is associated with an XML or SGML document by means of a Document Type Declaration. The Document
Type Declaration appears in the syntactic fragment doctypedecl near the start of an XML document.[] The
declaration establishes that the document is an instance of the type defined by the referenced DTD.
DTDs make two sorts of declaration:
• an optional external subset
• an optional internal subset
The declarations in the internal subset form part of the Document Type Declaration in the document itself. The
declarations in the external subset are located in a separate text file. The external subset may be referenced via a
public identifier and/or a system identifier. Programs for reading documents may not be required to read the external
subset.
Note that any valid SGML or XML document that references an external subset in its DTD, or whose body contains
references to parsed external entities declared in its DTD (including those declared within its internal subset), may
only be partially parsed but cannot be fully validated by validating SGML or XML parsers in their standalone mode
(this means that these validating parsers will not attempt to retrieve these external entities, and their replacement text
will not be accessible).
However, such documents will still be fully parsable in the non-standalone mode of validating parsers, which will
signal an error if these external entities cannot be located with their specified public identifier (FPI) and/or system
identifier (a URI), or are inaccessible. (Notations declared in the DTD are also referencing external entities, but these
unparsed entities are not needed for the validation of documents in the standalone mode of these parsers: the
validation of all external entities referenced by notations is left to the application using the SGML or XML parser).
Non-validating parsers may eventually attempt to locate these external entities in the non-standalone mode (by
partially interpreting the DTD only to resolve their declared parsable entities), but will not validate the content model
of these documents.
42
Document Type Definition
Examples
The following example of a document type declaration contains both public and system identifiers:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
All HTML 4.01 documents conform to one of three SGML DTDs. The public identifiers of these DTDs are constant
and are as follows:
• -//W3C//DTD HTML 4.01//EN [3]
• -//W3C//DTD HTML 4.01 Transitional//EN [4]
• -//W3C//DTD HTML 4.01 Frameset//EN [5]
The system identifiers of these DTDs, if present in the Document Type Declaration, will be URI references. A
system identifier usually points to a specific set of declarations in a resolvable location. SGML allows for public
identifiers to be mapped to system identifiers in catalogs that are optionally made available to the URI resolvers used
by document parsing software.
Note that this document type declaration can only appear after the optional XML declaration, and before the
document body, if the document syntax conforms to XML. This includes XHTML documents:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- the XHTML document body starts here-->
<html>
...
</html>
An additional internal subset can also be provided after the external subset:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
<!-- an internal subset can be embedded here -->
]>
<!-- the XHTML document body starts here-->
<html>
...
</html>
Alternatively, only the internal subset may be provided:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html [
<!-- an internal subset can be embedded here -->
]>
<!-- the XHTML document body starts here-->
<html>
...
</html>
43
Document Type Definition
Finally, the document type definition may include no subset at all; in that case, it just specifies that the document has
a single top-level element (this is an implicit requirement for all valid XML and HTML documents, but not for
document fragments or for all SGML documents, whose top-level elements may be different from the implied root
element), and it indicates the type name of the root element:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html>
<!-- the XHTML document body starts here-->
<html>
...
</html>
Markup declarations
DTDs describe the structure of a class of documents via element and attribute-list declarations. Element declarations
name the allowable set of elements within the document, and specify whether and how declared elements and runs of
character data may be contained within each element. Attribute-list declarations name the allowable set of attributes
for each declared element, including the type of each attribute value, if not an explicit set of valid value(s).
DTD markup declarations declare which element types, attribute lists, entities and notations are allowed in the
structure of the corresponding class of XML documents.[6]
Element type declarations
An element type declaration defines an element and its possible content. A valid XML document contains only
elements that are defined in the DTD.
Various keywords and characters specify an element’s content:
• EMPTY for specifying that the defined element allows no content, i.e., it can't have any children elements, not
even text elements (if there are whitespaces, they are ignored);
• ANY for specifying that the defined element allows any content, without restriction, i.e., that it may have any
number (including none) and type of children elements (including text elements);
• or an expression, specifying the only elements allowed as direct children in the content of the defined element;
this content can be either:
• a mixed content, which means that the content may include at least one text element and zero or more named
elements, but their order and number of occurrences can't be restricted; this can be:
• ( #PCDATA ): historically meaning parsed character data, this means that only one text element is
allowed in the content (no quantifier is allowed);
• ( #PCDATA | element name | ... )*: a limited choice (in an exclusive list between parentheses
and separated by "|" pipe characters and terminated by the required "*" quantifier) of two or more child
elements (including only text elements or the specified named elements) may be used in any order and
number of occurrences in the content.
• an element content, which means that there must be no text elements in the children elements of the content
(all whitespaces encoded between child elements are then ignored, just like comments). Such element content
is specified as content particle in a variant of Backus-Naur Form without terminal symbols and element names
as non-terminal symbols. Element content consists of:
• a content particle can be either the name of an element declared in the DTD, or a sequence list or choice
list. It may be followed by an optional quantifier.
• a sequence list means an ordered list (specified between parentheses and separated by a "," comma
character) of one or more content particles: all the content particles must appear successively as direct
44
Document Type Definition
children in the content of the defined element, at the specified position and relative order;
• a choice list means a mutually exclusive list (specified between parentheses and separated by a "|" pipe
character) of two or more content particles: only one of these content particles may appear in the content
of the defined element at the same position.
• A quantifier is a single character that immediately follows the specified item to which it applies, to restrict
the number of successive occurrences of these items at the specified position in the content of the element;
it may be either:
• + for specifying that there must be one or more occurrences of the item — the effective content of each
occurrence may be different;
• * for specifying that any number (zero or more) of occurrences in allowed — the item is optional and the
effective content of each occurrence may be different;
• ? for specifying that there must not be more than one occurrence — the item is optional;
• If there is no quantifier, the specified item must occur exactly one time at the specified position in the
content of the element.
For example:
<!ELEMENT html (head, body)>
<!ELEMENT p (#PCDATA | p | ul | dl | table | h1|h2|h3)*>
Note that element type declarations are ignored by non-validating SGML and XML parsers (in which cases any
elements will be accepted in any order and any number of occurrences in the parsed document), but these
declarations are still checked for well-formedness and validity.
Attribute list declarations
An attribute list specifies for a given element type the list of all possible attribute associated with that type. For each
possible attribute, it contains:
• the declared name of the attribute,
• its data type (or an enumeration of its possible values),
• and its default value.[7]
For example:
<!ATTLIST
src
id
sort
print
>
img
CDATA
#REQUIRED
ID
#IMPLIED
CDATA
#FIXED "true"
(yes | no) "yes"
Here are some attribute types supported by both SGML and XML:
CDATA
this type means characters data and indicates that the effective value of the attribute can be any textual value,
unless the attribute is specified as fixed (the comments in the DTD may further document which values are
effectively accepted, but the DTD syntax does not allow such precise specification);
ID
the effective value of the attribute must be a valid identifier, and it is used to define and anchor to the current
element the target of references using this defined identifier (including as document fragment identifiers that
may be specified at end of an URI after a "#" sign); it is an error if distinct elements in the same document are
45
Document Type Definition
defining the same identifier; the uniqueness constraint also implies that the identifier itself carries no other
semantics and that identifiers must be treated as opaque in applications; note that XML also predefines the
standard pseudo-attribute "xml:id" with this type, without needing any declaration in the DTD, so the
uniqueness constraint also applies to these defined identifiers when they are specified anywhere in a XML
document.
IDREF or IDREFS
the effective value of the attribute can only be a valid identifier (or a space-separated list of such identifiers)
and must be referencing the unique element defined in the document with an attribute declared with the type
ID in the DTD (or the unique element defined in an XML document with a pseudo-attribute "xml:id") and
whose effective value is the same identifier;
NMTOKEN or NMTOKENS
the effective value of the attribute can only be a valid name token (or a spaced-separated list of such name
tokens), but it is not restricted to be a unique identifier within the document; this name may carry
supplementary and application-dependent semantics and may require additional naming constraints, but this is
out of scope of the DTD;
ENTITY or ENTITIES
the effective value of the attribute can only be the name of an unparsed external entity (or a space-separated
list of such names), which must also be declared in the document type declaration; this type is not supported in
HTML parsers, but is valid in SGML and XML 1.0 or 1.1 (including XHTML and SVG);
(value1|...)
the effective value of the attribute can only be one of the enumerated list (specified between parentheses and
separated by a "|" pipe character) of textual values, where each value in the enumeration is possibly specified
between 'single' or "double" quotation marks if it's not a simple name token;
NOTATION (notation1|...)
the effective value of the attribute can only be any one of the enumerated list (specified between parentheses
and separated by a "|" pipe character) of notation names, where each notation name in the enumeration must
also be declared in the document type declaration; this type is not supported in HTML parsers, but is valid in
SGML and XML 1.0 or 1.1 (including XHTML and SVG).
A default value can define whether an attribute must occur (#REQUIRED) or not (#IMPLIED), or whether it has a
fixed value (#FIXED), or which value should be used as a default value ("…") in case the given attribute is left out
in an XML tag.
Note that attribute list declarations are ignored by non-validating SGML and XML parsers (in which cases any
attribute will be accepted within all elements of the parsed document), but these declarations are still checked for
well-formedness and validity.
Entity declarations
An entity is similar to a macro. The entity declaration assigns it a value which is retained throughout the document.
A common use is to have a name more recognizable than a numeric character reference for an unfamiliar
character.[8] Entities help to improve legibility of an XML text. In general, there are two types: internal and external.
• Internal (parsed) entities are associating a name with any arbitrary textual content defined in their declaration
(which may be in the internal subset or in the external subset of the DTD declared in the document). When a
named entity reference is then encountered in the rest of the document (including in the rest of the DTD), and if
this entity name has effectively been defined as a parsed entity, the reference itself is replaced immediately by the
textual content defined in the parsed entity, and the parsing continues within this replacement text.
46
Document Type Definition
47
• Predefined named character entities are similar to internal entities: 5 of them however are treated specially
in all SGML, HTML and XML parsers. These entities are a bit different from normal parsed entities because
when a named character entity reference is encountered in the document, the reference is also replaced
immediately by the character content defined in the entity, but the parsing continues after the replacement text
which is immediately inserted literally in the currently parsed token (if such character is permitted in the
textual value of that token). This allows some characters that are needed for the core syntax of HTML or XML
themselves to be escaped from their special syntactic role (notably "&" which is reserved for beginning entity
references, "<" or ">" which are reserved to delimit the markup tags, and "double" or 'single' quotation marks
which are reserved to delimit the values of attributes and entity definitions). Predefined character entities also
include numeric character references that are handled the same way and can also be used to escape the
characters they represent, or to bypass limitations in the character repertoire supported by the document
encoding.
• In basic profiles for SGML or in HTML documents, the declaration of internal entities is not possible (because
external DTD subsets are not retrieved, and internal DTD subsets are not supported in these basic profiles).
• Instead, HTML standards are predefining a large set of up to several hundreds of named character entities, but
they can still be handled as standard parsed entities, defined in the DTD used by the parser.
• External entities refer to external storage objects. They are just declared by a unique name in the document, and
defined with a public identifier (an FPI) and/or a system identifier (interpreted as an URI) specifying where the
source of their content. They exist in fact in two variants:
• parsed external entities (most often defined with a SYSTEM identifier indicating the URI of their content)
that are not associated in their definition to a named annotation, in which case validating XML or SGML
parsers will retrieve their contents and parse them as if they were declared as internal entities (the external
entity containing their effective replacement text);
• unparsed external entities that are defined and associated with an annotation name, in which case they will
be treated as opaque references and signaled as such to the application using the SGML or XML parser: their
interpretation, retrieval and parsing is left to the application, according the types of annotations it supports (see
the next section about annotations and for examples of unparsed external entities).
• External entities are not supported in basic profiles for SGML or in HTML documents, but are valid in full
implementations of SGML and in XML 1.0 or 1.1 (including XHTML and SVG, even if they are not strictly
needed in those document types).
An example of internal entity declarations (here in an internal DTD subset of an SGML document) is:
<!DOCTYPE sgml [
<!ELEMENT sgml ANY>
<!ENTITY % std
"standard SGML">
<!ENTITY % signature " &#x2014; &author;.">
<!ENTITY % question
"Why couldn&#x2019;t I publish my books directly in %std;?">
<!ENTITY % author
"William Shakespeare">
]>
<sgml>&question;&signature;</sgml>
Note that internal entities may be defined in any order, as long as they are not referenced and parsed in the DTD or
in the body of the document, in their order of parsing: it is valid to include a reference to a still undefined entity
within the content of a parsed entity, but it is invalid to include anywhere else any named entity reference before this
entity has been fully defined, including all other internal entities referenced in its defined content (this also prevents
circular or recursive definitions of internal entities). This document is parsed as if it was:
Document Type Definition
48
<!DOCTYPE sgml [
<!ELEMENT sgml ANY>
<!ENTITY % std
"standard SGML">
<!ENTITY % signature " — &author;.">
<!ENTITY % question
"Why couldn’t I publish my books directly in standard SGML?">
<!ENTITY % author
"William Shakespeare">
]>
<sgml>Why couldn’t I publish directly my books in standard SGML? — William
Shakespeare.</sgml>
Note that reference to the "author" internal entity is not substituted in the replacement text of the "signature" internal
entity. Instead, it is replaced only when the "signature" entity reference is parsed within the content of the "sgml"
element, but only by validating parsers (non-validating parsers will not substitute entity references occurring within
contents of element or within attribute values, in the body of the document.
This is possible because the replacement text specified in the internal entity definitions permits a distinction between
parameter entity references (that are introduced by the "%" character and whose replacement applies to the parsed
DTD contents) and general entity references (that are introduced by the "&" character and whose replacement is
delayed until they are effectively parsed and validated). The "%" character for introducing parameter entity
references in the DTD loses its special role outside of the DTD and it becomes a literal character.
However, the references to predefined numeric character entities are substituted wherever they occur, without
needing a validating parser (they are only introduced by the "&" character).
Notation declarations
Notations are used in SGML or XML. They provide a complete reference to unparsed external entities whose
interpretation is left to the application (which will interpret them directly or will retrieve the external entity
themselves), by assigning them a simple name which is usable in the body of the document. For example, notations
may be used to reference non-XML data in an XML 1.1 document. For example, to annotate SVG images, in order
to associate them with a specific renderer:
<!NOTATION type-image-svg SYSTEM "image/svg">
This declares the MIME type of external images with this type, and associates it with a notation name
"type-image-svg". However, notation names usually follow a naming convention that is specific to the application
generating or using the notation: notations are interpreted as additional meta-data whose effective content is an
external entity and either a PUBLIC FPI, registered in the catalogs used by XML or SGML parsers, or a SYSTEM
URI, whose interpretation is application dependent (here a MIME type, interpreted as a relative URI, but it could be
an absolute URI to a specific renderer, or a URN indicating an OS-specific object identifier such as a UUID).
The declared notation name must be unique within all the document type declaration, i.e. in the external subset as
well as the internal subset, at least for conformance with XML.[9][10]
Notations can be associated to unparsed external entities included in the body of the SGML or XML document. The
PUBLIC or SYSTEM parameter of these external entities specifies the FPI and/or the URI where the unparsed data
of the external entity is located, and the additional NDATA parameter of these defined entities specifies the
additional notation (i.e., effectively the MIME type here). For example:
<!DOCTYPE sgml [
<!ELEMENT sgml (img)*>
<!ELEMENT img EMPTY>
Document Type Definition
49
<!ATTLIST img
data ENTITY #IMPLIED>
<!ENTITY
example1SVG
SYSTEM "example1.svg" NDATA example1SVG-rdf>
<!NOTATION example1SVG-rdf SYSTEM "example1.svg.rdf">
]>
<sgml>
<img data="example1SVG" />
</sgml>
Within the body of the SGML document, these referenced external entities (whose name is specified between "&"
and ";") are not replaced like usual named entities (defined with a CDATA value), but are left as distinct unparsed
tokens that may be used either as the value of an element attribute (like above) or within the element contents,
provided that either the DTD allows such external entities in the declared content type of elements or in the declared
type of attributes (here the ENTITY type for the data attribute), or the SGML parser is not validating the content.
Notations may also be associated directly to elements as additional meta-data, without associating them to another
external entity, by giving their names as possible values of some additional attributes (also declared in the DTD
within the <!ATTLIST ...> declaration of the element). For example:
<!DOCTYPE sgml [
<!ELEMENT sgml (img)*>
<!-the optional "type" attribute value can only be set to this
notation.
-->
<!ATTLIST sgml
type
NOTATION (
type-vendor-specific ) #IMPLIED>
<!ELEMENT img ANY> <!-- optional content can be only parsable SGML or XML data -->
<!-the optional "title" attribute value must be parsable as text.
the optional "data" attribute value will be set to an unparsed
external entity.
the optional "type" attribute value can only be one of the two
notations.
-->
<!ATTLIST img
title CDATA
#IMPLIED
data
ENTITY
#IMPLIED
type
NOTATION (
type-image-svg |
type-image-gif )
#IMPLIED>
<!-Notations are referencing external entities and may be set in the
"type" attributes above,
or must be referenced by any defined external entities that cannot
Document Type Definition
50
be parsed.
-->
<!NOTATION type-image-svg
PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!NOTATION type-image-gif
PUBLIC "image/gif">
<!NOTATION type-vendor-specific PUBLIC "application/VND.specific+sgml">
<!ENTITY example1SVGTitle "Title of example1.svg"> <!-- parsed internal entity -->
<!ENTITY example1SVG
SYSTEM "example1.svg"> <!-- parsed external entity -->
<!ENTITY example1GIFTitle "Title of example1.gif"> <!-- parsed internal entity -->
<!ENTITY example1GIF
SYSTEM "example1.gif" NDATA type-image-gif> <!-- unparsed external entity -->
]>
<sgml type="type-vendor-specific">
<!-- an SVG image is parsable as valid SGML or XML text -->
<img title="&example1SVGTitle;" type="type-image-svg">&example1SVG;</img>
<!-- it can also be referenced as an unparsed external entity -->
<img title="&example1SVGTitle;" data="example1SVG" />
<!-- a GIF image is not parsable and can only be referenced as an external entity -->
<img title="&example1GIFTitle;" data="example1GIF" />
</sgml>
The example above shows a notation named "type-image-svg" that references the standard public FPI and the system
identifier (the standard URI) of an SVG 1.1 document, instead of specifying just a system identifier as in the first
example (which was a relative URI interpreted locally as a MIME type). This annotation is referenced directly
within the unparsed "type" attribute of the "img" element, but its content is not retrieved. It also declares another
notation for a vendor-specific application, to annotate the "sgml" root element in the document. In both cases, the
declared notation named is used directly in a declared "type" attribute, whose content is specified in the DTD with
the "NOTATION" attribute type (this "type" attribute is declared for the "sgml" element, as well as for the "img"
element).
However, the "title" attribute of the "img" element specifies the internal entity "example1SVGTitle" whose
declaration that does not define an annotation, so it will be parsed by validating parsers and the entity replacement
text will be "Title of example1.svg".
And the content of the "img" element is referencing another external entity "example1SVG" whose declaration also
does not define an notation, so it will also be parsed by validating parsers and the entity replacement text will be
located by its defined SYSTEM identifier "example1.svg" (also interpreted as a relative URI). The effective content
for the "img" element be the content of this second external resource. The difference with the GIF image, is that the
SVG image will be parsed within the SGML document, according to the declarations in the DTD, where the GIF
image is just referenced as an opaque external object (which is not parsable with SGML) via its "data" attribute
(whose value type is an opaque ENTITY).
Only one notation name may be specified in the value of ENTITY attributes (there's no support in SGML, XML 1.0
or XML 1.1 for multiple notation names in the same declared external ENTITY, so separate attributes will be
needed). However multiple external entities may be referenced (in a space-separated list of names) in attributes
declared with type ENTITIES, and where each named external entity is also declared with its own notation).
Notations are also completely opaque for XML and SGML parsers, so they are not differentiated by the type of the
external entity that they may reference (for these parsers they just have a unique name associated to a public
Document Type Definition
identifier (an FPI) and/or a system identifier (a URI)).
Some applications (but not XML or SGML parsers themselves) also allow referencing notations indirectly by
naming them in the "URN:name" value of a standard CDATA attribute, everywhere a URI can be specified.
However this behaviour is application-specific, and requires that the application maintains a catalog of known URNs
to resolve them into the notations that have been parsed in a standard SGML or XML parser. This use allows
notations to be defined only in a DTD stored as an external entity and referenced only as the external subset of
documents, and allows these documents to remain compatible with validating XML or SGML parsers that have no
direct support for notations.
Notations are not used in HTML, or in basic profiles for XHTML and SVG, because:
• all the external entities used by these standard document types are referenced by simple attributes, declared with
the CDATA type in their standard DTD (such as the "href" attribute of an anchor "a" element, or the "src"
attribute of an image "img" element, whose values are interpreted as a URI, without needing any catalog of public
identifiers, i.e., known FPI);
• all the external entities for additional meta-data are referenced:
• either by additional attributes (such as the "type" attribute which indicates the MIME type of the external
entity, or the "charset" attribute which indicates its encoding),
• or by additional elements (such as "link" or "meta" in HTML and XHTML) within their own attributes,
• or by standard pseudo-attributes in XML and XHTML (such as "xml:lang", or "xmlns" and "xmlns:*" for
namespace declarations).
Note also that even in validating SGML or XML 1.0 or XML 1.1 parsers, the external entities referenced by an FPI
and/or URI in declared notations are not retrieved automatically by the parsers themselves. Instead, these parsers just
provide to the application the parsed FPI and/or URI associated to the notations found in the parsed SGML or XML
document, and with a facility for a dictionary containing all notation names declared in the DTD; these validating
parsers will also check the uniqueness of notation name declarations, and will report a validation error if some
notation names are used anywhere in the DTD or in the document body but not declared:
• if the application can't use any notation (or if their FPI and/or URI are unknown or not supported in their local
catalog), these notations may be either ignored silently by the application or the application could signal an error;
• otherwise the applications will decide themselves how to interpret them, then if the external entities must be
retrieved and then parsed separately;
• applications may then signal an error if such interpretation, retrieval or separate parsing ever fails.
• Unrecognized notations that may cause an application to signal an error should not be blocking the interpretation
of the validated document using them.
XML DTDs and schema validation
The XML DTD syntax is one of several XML schema languages. However, many of the schema languages do not
fully replace the XML DTD. Notably, the XML DTD allows defining entities and notations that have no direct
equivalents in DTD-less XML (because internal entities and parsable external entities are not part of XML schema
languages, and because other unparsed external entities and notations have no simple equivalent mappings in most
XML schema languages).
Most XML schema languages are only replacements for element declarations and attribute list declarations, in such a
way that it becomes possible to parse XML documents with non-validating XML parsers (if the only purpose of the
external DTD subset was to define the schema). In addition, documents for these XML schema languages have to be
parsed separately, so validating the schema of XML documents in pure standalone mode is not really possible with
these languages: the document type declaration remains necessary for at least identifying (with a XML Catalog) the
schema used in the parsed XML document and that will be validated in another language.
51
Document Type Definition
A common misconception holds that a non-validating XML parser does not have to read document type declarations,
when in fact, the document type declarations must still be scanned for correct syntax as well as validity of
declarations, and the parser must still parse all entity declarations in the internal subset, and substitute the
replacement texts of internal entities occurring anywhere in the document type declaration or in the document body.
A non-validating parser may, however, elect not to read parsable external entities (including the external subset),
and does not have to honor the content model restrictions defined in element declarations and in attribute list
declarations.
If the XML document depends on parsable external entities (including the specified external subset, or parsable
external entities declared in the internal subset), it should assert standalone="no" in its XML declaration.
Identification of the validating DTD may be performed by the use of XML Catalogs, in order to retrieve its specified
external subset.
In the example below, the XML document is declared with standalone="no" because it has an external subset
in its document type declaration:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE people_list SYSTEM "example.dtd">
<people_list />
If the XML document type declaration includes any SYSTEM identifier for the external subset, it can't be safely
processed as standalone: the URI should be retrieved, otherwise there may be unknown named character entities
whose definition may be needed to correctly parse the effective XML syntax in the internal subset or in the
document body (the XML syntax parsing is normally performed after the substitution of all named entities,
excluding the five entities that are predefined in XML and that are implicitly substituted after parsing the XML
document into lexical tokens). If it just includes any PUBLIC identifier, it may be processed as standalone, if the
XML processor knows this PUBLIC identifier in its local catalog from where it can retrieve an associated DTD
entity.
XML DTD schema example
An example of a very simple external XML DTD to describe the schema of a list of persons might consist of:
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
people_list (person)*>
person (name, birthdate?, gender?, socialsecuritynumber?)>
name (#PCDATA)>
birthdate (#PCDATA)>
gender (#PCDATA)>
socialsecuritynumber (#PCDATA)>
Taking this line by line:
1. people_list is a valid element name, and an instance of such an element contains any number of person
elements. The * denotes there can be 0 or more person elements within the people_list element.
2. person is a valid element name, and an instance of such an element contains one element named name,
followed by one named birthdate (optional), then gender (also optional) and
socialsecuritynumber (also optional). The ? indicates that an element is optional. The reference to the
name element name has no ?, so a person element must contain a name element.
3. name is a valid element name, and an instance of such an element contains "parsed character data" (#PCDATA).
4. birthdate is a valid element name, and an instance of such an element contains parsed character data.
5. gender is a valid element name, and an instance of such an element contains parsed character data.
52
Document Type Definition
6. socialsecuritynumber is a valid element name, and an instance of such an element contains parsed
character data.
An example of an XML file which makes use of and conforms to this DTD follows. The DTD is referenced here as
an external subset, via the SYSTEM specifier and a URI. It assumes that we can identify the DTD with the relative
URI reference "example.dtd"; the "people_list" after "!DOCTYPE" tells us that the root tags, or the first element
defined in the DTD, is called "people_list":
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE people_list SYSTEM "example.dtd">
<people_list>
<person>
<name>Fred Bloggs</name>
<birthdate>2008-11-27</birthdate>
<gender>Male</gender>
</person>
</people_list>
One can render this in an XML-enabled browser (such as Internet Explorer or Mozilla Firefox) by pasting and saving
the DTD component above to a text file named example.dtd and the XML file to a differently-named text file, and
opening the XML file with the browser. The files should both be saved in the same directory. However, many
browsers do not check that an XML document conforms to the rules in the DTD; they are only required to check that
the DTD is syntactically correct. For security reasons, they may also choose not to read the external DTD.
The same DTD can also be embedded directly in the XML document itself as an internal subset, by encasing it
within [square brackets] in the document type declaration, in which case the document no longer depends on external
entities and can be processed in standalone mode:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE people_list [
<!ELEMENT people_list (person)*>
<!ELEMENT person (name, birthdate?, gender?, socialsecuritynumber?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT birthdate (#PCDATA)>
<!ELEMENT gender (#PCDATA)>
<!ELEMENT socialsecuritynumber (#PCDATA)>
]>
<people_list>
<person>
<name>Fred Bloggs</name>
<birthdate>2008-11-27</birthdate>
<gender>Male</gender>
</person>
</people_list>
Alternatives to DTDs (for specifying schemas) are available:
• XML Schema, also referred to as XML Schema Definition (XSD), has achieved Recommendation status within
the W3C,[11] and is popular for "data oriented" (that is, transactional non-publishing) XML use because of its
stronger typing and easier round-tripping to Java declarations[citation needed]. Most of the publishing world has
found that the added complexity of XSD would not bring them any particular benefits[citation needed], so DTDs are
still far more popular there. An XML Schema Definition is itself an XML document while a DTD is not.
53
Document Type Definition
• RELAX NG, which is also a part of DSDL, is an ISO international standard.[12] It is more expressive than
XSD[citation needed], while providing a simpler syntax[citation needed], but commercial software support has been
slow in coming.
References
[1] http:/ / en. wikipedia. org/ w/ index. php?title=Document_Type_Definition& action=edit
[2] http:/ / www. dsdl. org/
[3] http:/ / www. w3. org/ TR/ html4/ strict. dtd
[4] http:/ / www. w3. org/ TR/ html4/ loose. dtd
[5] http:/ / www. w3. org/ TR/ html4/ frameset. dtd
[7] Attribute-list Declaration (http:/ / www. w3. org/ TR/ xml11/ #dt-attdecl), Specifications of Extensible Markup Language (XML) 1.1, W3C.
[9] Notation Declarations (http:/ / www. w3. org/ TR/ REC-xml/ #Notations), Specifications of Extensible Markup Language (XML) 1.0, W3C.
[10] Notation Declarations (http:/ / www. w3. org/ TR/ xml11/ #NT-PublicID), Specifications of Extensible Markup Language (XML) 1.1,
W3C.
External links
• Definition of the XML document type declaration from Extensible Markup Language (XML) 1.0 (Fourth Edition)
on W3.org (http://www.w3.org/TR/REC-xml/#dt-doctype)
54
HTML
55
HTML
HTML
(HyperText Markup Language)
Filename extension
.html, .htm
Internet media type
text/html
Type code
TEXT
Uniform Type Identifier public.html
Developed by
World Wide Web Consortium & WHATWG
Type of format
Markup language
Extended from
SGML
Extended to
XHTML
Standard(s)
ISO/IEC 15445
[1]
W3C HTML 4.01
[2]
W3C HTML5
(draft)
HTML
•
HTML and HTML5; HTML editor
•
Dynamic HTML
•
XHTML
•
•
XHTML Basic (Mobile)
XHTML Mobile Profile and C-HTML
•
HTML element
•
Character encodings; Unicode
•
Language code
•
Document Object Model
•
Browser Object Model
•
Style sheets and CSS
•
Font family and Web colors
•
HTML scripting and JavaScript
•
W3C, WHATWG, and validator
•
Quirks mode
•
HTML Frames
•
HTML5 Canvas, WebGL, and WebCL
•
HTML5 Audio and HTML5 video
•
Web storage
•
Web browser (layout) engine
•
Comparison of
•
•
•
document markup languages
web browsers
layout engine support for
•
•
•
HTML; Non-standard HTML
XHTML (1.1)
HTML5; HTML5 canvas,
•
HTML5 media (Audio, Video)
HTML
56
HyperText Markup Language (HTML) is the main markup language for creating web pages and other
information that can be displayed in a web browser.
HTML is written in the form of HTML elements consisting of tags enclosed in angle brackets (like <html>), within
the web page content. HTML tags most commonly come in pairs like <h1> and </h1>, although some tags,
known as empty elements, are unpaired, for example <img>. The first tag in a pair is the start tag, the second tag is
the end tag (they are also called opening tags and closing tags). In between these tags web designers can add text,
tags, comments and other types of text-based content.
The purpose of a web browser is to read HTML documents and compose them into visible or audible web pages. The
browser does not display the HTML tags, but uses the tags to interpret the content of the page.
HTML elements form the building blocks of all websites. HTML allows images and objects to be embedded and can
be used to create interactive forms. It provides a means to create structured documents by denoting structural
semantics for text such as headings, paragraphs, lists, links, quotes and other items. It can embed scripts written in
languages such as JavaScript which affect the behavior of HTML web pages.
Web browsers can also refer to Cascading Style Sheets (CSS) to define the appearance and layout of text and other
material. The W3C, maintainer of both the HTML and the CSS standards, encourages the use of CSS over explicit
presentational HTML markup.[3]
History
The historic logo made by
the W3C
Development
In 1980, physicist Tim Berners-Lee, who was a contractor at CERN, proposed
and prototyped ENQUIRE, a system for CERN researchers to use and share
documents. In 1989, Berners-Lee wrote a memo proposing an Internet-based
hypertext system.[4] Berners-Lee specified HTML and wrote the browser and
server software in the last part of 1990. In that year, Berners-Lee and CERN data
systems engineer Robert Cailliau collaborated on a joint request for funding, but
the project was not formally adopted by CERN. In his personal notes[5] from
1990 he listed[6] "some of the many areas in which hypertext is used" and put an
encyclopedia first.
The first publicly available description of HTML was a document called "HTML
Tags", first mentioned on the Internet by Berners-Lee in late 1991.[][7] It
describes 18 elements comprising the initial, relatively simple design of HTML.
Tim Berners-Lee
Except for the hyperlink tag, these were strongly influenced by SGMLguid, an
in-house SGML-based documentation format at CERN. Eleven of these elements still exist in HTML 4.[8]
HTML
57
HyperText Markup Language is a markup language that web browsers use to interpret and compose text, images and
other material into visual or audible web pages. Default characteristics for every item of HTML markup are defined
in the browser, and these characteristics can be altered or enhanced by the web page designer's additional use of
CSS. Many of the text elements are found in the 1988 ISO technical report TR 9537 Techniques for using SGML,
which in turn covers the features of early text formatting languages such as that used by the RUNOFF command
developed in the early 1960s for the CTSS (Compatible Time-Sharing System) operating system: these formatting
commands were derived from the commands used by typesetters to manually format documents. However, the
SGML concept of generalized markup is based on elements (nested annotated ranges with attributes) rather than
merely print effects, with also the separation of structure and processing; HTML has been progressively moved in
this direction with CSS.
Berners-Lee considered HTML to be an application of SGML. It was formally defined as such by the Internet
Engineering Task Force (IETF) with the mid-1993 publication of the first proposal for an HTML specification:
"Hypertext Markup Language (HTML)" Internet-Draft [9] by Berners-Lee and Dan Connolly, which included an
SGML Document Type Definition to define the grammar.[10] The draft expired after six months, but was notable for
its acknowledgment of the NCSA Mosaic browser's custom tag for embedding in-line images, reflecting the IETF's
philosophy of basing standards on successful prototypes.[] Similarly, Dave Raggett's competing Internet-Draft,
"HTML+ (Hypertext Markup Format)", from late 1993, suggested standardizing already-implemented features like
tables and fill-out forms.[]
After the HTML and HTML+ drafts expired in early 1994, the IETF created an HTML Working Group, which in
1995 completed "HTML 2.0", the first HTML specification intended to be treated as a standard against which future
implementations should be based.[11]
Further development under the auspices of the IETF was stalled by competing interests. Since 1996, the HTML
specifications have been maintained, with input from commercial software vendors, by the World Wide Web
Consortium (W3C).[] However, in 2000, HTML also became an international standard (ISO/IEC 15445:2000).
HTML 4.01 was published in late 1999, with further errata published through 2001. In 2004 development began on
HTML5 in the Web Hypertext Application Technology Working Group (WHATWG), which became a joint
deliverable with the W3C in 2008.
Version history of the standard
HTML
•
HTML and HTML5; HTML editor
•
Dynamic HTML
•
XHTML
•
•
XHTML Basic (Mobile)
XHTML Mobile Profile and C-HTML
•
HTML element
•
Character encodings; Unicode
•
Language code
•
Document Object Model
•
Browser Object Model
•
Style sheets and CSS
•
Font family and Web colors
•
HTML scripting and JavaScript
•
W3C, WHATWG, and validator
•
Quirks mode
•
HTML Frames
•
HTML5 Canvas, WebGL, and WebCL
HTML
58
•
HTML5 Audio and HTML5 video
•
Web storage
•
Web browser (layout) engine
•
Comparison of
•
•
•
document markup languages
web browsers
layout engine support for
•
•
•
HTML; Non-standard HTML
XHTML (1.1)
HTML5; HTML5 canvas,
•
HTML5 media (Audio, Video)
HTML version timeline
November 24, 1995
HTML 2.0 was published as IETF RFC 1866. Supplemental RFCs added capabilities:
•
•
•
•
November 25, 1995: RFC 1867 (form-based file upload)
May 1996: RFC 1942 (tables)
August 1996: RFC 1980 (client-side image maps)
January 1997: RFC 2070 (internationalization)
January 1997
HTML 3.2[12] was published as a W3C Recommendation. It was the first version developed and standardized
exclusively by the W3C, as the IETF had closed its HTML Working Group in September 1996.[13]
Initially code-named "Wilbur",[] HTML 3.2 dropped math formulas entirely, reconciled overlap among various
proprietary extensions and adopted most of Netscape's visual markup tags. Netscape's blink element and
Microsoft's marquee element were omitted due to a mutual agreement between the two companies.[] A markup
for mathematical formulas similar to that in HTML was not standardized until 14 months later in MathML.
December 1997
HTML 4.0[14] was published as a W3C Recommendation. It offers three variations:
• Strict, in which deprecated elements are forbidden,
• Transitional, in which deprecated elements are allowed,
• Frameset, in which mostly only frame related elements are allowed;
Initially code-named "Cougar",[] HTML 4.0 adopted many browser-specific element types and attributes, but
at the same time sought to phase out Netscape's visual markup features by marking them as deprecated in
favor of style sheets. HTML 4 is an SGML application conforming to ISO 8879 – SGML.[15]
April 1998
HTML 4.0[16] was reissued with minor edits without incrementing the version number.
December 1999
HTML 4.01[17] was published as a W3C Recommendation. It offers the same three variations as HTML 4.0
and its last errata [18] were published May 12, 2001.
May 2000
ISO/IEC 15445:2000[][19] ("ISO HTML", based on HTML 4.01 Strict) was published as an ISO/IEC
international standard. In the ISO this standard falls in the domain of the ISO/IEC JTC1/SC34 (ISO/IEC Joint
Technical Committee 1, Subcommittee 34 – Document description and processing languages).[]
As of mid-2008, HTML 4.01 and ISO/IEC 15445:2000 are the most recent versions of HTML. Development
of the parallel, XML-based language XHTML occupied the W3C's HTML Working Group through the early
HTML
59
and mid-2000s.
HTML draft version timeline
October 1991
HTML Tags,[] an informal CERN document listing eighteen
HTML tags, was first mentioned in public.
June 1992
First informal draft of the HTML DTD,[20] with
seven[21][22][23] subsequent revisions (July 15, August 6,
August 18, November 17, November 19, November 20,
November 22)
November 1992
HTML DTD 1.1 (the first with a version number, based on
RCS revisions, which start with 1.1 rather than 1.0), an
informal draft[23]
Logo of HTML5
June 1993
Hypertext Markup Language[24] was published by the IETF IIIR Working Group as an Internet-Draft (a rough
proposal for a standard). It was replaced by a second version[] one month later, followed by six further drafts
published by IETF itself[25] that finally led to HTML 2.0 in RFC1866
November 1993
HTML+ was published by the IETF as an Internet-Draft and was a competing proposal to the Hypertext
Markup Language draft. It expired in May 1994.
April 1995 (authored March 1995)
HTML 3.0[26] was proposed as a standard to the IETF, but the proposal expired five months later without
further action. It included many of the capabilities that were in Raggett's HTML+ proposal, such as support for
tables, text flow around figures and the display of complex mathematical formulas.[27]
W3C began development of its own Arena browser as a test bed for HTML 3 and Cascading Style
Sheets,[28][29][30] but HTML 3.0 did not succeed for several reasons. The draft was considered very large at
150 pages and the pace of browser development, as well as the number of interested parties, had outstripped
the resources of the IETF.[] Browser vendors, including Microsoft and Netscape at the time, chose to
implement different subsets of HTML 3's draft features as well as to introduce their own extensions to it.[] (See
Browser wars) These included extensions to control stylistic aspects of documents, contrary to the "belief [of
the academic engineering community] that such things as text color, background texture, font size and font
face were definitely outside the scope of a language when their only intent was to specify how a document
would be organized."[] Dave Raggett, who has been a W3C Fellow for many years has commented for
example, "To a certain extent, Microsoft built its business on the Web by extending HTML features."[]
January 2008
HTML5 was published as a Working Draft (link [31]) by the W3C.[32]
Although its syntax closely resembles that of SGML, HTML5 has abandoned any attempt to be an SGML
application and has explicitly defined its own "html" serialization, in addition to an alternative XML-based
XHTML5 serialization.[33]
May 2011
HTML
60
On 14 February 2011, the W3C extended the charter of its HTML Working Group [34] with clear milestones
for HTML5. In May 2011, the working group advanced HTML5 to "Last Call", an invitation to communities
inside and outside W3C to confirm the technical soundness of the specification. The W3C is developing a
comprehensive test suite to achieve broad interoperability for the full specification by 2014, which is now the
target date for Recommendation.[]
XHTML versions
XHTML is a separate language that began as a reformulation of HTML 4.01 using XML 1.0. It continues to be
developed:
• XHTML 1.0,[35] published January 26, 2000, as a W3C Recommendation, later revised and republished August 1,
2002. It offers the same three variations as HTML 4.0 and 4.01, reformulated in XML, with minor restrictions.
• XHTML 1.1,[36] published May 31, 2001, as a W3C Recommendation. It is based on XHTML 1.0 Strict, but
includes minor changes, can be customized, is reformulated using modules from Modularization of XHTML [37],
which was published April 10, 2001, as a W3C Recommendation.
• XHTML 2.0 was a working draft, but work on it was abandoned in 2009 in favor of work on HTML5 and
XHTML5.[38][39][40] XHTML 2.0 was incompatible with XHTML 1.x and, therefore, would be more accurately
characterized as an XHTML-inspired new language than an update to XHTML 1.x.
• XHTML5, which is an update to XHTML 1.x, is being defined alongside HTML5 in the HTML5 draft.[41]
Markup
HTML markup consists of several key components, including elements (and their attributes), character-based data
types, character references and entity references. Another important component is the document type declaration,
which triggers standards mode rendering.
The following is an example of the classic Hello world program, a common test employed for comparing
programming languages, scripting languages and markup languages. This example is made using 9 lines of code:
<!DOCTYPE html>
<html>
<head>
<title>Hello HTML</title>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
(The text between <html> and </html> describes the web page, and the text between <body> and </body> is the
visible page content. The markup text '<title>Hello HTML</title>' defines the browser page title.)
This Document Type Declaration is for HTML5. If the <!DOCTYPE html> declaration is not included, various
browsers will revert to "quirks mode" for rendering.[42]
HTML
61
Elements
HTML documents are composed entirely of HTML elements that, in their most general form have three
components: a pair of tags, a "start tag" and "end tag"; some attributes within the start tag; and finally, any textual
and graphical content between the start and end tags, perhaps including other nested elements. The HTML element
is everything between and including the start and end tags. Each tag is enclosed in angle brackets.
The general form of an HTML element is therefore: <tag
attribute1="value1"
attribute2="value2">content</tag>. Some HTML elements are defined as empty elements and take the
form <tag attribute1="value1" attribute2="value2" >. Empty elements may enclose no content,
for instance, the BR tag or the inline IMG tag. The name of an HTML element is the name used in the tags. Note that
the end tag's name is preceded by a slash character, "/", and that in empty elements the end tag is neither required nor
allowed. If attributes are not mentioned, default values are used in each case.
Element examples
Header of the HTML document:<head>...</head>. Usually the title should be included in the head, for example:
<head>
<title>The Title</title>
</head>
Headings: HTML headings are defined with the <h1> to <h6> tags:
<h1>Heading1</h1>
<h2>Heading2</h2>
<h3>Heading3</h3>
<h4>Heading4</h4>
<h5>Heading5</h5>
<h6>Heading6</h6>
Paragraphs:
<p>Paragraph 1</p>
<p>Paragraph 2</p>
Line breaks:<br />. The difference between <br /> and <p> is that 'br' breaks a line without altering the semantic
structure of the page, whereas 'p' sections the page into paragraphs. Note also that 'br' is an empty element in that,
while it may have attributes, it can take no content and it may not have an end tag.
<p>This <br /> is a paragraph <br /> with <br /> line breaks</p>
Comments:
<!-- This is a comment -->
Comments can help in the understanding of the markup and do not display in the webpage.
There are several types of markup elements used in HTML:
Structural markup describes the purpose of text
For example, <h2>Golf</h2> establishes "Golf" as a second-level heading. Structural markup does not
denote any specific rendering, but most web browsers have default styles for element formatting. Content may
be further styled using Cascading Style Sheets (CSS).
Presentational markup describes the appearance of the text, regardless of its purpose
For example <b>boldface</b> indicates that visual output devices should render "boldface" in bold text,
but gives little indication what devices that are unable to do this (such as aural devices that read the text aloud)
HTML
62
should do. In the case of both <b>bold</b> and <i>italic</i>, there are other elements that may
have equivalent visual renderings but which are more semantic in nature, such as <strong>strong
text</strong> and <em>emphasised text</em> respectively. It is easier to see how an aural user
agent should interpret the latter two elements. However, they are not equivalent to their presentational
counterparts: it would be undesirable for a screen-reader to emphasize the name of a book, for instance, but on
a screen such a name would be italicized. Most presentational markup elements have become deprecated under
the HTML 4.0 specification in favor of using CSS for styling.
Hypertext markup makes parts of a document into links to other documents
An anchor element creates a hyperlink in the document and its href attribute sets the link's target URL. For
example the HTML markup, <a href="http://www.google.com/">Wikipedia</a>, will render
the word "Wikipedia [43]" as a hyperlink. To render an image as a hyperlink, an 'img' element is inserted as
content into the 'a' element. Like 'br', 'img' is an empty element with attributes but no content or closing tag.
<a href="http://example.org"><img src="image.gif" alt="descriptive text"
width="50" height="50" border="0"></a>.
Attributes
Most of the attributes of an element are name-value pairs, separated by "=" and written within the start tag of an
element after the element's name. The value may be enclosed in single or double quotes, although values consisting
of certain characters can be left unquoted in HTML (but not XHTML).[44][45] Leaving attribute values unquoted is
considered unsafe.[46] In contrast with name-value pair attributes, there are some attributes that affect the element
simply by their presence in the start tag of the element,[] like the ismap attribute for the img element.[47]
There are several common attributes that may appear in many elements:
• The id attribute provides a document-wide unique identifier for an element. This is used to identify the element
so that stylesheets can alter its presentational properties, and scripts may alter, animate or delete its contents or
presentation. Appended to the URL of the page, it provides a globally unique identifier for the element, typically
a sub-section of the page. For example, the ID "Attributes" in
http://en.wikipedia.org/wiki/HTML#Attributes
• The class attribute provides a way of classifying similar elements. This can be used for semantic or
presentation purposes. For example, an HTML document might semantically use the designation
class="notation" to indicate that all elements with this class value are subordinate to the main text of the
document. In presentation, such elements might be gathered together and presented as footnotes on a page instead
of appearing in the place where they occur in the HTML source. Class attributes are used semantically in
microformats. Multiple class values may be specified; for example class="notation important" puts
the element into both the 'notation' and the 'important' classes.
• An author may use the style attribute to assign presentational properties to a particular element. It is
considered better practice to use an element's id or class attributes to select the element from within a
stylesheet, though sometimes this can be too cumbersome for a simple, specific, or ad hoc styling.
• The title attribute is used to attach subtextual explanation to an element. In most browsers this attribute is
displayed as a tooltip.
• The lang attribute identifies the natural language of the element's contents, which may be different from that of
the rest of the document. For example, in an English-language document:
<p>Oh well, <span lang="fr">c'est la vie</span>, as they say in France.</p>
The abbreviation element, abbr, can be used to demonstrate some of these attributes:
<abbr id="anId" class="jargon" style="color:purple;" title="Hypertext Markup Language">HTML</abbr>
HTML
This example displays as HTML; in most browsers, pointing the cursor at the abbreviation should display the title
text "Hypertext Markup Language."
Most elements also take the language-related attribute dir to specify text direction, such as with "rtl" for
right-to-left text in, for examples, Arabic, Persian or Hebrew.[48]
Character and entity references
As of version 4.0, HTML defines a set of 252 character entity references and a set of 1,114,050 numeric character
references, both of which allow individual characters to be written via simple markup, rather than literally. A literal
character and its markup counterpart are considered equivalent and are rendered identically.
The ability to "escape" characters in this way allows for the characters < and & (when written as &lt; and
&amp;, respectively) to be interpreted as character data, rather than markup. For example, a literal < normally
indicates the start of a tag, and & normally indicates the start of a character entity reference or numeric character
reference; writing it as &amp; or &#x26; or &#38; allows & to be included in the content of an element or in
the value of an attribute. The double-quote character ("), when not used to quote an attribute value, must also be
escaped as &quot; or &#x22; or &#34; when it appears within the attribute value itself. Equivalently, the
single-quote character ('), when not used to quote an attribute value, must also be escaped as &#x27; or &#39;
(not as &apos; except in XHTML documents[]) when it appears within the attribute value itself. If document
authors overlook the need to escape such characters, some browsers can be very forgiving and try to use context to
guess their intent. The result is still invalid markup, which makes the document less accessible to other browsers and
to other user agents that may try to parse the document for search and indexing purposes for example.
Escaping also allows for characters that are not easily typed, or that are not available in the document's character
encoding, to be represented within element and attribute content. For example, the acute-accented e (é), a character
typically found only on Western European keyboards, can be written in any HTML document as the entity reference
&eacute; or as the numeric references &#xE9; or &#233;, using characters that are available on all keyboards
and are supported in all character encodings. Unicode character encodings such as UTF-8 are compatible with all
modern browsers and allow direct access to almost all the characters of the world's writing systems.[49]
Data types
HTML defines several data types for element content, such as script data and stylesheet data, and a plethora of types
for attribute values, including IDs, names, URIs, numbers, units of length, languages, media descriptors, colors,
character encodings, dates and times, and so on. All of these data types are specializations of character data.
Document type declaration
HTML documents are required to start with a Document Type Declaration (informally, a "doctype"). In browsers,
the doctype helps to define the rendering mode—particularly whether to use quirks mode.
The original purpose of the doctype was to enable parsing and validation of HTML documents by SGML tools based
on the Document Type Definition (DTD). The DTD to which the DOCTYPE refers contains a machine-readable
grammar specifying the permitted and prohibited content for a document conforming to such a DTD. Browsers, on
the other hand, do not implement HTML as an application of SGML and by consequence do not read the DTD.
HTML5 does not define a DTD; therefore, in HTML5 the doctype declaration is simpler and shorter:
<!doctype html>
An example of an HTML 4 doctype is
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
63
HTML
This declaration references the DTD for the 'strict' version of HTML 4.01. SGML-based validators read the DTD in
order to properly parse the document and to perform validation. In modern browsers, a valid doctype activates
standards mode as opposed to quirks mode.
In addition, HTML 4.01 provides Transitional and Frameset DTDs, as explained below.
Semantic HTML
Semantic HTML is a way of writing HTML that emphasizes the meaning of the encoded information over its
presentation (look). HTML has included semantic markup from its inception,[50] but has also included presentational
markup such as <font>, <i> and <center> tags. There are also the semantically neutral span and div tags.
Since the late 1990s when Cascading Style Sheets were beginning to work in most browsers, web authors have been
encouraged to avoid the use of presentational HTML markup with a view to the separation of presentation and
content.[51]
In a 2001 discussion of the Semantic Web, Tim Berners-Lee and others gave examples of ways in which intelligent
software 'agents' may one day automatically trawl the Web and find, filter and correlate previously unrelated,
published facts for the benefit of human users.[52] Such agents are not commonplace even now, but some of the ideas
of Web 2.0, mashups and price comparison websites may be coming close. The main difference between these web
application hybrids and Berners-Lee's semantic agents lies in the fact that the current aggregation and hybridization
of information is usually designed in by web developers, who already know the web locations and the API semantics
of the specific data they wish to mash, compare and combine.
An important type of web agent that does trawl and read web pages automatically, without prior knowledge of what
it might find, is the Web crawler or search-engine spider. These software agents are dependent on the semantic
clarity of web pages they find as they use various techniques and algorithms to read and index millions of web pages
a day and provide web users with search facilities without which the World Wide Web would be only a fraction of
its current usefulness.
In order for search-engine spiders to be able to rate the significance of pieces of text they find in HTML documents,
and also for those creating mashups and other hybrids as well as for more automated agents as they are developed,
the semantic structures that exist in HTML need to be widely and uniformly applied to bring out the meaning of
published text.[]
Presentational markup tags are deprecated in current HTML and XHTML recommendations and are illegal in
HTML5.
Good semantic HTML also improves the accessibility of web documents (see also Web Content Accessibility
Guidelines). For example, when a screen reader or audio browser can correctly ascertain the structure of a document,
it will not waste the visually impaired user's time by reading out repeated or irrelevant information when it has been
marked up correctly.
Delivery
HTML documents can be delivered by the same means as any other computer file. However, they are most often
delivered either by HTTP from a web server or by email.
HTTP
The World Wide Web is composed primarily of HTML documents transmitted from web servers to web browsers
using the Hypertext Transfer Protocol (HTTP). However, HTTP is used to serve images, sound, and other content, in
addition to HTML. To allow the Web browser to know how to handle each document it receives, other information
is transmitted along with the document. This meta data usually includes the MIME type (e.g. text/html or
application/xhtml+xml) and the character encoding (see Character encoding in HTML).
64
HTML
65
In modern browsers, the MIME type that is sent with the HTML document may affect how the document is initially
interpreted. A document sent with the XHTML MIME type is expected to be well-formed XML; syntax errors may
cause the browser to fail to render it. The same document sent with the HTML MIME type might be displayed
successfully, since some browsers are more lenient with HTML.
The W3C recommendations state that XHTML 1.0 documents that follow guidelines set forth in the
recommendation's Appendix C may be labeled with either MIME Type.[53] XHTML 1.1 also states that XHTML 1.1
documents should[54] be labeled with either MIME type.[55]
HTML e-mail
Most graphical email clients allow the use of a subset of HTML (often ill-defined) to provide formatting and
semantic markup not available with plain text. This may include typographic information like coloured headings,
emphasized and quoted text, inline images and diagrams. Many such clients include both a GUI editor for composing
HTML e-mail messages and a rendering engine for displaying them. Use of HTML in e-mail is controversial
because of compatibility issues, because it can help disguise phishing attacks, because of accessibility issues for
blind or visually impaired people, because it can confuse spam filters and because the message size is larger than
plain text.
Naming conventions
The most common filename extension for files containing HTML is .html. A common abbreviation of this is
.htm, which originated because some early operating systems and file systems, such as DOS and FAT, limited file
extensions to three letters.
HTML Application
An HTML Application (HTA; file extension ".hta") is a Microsoft Windows application that uses HTML and
Dynamic HTML in a browser to provide the application's graphical interface. A regular HTML file is confined to the
security model of the web browser's security, communicating only to web servers and manipulating only webpage
objects and site cookies. An HTA runs as a fully trusted application and therefore has more privileges, like
creation/editing/removal of files and Windows Registry entries. Because they operate outside the browser's security
model, HTAs cannot be executed via HTTP, but must be downloaded (just like an EXE file) and executed from local
file system.
Current variations
HTML is precisely what we were trying to PREVENT— ever-breaking links, links going outward only, quotes you can't follow to
their origins, no version management, no rights management.
[56]
Ted Nelson
Since its inception, HTML and its associated protocols gained acceptance relatively quickly. However, no clear
standards existed in the early years of the language. Though its creators originally conceived of HTML as a semantic
language devoid of presentation details,[57] practical uses pushed many presentational elements and attributes into
the language, driven largely by the various browser vendors. The latest standards surrounding HTML reflect efforts
to overcome the sometimes chaotic development of the language[58] and to create a rational foundation for building
both meaningful and well-presented documents. To return HTML to its role as a semantic language, the W3C has
developed style languages such as CSS and XSL to shoulder the burden of presentation. In conjunction, the HTML
specification has slowly reined in the presentational elements.
There are two axes differentiating various variations of HTML as currently specified: SGML-based HTML versus
XML-based HTML (referred to as XHTML) on one axis, and strict versus transitional (loose) versus frameset on the
HTML
other axis.
SGML-based versus XML-based HTML
One difference in the latest HTML specifications lies in the distinction between the SGML-based specification and
the XML-based specification. The XML-based specification is usually called XHTML to distinguish it clearly from
the more traditional definition. However, the root element name continues to be 'html' even in the XHTML-specified
HTML. The W3C intended XHTML 1.0 to be identical to HTML 4.01 except where limitations of XML over the
more complex SGML require workarounds. Because XHTML and HTML are closely related, they are sometimes
documented in parallel. In such circumstances, some authors conflate the two names as (X)HTML or X(HTML).
Like HTML 4.01, XHTML 1.0 has three sub-specifications: strict, transitional and frameset.
Aside from the different opening declarations for a document, the differences between an HTML 4.01 and XHTML
1.0 document—in each of the corresponding DTDs—are largely syntactic. The underlying syntax of HTML allows
many shortcuts that XHTML does not, such as elements with optional opening or closing tags, and even EMPTY
elements which must not have an end tag. By contrast, XHTML requires all elements to have an opening tag and a
closing tag. XHTML, however, also introduces a new shortcut: an XHTML tag may be opened and closed within the
same tag, by including a slash before the end of the tag like this: <br/>. The introduction of this shorthand, which
is not used in the SGML declaration for HTML 4.01, may confuse earlier software unfamiliar with this new
convention. A fix for this is to include a space before closing the tag, as such: <br />.[59]
To understand the subtle differences between HTML and XHTML, consider the transformation of a valid and
well-formed XHTML 1.0 document that adheres to Appendix C (see below) into a valid HTML 4.01 document. To
make this translation requires the following steps:
1. The language for an element should be specified with a lang attribute rather than the XHTML
xml:lang attribute. XHTML uses XML's built in language-defining functionality attribute.
2. Remove the XML namespace (xmlns=URI). HTML has no facilities for namespaces.
3. Change the document type declaration from XHTML 1.0 to HTML 4.01. (see DTD section for further
explanation).
4. If present, remove the XML declaration. (Typically this is: <?xml version="1.0"
encoding="utf-8"?>).
5. Ensure that the document's MIME type is set to text/html. For both HTML and XHTML, this comes from
the HTTP Content-Type header sent by the server.
6. Change the XML empty-element syntax to an HTML style empty element (<br/> to <br>).
Those are the main changes necessary to translate a document from XHTML 1.0 to HTML 4.01. To translate from
HTML to XHTML would also require the addition of any omitted opening or closing tags. Whether coding in
HTML or XHTML it may just be best to always include the optional tags within an HTML document rather than
remembering which tags can be omitted.
A well-formed XHTML document adheres to all the syntax requirements of XML. A valid document adheres to the
content specification for XHTML, which describes the document structure.
The W3C recommends several conventions to ensure an easy migration between HTML and XHTML (see HTML
Compatibility Guidelines [60]). The following steps can be applied to XHTML 1.0 documents only:
• Include both xml:lang and lang attributes on any elements assigning language.
• Use the empty-element syntax only for elements specified as empty in HTML.
• Include an extra space in empty-element tags: for example <br /> instead of <br/>.
• Include explicit close tags for elements that permit content but are left empty (for example, <div></div>, not
<div />).
• Omit the XML declaration.
66
HTML
67
By carefully following the W3C's compatibility guidelines, a user agent should be able to interpret the document
equally as HTML or XHTML. For documents that are XHTML 1.0 and have been made compatible in this way, the
W3C permits them to be served either as HTML (with a text/html MIME type), or as XHTML (with an
application/xhtml+xml or application/xml MIME type). When delivered as XHTML, browsers
should use an XML parser, which adheres strictly to the XML specifications for parsing the document's contents.
Transitional versus strict
HTML 4 defined three different versions of the language: Strict, Transitional (once called Loose) and Frameset. The
Strict version is intended for new documents and is considered best practice, while the Transitional and Frameset
versions were developed to make it easier to transition documents that conformed to older HTML specification or
didn't conform to any specification to a version of HTML 4. The Transitional and Frameset versions allow for
presentational markup, which is omitted in the Strict version. Instead, cascading style sheets are encouraged to
improve the presentation of HTML documents. Because XHTML 1 only defines an XML syntax for the language
defined by HTML 4, the same differences apply to XHTML 1 as well.
The Transitional version allows the following parts of the vocabulary, which are not included in the Strict version:
• A looser content model
• Inline elements and plain text are allowed directly in: body, blockquote, form, noscript and
noframes
• Presentation related elements
• underline (u)(Deprecated. can confuse a visitor with a hyperlink.)
• strike-through (s)
• center (Deprecated. use CSS instead.)
• font (Deprecated. use CSS instead.)
• basefont (Deprecated. use CSS instead.)
• Presentation related attributes
• background (Deprecated. use CSS instead.) and bgcolor (Deprecated. use CSS instead.) attributes for
body (required element according to the W3C.) element.
• align (Deprecated. use CSS instead.) attribute on div, form, paragraph (p) and heading (h1...h6) elements
• align (Deprecated. use CSS instead.), noshade (Deprecated. use CSS instead.), size (Deprecated. use
CSS instead.) and width (Deprecated. use CSS instead.) attributes on hr element
• align (Deprecated. use CSS instead.), border, vspace and hspace attributes on img and object
(caution: the object element is only supported in Internet Explorer (from the major browsers)) elements
• align (Deprecated. use CSS instead.) attribute on legend and caption elements
• align (Deprecated. use CSS instead.) and bgcolor (Deprecated. use CSS instead.) on table element
• nowrap (Obsolete), bgcolor (Deprecated. use CSS instead.), width, height on td and th elements
• bgcolor (Deprecated. use CSS instead.) attribute on tr element
• clear (Obsolete) attribute on br element
• compact attribute on dl, dir and menu elements
• type (Deprecated. use CSS instead.), compact (Deprecated. use CSS instead.) and start (Deprecated.
use CSS instead.) attributes on ol and ul elements
• type and value attributes on li element
• width attribute on pre element
• Additional elements in Transitional specification
• menu (Deprecated. use CSS instead.) list (no substitute, though unordered list is recommended)
• dir (Deprecated. use CSS instead.) list (no substitute, though unordered list is recommended)
HTML
68
• isindex (Deprecated.) (element requires server-side support and is typically added to documents server-side,
form and input elements can be used as a substitute)
• applet (Deprecated. use the object element instead.)
• The language (Obsolete) attribute on script element (redundant with the type attribute).
• Frame related entities
• iframe
• noframes
• target (Deprecated in the map, link and form elements.) attribute on a, client-side image-map (map),
link, form and base elements
The Frameset version includes everything in the Transitional version, as well as the frameset element (used
instead of body) and the frame element.
Frameset versus transitional
In addition to the above transitional differences, the frameset specifications (whether XHTML 1.0 or HTML 4.01)
specifies a different content model, with frameset replacing body, that contains either frame elements, or
optionally noframes with a body.
Summary of specification versions
As this list demonstrates, the loose versions of the specification are maintained for legacy support. However,
contrary to popular misconceptions, the move to XHTML does not imply a removal of this legacy support. Rather
the X in XML stands for extensible and the W3C is modularizing the entire specification and opening it up to
independent extensions. The primary achievement in the move from XHTML 1.0 to XHTML 1.1 is the
modularization of the entire specification. The strict version of HTML is deployed in XHTML 1.1 through a set of
modular extensions to the base XHTML 1.1 specification. Likewise, someone looking for the loose (transitional) or
frameset specifications will find similar extended XHTML 1.1 support (much of it is contained in the legacy or
frame modules). The modularization also allows for separate features to develop on their own timetable. So for
example, XHTML 1.1 will allow quicker migration to emerging XML standards such as MathML (a presentational
and semantic math language based on XML) and XForms—a new highly advanced web-form technology to replace
the existing HTML forms.
In summary, the HTML 4.01 specification primarily reined in all the various HTML implementations into a single
clearly written specification based on SGML. XHTML 1.0, ported this specification, as is, to the new XML defined
specification. Next, XHTML 1.1 takes advantage of the extensible nature of XML and modularizes the whole
specification. XHTML 2.0 was intended to be the first step in adding new features to the specification in a
standards-body-based approach.
WhatWG HTML versus HTML5
The WhatWG considers their work as living standard HTML for what constitutes the state of the art in major
browser implementations by Apple (Safari), Google (Chrome), Microsoft (IE), Mozilla (Firefox), Opera (Opera),
and others. HTML5 is specified by the HTML Working Group of the W3C following the W3C process. As of
2013[61] both specifications are similar and mostly derived from each other, i.e., the work on HTML5 started with
an older WhatWG draft, and later the WhatWG living standard was based on HTML5 drafts in 2011.[62][63]
HTML
Hypertext features not in HTML
HTML lacks some of the features found in earlier hypertext systems, such as typed links, source tracking, fat links
and others.[64] Even some hypertext features that were in early versions of HTML have been ignored by most
popular web browsers until recently, such as the link element and in-browser Web page editing.
Sometimes Web services or browser manufacturers remedy these shortcomings. For instance, wikis and content
management systems allow surfers to edit the Web pages they visit.
WYSIWYG editors
There are some WYSIWYG editors (What You See Is What You Get), in which the user lays out everything as it is
to appear in the HTML document using a graphical user interface (GUI), where the editor renders this as an HTML
document, no longer requiring the author to have extensive knowledge of HTML.
The WYSIWYG editing model has been criticized,[65][66] primarily because of the low quality of the generated code;
there are voices advocating a change to the WYSIWYM model (What You See Is What You Mean).
WYSIWYG editors remains a controversial topic because of their perceived flaws such as:
• Relying mainly on layout as opposed to meaning, often using markup that does not convey the intended meaning
but simply copies the layout.[67]
• Often producing extremely verbose and redundant code that fails to make use of the cascading nature of HTML
and CSS.
• Often producing ungrammatical markup often called tag soup.
• As a great deal of the information in HTML documents is not in the layout, the model has been criticized for its
"what you see is all you get"-nature.[68]
References
[1] http:/ / www. w3. org/ TR/ 1999/ REC-html401-19991224/
[2] http:/ / dev. w3. org/ html5/ spec/
[3] HTML 4 — Conformance: requirements and recommendations (http:/ / www. w3. org/ TR/ html401/ conform. html#deprecated). W3.org.
Retrieved on 2012-02-16.
[4] Tim Berners-Lee, "Information Management: A Proposal." CERN (March 1989, May 1990). W3.org (http:/ / www. w3. org/ History/ 1989/
proposal. html)
[5] Tim Berners-Lee, "Design Issues" (http:/ / www. w3. org/ DesignIssues/ )
[6] Tim Berners-Lee, "Design Issues" (http:/ / www. w3. org/ DesignIssues/ Uses. html)
[9] http:/ / www. w3. org/ MarkUp/ draft-ietf-iiir-html-01. txt
[18] http:/ / www. w3. org/ MarkUp/ html4-updates/ errata
[19] Cs.Tcd.Ie (https:/ / www. cs. tcd. ie/ 15445/ 15445. HTML). Cs.Tcd.Ie (2000-05-15). Retrieved on 2012-02-16.
[23] See section "Revision History"
[31] http:/ / www. w3. org/ TR/ html5/
[34] http:/ / www. w3. org/ html/ wg/
[37] http:/ / www. w3. org/ TR/ xhtml-modularization/
[42] Activating Browser Modes with Doctype (http:/ / hsivonen. iki. fi/ doctype/ ). Hsivonen.iki.fi. Retrieved on 2012-02-16.
[43] http:/ / www. google. com/
[51] This article notes that presentational HTML markup may be useful when targeting browsers "before Netscape 4.0 and Internet Explorer 4.0".
See the list of web browsers to confirm that these were both released in 1997.
[57] HTML Design Constraints (http:/ / www. w3. org/ History/ 19921103-hypertext/ hypertext/ WWW/ MarkUp/ HTMLConstraints. html),
W3C Archives
[58] WWW:BTB – HTML (http:/ / ei. cs. vt. edu/ ~wwwbtb/ book/ chap13/ who. html), Pris Sears
[59] Freeman, E (2005). Head First HTML. O'Reilly.
[60] http:/ / www. w3. org/ TR/ xhtml1/ #guidelines
[61] http:/ / en. wikipedia. org/ w/ index. php?title=HTML& action=edit
[65] Sauer, C.: WYSIWIKI – Questioning WYSIWYG in the Internet Age. In: Wikimania (2006)
[66] Spiesser, J., Kitchen, L.: Optimization of HTML automatically generated by WYSIWYG programs. In: 13th International Conference on
World Wide Web, pp. 355—364. WWW '04. ACM, New York, NY (New York, NY, U.S., May 17–20, 2004)
69
HTML
[67] XHTML Reference: blockquote (http:/ / xhtml. com/ en/ xhtml/ reference/ blockquote/ ). Xhtml.com. Retrieved on 2012-02-16.
[68] Doug Engelbart's INVISIBLE REVOLUTION (http:/ / www. invisiblerevolution. net/ ). Invisiblerevolution.net. Retrieved on 2012-02-16.
External links
•
•
•
•
•
HTML 4.01, the most recent finished specification (1999) (http://www.w3.org/TR/html401/)
HTML5, the upcoming version of HTML (http://dev.w3.org/html5/spec/spec.html)
Dave Raggett's Introduction to HTML (http://www.w3.org/MarkUp/Guide/)
Empty elements in SGML, HTML, XML and XHTML (http://www.cs.tut.fi/~jkorpela/html/empty.html)
Tim Berners-Lee Gives the Web a New Definition (http://computemagazine.com/
man-who-invented-world-wide-web-gives-new-definition/)
• Comparison Matrix of HTML5-oriented Software (http://www.html5libs.com/)
Tutorials
• Beginners Tutorial (http://www.referencedesigner.com/tutorials/html/html_1.php)
• HTML Dog (http://htmldog.com/guides/)
70
XHTML
71
XHTML
XHTML
Filename extension .xhtml, .xht,
.xml, .html, .htm
Internet media type application/xhtml+xml
Developed by
World Wide Web Consortium
Initial release
26 January 2000
Latest release
1.1 (Second Edition) / 23 November 2010
Type of format
Markup language
Extended from
XML, HTML
Standard(s)
[1]
1.0 (Recommendation) ,
[2]
1.0 SE (Recommendation) ,
[3]
1.1 (Recommendation) ,
[4]
1.1 SE (Recommendation) ,
[31]
5 (Working Draft)
HTML
•
HTML and HTML5; HTML editor
•
Dynamic HTML
•
XHTML
•
•
XHTML Basic (Mobile)
XHTML Mobile Profile and C-HTML
•
HTML element
•
Character encodings; Unicode
•
Language code
•
Document Object Model
•
Browser Object Model
•
Style sheets and CSS
•
Font family and Web colors
•
HTML scripting and JavaScript
•
W3C, WHATWG, and validator
•
Quirks mode
•
HTML Frames
•
HTML5 Canvas, WebGL, and WebCL
•
HTML5 Audio and HTML5 video
•
Web storage
XHTML
72
•
Web browser (layout) engine
•
Comparison of
•
•
•
document markup languages
web browsers
layout engine support for
•
•
•
HTML; Non-standard HTML
XHTML (1.1)
HTML5; HTML5 canvas,
•
HTML5 media (Audio, Video)
XHTML (Extensible HyperText Markup Language) is a family of XML markup languages that mirror or extend
versions of the widely used Hypertext Markup Language (HTML), the language in which web pages are written.
While HTML (prior to HTML5) was defined as an application of Standard Generalized Markup Language (SGML),
a very flexible markup language framework, XHTML is an application of XML, a more restrictive subset of SGML.
Because XHTML documents need to be well-formed, they can be parsed using standard XML parsers—unlike
HTML, which requires a lenient HTML-specific parser.
XHTML 1.0 became a World Wide Web Consortium (W3C) Recommendation on January 26, 2000. XHTML 1.1
became a W3C Recommendation on May 31, 2001. XHTML5 is undergoing development as of September 2009, as
part of the HTML5 specification.
Overview
XHTML 1.0 is "a reformulation of the three HTML 4 document types as applications of XML 1.0".[] The World
Wide Web Consortium (W3C) also continues to maintain the HTML 4.01 Recommendation, and the specifications
for HTML5 and XHTML5 are being actively developed. In the current XHTML 1.0 Recommendation document, as
published and revised to August 2002, the W3C commented that, "The XHTML family is the next step in the
evolution of the Internet. By migrating to XHTML today, content developers can enter the XML world with all of its
attendant benefits, while still remaining confident in their content's backward and future compatibility."[]
However, in 2005, the Web Hypertext Application Technology Working Group (WHATWG) formed, independently
of the W3C, to work on advancing ordinary HTML not based on XHTML. The WHATWG eventually began
working on a standard that supported both XML and non-XML serializations, HTML5, in parallel to W3C standards
such as XHTML 2. In 2007, the W3C's HTML working group voted to officially recognize HTML5 and work on it
as the next-generated HTML standard.[5] In 2009, the W3C allowed the XHTML 2 Working Group's charter to
expire, acknowledging that HTML5 would be the sole next-generation HTML standard, including both XML and
non-XML serializations.[6] Of the two serializations, the W3C suggests that most authors use the HTML syntax,
rather than the XHTML syntax.[7]
Motivation
XHTML was developed to make HTML more extensible and increase interoperability with other data formats.[]
HTML 4 was ostensibly an application of Standard Generalized Markup Language (SGML); however the
specification for SGML was complex, and neither web browsers nor the HTML 4 Recommendation were fully
conformant to it.[] The XML standard, approved in 1998, provided a simpler data format closer in simplicity to
HTML 4.[] By shifting to an XML format, it was hoped HTML would become compatible with common XML
tools;[] servers and proxies would be able to transform content, as necessary, for constrained devices such as mobile
phones.[] By utilizing namespaces, XHTML documents could provide extensibility by including fragments from
other XML-based languages such as Scalable Vector Graphics and MathML.[] Finally, the renewed work would
provide an opportunity to divide HTML into reusable components (XHTML Modularization) and clean up untidy
parts of the language.[]
XHTML
Relationship to HTML
There are various differences between XHTML and HTML. The Document Object Model is a tree structure that
represents the page internally in applications, and XHTML and HTML are two different ways of representing that in
markup (serializations). Both are less expressive than the DOM (for example, "--" may be placed in comments in the
DOM, but cannot be represented in a comment in either XHTML or HTML), and generally XHTML's XML syntax
is a little more expressive than HTML (for example, arbitrary namespaces are not allowed in HTML). So, firstly one
source of differences is immediate: XHTML uses an XML syntax, while HTML uses a pseudo-SGML syntax
(officially SGML for HTML 4 and under, but never in practice, and standardised away from SGML in HTML5).
Secondly however, because the expressible contents of the DOM in syntax are slightly different, there are some
changes in actual behavior between the two models.
First, there are some differences in syntax:[8]
• Broadly, the XML rules require that all elements be closed, either by a separate closing tag or using self-closing
syntax (e.g. <br />), while HTML syntax permits some elements to be unclosed because either they are always
empty (e.g. <input>) or their end can be determined implicitly ("omissibility", e.g. <p>).
• XML is case-sensitive for element and attribute names, while HTML is not.
• Some shorthand features in HTML are omitted in XML, such as (1) attribute minimization, where attribute values
or their quotes may be omitted (e.g. <option selected> or <option selected=selected>, while
XML this must be expressed as <option selected="selected">); (2) element minimization may be used
to remove elements entirely (such as <tbody> inferred in a table if not given); and (3) the rarely used SGML
syntax for element minimization ("shorttag"), which most browsers do not implement.[9]
• There are numerous other technical requirements surrounding namespaces and precise parsing of whitespace and
certain characters and elements. The exact parsing of HTML in practice has been undefined until recently; see the
HTML5 specification ([HTML5] [10]) for full details, or the working summary (HTML vs. XHTML [11]).
Secondly, in contrast to these minor syntactical differences, there are some behavioral differences, mostly arising
from the underlying differences in serialization. For example:
• Most prominently, behavior on parse errors differ. A fatal parse error in XML (such as an incorrect tag structure)
causes document processing to be aborted.
• Most content requiring namespaces will not work in HTML, except the built-in support for SVG and MathML in
the HTML5 parser along with certain magic prefixes such as xlink.
• JavaScript processing is a little different in XHTML, with minor changes in case sensitivity to some functions,
and further precautions to restrict processing to well-formed content. Scripts must not use the
document.write() method; it is not available for XHTML. The innerHTML property is available, but will
not insert non-well-formed content. On the other hand, it can be used to insert well-formed namespaced content
into XHTML.
• CSS is also applied slightly differently. Due to XHTML's case-sensitivity, all CSS selectors become case
sensitive for XHTML documents.[12] Some CSS properties, such as backgrounds, set on the <body> element in
HTML are 'inherited upwards' into the <html> element; this appears not to be the case for XHTML.[13]
73
XHTML
Adoption
The similarities between HTML 4.01 and XHTML 1.0 led many web sites and content management systems to adopt
the initial W3C XHTML 1.0 Recommendation. To aid authors in the transition, the W3C provided guidance on how
to publish XHTML 1.0 documents in an HTML-compatible manner, and serve them to browsers that were not
designed for XHTML.[][]
Such "HTML-compatible" content is sent using the HTML media type (text/html) rather than the official
Internet media type for XHTML (application/xhtml+xml). When measuring the adoption of XHTML to that
of regular HTML, therefore, it is important to distinguish whether it is media type usage or actual document contents
that is being compared.
Most web browsers have mature support[14] for all of the possible XHTML media types.[15] The notable exception is
Internet Explorer versions 8 and earlier by Microsoft; rather than rendering application/xhtml+xml content,
a dialog box invites the user to save the content to disk instead. Both Internet Explorer 7 (released in 2006) and
Internet Explorer 8 (released in March 2009) exhibit this behavior.[] Microsoft developer Chris Wilson explained in
2005 that IE7’s priorities were improved browser security and CSS support, and that proper XHTML support would
be difficult to graft onto IE’s compatibility-oriented HTML parser;[] however, Microsoft added support for true
XHTML in IE9.[16]
As long as support is not widespread, most web developers avoid using XHTML that is not HTML-compatible,[] so
advantages of XML such as namespaces, faster parsing and smaller-footprint browsers do not benefit the user.
Criticism
In the early 2000s, some web developers began to question why Web authors ever made the leap into authoring in
XHTML.[][][] Others countered that the problems ascribed to the use of XHTML could mostly be attributed to two
main sources: the production of invalid XHTML documents by some Web authors and the lack of support for
XHTML built into Internet Explorer 6.[17][18] They went on to describe the benefits of XML-based Web documents
(i.e. XHTML) regarding searching, indexing and parsing as well as future-proofing the Web itself.
In October 2006, HTML inventor and W3C chair Tim Berners-Lee, introducing a major W3C effort to develop a
new HTML specification, posted in his blog that, "The attempt to get the world to switch to XML … all at once
didn't work. The large HTML-generating public did not move … Some large communities did shift and are enjoying
the fruits of well-formed systems … The plan is to charter a completely new HTML group."[19] The current HTML5
working draft says "special attention has been given to defining clear conformance criteria for user agents in an
effort to improve interoperability … while at the same time updating the HTML specifications to address issues
raised in the past few years." Ian Hickson, editor of the HTML5 specification criticising the improper use of
XHTML in 2002,[] is a member of the group developing this specification and is listed as one of the co-editors of the
current working draft.[]
Simon Pieters researched the XML-compliance of mobile browsers[] and concluded “the claim that XHTML would
be needed for mobile devices is simply a myth”.
74
XHTML
75
Versions of XHTML
XHTML 1.0
December 1998 saw the publication of a
W3C Working Draft entitled Reformulating
HTML in XML. This introduced Voyager,
the codename for a new markup language
based on HTML 4, but adhering to the
stricter syntax rules of XML. By February
1999 the name of the specification had
changed to XHTML 1.0: The Extensible
HyperText Markup Language, and in
January 2000 it was officially adopted as a
W3C Recommendation.[] There are three
formal
DTDs
for
XHTML
1.0,
corresponding to the three different versions
of HTML 4.01:
In earlier timesWikipedia:Manual of Style/Dates and numbers#Chronological
items, Wikipedia used the XHTML 1.0 Transitional doctype and syntax, though it
was not served as XHTML
• XHTML 1.0 Strict is the XML equivalent to strict HTML 4.01, and includes elements and attributes that have
not been marked deprecated in the HTML 4.01 specification. As of May 25, 2011, XHTML 1.0 Strict is the
document type used for the homepage of the website of the World Wide Web Consortium.
• XHTML 1.0 Transitional is the XML equivalent of HTML 4.01 Transitional, and includes the presentational
elements (such as center, font and strike) excluded from the strict version.
• XHTML 1.0 Frameset is the XML equivalent of HTML 4.01 Frameset, and allows for the definition of frameset
documents—a common Web feature in the late 1990s.
The second edition of XHTML 1.0 became a W3C Recommendation in August 2002.[]
Modularization of XHTML
Modularization provides an abstract collection of components through which XHTML can be subsetted and
extended. The feature is intended to help XHTML extend its reach onto emerging platforms, such as mobile devices
and Web-enabled televisions. The initial draft of Modularization of XHTML became available in April 1999, and
reached Recommendation status in April 2001.[]
The first modular XHTML variants were XHTML 1.1 and XHTML Basic 1.0.
In October 2008 Modularization of XHTML was superseded by XHTML Modularization 1.1, which adds an XML
Schema implementation. It was itself superseded by a second edition in July 2010.[]
XHTML 1.1: Module-based XHTML
XHTML 1.1 evolved out of the work surrounding the initial Modularization of XHTML specification. The W3C
released a first draft in September 1999; Recommendation status was reached in May 2001.[] The modules combined
within XHTML 1.1 effectively recreate XHTML 1.0 Strict, with the addition of ruby annotation elements (ruby,
rbc, rtc, rb, rt and rp) to better support East-Asian languages. Other changes include removal of the name
attribute from the a and map elements, and (in the first edition of the language) removal of the lang attribute in
favour of xml:lang.
Although XHTML 1.1 is largely compatible with XHTML 1.0 and HTML 4, in August 2002 the Working Group
issued a formal Note advising that it should not be transmitted with the HTML media type.[] With limited browser
support for the alternate application/xhtml+xml media type, XHTML 1.1 proved unable to gain widespread
XHTML
use. In January 2009 a second edition of the document (XHTML Media Types - Second Edition) was issued, relaxing
this restriction and allowing XHTML 1.1 to be served as text/html.[20]
A second edition of XHTML 1.1 was issued on 23 November 2010, which addresses various errata and adds an
XML Schema implementation not included in the original specification.[21] (It was first released briefly on 7 May
2009 as a "Proposed Edited Recommendation"[] before being rescinded on 19 May due to unresolved issues.)<ref
nam
XHTML Basic
{{main|XHTML Basic}} Since information appliances may lack the system resources to implement all XHTML
abstract modules, the W3C defined a feature-limited XHTML specification called XHTML Basic. It provides a
minimal feature subset sufficient for the most common content-authoring. The specification became a W3C
recommendation on December 2000.[]
Of all the versions of XHTML, XHTML Basic 1.0 provides the fewest features. With XHTML 1.1, it is one of the
two first implementations of modular XHTML. In addition to the Core Modules (Structure, Text, Hypertext, and
List), it implements the following abstract modules: Base, Basic Forms, Basic Tables, Image, Link,
Metainformation, Object, Style Sheet, and Target.[22][23]
XHTML Basic 1.1 replaces the Basic Forms Module with the Forms Module, and adds the Intrinsic Events,
Presentation, and Scripting modules. It also supports additional tags and attributes from other modules. This version
became a W3C recommendation on 29 July 2008.[24]
The current version of XHTML Basic is 1.1 Second Edition (23 November 2010), in which the language is
re-implemented in the W3C's XML Schema language. This version also supports the lang attribute.[25]
XHTML-Print
XHTML-Print, which became a W3C Recommendation in September 2006, is a specialized version of XHTML
Basic designed for documents printed from information appliances to low-end printers.[]
XHTML Mobile Profile
XHTML Mobile Profile (abbreviated XHTML MP or XHTML-MP) is a third-party variant of the W3C's XHTML
Basic specification. Like XHTML Basic, XHTML was developed for information appliances with limited system
resources.
In October 2001, a limited company called the Wireless Application Protocol Forum began adapting XHTML Basic
for WAP 2.0, the second major version of the Wireless Application Protocol. WAP Forum based their DTD on the
W3C's Modularization of XHTML, incorporating the same modules the W3C used in XHTML Basic 1.0—except
for the Target Module. Starting with this foundation, the WAP Forum replaced the Basic Forms Module with a
partial implementation of the Forms Module, added partial support for the Legacy and Presentation modules, and
added full support for the Style Attribute Module.
In 2002, the WAP Forum was subsumed into the Open Mobile Alliance (OMA), which continued to develop
XHTML Mobile Profile as a component of their OMA Browsing Specification.
76
XHTML
XHTML Mobile Profile 1.1
To this version, finalized in 2004, the OMA added partial support for the Scripting Module, and partial support for
Intrinsic Events. XHTML MP 1.1 is part of v2.1 of the OMA Browsing Specification (1 November 2002).[]
XHTML Mobile Profile 1.2
This version, finalized 27 February 2007, expands the capabilities of XHTML MP 1.1 with full support for the
Forms Module and OMA Text Input Modes. XHTML MP 1.2 is part of v2.3 of the OMA Browsing Specification
(13 March 2007).[]
XHTML Mobile Profile 1.3
XHTML MP 1.3 (finalized on 23 September 2008) uses the XHTML Basic 1.1 document type definition, which
includes the Target Module. Events in this version of the specification are updated to DOM Level 3 specifications
(i.e., they are platform- and language-neutral).
XHTML 1.2
The XHTML 2 Working Group considered the creation of a new language based on XHTML 1.1.[26] If XHTML 1.2
was created, it would include WAI-ARIA and role attributes to better support accessible web applications, and
improved Semantic Web support through RDFa. The inputmode attribute from XHTML Basic 1.1, along with
the target attribute (for specifying frame targets) might also be present. The XHTML2 WG had not been
chartered to carry out the development of XHTML1.2. Since the W3C announced that it does not intend to recharter
the XHTML2 WG,[27] and closed the WG in December 2010, this means that XHTML 1.2 proposal would not
eventuate.
XHTML 2.0
Between August 2002 and July 2006, the W3C released eight Working Drafts of XHTML 2.0, a new version of
XHTML able to make a clean break from the past by discarding the requirement of backward compatibility. This
lack of compatibility with XHTML 1.x and HTML 4 caused some early controversy in the web developer
community.[28] Some parts of the language (such as the role and RDFa attributes) were subsequently split out of
the specification and worked on as separate modules, partially to help make the transition from XHTML 1.x to
XHTML 2.0 smoother. A ninth draft of XHTML 2.0 was expected to appear in 2009, but on July 2, 2009, the W3C
decided to let the XHTML2 Working Group charter expire by that year's end, effectively halting any further
development of the draft into a standard.[27] Instead, XHTML 2.0 and its related documents were released as W3C
Notes.[][]
New features to have been introduced by XHTML 2.0 included:
• HTML forms were to be replaced by XForms, an XML-based user input specification allowing forms to be
displayed appropriately for different rendering devices.
• HTML frames were to be replaced by XFrames.
• The DOM Events were to be replaced by XML Events, which uses the XML Document Object Model.
• A new list element type, the nl element type, were to be included to specifically designate a list as a navigation
list. This would have been useful in creating nested menus, which are currently created by a wide variety of
means like nested unordered lists or nested definition lists.
• Any element was to be able to act as a hyperlink, e. g., <li href="articles.html">Articles</li>,
similar to XLink. However, XLink itself is not compatible with XHTML due to design differences.
• Any element was to be able to reference alternative media with the src attribute, e. g., <p
src="lbridge.jpg" type="image/jpeg">London Bridge</p> is the same as <object
src="lbridge.jpg" type="image/jpeg"><p>London Bridge</p></object>.
77
XHTML
• The alt attribute of the img element was removed: alternative text was to be given in the content of the img
element, much like the object element, e. g., <img src="hms_audacious.jpg">HMS <span
class="italic">Audacious</span></img>.
• A single heading element (h) was added. The level of these headings was determined by the depth of the nesting.
This would have allowed the use of headings to be infinite, rather than limiting use to six levels deep.
• The remaining presentational elements i, b and tt, still allowed in XHTML 1.x (even Strict), were to be absent
from XHTML 2.0. The only somewhat presentational elements remaining were to be sup and sub for
superscript and subscript respectively, because they have significant non-presentational uses and are required by
certain languages. All other tags were meant to be semantic instead (e. g. strong for strong emphasis) while
allowing the user agent to control the presentation of elements via CSS (e.g. rendered as boldface text in most
visual browsers, but possibly rendered with changes of tone in a text-to-speech reader, larger + italic font per rules
in a user-end stylesheet, etc.).
• The addition of RDF triple with the property and about attributes to facilitate the conversion from XHTML
to RDF/XML.
XHTML5
HTML5 initially grew independently of the W3C, through a loose group of browser manufacturers and other
interested parties calling themselves the WHATWG, or Web Hypertext Application Technology Working Group.
The WHATWG announced the existence of an open mailing list in June 2004, along with a website bearing the
strapline “Maintaining and evolving HTML since 2004.”[29] The key motive of the group was to create a platform for
dynamic web applications; they considered XHTML 2.0 to be too document-centric, and not suitable for the creation
of internet forum sites or online shops.[]
In April 2007, the Mozilla Foundation and Opera Software joined Apple in requesting that the newly rechartered
HTML Working Group of the W3C adopt the work, under the name of HTML5.[30] The group resolved to do this the
following month,[31] and the First Public Working Draft of HTML5 was issued by the W3C in January 2008. The
most recent W3C Working Draft was published in January 2011.[]
HTML5 has both a regular text/html serialization and an XML serialization, which is known as XHTML5. In
addition to the markup language, the specification includes a number of application programming interfaces. The
Document Object Model is extended with APIs for editing, drag-and-drop, data storage and network communication.
The language is more compatible with HTML 4 and XHTML 1.x than XHTML 2.0, due to the decision to keep the
existing HTML form elements and events model. It adds many new elements not found in XHTML 1.x, however,
such as section and aside.
The most recent draft includes WAI-ARIA support.[]
Semantic content in XHTML
XHTML+RDFa is an extended version of the XHTML markup language for supporting RDF through a collection of
attributes and processing rules in the form of well-formed XML documents. This host language is one of the
techniques used to develop Semantic Web content by embedding rich semantic markup.
Valid XHTML documents
An XHTML document that conforms to an XHTML specification is said to be valid. Validity assures consistency in
document code, which in turn eases processing, but does not necessarily ensure consistent rendering by browsers. A
document can be checked for validity with the W3C Markup Validation Service. In practice, many web development
programs provide code validation based on the W3C standards.
78
XHTML
79
Root element
The root element of an XHTML document must be html, and must contain an xmlns attribute to associate it with
the XHTML namespace. The namespace URI for XHTML is http://www.w3.org/1999/xhtml. The
example tag below additionally features an xml:lang attribute to identify the document with a natural language:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
DOCTYPEs
In order to validate an XHTML document, a Document Type Declaration, or DOCTYPE, may be used. A
DOCTYPE declares to the browser the Document Type Definition (DTD) to which the document conforms. A
Document Type Declaration should be placed before the root element.
The system identifier part of the DOCTYPE, which in these examples is the URL that begins with http:/ / '', need
only point to a copy of the DTD to use, if the validator cannot locate one based on the public identifier (the other
quoted string). It does not need to be the specific URL that is in these examples; in fact, authors are encouraged to
use local copies of the DTD files when possible. The public identifier, however, must be character-for-character the
same as in the examples.
XML declaration
A character encoding may be specified at the beginning of an XHTML document in the XML declaration when the
document is served using the application/xhtml+xml MIME type. (If an XML document lacks encoding
specification, an XML parser assumes that the encoding is UTF-8 or UTF-16, unless the encoding has already been
determined by a higher protocol.)
For example:
<?xml version="1.0" encoding="UTF-8" ?>
The declaration may be optionally omitted because it declares as its encoding the default encoding. However, if the
document instead makes use of XML 1.1 or another character encoding, a declaration is necessary. Internet Explorer
prior to version 7 enters quirks mode, if it encounters an XML declaration in a document served as text/html.
Common errors
Some of the most common errors in the usage of XHTML are:
• Not closing empty elements (elements without closing tags in HTML4)
• Incorrect: <br>
• Correct: <br />
Note that any of these is acceptable in XHTML: <br></br>, <br/>, and <br />. Older HTML-only
browsers interpreting it as HTML will generally accept <br> and <br />.
• Not closing non-empty elements
• Incorrect: <p>This is a paragraph.<p>This is another paragraph.
• Correct: <p>This is a paragraph.</p><p>This is another paragraph.</p>
• Improperly nesting elements (Note that this would also be invalid in HTML)
• Incorrect: <em><strong>This is some text.</em></strong>
• Correct: <em><strong>This is some text.</strong></em>
• Not putting quotation marks around attribute values
• Incorrect: <td rowspan=3>
• Incorrect: <td rowspan='3">
• Correct: <td rowspan="3">
XHTML
80
• Correct: <td rowspan='3'>
• Using the ampersand character outside of entities (Note that this would also be invalid in HTML)
• Incorrect: <title>Cars & Trucks</title>
• Correct: <title>Cars &amp; Trucks</title>
• Incorrect: <a href="index.php?page=news&id=5">News</a>
• Correct: <a href="index.php?page=news&amp;id=5">News</a>
• Failing to recognize that XHTML elements and attributes are case sensitive
• Incorrect: <BODY><P ID="ONE">The Best Page Ever</P></BODY>
• Correct: <body><p id="ONE">The Best Page Ever</p></body>
• Using attribute minimization
• Incorrect: <textarea readonly>READ-ONLY</textarea>
• Correct: <textarea readonly="readonly">READ-ONLY</textarea>
• Misusing CDATA, script-comments and xml-comments when embedding scripts and stylesheets.
• This problem can be avoided altogether by putting all script and stylesheet information into separate files and
referring to them as follows in the XHTML head element.
<link rel="stylesheet" href="/style/screen.css" type="text/css" />
<script type="text/javascript" src="/script/site.js"></script>
Note: The format <script …></script>, rather than the more concise <script … />, is
required for HTML compatibility when served as MIME type text/html.
• If an author chooses to include script or style data inline within an XHTML document, different approaches
are recommended as shown in the examples below, depending whether the author intends to serve the page as
application/xhtml+xml and target only fully conformant browsers, or serve the page as text/html
and try to obtain usability in Internet Explorer 6 and other non-conformant browsers.
Backward compatibility
XHTML 1.x documents are mostly backward compatible with HTML 4 user agents when the appropriate guidelines
are followed. XHTML 1.1 is essentially compatible, although the elements for ruby annotation are not part of the
HTML 4 specification and thus generally ignored by HTML 4 browsers. Later XHTML 1.x modules such as those
for the role attribute, RDFa and WAI-ARIA degrade gracefully in a similar manner.
XHTML 2.0 is significantly less compatible, although this can be mitigated to some degree through the use of
scripting. (This can be simple one-liners, such as the use of “document.createElement()” to register a new
HTML element within Internet Explorer, or complete JavaScript frameworks, such as the FormFaces implementation
of XForms.)
Examples
The following are examples of XHTML 1.0 Strict, with both having the same visual output. The former one follows
the HTML Compatibility Guidelines of the XHTML Media Types Note while the latter one breaks backward
compatibility, but provides cleaner markup.[20]
XHTML
81
Media type recommendation for the examples:
Media type
Example 1
Example 2
application/xhtml+xml SHOULD[clarify] SHOULD
application/xml
MAY[clarify]
MAY
text/xml
MAY
MAY
text/html
MAY
SHOULD NOT[clarify]
Example 1.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>XHTML 1.0 Strict Example</title>
<script type="text/javascript">
//<![CDATA[
function loadpdf() {
document.getElementById("pdf-object").src="http://www.w3.org/TR/xhtml1/xhtml1.pdf";
}
//]]>
</script>
</head>
<body onload="loadpdf()">
<p>This is an example of an
<abbr title="Extensible HyperText Markup Language">XHTML</abbr> 1.0 Strict document.<br />
<img id="validation-icon"
src="http://www.w3.org/Icons/valid-xhtml10"
alt="Valid XHTML 1.0 Strict" /><br />
<object id="pdf-object"
name="pdf-object"
type="application/pdf"
data="http://www.w3.org/TR/xhtml1/xhtml1.pdf"
width="100%"
height="500">
</object>
</p>
</body>
</html>
Example 2.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
XHTML
82
<head>
<title>XHTML 1.0 Strict Example</title>
<script type="application/javascript">
<![CDATA[
function loadpdf() {
document.getElementById("pdf-object").src="http://www.w3.org/TR/xhtml1/xhtml1.pdf";
}
]]>
</script>
</head>
<body onload="loadpdf()">
<p>This is an example of an
<abbr title="Extensible HyperText Markup Language">XHTML</abbr> 1.0 Strict document.<br/>
<img id="validation-icon"
src="http://www.w3.org/Icons/valid-xhtml10"
alt="Valid XHTML 1.0 Strict"/><br />
<object id="pdf-object"
type="application/pdf"
data="http://www.w3.org/TR/xhtml1/xhtml1.pdf"
width="100%"
height="500"/>
</p>
</body>
</html>
Notes:
1. The "loadpdf" function is actually a workaround for Internet Explorer. It can be replaced by adding <param
name="src" value="http://www.w3.org/TR/xhtml1/xhtml1.pdf" /> within <object>.
2. The img element does not get a name attribute in the XHTML 1.0 Strict DTD [32]. Use id instead.
Cross-compatibility of XHTML and HTML
HTML5 and XHTML5 serializations are largely inter-compatible if adhering to the stricter XHTML5 syntax, but
there are some cases in which XHTML will not work as valid HTML5 (e.g., processing instructions are deprecated
in HTML[clarify], are treated as comments, and close on the first "?", whereas they are fully allowed in XML, are
treated as their own type, and close on "?>").[33]
Notes
[1] http:/ / www. w3. org/ TR/ 2000/ REC-xhtml1-20000126/
[2] http:/ / www. w3. org/ TR/ 2002/ REC-xhtml1-20020801/
[3] http:/ / www. w3. org/ TR/ 2001/ REC-xhtml11-20010531/
[4] http:/ / www. w3. org/ TR/ 2010/ REC-xhtml11-20101123/
[5] "results of HTML 5 text, editor, name questions" (http:/ / lists. w3. org/ Archives/ Public/ public-html/ 2007May/ 0909. html)
[6] "Frequently Asked Questions (FAQ) about the future of XHTML" (http:/ / www. w3. org/ 2009/ 06/ xhtml-faq. html)
[10] http:/ / www. whatwg. org/ specs/ web-apps/ current-work/ multipage/
[11] http:/ / wiki. whatwg. org/ wiki/ HTML_vs. _XHTML
[13] For a non-authoritative summary, see
[14] Early implementations (such as Mozilla 0.7 and Opera 6.0, both released in 2001) do not incrementally render XHTML as it is received over
the network, giving a degraded user experience; see the Mozilla Web Author FAQ (http:/ / www. mozilla. org/ docs/ web-developer/ faq.
XHTML
html#xhtmldiff). Later browsers such as Opera 9.0, Safari 3.0 and Firefox 3.0 do not have this issue.
[15] XHTML Media Type Tests – Results (http:/ / www. w3. org/ People/ mimasa/ test/ xhtml/ media-types/ results)
[20] This document supersedes the HTML Compatibility Guidelines originally found in XHTML 1.0 Appendix C.
[23] http:/ / www. w3. org/ TR/ 2000/ REC-xhtml-basic-20001219/
[24] http:/ / www. w3. org/ TR/ 2008/ REC-xhtml-basic-20080729/
[25] http:/ / www. w3. org/ TR/ 2010/ REC-xhtml-basic-20101123
[26] [XHTML] Agenda: 2008-07-09 from Roland Merrick on 2008-07-09 ([email protected] from July 2008) (http:/ / lists. w3. org/
Archives/ Public/ public-xhtml2/ 2008Jul/ 0010. html)
[27] XHTML FAQ (http:/ / www. w3. org/ 2009/ 06/ xhtml-faq. html)
[28] See both XHTML 2.0 Considered Harmful (http:/ / lists. w3. org/ Archives/ Public/ www-html/ 2003Jan/ 0123. html) and XHTML 2.0
Considered Hopeful (http:/ / tantek. com/ log/ 2003/ 05. html#L20030508t1620) by browser developer Tantek Çelik, who criticises early
drafts of XHTML 2.0 for the absence of the style attribute and the cite element. Developer Daniel Glazman offers similar criticism
(http:/ / lists. w3. org/ Archives/ Public/ www-html/ 2002Dec/ 0113. html), but also shows support for some backward-incompatible changes
such as the decision to remove the ins and del elements.
[29] WHAT open mailing list announcement (http:/ / www. whatwg. org/ news/ start)
[30] Proposal to Adopt HTML5 (http:/ / lists. w3. org/ Archives/ Public/ public-html/ 2007Apr/ 0429. html)
[31] results of HTML5 text, editor, name questions (http:/ / lists. w3. org/ Archives/ Public/ public-html/ 2007May/ 0909. html)
[32] http:/ / www. w3. org/ TR/ xhtml1/ dtds. html#a_dtd_XHTML-1. 0-Strict
[33] HTML vs. XHTML (http:/ / wiki. whatwg. org/ wiki/ HTML_vs. _XHTML), WHATWG Wiki
External links
•
•
•
•
•
•
•
W3C's Markup Home Page (http://www.w3.org/MarkUp/)
XHTML 1.0 Recommendation (http://www.w3.org/TR/xhtml1/)
XHTML 1.1 Recommendation (http://www.w3.org/TR/xhtml11/)
XHTML 2.0 Working Group Note (http://www.w3.org/TR/xhtml2/)
XHTML Basic (http://www.w3.org/TR/xhtml-basic/)
XHTML 1.0 Strict / 1.1 Online Reference (http://xhtml.com/en/xhtml/reference/)
Links dealing with the MIME type of XHTML documents:
•
•
•
•
•
•
•
•
Beware of XHTML (http://www.webdevout.net/articles/beware-of-xhtml)
Sending XHTML as text/html Considered Harmful (http://hixie.ch/advocacy/xhtml)
Serving up XHTML with the correct MIME type (http://keystonewebsites.com/articles/mime_type.php)
The Road to XHTML 2.0: MIME Types (http://www.xml.com/pub/a/2003/03/19/dive-into-xml.html) Mark Pilgrim (3/19/2003). Includes examples for conditionally serving application/xhtml+xml using
PHP, Python, and Apache (mod rewrite).
• Mozilla Web Author FAQ: How is the treatment of application/xhtml+xml documents different from the
treatment of text/html documents? (http://www.mozilla.org/docs/web-developer/faq.html#xhtmldiff) summarizes one web browser's XHTML processing mode
Empty elements in SGML, HTML, XML, and XHTML (http://www.cs.tut.fi/~jkorpela/html/empty.html)
Heptagrama's Basic XHTML 1.0 Strict Tutorial (http://heptagrama.com/how-to-make-a-web-page.htm)
W3C's Markup Validator (http://validator.w3.org/)
HTML to XHTML conversion library for .NET (http://corsis.sourceforge.net/index.php/Html2Xhtml)
83
XML
84
XML
XML
Filename extension
.xml
Internet media type
application/xml
[2]
text/xml
[1]
Uniform Type Identifier public.xml
UTI conforms to
public.text
Developed by
World Wide Web Consortium
Type of format
Markup language
Extended from
SGML
Extended to
Numerous, including:
XHTML, RSS, Atom, KML
Standard(s)
[3]
1.0 (Fifth Edition)
November 26, 2008
[4]
1.1 (Second Edition)
August 16, 2006
Open format?
Yes
Extensible Markup Language (XML)
Current status
Published
Year started
1996
Editors
Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, François Yergeau, John Cowan
Related standards XML Schema
Domain
Data Serialization
Abbreviation
XML
Website
XML 1.0
[5]
Extensible Markup Language (XML) is a markup language that defines a set of rules for encoding documents in a
format that is both human-readable and machine-readable. It is defined in the XML 1.0 Specification[6] produced by
the W3C, and several other related specifications,[7] all gratis open standards.[8]
The design goals of XML emphasize simplicity, generality, and usability over the Internet.[] It is a textual data
format with strong support via Unicode for the languages of the world. Although the design of XML focuses on
XML
85
documents, it is widely used for the representation of arbitrary data structures, for example in web services.
Many application programming interfaces (APIs) have been developed to aid software developers with processing
XML data, and several schema systems exist to aid in the definition of XML-based languages.
As of 2009[9], hundreds of document formats using XML syntax have been developed,[] including RSS, Atom,
SOAP, and XHTML. XML-based formats have become the default for many office-productivity tools, including
Microsoft Office (Office Open XML), OpenOffice.org and LibreOffice (OpenDocument), and Apple's iWork. XML
has also been employed as the base language for communication protocols, such as XMPP.
Key terminology
The material in this section is based on the XML Specification. This is not an exhaustive list of all the constructs that
appear in XML; it provides an introduction to the key constructs most often encountered in day-to-day use.
(Unicode) character
By definition, an XML document is a string of characters. Almost every legal Unicode character may appear
in an XML document.
Processor and application
The processor analyzes the markup and passes structured information to an application. The specification
places requirements on what an XML processor must do and not do, but the application is outside its scope.
The processor (as the specification calls it) is often referred to colloquially as an XML parser.
Markup and content
The characters making up an XML document are divided into markup and content, which may be
distinguished by the application of simple syntactic rules. Generally, strings that constitute markup either
begin with the character < and end with a >, or they begin with the character & and end with a ;. Strings of
characters that are not markup are content. However, in a CDATA section, the delimiters <![CDATA[ and
]]> are classified as markup, while the text between them is classified as content. In addition, whitespace
before and after the outermost element is classified as markup.
Tag
A markup construct that begins with < and ends with >. Tags come in three flavors:
• start-tags; for example: <section>
• end-tags; for example: </section>
• empty-element tags; for example: <line-break />
Element
A logical document component which either begins with a start-tag and ends with a matching end-tag or
consists only of an empty-element tag. The characters between the start- and end-tags, if any, are the element's
content, and may contain markup, including other elements, which are called child elements. An example of an
element is <Greeting>Hello, world.</Greeting>
(see hello world). Another is
<line-break />.
Attribute
A markup construct consisting of a name/value pair that exists within a start-tag or empty-element tag. In the
example (below) the element img has two attributes, src and alt:
<img src="madonna.jpg" alt='Foligno Madonna, by Raphael'/>
Another example would be
<step number="3">Connect A to B.</step>
XML
86
where the name of the attribute is "number" and the value is "3".
XML declaration
XML documents may begin by declaring some information about themselves, as in the following example:
<?xml version="1.0" encoding="UTF-8" ?>
Characters and escaping
XML documents consist entirely of characters from the Unicode repertoire. Except for a small number of
specifically excluded control characters, any character defined by Unicode may appear within the content of an XML
document.
XML includes facilities for identifying the encoding of the Unicode characters that make up the document, and for
expressing characters that, for one reason or another, cannot be used directly.
Valid characters
Unicode code points in the following ranges are valid in XML 1.0 documents:[10]
• U+0009, U+000A, U+000D: these are the only C0 controls accepted in XML 1.0;
• U+0020–U+D7FF, U+E000–U+FFFD: this excludes some (not all) non-characters in the BMP (all surrogates,
U+FFFE and U+FFFF are forbidden);
• U+10000–U+10FFFF: this includes all code points in supplementary planes, including non-characters.
XML 1.1[11] extends the set of allowed characters to include all the above, plus the remaining characters in the range
U+0001–U+001F. At the same time, however, it restricts the use of C0 and C1 control characters other than
U+0009, U+000A, U+000D, and U+0085 by requiring them to be written in escaped form (for example U+0001
must be written as &#x01; or its equivalent). In the case of C1 characters, this restriction is a backwards
incompatibility; it was introduced to allow common encoding errors to be detected.
The code point U+0000 is the only character that is not permitted in any XML 1.0 or 1.1 document.
Encoding detection
The Unicode character set can be encoded into bytes for storage or transmission in a variety of different ways, called
"encodings". Unicode itself defines encodings that cover the entire repertoire; well-known ones include UTF-8 and
UTF-16.[12] There are many other text encodings that predate Unicode, such as ASCII and ISO/IEC 8859; their
character repertoires in almost every case are subsets of the Unicode character set.
XML allows the use of any of the Unicode-defined encodings, and any other encodings whose characters also appear
in Unicode. XML also provides a mechanism whereby an XML processor can reliably, without any prior knowledge,
determine which encoding is being used.[13] Encodings other than UTF-8 and UTF-16 will not necessarily be
recognized by every XML parser.
XML
87
Escaping
XML provides escape facilities for including characters which are problematic to include directly. For example:
• The characters "<" and "&" are key syntax markers and may never appear in content outside a CDATA
section.[14]
• Some character encodings support only a subset of Unicode: for example, it is legal to encode an XML document
in ASCII, but ASCII lacks code points for Unicode characters such as "é".
• It might not be possible to type the character on the author's machine.
• Some characters have glyphs that cannot be visually distinguished from other characters: examples are
• non-breaking-space (&#xa0;) " "
compare space (&#x20;) " "
• Cyrillic Capital Letter A (&#x410;) "А"
compare Latin Capital Letter A (&#x41;) "A"
There are five predefined entities:
• &lt; represents "<"
• &gt; represents ">"
• &amp; represents "&"
• &apos; represents '
• &quot; represents "
All permitted Unicode characters may be represented with a numeric character reference. Consider the Chinese
character "中", whose numeric code in Unicode is hexadecimal 4E2D, or decimal 20,013. A user whose keyboard
offers no method for entering this character could still insert it in an XML document encoded either as &#20013;
or &#x4e2d;. Similarly, the string "I <3 Jörg" could be encoded for inclusion in an XML document as "I
&lt;3 J&#xF6;rg".
"&#0;" is not permitted, however, because the null character is one of the control characters excluded from XML,
even when using a numeric character reference.[15] An alternative encoding mechanism such as Base64 is needed to
represent such characters.
Comments
Comments may appear anywhere in a document outside other markup. Comments cannot appear before the XML
declaration. Comments start with "<!--" and end with "-->". The string "--" (double-hyphen) is not allowed
inside comments; this means comments cannot be nested. The ampersand has no special significance within
comments, so entity and character references are not recognized as such, and there is no way to represent characters
outside the character set of the document encoding.
An example of a valid comment: "<!-- no need to escape <code> & such in comments -->"
XML
International use
XML 1.0 (Fifth Edition) and XML 1.1 support the direct use of almost any Unicode character in element names,
attributes, comments, character data, and processing instructions (other than the ones that have special symbolic
meaning in XML itself, such as the less-than sign, "<"). The following is a well-formed XML document including
both Chinese and Cyrillic characters:
<?xml version="1.0" encoding="UTF-8" ?>
<俄 语>данные</俄 语>
Well-formedness and error-handling
The XML specification defines an XML document as a well-formed text - meaning that it satisfies a list of syntax
rules provided in the specification. Some key points in the fairly lengthy list include:
• The document contains only properly encoded legal Unicode characters
• None of the special syntax characters such as < and & appear except when performing their markup-delineation
roles
• The begin, end, and empty-element tags that delimit the elements are correctly nested, with none missing and
none overlapping
• The element tags are case-sensitive; the beginning and end tags must match exactly. Tag names cannot contain
any of the characters !"#$%&'()*+,/;<=>?@[\]^`{|}~, nor a space character, and cannot start with -, .,
or a numeric digit.
• A single "root" element contains all the other elements
The definition of an XML document excludes texts that contain violations of well-formedness rules; they are simply
not XML. An XML processor that encounters such a violation is required to report such errors and to cease normal
processing. This policy, occasionally referred toWikipedia:Avoid weasel words as draconian, stands in notable
contrast to the behavior of programs that process HTML, which are designedWikipedia:Avoid weasel words to
produce a reasonable result even in the presence of severe markup errors.[16] XML's policy in this area has been
criticized as a violation of Postel's law ("Be conservative in what you send; be liberal in what you accept").[17]
The XML specification defines a valid XML document as a well-formed XML document which also conforms to
the rules of a Document Type Definition (DTD). By extension, the term can also refer to documents that conform to
rules in other schema languages, such as XML Schema (XSD). This term should not be confused with a
well-formed XML document, which is defined as an XML document that has correct XML syntax according to
W3C standards.
Schemas and validation
In addition to being well-formed, an XML document may be valid. This means that it contains a reference to a
Document Type Definition (DTD), and that its elements and attributes are declared in that DTD and follow the
grammatical rules for them that the DTD specifies.
XML processors are classified as validating or non-validating depending on whether or not they check XML
documents for validity. A processor that discovers a validity error must be able to report it, but may continue normal
processing.
A DTD is an example of a schema or grammar. Since the initial publication of XML 1.0, there has been substantial
work in the area of schema languages for XML. Such schema languages typically constrain the set of elements that
may be used in a document, which attributes may be applied to them, the order in which they may appear, and the
allowable parent/child relationships.
88
XML
Document Type Definition
The oldest schema language for XML is the Document Type Definition (DTD), inherited from SGML.
DTDs have the following benefits:
• DTD support is ubiquitous due to its inclusion in the XML 1.0 standard.
• DTDs are terse compared to element-based schema languages and consequently present more information in a
single screen.
• DTDs allow the declaration of standard public entity sets for publishing characters.
• DTDs define a document type rather than the types used by a namespace, thus grouping all constraints for a
document in a single collection.
DTDs have the following limitations:
• They have no explicit support for newer features of XML, most importantly namespaces.
• They lack expressiveness. XML DTDs are simpler than SGML DTDs and there are certain structures that cannot
be expressed with regular grammars. DTDs only support rudimentary datatypes.
• They lack readability. DTD designers typically make heavy use of parameter entities (which behave essentially as
textual macros), which make it easier to define complex grammars, but at the expense of clarity.
• They use a syntax based on regular expression syntax, inherited from SGML, to describe the schema. Typical
XML APIs such as SAX do not attempt to offer applications a structured representation of the syntax, so it is less
accessible to programmers than an element-based syntax may be.
Two peculiar features that distinguish DTDs from other schema types are the syntactic support for embedding a
DTD within XML documents and for defining entities, which are arbitrary fragments of text and/or markup that the
XML processor inserts in the DTD itself and in the XML document wherever they are referenced, like character
escapes.
DTD technology is still used in many applications because of its ubiquity.
XML Schema
A newer schema language, described by the W3C as the successor of DTDs, is XML Schema, often referred to by
the initialism for XML Schema instances, XSD (XML Schema Definition). XSDs are far more powerful than DTDs
in describing XML languages. They use a rich datatyping system and allow for more detailed constraints on an XML
document's logical structure. XSDs also use an XML-based format, which makes it possible to use ordinary XML
tools to help process them.
RELAX NG
RELAX NG was initially specified by OASIS and is now also an ISO/IEC International Standard (as part of DSDL).
RELAX NG schemas may be written in either an XML based syntax or a more compact non-XML syntax; the two
syntaxes are isomorphic and James Clark's Trang conversion tool can convert between them without loss of
information. RELAX NG has a simpler definition and validation framework than XML Schema, making it easier to
use and implement. It also has the ability to use datatype framework plug-ins; a RELAX NG schema author, for
example, can require values in an XML document to conform to definitions in XML Schema Datatypes.
89
XML
Schematron
Schematron is a language for making assertions about the presence or absence of patterns in an XML document. It
typically uses XPath expressions.
ISO DSDL and other schema languages
The ISO DSDL (Document Schema Description Languages) standard brings together a comprehensive set of small
schema languages, each targeted at specific problems. DSDL includes RELAX NG full and compact syntax,
Schematron assertion language, and languages for defining datatypes, character repertoire constraints, renaming and
entity expansion, and namespace-based routing of document fragments to different validators. DSDL schema
languages do not have the vendor support of XML Schemas yet, and are to some extent a grassroots reaction of
industrial publishers to the lack of utility of XML Schemas for publishing.
Some schema languages not only describe the structure of a particular XML format but also offer limited facilities to
influence processing of individual XML files that conform to this format. DTDs and XSDs both have this ability;
they can for instance provide the infoset augmentation facility and attribute defaults. RELAX NG and Schematron
intentionally do not provide these.
Related specifications
A cluster of specifications closely related to XML have been developed, starting soon after the initial publication of
XML 1.0. It is frequently the case that the term "XML" is used to refer to XML together with one or more of these
other technologies which have come to be seen as part of the XML core.
• XML Namespaces enable the same document to contain XML elements and attributes taken from different
vocabularies, without any naming collisions occurring. Although XML Namespaces are not part of the XML
specification itself, virtually all XML software also supports XML Namespaces.
• XML Base defines the xml:base attribute, which may be used to set the base for resolution of relative URI
references within the scope of a single XML element.
• The XML Information Set or XML infoset describes an abstract data model for XML documents in terms of
information items. The infoset is commonly used in the specifications of XML languages, for convenience in
describing constraints on the XML constructs those languages allow.
• xml:id Version 1.0 asserts that an attribute named xml:id functions as an "ID attribute" in the sense used in a
DTD.
• XPath defines a syntax named XPath expressions which identifies one or more of the internal components
(elements, attributes, and so on) included in an XML document. XPath is widely used in other core-XML
specifications and in programming libraries for accessing XML-encoded data.
• XSLT is a language with an XML-based syntax that is used to transform XML documents into other XML
documents, HTML, or other, unstructured formats such as plain text or RTF. XSLT is very tightly coupled with
XPath, which it uses to address components of the input XML document, mainly elements and attributes.
• XSL Formatting Objects, or XSL-FO, is a markup language for XML document formatting which is most often
used to generate PDFs.
• XQuery is an XML-oriented query language strongly rooted in XPath and XML Schema. It provides methods to
access, manipulate and return XML, and is mainly conceived as a query language for XML databases.
• XML Signature defines syntax and processing rules for creating digital signatures on XML content.
• XML Encryption defines syntax and processing rules for encrypting XML content.
Some other specifications conceived as part of the "XML Core" have failed to find wide adoption, including
XInclude, XLink, and XPointer.
90
XML
Use on the Internet
XML has come into common use for the interchange of data over the Internet. RFC 3023 gives rules for the
construction of Internet Media Types for use when sending XML. It also defines the media types application/xml
and text/xml, which say only that the data are in XML, and nothing about its semantics. The use of text/xml has been
criticized as a potential source of encoding problems and it has been suggested that it should be deprecated.[]
RFC 3023 also recommends that XML-based languages be given media types ending in +xml; for example
image/svg+xml for SVG.
Further guidelines for the use of XML in a networked context may be found in RFC 3470, also known as IETF BCP
70; this document is very wide-ranging and covers many aspects of designing and deploying an XML-based
language.
Programming interfaces
The design goals of XML include, "It shall be easy to write programs which process XML documents."[] Despite
this, the XML specification contains almost no information about how programmers might go about doing such
processing. The XML Infoset specification provides a vocabulary to refer to the constructs within an XML
document, but also does not provide any guidance on how to access this information. A variety of APIs for accessing
XML have been developed and used, and some have been standardized.
Existing APIs for XML processing tend to fall into these categories:
• Stream-oriented APIs accessible from a programming language, for example SAX and StAX.
• Tree-traversal APIs accessible from a programming language, for example DOM.
• XML data binding, which provides an automated translation between an XML document and
programming-language objects.
• Declarative transformation languages such as XSLT and XQuery.
Stream-oriented facilities require less memory and, for certain tasks which are based on a linear traversal of an XML
document, are faster and simpler than other alternatives. Tree-traversal and data-binding APIs typically require the
use of much more memory, but are often found more convenient for use by programmers; some include declarative
retrieval of document components via the use of XPath expressions.
XSLT is designed for declarative description of XML document transformations, and has been widely implemented
both in server-side packages and Web browsers. XQuery overlaps XSLT in its functionality, but is designed more for
searching of large XML databases.
Simple API for XML
Simple API for XML (SAX) is a lexical, event-driven interface in which a document is read serially and its contents
are reported as callbacks to various methods on a handler object of the user's design. SAX is fast and efficient to
implement, but difficult to use for extracting information at random from the XML, since it tends to burden the
application author with keeping track of what part of the document is being processed. It is better suited to situations
in which certain types of information are always handled the same way, no matter where they occur in the document.
Pull parsing
Pull parsing[18] treats the document as a series of items which are read in sequence using the Iterator design pattern.
This allows for writing of recursive-descent parsers in which the structure of the code performing the parsing mirrors
the structure of the XML being parsed, and intermediate parsed results can be used and accessed as local variables
within the methods performing the parsing, or passed down (as method parameters) into lower-level methods, or
returned (as method return values) to higher-level methods. Examples of pull parsers include StAX in the Java
programming language, XMLReader in PHP, System.Xml.XmlReader in the .NET Framework, and the DOM
91
XML
traversal API (NodeIterator and TreeWalker).
A pull parser creates an iterator that sequentially visits the various elements, attributes, and data in an XML
document. Code which uses this iterator can test the current item (to tell, for example, whether it is a start or end
element, or text), and inspect its attributes (local name, namespace, values of XML attributes, value of text, etc.), and
can also move the iterator to the next item. The code can thus extract information from the document as it traverses
it. The recursive-descent approach tends to lend itself to keeping data as typed local variables in the code doing the
parsing, while SAX, for instance, typically requires a parser to manually maintain intermediate data within a stack of
elements which are parent elements of the element being parsed. Pull-parsing code can be more straightforward to
understand and maintain than SAX parsing code.
Document Object Model
The Document Object Model (DOM) is an interface-oriented application programming interface that allows for
navigation of the entire document as if it were a tree of node objects representing the document's contents. A DOM
document can be created by a parser, or can be generated manually by users (with limitations). Data types in DOM
nodes are abstract; implementations provide their own programming language-specific bindings. DOM
implementations tend to be memory intensive, as they generally require the entire document to be loaded into
memory and constructed as a tree of objects before access is allowed.
Data binding
Another form of XML processing API is XML data binding, where XML data are made available as a hierarchy of
custom, strongly typed classes, in contrast to the generic objects created by a Document Object Model parser. This
approach simplifies code development, and in many cases allows problems to be identified at compile time rather
than run-time. Example data binding systems include the Java Architecture for XML Binding (JAXB) and XML
Serialization in .NET.[19]
XML as data type
XML has appeared as a first-class data type in other languages. The ECMAScript for XML (E4X) extension to the
ECMAScript/JavaScript language explicitly defines two specific objects (XML and XMLList) for JavaScript, which
support XML document nodes and XML node lists as distinct objects and use a dot-notation specifying parent-child
relationships.[20] E4X is supported by the Mozilla 2.5+ browsers (though now deprecated) and Adobe Actionscript,
but has not been adopted more universally. Similar notations are used in Microsoft's LINQ implementation for
Microsoft .NET 3.5 and above, and in Scala (which uses the Java VM). The open-source xmlsh application, which
provides a Linux-like shell with special features for XML manipulation, similarly treats XML as a data type, using
the <[ ]> notation.[21] The Resource Description Framework defines a data type rdf:XMLLiteral to hold
wrapped, canonical XML.[22]
History
XML is an application profile of SGML (ISO 8879).[]
The versatility of SGML for dynamic information display was understood by early digital media publishers in the
late 1980s prior to the rise of the Internet.[][] By the mid-1990s some practitioners of SGML had gained experience
with the then-new World Wide Web, and believed that SGML offered solutions to some of the problems the Web
was likely to face as it grew. Dan Connolly added SGML to the list of W3C's activities when he joined the staff in
1995; work began in mid-1996 when Sun Microsystems engineer Jon Bosak developed a charter and recruited
collaborators. Bosak was well connected in the small community of people who had experience both in SGML and
the Web.[]
92
XML
XML was compiled by a working group of eleven members,[23] supported by a (roughly) 150-member Interest
Group. Technical debate took place on the Interest Group mailing list and issues were resolved by consensus or,
when that failed, majority vote of the Working Group. A record of design decisions and their rationales was
compiled by Michael Sperberg-McQueen on December 4, 1997.[24] James Clark served as Technical Lead of the
Working Group, notably contributing the empty-element "<empty&nbsp;/>" syntax and the name "XML". Other
names that had been put forward for consideration included "MAGMA" (Minimal Architecture for Generalized
Markup Applications), "SLIM" (Structured Language for Internet Markup) and "MGML" (Minimal Generalized
Markup Language). The co-editors of the specification were originally Tim Bray and Michael Sperberg-McQueen.
Halfway through the project Bray accepted a consulting engagement with Netscape, provoking vociferous protests
from Microsoft. Bray was temporarily asked to resign the editorship. This led to intense dispute in the Working
Group, eventually solved by the appointment of Microsoft's Jean Paoli as a third co-editor.
The XML Working Group never met face-to-face; the design was accomplished using a combination of email and
weekly teleconferences. The major design decisions were reached in a short burst of intense work between August
and November 1996,[25] when the first Working Draft of an XML specification was published.[26] Further design
work continued through 1997, and XML 1.0 became a W3C Recommendation on February 10, 1998.
Sources
XML is a profile of an ISO standard SGML, and most of XML comes from SGML unchanged. From SGML comes
the separation of logical and physical structures (elements and entities), the availability of grammar-based validation
(DTDs), the separation of data and metadata (elements and attributes), mixed content, the separation of processing
from representation (processing instructions), and the default angle-bracket syntax. Removed were the SGML
declaration (XML has a fixed delimiter set and adopts Unicode as the document character set).
Other sources of technology for XML were the Text Encoding Initiative (TEI), which defined a profile of SGML for
use as a "transfer syntax"; and HTML, in which elements were synchronous with their resource, document character
sets were separate from resource encoding, the xml:lang attribute was invented, and (like HTTP) metadata
accompanied the resource rather than being needed at the declaration of a link. The Extended Reference Concrete
Syntax (ERCS) project of the SPREAD (Standardization Project Regarding East Asian Documents) project of the
ISO-related China/Japan/Korea Document Processing expert group was the basis of XML 1.0's naming rules;
SPREAD also introduced hexadecimal numeric character references and the concept of references to make available
all Unicode characters. To support ERCS, XML and HTML better, the SGML standard IS 8879 was revised in 1996
and 1998 with WebSGML Adaptations. The XML header followed that of ISO HyTime.
Ideas that developed during discussion which were novel in XML included the algorithm for encoding detection and
the encoding header, the processing instruction target, the xml:space attribute, and the new close delimiter for
empty-element tags. The notion of well-formedness as opposed to validity (which enables parsing without a schema)
was first formalized in XML, although it had been implemented successfully in the Electronic Book Technology
"Dynatext" software;[27] the software from the University of Waterloo New Oxford English Dictionary Project; the
RISP LISP SGML text processor at Uniscope, Tokyo; the US Army Missile Command IADS hypertext system;
Mentor Graphics Context; Interleaf and Xerox Publishing System.
93
XML
Versions
There are two current versions of XML. The first (XML 1.0) was initially defined in 1998. It has undergone minor
revisions since then, without being given a new version number, and is currently in its fifth edition, as published on
November 26, 2008. It is widely implemented and still recommended for general use.
The second (XML 1.1) was initially published on February 4, 2004, the same day as XML 1.0 Third Edition,[28] and
is currently in its second edition, as published on August 16, 2006. It contains features (some contentious) that are
intended to make XML easier to use in certain cases.[] The main changes are to enable the use of line-ending
characters used on EBCDIC platforms, and the use of scripts and characters absent from Unicode 3.2. XML 1.1 is
not very widely implemented and is recommended for use only by those who need its unique features.[29]
Prior to its fifth edition release, XML 1.0 differed from XML 1.1 in having stricter requirements for characters
available for use in element and attribute names and unique identifiers: in the first four editions of XML 1.0 the
characters were exclusively enumerated using a specific version of the Unicode standard (Unicode 2.0 to Unicode
3.2.) The fifth edition substitutes the mechanism of XML 1.1, which is more future-proof but reduces redundancy.
The approach taken in the fifth edition of XML 1.0 and in all editions of XML 1.1 is that only certain characters are
forbidden in names, and everything else is allowed, in order to accommodate the use of suitable name characters in
future versions of Unicode. In the fifth edition, XML names may contain characters in the Balinese, Cham, or
Phoenician scripts among many others which have been added to Unicode since Unicode 3.2.[]
Almost any Unicode code point can be used in the character data and attribute values of an XML 1.0 or 1.1
document, even if the character corresponding to the code point is not defined in the current version of Unicode. In
character data and attribute values, XML 1.1 allows the use of more control characters than XML 1.0, but, for
"robustness", most of the control characters introduced in XML 1.1 must be expressed as numeric character
references (and #x7F through #x9F, which had been allowed in XML 1.0, are in XML 1.1 even required to be
expressed as numeric character references[30]). Among the supported control characters in XML 1.1 are two line
break codes that must be treated as whitespace. Whitespace characters are the only control codes that can be written
directly.
There has been discussion of an XML 2.0, although no organization has announced plans for work on such a project.
XML-SW (SW for skunkworks), written by one of the original developers of XML,[31] contains some proposals for
what an XML 2.0 might look like: elimination of DTDs from syntax, integration of namespaces, XML Base and
XML Information Set (infoset) into the base standard.
The World Wide Web Consortium also has an XML Binary Characterization Working Group doing preliminary
research into use cases and properties for a binary encoding of the XML infoset. The working group is not chartered
to produce any official standards. Since XML is by definition text-based, ITU-T and ISO are using the name Fast
Infoset for their own binary infoset to avoid confusion (see ITU-T Rec. X.891 | ISO/IEC 24824-1).
Criticism
XML and its extensions have regularly been criticized for verbosity and complexity.[32] Mapping the basic tree
model of XML to type systems of programming languages or databases can be difficult, especially when XML is
used for exchanging highly structured data between applications, which was not its primary design goal. Other
criticisms attempt to refute the claim that XML is a self-describing language[33] (though the XML specification itself
makes no such claim). JSON, YAML, and S-Expressions are frequently proposed as alternatives (see Comparison of
data serialization formats);[34] which focus on representing structured data, rather than narrative documents.
94
XML
References
[3] http:/ / www. w3. org/ TR/ 2008/ REC-xml-20081126/
[4] http:/ / www. w3. org/ TR/ 2006/ REC-xml11-20060816/
[5] http:/ / www. w3. org/ TR/ rec-xml
[9] http:/ / en. wikipedia. org/ w/ index. php?title=XML& action=edit
[14] It is allowed, but not recommended, to use "<" in XML entity values: Extensible Markup Language (XML) 1.0 (Fifth Edition): EntityValue
definition (http:/ / www. w3. org/ TR/ 2008/ REC-xml-20081126/ #NT-AttValue)
[16] http:/ / web. archive. org/ web/ 20110726002036/ http:/ / diveintomark. org/ archives/ 2004/ 01/ 16/ draconianism
[17] http:/ / web. archive. org/ web/ 20110514120305/ http:/ / diveintomark. org/ archives/ 2004/ 01/ 08/ postels-law
[18] Push, Pull, Next! (http:/ / www. xml. com/ pub/ a/ 2005/ 07/ 06/ tr. html) by Bob DuCharme, at XML.com
[23] The working group was originally called the "Editorial Review Board." The original members and seven who were added before the first
edition was complete, are listed at the end of the first edition of the XML Recommendation, at http:/ / www. w3. org/ TR/ 1998/
REC-xml-19980210.
[25] Jon Bosak: The Birth of XML (http:/ / java. sun. com/ xml/ birth_of_xml. html)
[31] Tim Bray: Extensible Markup Language - SW (XML-SW) (http:/ / www. textuality. com/ xml/ xmlSW. html). 2002-02-10
[32] Jeff Atwood (2009): XML: The Angle Bracket Tax (http:/ / www. codinghorror. com/ blog/ 2008/ 05/ xml-the-angle-bracket-tax. html)
[33] Eric Brown (2003): The Myth of Self-Describing XML (http:/ / workflow. healthbase. info/ monographs/ XML_myths_Browne. pdf)
[34] Stackoverflow: What usable alternatives to XML syntax do you know? (http:/ / stackoverflow. com/ questions/ 51492/
what-usable-alternatives-to-xml-syntax-do-you-know)
Further reading
• Annex A of ISO 8879:1986 (SGML)
• Lawrence A. Cunningham (2005). "Language, Deals and Standards: The Future of XML Contracts". Washington
University Law Review. SSRN 900616 (http://ssrn.com/abstract=900616).
• Bosak, Jon; Tim Bray (May 1999). "XML and the Second-Generation Web". Scientific American. Online at XML
and the Second-Generation Web (http://www.scientificamerican.com/article.
cfm?id=xml-and-the-second-genera).
• Kelly, Sean (February 6, 2006). "Making Mistakes with XML" (http://www.developer.com/xml/article.php/
10929_3583081_1). Developer.com. Retrieved 2010-10-26.
• St. Laurent, Simon (February 12, 2003). "Five years later, XML.." (http://www.oreillynet.com/xml/blog/
2003/02/five_years_later_xml.html). O'Reilly XML Blog. O'Reilly Media. Retrieved 2010-10-26.
• "W3C XML is Ten!" (http://www.w3.org/2008/02/xml10-pressrelease). World Wide Web Consortium. 12
February 2008. Retrieved 2010-10-26.
External links
• W3C XML homepage (http://www.w3.org/XML/)
• XML 1.0 Specification (http://www.w3.org/TR/REC-xml)
• Retrospective on Extended Reference Concrete Syntax (http://xml.ascc.net/en/utf-8/ercsretro.html) by Rick
Jelliffe
• XML, Java and the Future of the Web (http://www.xml.com/pub/a/w3j/s3.bosak.html) by Jon Bosak
• http://validator.w3.org/ (http://validator.w3.org/) The Official [W3C] Markup Validation Service
95
HTML5
96
HTML5
HTML5
(HyperText Markup Language)
Filename extension
.html
Internet media type
text/html
Type code
TEXT
Uniform Type Identifier public.html[1]
Developed by
World Wide Web Consortium and WHATWG
Type of format
Markup language
Extended to
XHTML5[citation needed]
Open format?
Yes
Website
[2]
whatwg.org/html
[3]
www.w3.org/TR/html5
XHTML5
Filename extension .xhtml, .html
Internet media type application/xml, application/xhtml+xml
Developed by
World Wide Web Consortium and WHATWG
Type of format
Markup language
Extended from
XML, HTML5[citation needed]
Open format?
Yes
Website
www.whatwg.org/specs/web-apps/current-work/multipage/the-xhtml-syntax.html
[4]
HTML5
97
HTML
•
HTML and HTML5; HTML editor
•
Dynamic HTML
•
XHTML
•
•
XHTML Basic (Mobile)
XHTML Mobile Profile and C-HTML
•
HTML element
•
Character encodings; Unicode
•
Language code
•
Document Object Model
•
Browser Object Model
•
Style sheets and CSS
•
Font family and Web colors
•
HTML scripting and JavaScript
•
W3C, WHATWG, and validator
•
Quirks mode
•
HTML Frames
•
HTML5 Canvas, WebGL, and WebCL
•
HTML5 Audio and HTML5 video
•
Web storage
•
Web browser (layout) engine
•
Comparison of
•
•
•
document markup languages
web browsers
layout engine support for
•
•
•
HTML; Non-standard HTML
XHTML (1.1)
HTML5; HTML5 canvas,
•
HTML5 media (Audio, Video)
HTML5 is a markup language for structuring and presenting content for the World Wide Web and a core technology
of the Internet. It is the fifth revision of the HTML standard (created in 1990 and standardized as HTML 4 as of
1997)[] and, as of December 2012[5], is a W3C Candidate Recommendation.[6] Its core aims have been to improve
the language with support for the latest multimedia while keeping it easily readable by humans and consistently
understood by computers and devices (web browsers, parsers, etc.). HTML5 is intended to subsume not only
HTML 4, but XHTML 1 and DOM Level 2 HTML as well.[]
Following its immediate predecessors HTML 4.01 and XHTML 1.1, HTML5 is a response to the observation that
the HTML and XHTML in common use on the World Wide Web are a mixture of features introduced by various
specifications, along with those introduced by software products such as web browsers, those established by
common practice, and the many syntax errors in existing web documents.[7] It is also an attempt to define a single
markup language that can be written in either HTML or XHTML syntax. It includes detailed processing models to
encourage more interoperable implementations; it extends, improves and rationalises the markup available for
documents, and introduces markup and application programming interfaces (APIs) for complex web applications.[]
For the same reasons, HTML5 is also a potential candidate for cross-platform mobile applications. Many features of
HTML5 have been built with the consideration of being able to run on low-powered devices such as smartphones
and tablets. In December 2011, research firm Strategy Analytics forecast sales of HTML5 compatible phones will
top 1 billion in 2013.[8]
In particular, HTML5 adds many new syntactic features. These include the new <video>, <audio> and
<canvas> elements, as well as the integration of scalable vector graphics (SVG) content (that replaces the uses of
HTML5
generic <object> tags) and MathML for mathematical formulas. These features are designed to make it easy to
include and handle multimedia and graphical content on the web without having to resort to proprietary plugins and
APIs. Other new elements, such as <section>, <article>, <header> and <nav>, are designed to enrich the
semantic content of documents. New attributes have been introduced for the same purpose, while some elements and
attributes have been removed. Some elements, such as <a>, <cite> and <menu> have been changed, redefined
or standardized. The APIs and Document Object Model (DOM) are no longer afterthoughts, but are fundamental
parts of the HTML5 specification.[] HTML5 also defines in some detail the required processing for invalid
documents so that syntax errors will be treated uniformly by all conforming browsers and other user agents.[9]
History
The Web Hypertext Application Technology Working Group (WHATWG) began work on the new standard in 2004.
At that time, HTML 4.01 had not been updated since 2000,[10] and the World Wide Web Consortium (W3C) was
focusing future developments on XHTML 2.0. In 2009, the W3C allowed the XHTML 2.0 Working Group's charter
to expire and decided not to renew it. W3C and WHATWG are currently working together on the development of
HTML5.[11]
While HTML5 is often compared to Flash, the two technologies are very different. Both include features for playing
audio and video within web pages, and for using Scalable Vector Graphics. HTML5 on its own cannot be used for
animation and interactivity — it must be supplemented with CSS3 or Javascript. There are many Flash capabilities
that have no direct counterpart in HTML5. See Comparison of HTML5 and Flash.
Although HTML5 has been well known among web developers for years, it became the topic of mainstream media
around April 2010[12][13][14][15] after Apple Inc's then-CEO Steve Jobs issued a public letter titled "Thoughts on
Flash" where he concludes that "[Adobe] Flash is no longer necessary to watch video or consume any kind of web
content" and that "new open standards created in the mobile era, such as HTML5, will win".[16] This sparked a
debate in web development circles where some suggested that while HTML5 provides enhanced functionality,
developers must consider the varying browser support of the different parts of the standard as well as other
functionality differences between HTML5 and Flash.[17] In early November 2011, Adobe announced that it will
discontinue development of Flash for mobile devices and reorient its efforts in developing tools utilizing HTML5.[18]
Standardization process
The Mozilla Foundation and Opera Software presented a position paper at a World Wide Web Consortium (W3C)
workshop in June 2004,[19] focusing on developing technologies that are backwards compatible with existing
browsers,[20] including an initial draft specification of Web Forms 2.0. The workshop concluded with a vote, 8 for,
14 against, for continuing work on HTML.[21] Later that month, work based upon that position paper moved to the
newly formed Web Hypertext Application Technology Working Group (WHATWG), and a second draft, Web
Applications 1.0, was also announced.[22] The two specifications were later merged to form HTML5.[23] The
HTML5 specification was adopted as the starting point of the work of the new HTML working group of the W3C in
2007.
2008 – First Public Working Draft
WHATWG published the First Public Working Draft of the specification on 22 January 2008.[] Parts of HTML5
have been implemented in browsers despite the whole specification not yet having reached final Recommendation
status.
2011 – Last Call
On 14 February 2011, the W3C extended the charter of its HTML Working Group with clear milestones for
HTML5. In May 2011, the working group advanced HTML5 to "Last Call", an invitation to communities inside and
outside W3C to confirm the technical soundness of the specification. The W3C is developing a comprehensive test
98
HTML5
99
suite to achieve broad interoperability for the full specification by 2014, which is now the target date for
Recommendation.[] In January 2011, the WHATWG renamed its "HTML5" living standard to "HTML". The W3C
nevertheless continues its project to release HTML5.[24]
2012 – Working Draft
As of May 2012[5], the specification is back to Working Draft state at the W3C. Ian Hickson of Google is the editor
of HTML5. The criterion for the specification becoming a W3C Recommendation is "two 100% complete and fully
interoperable implementations".[] Many parts of the specification are stable and may be implemented in products.[25]
In July 2012, WHATWG and W3C have decided on a degree of separation. W3C will continue the HTML5
specification work, focusing on a single definitive standard, which is considered as a "snapshot" by WHATWG. The
WHATWG organization will continue its work with HTML5 as a "Living Standard". The concept of a living
standard is that it is never complete and is always being updated and improved.[26]
Plan 2014
In September 2012, the W3C proposed a plan[] to release a stable HTML5 Recommendation by the end of 2014 and
an HTML 5.1 specification Recommendation by the end of 2016.
Core HTML specification
The combined timelines for HTML 5.0, HTML 5.1 and HTML 5.2:
2012
HTML 5.0
Candidate Rec
HTML 5.1
1st Working Draft
[]
HTML 5.2
2013
2014
2015
2016
Call for Review Recommendation
Last Call
Candidate Rec
Recommendation
1st Working Draft
Features and APIs
The W3C proposed a greater reliance on modularity as a key part of the plan to make faster progress, meaning
identifying specific features, either proposed or already existing in the spec, and advancing them as separate
specifications. Some technologies that were originally defined in HTML5 itself are now defined in separate
specifications:
•
•
•
•
•
HTML Working Group – Microdata, HTML Canvas 2D Context
Web Apps WG – Web Messaging, Web Workers, Web Storage, WebSocket API, Server-Sent Events
IETF HyBi WG – WebSocket Protocol
WebRTC WG – WebRTC
W3C Web Media Text Tracks CG – WebVTT
Some specifications that were initially developed standalone have been adapted as HTML5 extensions or features by
reference: SVG, MathML, WAI-ARIA.
Features
Markup
HTML5 introduces elements and attributes that reflect typical usage on modern websites. Some of them are semantic
replacements for common uses of generic block (<div>) and inline (<span>) elements, for example <nav>
(website navigation block), <footer> (usually referring to bottom of web page or to last lines of HTML code), or
<audio> and <video> instead of <object>.[27][28][29] Some deprecated elements from HTML 4.01 have been
dropped, including purely presentational elements such as <font> and <center>, whose effects have long been
superseded by the much more powerful Cascading Style Sheets. There is also a renewed emphasis on the importance
HTML5
100
of DOM scripting (e.g., JavaScript) in Web behavior.
The HTML5 syntax is no longer based on SGML[30][31] despite the similarity of its markup. It has, however, been
designed to be backward compatible with common parsing of older versions of HTML. It comes with a new
introductory line that looks like an SGML document type declaration, <!DOCTYPE html>, which triggers the
standards-compliant rendering mode.[32] As of 5 January 2009, HTML5 also includes Web Forms 2.0, a previously
separate WHATWG specification.
New APIs
In addition to specifying markup, HTML5 specifies scripting application programming interfaces (APIs) that can be
used with JavaScript.[33] Existing document object model (DOM) interfaces are extended and de facto features
documented. There are also new APIs, such as:
• The canvas element for immediate
mode 2D drawing. See Canvas 2D
API Specification 1.0
specification[35]
• Timed media playback
• Offline Web Applications[36]
• Document editing
• Drag-and-drop
• Cross-document messaging[37]
• Browser history management
• MIME type and protocol handler
registration
• Microdata
• Web Storage, a key-value pair
storage framework that provides
behaviour similar to cookies but
with larger storage capacity and improved API.[38]
[34]
HTML5 related APIs.
Not all of the above technologies are included in the W3C HTML5 specification, though they are in the WHATWG
HTML specification.[39] Some related technologies, which are not part of either the W3C HTML5 or the WHATWG
HTML specification, are as follows. The W3C publishes specifications for these separately:
•
•
•
•
•
•
•
Geolocation
Web SQL Database, a local SQL Database (no longer maintained).[40]
The Indexed Database API, an indexed hierarchical key-value store (formerly WebSimpleDB).[41]
HTML5 File API,[42] handles file uploads and file manipulation.[43]
Directories and System, an API intended to satisfy client-side-storage use cases not well served by databases.[44]
File Writer, an API for writing to files from web applications.[45]
Web Audio API,[46] a high-level JavaScript API for processing and synthesizing audio in web applications.
HTML5 alone cannot provide animation within web pages. Either JavaScript or CSS3 is necessary for animating
HTML elements. Animation is also possible using JavaScript and HTML 4[47]Wikipedia:Verifiability, and within
SVG elements through SMIL, although browser support of the latter remains uneven as of 2011.
HTML5
XHTML5
XHTML5 is the XML serialization of HTML5. XML documents must be served with an XML Internet media type
such as application/xhtml+xml or application/xml.[48] XHTML5 requires XML's strict, well-formed
syntax. The choice between HTML5 and XHTML5 boils down to the choice of a MIME/content type: the media
type one chooses determines what type of document should be used.[49] In XHTML5, the HTML5 doctype html is
optional and may simply be omitted.[50] HTML that has been written to conform to both the HTML and XHTML
specifications—and which will therefore produce the same DOM tree whether parsed as HTML or XML—is termed
"polyglot markup".[51]
Error handling
An HTML5 (text/html) browser will be flexible in handling incorrect syntax. HTML5 is designed so that old
browsers can safely ignore new HTML5 constructs.[citation needed] In contrast to HTML 4.01, the HTML5
specification gives detailed rules for lexing and parsing, with the intent that different compliant browsers will
produce the same result in the case of incorrect syntax.[] Although HTML5 now defines a consistent behavior for
"tag soup" documents, those documents are not regarded as conforming to the HTML5 standard.[]
Popularity
According to a report released on 30 September 2011, 34 of the world's top 100 Web sites were using HTML5 – the
adoption led by search engines and social networks.[52]
Differences from HTML 4.01 and XHTML 1.x
The following is a cursory list of differences and some specific examples.
• New parsing rules: oriented towards flexible parsing and compatibility; not based on SGML
• Ability to use inline SVG and MathML in text/html
• New elements: article, aside, audio, bdi, canvas, command, data, datalist, details, embed,
figcaption, figure, footer, header, hgroup, keygen, mark, meter, nav, output, progress,
rp, rt, ruby, section, source, summary, time, track, video, wbr
• New types of form controls: dates and times, email, url, search, number, range, tel, color[53]
• New attributes: charset (on meta), async (on script)
• Global attributes (that can be applied for every element): id, tabindex, hidden, data-* (custom data
attributes)
• Deprecated elements will be dropped altogether: acronym, applet, basefont, big, center, dir, font,
frame, frameset, isindex, noframes, strike, tt
dev.w3.org provides the latest Editors Draft of "HTML5 differences from HTML 4",[54] which provides a complete
outline of additions, removals and changes between HTML5 and HTML 4.
101
HTML5
The HTML5 logo
On 18 January 2011, the W3C introduced a logo to represent the use of or interest in
HTML5. Unlike other badges previously issued by the W3C, it does not imply
validity or conformance to a certain standard. As of 1 April 2011, this logo is
official.[]
When initially presenting it to the public, the W3C announced the HTML5 logo as a
"general-purpose visual identity for a broad set of open web technologies, including
HTML5, CSS, SVG, WOFF, and others".[] Some web standard advocates, including
The Web Standards Project, criticised that definition of "HTML5" as an umbrella
The W3C HTML5 logo
term, pointing out the blurring of terminology and the potential for
miscommunication.[] Three days later, the W3C responded to community feedback
and changed the logo's definition, dropping the enumeration of related technologies.[55] The W3C then said the logo
"represents HTML5, the cornerstone for modern Web applications".[]
References
[2] http:/ / whatwg. org/ html
[3]
[4]
[5]
[7]
http:/ / www. w3. org/ TR/ html5
http:/ / www. whatwg. org/ specs/ web-apps/ current-work/ multipage/ the-xhtml-syntax. html
http:/ / en. wikipedia. org/ w/ index. php?title=HTML5& action=edit
W3C Markup Validation Service (http:/ / validator. w3. org/ ), using this service anybody can check that almost all the web sites created by
popular user friendly tools produce web pages not conforming to the W3C standards. The situation can perhaps become a bit better as time
passes, but this was the situation between 1998 and 2012. This fact belongs to the folklore of the real experts, not the average experts floading
the world of informatics.
[8] HTML5-enabled phones to hit 1 billion in sales in 2013 | Internet & Media - CNET News (http:/ / news. cnet. com/
8301-1023_3-57339156-93/ html5-enabled-phones-to-hit-1-billion-in-sales-in-2013/ )
[16] 'Thoughts on Flash', by Steve Jobs, CEO of Apple, Inc. (http:/ / www. apple. com/ hotnews/ thoughts-on-flash/ )
[17] Is HTML5 Replacing Flash? (http:/ / www. lyquix. com/ blog/ 122-is-html5-replacing-flash)
[27] Introduction to HTML5 video (http:/ / dev. opera. com/ articles/ view/ introduction-html5-video/ )
[28] IBM Developer Works New elements in HTML5: Structure and semantics (http:/ / www. ibm. com/ developerworks/ library/ x-html5/
?ca=dgr-lnxw01NewHTML)
[29] ICAMD.org Finalcut Silverlight Films that Videographers share Quicktime in a Flash : Video on the Web using HTML5 and other Codecs
(http:/ / www. amazon. com/ dp/ B003H05Q18)
[30] HTML5 DTD (http:/ / www. cs. tut. fi/ ~jkorpela/ html5-dtd. html): "HTML5 is not SGML-based, and there will be no official DTD for it."
[31] HTML 5 Reference (http:/ / dev. w3. org/ html5/ html-author/ ): "Although it is inspired by its SGML origins, in practice, it really only
shares minor syntactic similarities." "As HTML5 is no longer formally based upon SGML, the DOCTYPE no longer serves this purpose, and
thus no longer needs to refer to a DTD."
[33] "HTML5 Differences from HTML4 – APIs" (http:/ / www. w3. org/ html/ wg/ html5/ diff/ #apis). World Wide Web Consortium.
[34] Sergey Mavrody "Sergey's HTML5 & CSS3 Quick Reference. 2nd Edition". Belisso Corp., 2012. ISBN 978-0-9833867-2-8
[35] "HTML Canvas 2D Context" (http:/ / dev. w3. org/ html5/ 2dcontext/ ). World Wide Web Consortium.
[36] "Offline Web Applications" (http:/ / www. w3. org/ TR/ offline-webapps/ ). World Wide Web Consortium.
[37] "HTML5 Web Messaging" (http:/ / dev. w3. org/ html5/ postmsg/ ). World Wide Web Consortium.
[38] "Web Storage Specification" (http:/ / dev. w3. org/ html5/ webstorage/ ). World Wide Web Consortium.
[39] 1 Introduction — HTML Standard (http:/ / www. whatwg. org/ specs/ web-apps/ current-work/ multipage/ introduction. html#is-this-html5)
[40] "Web SQL Database" (http:/ / dev. w3. org/ html5/ webdatabase/ ). World Wide Web Consortium.
[41] "Indexed Database" (http:/ / www. w3. org/ TR/ IndexedDB/ ). World Wide Web Consortium.
[42] "File API" (http:/ / www. w3. org/ TR/ FileAPI/ )
[43] "File API" (http:/ / www. w3. org/ TR/ FileAPI/ ). World Wide Web Consortium.
[44] "Filesystem API" (http:/ / www. w3. org/ TR/ file-system-api/ ). World Wide Web Consortium.
[45] "File API: Writer" (http:/ / www. w3. org/ TR/ file-writer-api/ ). World Wide Web Consortium.
[46] "Web Audio API" (https:/ / dvcs. w3. org/ hg/ audio/ raw-file/ tip/ webaudio/ specification. html)
[47] "What HTML5 is (and what it isn't)", HTML5 First Look, (lynda.com, 2010),
<http://www.lynda.com/home/DisplayCourse.aspx?lpk2=67161>
[49] Sergey Mavrody "Sergey's HTML5 & CSS3 Quick Reference". Belisso Corp., 2010. ISBN 978-0-615-43321-9
102
HTML5
103
[51] Polyglot Markup: HTML-Compatible XHTML Documents (http:/ / www. w3. org/ TR/ 2011/ WD-html-polyglot-20110405/
#dfn-polyglot-markup), W3C Working Draft 5 April 2011
External links
•
•
•
•
•
•
•
•
HTML Working Group and drafts of HTML5 specifications and notes (http://www.w3.org/html/wg/)
Mozilla Demo Studio (includes demonstrations of HTML5) (https://demos.mozilla.org/en-US/)
HTML5 Bookmarks - daily articles and usefull bookmarks (http://html5bookmarks.com/)
Interactive test of HTML5 input elements (http://www.coreservlets.com/html5-tutorial/input-types.html)
HTML5 Rocks (http://www.html5rocks.com/) by Google
The HTML5 Center (http://html5center.sourceforge.net/)
The HTML5 Test - How well does your browser support html5? (http://www.html5test.com/)
HTML5 Beginners tutorial (http://www.referencedesigner.com/tutorials/html5/html5_1.php)
Document Object Model
HTML
•
HTML and HTML5; HTML editor
•
Dynamic HTML
•
XHTML
•
•
XHTML Basic (Mobile)
XHTML Mobile Profile and C-HTML
•
HTML element
•
Character encodings; Unicode
•
Language code
•
Document Object Model
•
Browser Object Model
•
Style sheets and CSS
•
Font family and Web colors
•
HTML scripting and JavaScript
•
W3C, WHATWG, and validator
•
Quirks mode
•
HTML Frames
•
HTML5 Canvas, WebGL, and WebCL
•
HTML5 Audio and HTML5 video
•
Web storage
•
Web browser (layout) engine
•
Comparison of
•
•
•
document markup languages
web browsers
layout engine support for
•
•
•
HTML; Non-standard HTML
XHTML (1.1)
HTML5; HTML5 canvas,
•
HTML5 media (Audio, Video)
Document Object Model
104
The Document Object Model (DOM) is a cross-platform and
language-independent convention for representing and interacting with
objects in HTML, XHTML and XML documents.[] Objects in the
DOM tree may be addressed and manipulated by using methods on the
objects. The public interface of a DOM is specified in its application
programming interface (API). The history of the Document Object
Model is intertwined with the history of the "browser wars" of the late
1990s between Netscape Navigator and Microsoft Internet Explorer, as
well as with that of JavaScript and JScript, the first scripting languages
to be widely implemented in the layout engines of web browsers.
History
Legacy DOM
Hierarchy of objects in an example HTML
JavaScript was released by Netscape Communications in 1996 within
DOM—Document Object Model
Netscape Navigator 2.0. Netscape's competitor, Microsoft, released
Internet Explorer 3.0 later the same year with a port of JavaScript
called JScript. JavaScript and JScript let web developers create web pages with client-side interactivity. The limited
facilities for detecting user-generated events and modifying the HTML document in the first generation of these
languages eventually became known as "DOM Level 0" or "Legacy DOM." No independent standard was developed
for DOM Level 0, but it was partly described in the specification of HTML 4.
Legacy DOM was limited in the kinds of elements that could be accessed. Form, link and image elements could be
referenced with a hierarchical name that began with the root document object. A hierarchical name could make use
of either the names or the sequential index of the traversed elements. For example, a form input element could be
accessed as either "document.formName.inputName" or "document.forms[0].elements[0]."
The Legacy DOM enabled client-side form validation and the popular "rollover" effect.
Intermediate DOM
In 1997, Netscape and Microsoft released version 4.0 of Netscape Navigator and Internet Explorer respectively,
adding support for Dynamic HTML (DHTML), functionality enabling changes to a loaded HTML document.
DHTML required extensions to the rudimentary document object that was available in the Legacy DOM
implementations. Although the Legacy DOM implementations were largely compatible since JScript was based on
JavaScript, the DHTML DOM extensions were developed in parallel by each browser maker and remained
incompatible. These versions of the DOM became known as the "Intermediate DOM."
Document Object Model
Standardization
The World Wide Web Consortium (W3C), founded in 1994 to promote open standards for the World Wide Web,
brought Netscape Communications and Microsoft together with other companies to develop a standard for browser
scripting languages, called "ECMAScript." The first version of the standard was published in 1997. Subsequent
releases of JavaScript and JScript would implement the ECMAScript standard for greater cross-browser
compatibility.
After the release of ECMAScript, W3C began work on a standardized DOM. The initial DOM standard, known as
"DOM Level 1," was recommended by W3C in late 1998. About the same time, Internet Explorer 5.0 shipped with
limited support for DOM Level 1. DOM Level 1 provided a complete model for an entire HTML or XML document,
including means to change any portion of the document. Non-conformant browsers such as Internet Explorer 4.x and
Netscape 4.x were still widely used as late as 2000.
DOM Level 2 was published in late 2000. It introduced the "getElementById" function as well as an event model
and support for XML namespaces and CSS.
DOM Level 3, the current release of the DOM specification, published in April 2004, added support for XPath and
keyboard event handling, as well as an interface for serializing documents as XML.
DOM Level 4 is currently being developed. Draft version 6 was released in December 2012.[1]
By 2005, large parts of W3C DOM were well-supported by common ECMAScript-enabled browsers, including
Microsoft Internet Explorer version 6 (from 2001), Opera, Safari and Gecko-based browsers (like Mozilla, Firefox,
SeaMonkey and Camino).
Applications
Web browsers
To render a document such as an HTML page, most web browsers use an internal model similar to the DOM. The
nodes of every document are organized in a tree structure, called the DOM tree, with topmost node named
"Document object". When an HTML page is rendered in browsers, the browser downloads the HTML into local
memory and automatically parses it to display the page on screen. The DOM is also the way JavaScript transmits the
state of the browser in HTML pages.
Implementations
Because DOM supports navigation in any direction (e.g., parent and previous sibling) and allows for arbitrary
modifications, an implementation must at least buffer the document that has been read so far (or some parsed form of
it).[citation needed]
Layout engines
Web browsers rely on layout engines to parse HTML into a DOM. Some layout engines such as Trident/MSHTML
and Presto are associated primarily or exclusively with a particular browser such as Internet Explorer and Opera
respectively. Others, such as WebKit and Gecko, are shared by a number of browsers, such as Google Chrome,
Firefox and Safari. The different layout engines implement the DOM standards to varying degrees of compliance.
105
Document Object Model
Libraries
DOM implementations:
•
•
•
•
libxml2
MSXML
Xerces is a collection of DOM implementations written in C++, Java and Perl
XML for <SCRIPT> is a JavaScript-based DOM implementation[2]
APIs that expose DOM implementations:
• JAXP (Java API for XML Processing) is an API for accessing DOM providers
References
[1] http:/ / www. w3. org/ TR/ domcore/
[2] "Cross Platform XML Parsing in JavaScript" (http:/ / xmljs. sourceforge. net/ )
• Flanagan, David (2006). JavaScript: The Definitive Guide. O'Reilly & Associates. pp. 312–313.
ISBN 0-596-10199-6.
• Koch, Peter-Paul (May 14, 2001). "The Document Object Model: an Introduction" (http://www.digital-web.
com/articles/the_document_object_model/). Digital Web Magazine. Retrieved January 10, 2009.
• Le Hégaret, Philippe (2002). "The W3C Document Object Model (DOM)" (http://www.w3.org/2002/07/
26-dom-article.html). World Wide Web Consortium. Retrieved January 10, 2009.
• Guisset, Fabian. "What does each DOM Level bring?" (https://developer.mozilla.org/en/docs/DOM_Levels).
Mozilla Developer Center. Mozilla Project. Retrieved January 10, 2009.
External links
•
•
•
•
•
Document Object Model (http://www.w3.org/DOM/) by the World Wide Web Consortium
Technology Reports (http://xml.coverpages.org/dom.html)
What does your user agent claim to support? (http://www.w3.org/2003/02/06-dom-support.html)
W3C DOM scripts and compatibility tables (http://www.quirksmode.org/dom/contents.html) (Quirksmode)
Gecko DOM Reference (https://developer.mozilla.org/en/Gecko_DOM_Reference) (Mozilla Developer
Center)
• IB DOM Utilities: Mapping JavaScript Objects to DOM Elements (http://ibdom.sourceforge.net/)
• XJR with DOM, SAX2, and XPath interfaces (https://www.p6r.com/software/xjr.html)
• Firefox plugin that lets you visualize a Web's page DOM in 3D (http://blog.mozilla.com/tilt/)
106
Internet media type
Internet media type
An Internet media type[] is a two-part identifier for file formats on the Internet. The identifiers were originally
defined in RFC 2046 for use in email sent through SMTP, but their use has expanded to other protocols such as
HTTP, RTP and SIP. These types were called MIME types, and are sometimes referred to as Content-types, after
the name of a header in several protocols whose value is such a type. The original name MIME type referred to
usage to identify non-ASCII parts of email messages composed using the MIME (Multipurpose Internet Mail
Extensions) specification. Without MIME types, email clients would not be able to understand if an attachment file
were a graphics file or a spreadsheet etc. and would not be able to handle the attachment appropriately.
A media type is composed of two or more parts: A type, a subtype, and zero or more optional parameters. For
example, subtypes of text have an optional charset parameter that can be included to indicate the character
encoding (e.g. text/html; charset=UTF-8), and subtypes of multipart type often define a boundary
between parts. Allowed charset values are defined in the list of IANA character sets.
Prior to RFC 6648,[1] experimental or non-standard[2] media types were prefixed with x-, but this practice was
deprecated due to incompatibility problems when the experimental types were standardized. Subtypes that begin
with vnd. are vendor-specific;[3] subtypes that begin with prs. are in the personal or vanity tree.[4] New media
types can be created with the procedures outlined in RFC 4288.
In addition to email clients, web browsers also support various media types. This enables the browser to display or
output files that are not in HTML format. Media type specification is also an important information source for search
engines for the classification of data files on the web.
There are many registered media types, such as GIF graphics files and PostScript files. It is also possible to define
custom media types.
Limitations
Internet media types are often used as part of a communication protocol between two applications (the source and
destination). In this context, internet media type specifiers experience several problems.
The first problem is the ability of the source application (i.e. web server, email client) to correctly determine an
internet media type for a piece of content. Many applications attempt to heuristically classify a file using its filename
extension or with magic numbers. Neither approach is perfect, and may incorrectly classify a content's media type:
• Incorrect filename extension: a filename extension classifier will report an incorrect media type. For instance,
some applications incorrectly give Rich text format files the .doc file extensions, instead of the correct .rtf
extension.
• No filename extension: a filename extension classifier will report no media type, or will (incorrectly) report a
catch-all type such as application/octet-stream. Files without extension are common on unix systems.
• Filename extension collisions: when multiple formats use the same filename extension, a filename extension
classifier will choose one media type arbitrarily. For instance, both Microsoft Word templates and graphviz graph
files use the extension .dot.
• Ambiguous container formats: a magic number classifier may give a correct, though non-specific, media type,
thus preventing a meaningful interpretation of the content. For instance, Office Open XML (.docx) format and
Java executable (.jar) are both implemented internally as a zipped archive. A magic number system may classify
such files as application/zip instead of the more specific type. Similar problems occur between XML and
application formats implemented on top of XML.
• Ambiguous magic numbers: an attacker can create a file which is identified simultaneously as two separate
internet media types. For instance, the internal structure of a Gifar makes it both a valid GIF image and Java
executable.
107
Internet media type
The second problem is the destination application's ability to trust the internet media type reported by the sender. As
above, the internet media type is incorrect in some circumstances, and must be treated with skepticism. As early as
2002, the W3C unambiguously warned that it is a "serious error" if internet media type is incorrect, and that software
should not attempt to guess a correct media type.[]:Section 2 Nonetheless, software engineering principles encourage
software that forgives a certain degree of malformed input, and user experience suffers when software fails to
correctly interpret the content. Consequently, the many destination applications are designed to attempt recovery
from such errors and identify a correct media type.[5][6]
The destination application has no more knowledge of the content than the source application, and attempts to infer
the media type at the destination are equally difficult. This can lead to incompatibilities between source and
destination applications, and in the worst-case, security vulnerabilities such as the Gifar attack or Cross-site scripting
attacks.[7][] Advanced content sniffing approaches have been proposed to balance interoperability and security in
such situations.[6]
List of common media types
IANA manages the official registry of media types [8]. It includes the following types:
Type application
For Multipurpose files:
• application/atom+xml: Atom feeds
• application/ecmascript: ECMAScript/JavaScript; Defined in RFC 4329 (equivalent to
application/javascript but with stricter processing rules)
• application/EDI-X12: EDI X12 data; Defined in RFC 1767
• application/EDIFACT: EDI EDIFACT data; Defined in RFC 1767
• application/json: JavaScript Object Notation JSON; Defined in RFC 4627
• application/javascript: ECMAScript/JavaScript; Defined in RFC 4329 (equivalent to
application/ecmascript but with looser processing rules) It is not accepted in IE 8 or earlier text/javascript is accepted but it is defined as obsolete in RFC 4329. The "type" attribute of the
<script> tag in HTML5 is optional. In practice, omitting the media type of JavaScript programs is the most
interoperable solution, since all browsers have always assumed the correct default even before HTML5.
• application/octet-stream: Arbitrary binary data.[9] Generally speaking this type identifies files that are
not associated with a specific application. Contrary to past assumptions by software packages such as Apache this
is not a type that should be applied to unknown files. In such a case, a server or application should not indicate a
content type, as it may be incorrect, but rather, should omit the type in order to allow the recipient to guess the
type.[10]
• application/ogg: Ogg, a multimedia bitstream container format; Defined in RFC 5334
• application/pdf: Portable Document Format, PDF has been in use for document exchange on the Internet
since 1993; Defined in RFC 3778
• application/postscript: PostScript; Defined in RFC 2046
• application/rdf+xml: Resource Description Framework; Defined by RFC 3870
• application/rss+xml: RSS feeds
• application/soap+xml: SOAP; Defined by RFC 3902
• application/font-woff: Web Open Font Format; (candidate recommendation; use
application/x-font-woff until standard is official)
• application/xhtml+xml: XHTML; Defined by RFC 3236
• application/xml: XML files; Defined by RFC 3023
• application/xml-dtd: DTD files; Defined by RFC 3023
108
Internet media type
• application/xop+xml:XOP
• application/zip: ZIP archive files; Registered[11]
• application/gzip: Gzip, Defined in RFC 6713
Type audio
For Audio.
•
•
•
•
•
•
•
•
•
audio/basic: mulaw audio at 8 kHz, 1 channel; Defined in RFC 2046
audio/L24: 24bit Linear PCM audio at 8–48 kHz, 1-N channels; Defined in RFC 3190
audio/mp4: MP4 audio
audio/mpeg: MP3 or other MPEG audio; Defined in RFC 3003
audio/ogg: Ogg Vorbis, Speex, Flac and other audio; Defined in RFC 5334
audio/vorbis: Vorbis encoded audio; Defined in RFC 5215
audio/vnd.rn-realaudio: RealAudio; Documented in RealPlayer Help[12]
audio/vnd.wave: WAV audio; Defined in RFC 2361
audio/webm: WebM open media format
Type image
• image/gif: GIF image; Defined in RFC 2045 and RFC 2046
• image/jpeg: JPEG JFIF image; Defined in RFC 2045 and RFC 2046
• image/pjpeg: JPEG JFIF image; Associated with Internet Explorer; Listed in ms775147(v=vs.85) [13] Progressive JPEG, initiated before global browser support for progressive JPEGs (Microsoft and Firefox).
• image/png: Portable Network Graphics; Registered,[14] Defined in RFC 2083
• image/svg+xml: SVG vector image; Defined in SVG Tiny 1.2 Specification Appendix M [15]
• image/tiff: Tag Image File Format (only for Baseline TIFF); Defined in RFC 3302
• image/vnd.microsoft.icon: ICO image; Registered[16]
Type message
•
•
•
•
message/http: Defined in RFC 2616
message/imdn+xml: IMDN Instant Message Disposition Notification; Defined in RFC 5438
message/partial: Email; Defined in RFC 2045 and RFC 2046
message/rfc822: Email; EML files, MIME files, MHT files, MHTML files; Defined in RFC 2045 and RFC
2046
Type model
For 3D models.
•
•
•
•
•
•
•
model/example: Defined in RFC 4735
model/iges: IGS files, IGES files; Defined in RFC 2077
model/mesh: MSH files, MESH files; Defined in RFC 2077, SILO files
model/vrml: WRL files, VRML files; Defined in RFC 2077
model/x3d+binary: X3D ISO standard for representing 3D computer graphics, X3DB binary files
model/x3d+vrml: X3D ISO standard for representing 3D computer graphics, X3DV VRML files
model/x3d+xml: X3D ISO standard for representing 3D computer graphics, X3D XML files
109
Internet media type
Type multipart
For archives and other objects made of more than one part.
•
•
•
•
•
•
multipart/mixed: MIME Email; Defined in RFC 2045 and RFC 2046
multipart/alternative: MIME Email; Defined in RFC 2045 and RFC 2046
multipart/related: MIME Email; Defined in RFC 2387 and used by MHTML (HTML mail)
multipart/form-data: MIME Webform; Defined in RFC 2388
multipart/signed: Defined in RFC 1847
multipart/encrypted: Defined in RFC 1847
Type text
For human-readable text and source code.
•
•
•
•
text/cmd: commands; subtype resident in Gecko browsers like Firefox 3.5
text/css: Cascading Style Sheets; Defined in RFC 2318
text/csv: Comma-separated values; Defined in RFC 4180
text/html: HTML; Defined in RFC 2854
• text/javascript (Obsolete): JavaScript; Defined in and obsoleted by RFC 4329 in order to discourage its
usage in favor of application/javascript. However, text/javascript is allowed in HTML 4 and
5 and, unlike application/javascript, has cross-browser support. The "type" attribute of the
<script> tag in HTML5 is optional and there is no need to use it at all since all browsers have always assumed
the correct default (even in HTML 4 where it was required by the specification).
• text/plain: Textual data; Defined in RFC 2046 and RFC 3676
• text/vcard: vCard (contact information); Defined in RFC 6350
• text/xml: Extensible Markup Language; Defined in RFC 3023
Type video
For video.
•
•
•
•
•
•
•
•
video/mpeg: MPEG-1 video with multiplexed audio; Defined in RFC 2045 and RFC 2046
video/mp4: MP4 video; Defined in RFC 4337
video/ogg: Ogg Theora or other video (with audio); Defined in RFC 5334
video/quicktime: QuickTime video; Registered[17]
video/webm: WebM Matroska-based open media format
video/x-matroska: Matroska open media format
video/x-ms-wmv: Windows Media Video; Documented in Microsoft KB 288102 [18]
video/x-flv: Flash video (FLV files)
110
Internet media type
List of common media subtype prefixes
Prefix vnd
For vendor-specific files.
• application/vnd.oasis.opendocument.text: OpenDocument Text; Registered[19]
• application/vnd.oasis.opendocument.spreadsheet: OpenDocument Spreadsheet; Registered[20]
• application/vnd.oasis.opendocument.presentation: OpenDocument Presentation;
Registered[21]
• application/vnd.oasis.opendocument.graphics: OpenDocument Graphics; Registered[22]
• application/vnd.ms-excel: Microsoft Excel files
• application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: Microsoft
Excel 2007 files
• application/vnd.ms-powerpoint: Microsoft Powerpoint files
• application/vnd.openxmlformats-officedocument.presentationml.presentation:
Microsoft Powerpoint 2007 files
• application/vnd.openxmlformats-officedocument.wordprocessingml.document:
Microsoft Word 2007 files
• application/vnd.mozilla.xul+xml: Mozilla XUL files
• application/vnd.google-earth.kml+xml: KML files (e.g. for Google Earth)[]
Prefix x
For non-standard files.
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
application/x-deb: deb (file format), a software package format used by the Debian project
application/x-dvi: device-independent document in DVI format
application/x-font-ttf: TrueType Font No registered MIME type, but this is the most commonly used
application/x-javascript:
application/x-latex: LaTeX files
application/x-mpegURL: .m3u8 variant playlist
application/x-rar-compressed: RAR archive files
application/x-shockwave-flash: Adobe Flash files for example with the extension .swf
application/x-stuffit: StuffIt archive files
application/x-tar: Tarball files
application/x-www-form-urlencoded Form Encoded Data; Documented in HTML 4.01 Specification,
Section 17.13.4.1 [23]
application/x-xpinstall: Add-ons to Mozilla applications (Firefox, Thunderbird, SeaMonkey, and the
discontinued Sunbird)
audio/x-aac: .aac audio files
audio/x-caf: Apple's CAF audio files
image/x-xcf: GIMP image file
text/x-gwt-rpc: GoogleWebToolkit data
text/x-jquery-tmpl: jQuery template data
111
Internet media type
Prefix x-pkcs
For PKCS standard files.
•
•
•
•
•
•
•
•
application/x-pkcs12: p12 files
application/x-pkcs12: pfx files
application/x-pkcs7-certificates: p7b files
application/x-pkcs7-certificates: spc files
application/x-pkcs7-certreqresp: p7r files
application/x-pkcs7-mime: p7c files
application/x-pkcs7-mime: p7m files
application/x-pkcs7-signature: p7s files
References
[6] http:/ / mimesniff. spec. whatwg. org/ MIME Sniffing Standard, Living Standard — Last Updated 29 November 2012. Editors Gordon P.
Hemsley, Adam Barth, Ian Hickson.
[8] http:/ / www. iana. org/ assignments/ media-types/
[9] RFC 2046 - Multipurpose Internet Mail Extensions (MIME) Part Two: Media types. Tools.ietf.org. Retrieved on 2010-09-29.
[11] MIME SUBTYPE NAME: zip (http:/ / www. iana. org/ assignments/ media-types/ application/ zip)
[13] http:/ / msdn. microsoft. com/ en-us/ library/ ms775147(v=vs. 85). aspx
[14] MIME SUBTYPE NAME: png (http:/ / www. iana. org/ assignments/ media-types/ image/ png)
[15] http:/ / www. w3. org/ TR/ SVGTiny12/ mimereg. html
[16] MIME subtype name : Vendor Tree - vnd.microsoft.icon (http:/ / www. iana. org/ assignments/ media-types/ image/ vnd. microsoft. icon)
[17] Quicktime (http:/ / www. iana. org/ assignments/ media-types/ video/ quicktime)
[18] http:/ / support. microsoft. com/ kb/ 288102
[19] vnd.oasis.opendocument.text (http:/ / www. iana. org/ assignments/ media-types/ application/ vnd. oasis. opendocument. text)
[20] vnd.oasis.opendocument.spreadsheet (http:/ / www. iana. org/ assignments/ media-types/ application/ vnd. oasis. opendocument.
spreadsheet)
[21] vnd.oasis.opendocument.presentation (http:/ / www. iana. org/ assignments/ media-types/ application/ vnd. oasis. opendocument.
presentation)
[22] vnd.oasis.opendocument.graphics (http:/ / www. iana. org/ assignments/ media-types/ application/ vnd. oasis. opendocument. graphics)
[23] http:/ / www. w3. org/ TR/ html401/ interact/ forms. html#h-17. 13. 4. 1
External links
•
•
•
•
IANA MIME media types list (http://www.iana.org/assignments/media-types/)
IANA character sets (http://www.iana.org/assignments/character-sets)
RFC 2045, RFC 2046 - Multipurpose Internet Mail Extensions (MIME), parts 1 and 2
RFC 4288 - Media Type Specifications and Registration Procedures
112
JavaScript
113
JavaScript
JavaScript
[]
Paradigm(s)
Multi-paradigm: scripting, object-oriented (prototype-based), imperative, functional
Appeared in
1995
Designed by
Brendan Eich
Developer
Netscape Communications Corporation, Mozilla Foundation
Stable release
1.8.5
Typing discipline
dynamic, weak, duck
[1]
(March 22, 2011)
Major implementations KJS, Rhino, SpiderMonkey, V8, WebKit, Carakan, Chakra
Influenced by
C, Java, Perl, Python, Scheme, Self
Influenced
ActionScript, CoffeeScript, Dart, JScript .NET, Objective-J, QML, TIScript, TypeScript
•
JavaScript at Wikibooks
JavaScript
Filename extension
.js
Internet media type
application/javascript
[2]
text/javascript (obsolete)
Uniform Type Identifier com.netscape.javascript-source[3]
Type of format
Scripting language
Part of a series on
JavaScript
•
•
•
JavaScript syntax
JavaScript library
Unobtrusive JavaScript
JavaScript (JS) is an interpreted computer programming language.[4] It was originally implemented as part of web
browsers so that client-side scripts could interact with the user, control the browser, communicate asynchronously,
and alter the document content that was displayed.[4]
JavaScript is a prototype-based scripting language that is dynamic, weakly typed, and has first-class functions. Its
syntax was influenced by the language C. JavaScript copies many names and naming conventions from Java, but the
two languages are otherwise unrelated and have very different semantics. The key design principles within
JavaScript are taken from the Self and Scheme programming languages.[5] It is a multi-paradigm language,
JavaScript
supporting object-oriented,[] imperative, and functional[][6] programming styles.
JavaScript's use in applications outside of web pages—for example, in PDF documents, site-specific browsers, and
desktop widgets—is also significant. Newer and faster JavaScript VMs and frameworks built upon them (notably
Node.js) have also increased the popularity of JavaScript for server-side web applications.
JavaScript was formalized in the ECMAScript language standard and is primarily used as part of a web browser
(client-side JavaScript). This enables programmatic access to computational objects within a host environment.
History
Birth at Netscape
JavaScript was originally developed in Netscape, by Brendan Eich. Battling with Microsoft over the Internet,
Netscape considered their client-server solution as a distributed OS, running a portable version of Sun Microsystems'
Java. Because Java was a competitor of C++ and aimed at professional programmers, Netscape also wanted a
lightweight interpreted language that would complement Java by appealing to nonprofessional programmers, like
Microsoft's Visual Basic.[7] (see JavaScript and Java)
Developed under the name Mocha, LiveScript was the official name for the language when it first shipped in beta
releases of Netscape Navigator 2.0 in September 1995, but it was renamed JavaScript[8] when it was deployed in the
Netscape browser version 2.0B3.[]
The change of name from LiveScript to JavaScript roughly coincided with Netscape adding support for Java
technology in its Netscape Navigator web browser. The final choice of name caused confusion, giving the
impression that the language was a spin-off of the Java programming language, and the choice has been
characterized by many as a marketing ploy by Netscape to give JavaScript the cachet of what was then the hot new
web programming language.[9][10] It has also been claimed that the language's name is the result of a co-marketing
deal between Netscape and Sun, in exchange for Netscape bundling Sun's Java runtime with its then-dominant
browser.[citation needed]
Server-side JavaScript
Netscape introduced an implementation of the language for server-side scripting with Netscape Enterprise Server,
first released in December, 1994 (soon after releasing JavaScript for browsers).[][] Since the mid-2000s, there has
been a proliferation of server-side JavaScript implementations. Node.js is one recent notable example of server-side
JavaScript being used in real-world applications.[][]
Adoption by Microsoft
JavaScript very quickly gained widespread success as a client-side scripting language for web pages. Microsoft
introduced JavaScript support in its own web browser, Internet Explorer, in version 3.0, released in August
1996.[]Wikipedia:Verifiability Microsoft's webserver, Internet Information Server, introduced support for server-side
scripting in JavaScript with release 3.0 (1996). Microsoft started to promote webpage scripting using the umbrella
term Dynamic HTML.
Microsoft's JavaScript implementation was later renamed JScript to avoid trademark issues. JScript added new date
methods to fix the Y2K-problematic methods in JavaScript, which were based on Java's java.util.Date class.
114
JavaScript
115
Standardization
In November 1996, Netscape announced that it had submitted JavaScript to Ecma International for consideration as
an industry standard, and subsequent work resulted in the standardized version named ECMAScript.[11]
Later developments
JavaScript has become one of the most popular programming languages on the web. Initially, however, many
professional programmers denigrated the language because its target audience was web authors and other such
"amateurs", among other reasons.[12] The advent of Ajax returned JavaScript to the spotlight and brought more
professional programming attention. The result was a proliferation of comprehensive frameworks and libraries,
improved JavaScript programming practices, and increased usage of JavaScript outside of web browsers, as seen by
the proliferation of server-side JavaScript platforms.
In January 2009, the CommonJS project was founded with the goal of specifying a common standard library mainly
for JavaScript development outside the browser.[13]
Trademark
Today, "JavaScript" is a trademark of Oracle Corporation.[14] It is used under license for technology invented and
implemented by Netscape Communications and current entities such as the Mozilla Foundation.[15]
Features
The following features are common to all conforming ECMAScript implementations, unless explicitly specified
otherwise.
Imperative and structured
JavaScript supports much of the structured programming syntax from C (e.g., if statements, while loops,
switch statements, etc.). One partial exception is scoping: C-style block-level scoping is not supported (instead,
JavaScript has function-level scoping). JavaScript 1.7, however, supports block-level scoping with the let
keyword. Like C, JavaScript makes a distinction between expressions and statements. One syntactic difference from
C is automatic semicolon insertion, in which the semicolons that terminate statements can be omitted.[16]
Dynamic
dynamic typing
As in most scripting languages, types are associated with values, not with variables. For example, a variable x
could be bound to a number, then later rebound to a string. JavaScript supports various ways to test the type of
an object, including duck typing.[17]
object based
JavaScript is almost entirely object-based. JavaScript objects are associative arrays, augmented with
prototypes (see below). Object property names are string keys: obj.x = 10 and obj['x'] = 10 are
equivalent, the dot notation being syntactic sugar. Properties and their values can be added, changed, or
deleted at run-time. Most properties of an object (and those on its prototype inheritance chain) can be
enumerated using a for...in loop. JavaScript has a small number of built-in objects such as Function
and Date.
run-time evaluation
JavaScript includes an eval function that can execute statements provided as strings at run-time.
JavaScript
116
Functional
first-class functions
Functions are first-class; they are objects themselves. As such, they have properties and methods, such as
.call() and .bind();[18] and they can be assigned to variables, passed as arguments, returned by other
functions, and manipulated like any other object.[19] Any reference to a function allows it to be invoked using
the () operator.[20]
nested functions and closures
"Inner" or "nested" functions are functions defined within another function. They are created each time the
outer function is invoked. In addition to that, each created function forms a lexical closure: the lexical scope of
the outer function, including any constants, local variables and argument values, become part of the internal
state of each inner function object, even after execution of the outer function concludes.[21]
Prototype-based
prototypes
JavaScript uses prototypes instead of classes for inheritance. It is possible to simulate many class-based
features with prototypes in JavaScript.
functions as object constructors
Functions double as object constructors along with their typical role. Prefixing a function call with new
creates a new object and calls that function with its local this keyword bound to that object for that
invocation. The constructor's prototype property determines the object used for the new object's internal
prototype. JavaScript's built-in constructors, such as Array, also have prototypes that can be modified.
functions as methods
Unlike many object-oriented languages, there is no distinction between a function definition and a method
definition. Rather, the distinction occurs during function calling; a function can be called as a method. When a
function is called as a method of an object, the function's local this keyword is bound to that object for that
invocation.
Miscellaneous
run-time environment
JavaScript typically relies on a run-time environment (e.g. in a web browser) to provide objects and methods
by which scripts can interact with "the outside world". In fact, it relies on the environment to provide the
ability to include/import scripts (e.g. HTML <script> elements). (This is not a language feature per se, but
it is common in most JavaScript implementations.)
variadic functions
An indefinite number of parameters can be passed to a function. The function can access them through formal
parameters and also through the local arguments object.
array and object literals
Like many scripting languages, arrays and objects (associative arrays in other languages) can each be created
with a succinct shortcut syntax. In fact, these literals form the basis of the JSON data format.
regular expressions
JavaScript also supports regular expressions in a manner similar to Perl, which provide a concise and powerful
syntax for text manipulation that is more sophisticated than the built-in string functions.
JavaScript
117
Vendor-specific extensions
JavaScript is officially managed by Mozilla Foundation, and new language features are added periodically. However,
only some JavaScript engines support these new features:
•
•
•
•
•
•
•
•
•
property getter and setter functions (also supported by WebKit, Opera,[22] ActionScript, and Rhino)[23]
conditional catch clauses
iterator protocol adopted from Python
shallow generators-coroutines also adopted from Python
array comprehensions and generator expressions also adopted from Python
proper block scope via the let keyword
array and object destructuring (limited form of pattern matching)
concise function expressions (function(args) expr)
ECMAScript for XML (E4X), an extension that adds native XML support to ECMAScript
Syntax and semantics
As of 2011[24], the latest version of the language is JavaScript 1.8.5. It is a superset of ECMAScript (ECMA-262)
Edition 3. Extensions to the language, including partial ECMAScript for XML (E4X) (ECMA-357) support and
experimental features considered for inclusion into future ECMAScript editions, are documented here.[25]
Simple examples
Variables in JavaScript can be defined using the var keyword:[26]
var x; //defines the variable x, although no value is assigned to it by
default
var y = 2; //defines the variable y and assigns 2 to it
Note the comments in the example above, both of which were preceded with two forward slashes.
There is no built-in I/O functionality in JavaScript; the runtime environment provides that. The ECMAScript
specification in edition 5.1 mentions:[27]
... indeed, there are no provisions in this specification for input of external data or output of computed
results.
However, most runtime environments have a console object that can be used to print output. Here is a minimalist
Hello World program:
console.log("Hello world!");
A simple recursive function:
function factorial(n) {
if (n == 0) {
return 1;
}
return n * factorial(n - 1);
}
Anonymous function (or lambda) syntax and closure example:
var displayClosure = function() {
var count = 0;
return function () {
JavaScript
118
return ++count;
};
}
var inc =
inc(); //
inc(); //
inc(); //
displayClosure();
returns 1
returns 2
returns 3
Variadic function demonstration (arguments is a special variable).
var sum = function() {
var i, x = 0;
for (i = 0; i < arguments.length; ++i) {
x += arguments[i];
}
return x;
}
sum(1, 2, 3); // returns 6
Immediately-invoked function expressions allow functions to pass around variables under their own closures.
var v;
v = 1;
var getValue = (function(v) {
return v;
}(v));
v = 2;
getValue(); // 1
More advanced example
This sample code displays various JavaScript features.
/* Finds the lowest common multiple (LCM) of two numbers */
function LCMCalculator(x, y) { // constructor function
var checkInt = function (x) { // inner function
if (x % 1 !== 0) {
throw new TypeError(x + " is not an integer"); // throw an
exception
}
return x;
};
this.a = checkInt(x)
// ^ semicolons are optional
this.b = checkInt(y);
}
// The prototype of object instances created by a constructor is
// that constructor's "prototype" property.
LCMCalculator.prototype = { // object literal
JavaScript
constructor: LCMCalculator, // when reassigning a prototype, set
the constructor property appropriately
gcd: function () { // method that calculates the greatest common
divisor
// Euclidean algorithm:
var a = Math.abs(this.a), b = Math.abs(this.b), t;
if (a < b) {
// swap variables
t = b;
b = a;
a = t;
}
while (b !== 0) {
t = b;
b = a % b;
a = t;
}
// Only need to calculate GCD once, so "redefine" this method.
// (Actually not redefinition—it's defined on the instance
itself,
// so that this.gcd refers to this "redefinition" instead of
LCMCalculator.prototype.gcd.)
// Also, 'gcd' === "gcd", this['gcd'] === this.gcd
this['gcd'] = function () {
return a;
};
return a;
},
// Object property names can be specified by strings delimited by
double (") or single (') quotes.
"lcm" : function () {
// Variable names don't collide with object properties, e.g.
|lcm| is not |this.lcm|.
// not using |this.a * this.b| to avoid FP precision issues
var lcm = this.a / this.gcd() * this.b;
// Only need to calculate lcm once, so "redefine" this method.
this.lcm = function () {
return lcm;
};
return lcm;
},
toString: function () {
return "LCMCalculator: a = " + this.a + ", b = " + this.b;
}
};
// Define generic output function; this implementation only works for
119
JavaScript
120
web browsers
function output(x) {
document.body.appendChild(document.createTextNode(x));
document.body.appendChild(document.createElement('br'));
}
// Note: Array's map() and forEach() are defined in JavaScript 1.6.
// They are used here to demonstrate JavaScript's inherent functional
nature.
[[25, 55], [21, 56], [22, 58], [28, 56]].map(function (pair) { // array
literal + mapping function
return new LCMCalculator(pair[0], pair[1]);
}).sort(function (a, b) { // sort with this comparative function
return a.lcm() - b.lcm();
}).forEach(function (obj) {
output(obj + ", gcd = " + obj.gcd() + ", lcm = " + obj.lcm());
});
The following output should be displayed in the browser window.
LCMCalculator:
LCMCalculator:
LCMCalculator:
LCMCalculator:
a
a
a
a
=
=
=
=
28,
21,
25,
22,
b
b
b
b
=
=
=
=
56,
56,
55,
58,
gcd
gcd
gcd
gcd
=
=
=
=
28, lcm = 56
7, lcm = 168
5, lcm = 275
2, lcm = 638
Use in web pages
The most common use of JavaScript is to write functions that are embedded in or included from HTML pages and
that interact with the Document Object Model (DOM) of the page. Some simple examples of this usage are:
• Loading new page content or submitting data to the server via AJAX without reloading the page (for example, a
social network might allow the user to post status updates without leaving the page)
• Animation of page elements, fading them in and out, resizing them, moving them, etc.
• Interactive content, for example games, and playing audio and video
• Validating input values of a web form to make sure that they are acceptable before being submitted to the server.
• Transmitting information about the user's reading habits and browsing activities to various websites. Web pages
frequently do this for web analytics, ad tracking, personalization or other purposes.[28]
Because JavaScript code can run locally in a user's browser (rather than on a remote server), the browser can respond
to user actions quickly, making an application more responsive. Furthermore, JavaScript code can detect user actions
which HTML alone cannot, such as individual keystrokes. Applications such as Gmail take advantage of this: much
of the user-interface logic is written in JavaScript, and JavaScript dispatches requests for information (such as the
content of an e-mail message) to the server. The wider trend of Ajax programming similarly exploits this strength.
A JavaScript engine (also known as JavaScript interpreter or JavaScript implementation) is an interpreter that
interprets JavaScript source code and executes the script accordingly. The first JavaScript engine was created by
Brendan Eich at Netscape Communications Corporation, for the Netscape Navigator web browser. The engine,
code-named SpiderMonkey, is implemented in C. It has since been updated (in JavaScript 1.5) to conform to
ECMA-262 Edition 3. The Rhino engine, created primarily by Norris Boyd (formerly of Netscape; now at Google) is
a JavaScript implementation in Java. Rhino, like SpiderMonkey, is ECMA-262 Edition 3 compliant.
JavaScript
A web browser is by far the most common host environment for JavaScript. Web browsers typically create "host
objects" to represent the Document Object Model (DOM) in JavaScript. The web server is another common host
environment. A JavaScript webserver would typically expose host objects representing HTTP request and response
objects, which a JavaScript program could then interrogate and manipulate to dynamically generate web pages.
Because JavaScript is the only language that the most popular browsers share support for, it has become a target
language for many frameworks in other languages, even though JavaScript was never intended to be such a
language.[] Despite the performance limitations inherent to its dynamic nature, the increasing speed of JavaScript
engines has made the language a surprisingly feasible compilation target.
Example script
Below is a minimal example of a standards-conforming web page containing JavaScript (using HTML 5 syntax) and
the DOM:
<!DOCTYPE html>
<meta charset="utf-8">
<title>Minimal Example</title>
<h1 id="header">This is JavaScript</h1>
<script>
document.body.appendChild(document.createTextNode('Hello World!'));
var h1 = document.getElementById('header'); // holds a reference to the <h1> tag
h1 = document.getElementsByTagName('h1')[0]; // accessing the same <h1> element
</script>
<noscript>Your browser either does not support JavaScript, or has it turned off.</noscript>
Compatibility considerations
Because JavaScript runs in widely varying environments, an important part of testing and debugging is to test and
verify that the JavaScript works across multiple browsers.
The DOM interfaces for manipulating web pages are not part of the ECMAScript standard, or of JavaScript itself.
Officially, the DOM interfaces are defined by a separate standardization effort by the W3C; in practice, browser
implementations differ from the standards and from each other, and not all browsers execute JavaScript.
To deal with these differences, JavaScript authors can attempt to write standards-compliant code which will also be
executed correctly by most browsers; failing that, they can write code that checks for the presence of certain browser
features and behaves differently if they are not available.[29] In some cases, two browsers may both implement a
feature but with different behavior, and authors may find it practical to detect what browser is running and change
their script's behavior to match.[30][31] Programmers may also use libraries or toolkits which take browser differences
into account.
Furthermore, scripts may not work for some users. For example, a user may:
• use an old or rare browser with incomplete or unusual DOM support,
• use a PDA or mobile phone browser which cannot execute JavaScript,
• have JavaScript execution disabled as a security precaution,
• use a speech browser due to, for example, a visual disability.
121
JavaScript
To support these users, web authors can try to create pages which degrade gracefully on user agents (browsers)
which do not support the page's JavaScript. In particular, the page should remain usable albeit without the extra
features that the JavaScript would have added. An alternative approach that many find preferable is to first author
content using basic technologies that work in all browsers, then enhance the content for users that have JavaScript
enabled. This is known as progressive enhancement.
Accessibility
Assuming that the user has not disabled its execution, client-side web JavaScript should be written to enhance the
experiences of visitors with visual or physical disabilities, and certainly should avoid denying information to these
visitors.[32]
Screen readers, used by the blind and partially sighted, can be JavaScript-aware and so may access and read the page
DOM after the script has altered it. The HTML should be as concise, navigable and semantically rich as possible
whether the scripts have run or not. JavaScript should not be totally reliant on mouse-specific events so as to deny its
benefits to users who either cannot use a mouse or who choose to favor the keyboard for whatever reason. Equally,
although hyperlinks and webforms can be navigated and operated from the keyboard, accessible JavaScript should
not require keyboard events either. There are device-independent events such as onfocus and onchange that
are preferable in most cases.[32]
JavaScript should not be used in a way that is confusing or disorienting to any web user. For example, using script to
alter or disable the normal functionality of the browser, such as by changing the way the back-button or the refresh
event work, is usually best avoided. Equally, triggering events that the user may not be aware of reduces the user's
sense of control as do unexpected scripted changes to the page content.[33]
Often the process of making a complex web page as accessible as possible becomes a nontrivial problem where
issues become matters of debate and opinion, and where compromises are necessary in the end. However, user
agents and assistive technologies are constantly evolving and new guidelines and relevant information are
continually being published on the web.[32]
Security
JavaScript and the DOM provide the potential for malicious authors to deliver scripts to run on a client computer via
the web. Browser authors contain this risk using two restrictions. First, scripts run in a sandbox in which they can
only perform web-related actions, not general-purpose programming tasks like creating files. Second, scripts are
constrained by the same origin policy: scripts from one web site do not have access to information such as
usernames, passwords, or cookies sent to another site. Most JavaScript-related security bugs are breaches of either
the same origin policy or the sandbox.
There are subsets of general JavaScript — ADsafe, Secure ECMA Script (SES) — that provide greater level of
security, especially on code created by third parties (such as advertisements).[34][35]
Cross-site vulnerabilities
A common JavaScript-related security problem is cross-site scripting, or XSS, a violation of the same-origin policy.
XSS vulnerabilities occur when an attacker is able to cause a target web site, such as an online banking website, to
include a malicious script in the webpage presented to a victim. The script in this example can then access the
banking application with the privileges of the victim, potentially disclosing secret information or transferring money
without the victim's authorization. A solution to XSS vulnerabilities is to use HTML escaping whenever displaying
untrusted data.
Some browsers include partial protection against reflected XSS attacks, in which the attacker provides a URL
including malicious script. However, even users of those browsers are vulnerable to other XSS attacks, such as those
122
JavaScript
where the malicious code is stored in a database. Only correct design of Web applications on the server side can fully
prevent XSS.
XSS vulnerabilities can also occur because of implementation mistakes by browser authors.[36]
Another cross-site vulnerability is cross-site request forgery or CSRF. In CSRF, code on an attacker's site tricks the
victim's browser into taking actions the user didn't intend at a target site (like transferring money at a bank). It works
because, if the target site relies only on cookies to authenticate requests, then requests initiated by code on the
attacker's site will carry the same legitimate login credentials as requests initiated by the user. In general, the solution
to CSRF is to require an authentication value in a hidden form field, and not only in the cookies, to authenticate any
request that might have lasting effects. Checking the HTTP Referrer header can also help.
"JavaScript hijacking" is a type of CSRF attack in which a <script> tag on an attacker's site exploits a page on the
victim's site that returns private information such as JSON or JavaScript. Possible solutions include:
• requiring an authentication token in the POST and GET parameters for any response that returns private
information
• using POST and never GET for requests that return private information
Misplaced trust in the client
Developers of client-server applications must recognize that untrusted clients may be under the control of attackers.
Thus any secret embedded in JavaScript could be extracted by a determined adversary, and the application author
cannot assume that his JavaScript runs as intended, or at all. Some implications:
• Web site authors cannot perfectly conceal how their JavaScript operates, because the code is sent to the client, and
obfuscated code can be reverse-engineered.
• JavaScript form validation only provides convenience for users, not security. If a site verifies that the user agreed
to its terms of service, or filters invalid characters out of fields that should only contain numbers, it must do so on
the server, not only the client.
• Scripts can be selectively disabled, so JavaScript can't be relied on to prevent operations such as "save image".[37]
• It is extremely bad practice to embed sensitive information such as passwords in JavaScript because it can be
extracted by an attacker.
Browser and plugin coding errors
JavaScript provides an interface to a wide range of browser capabilities, some of which may have flaws such as
buffer overflows. These flaws can allow attackers to write scripts which would run any code they wish on the user's
system. This code is not by any means limited to another JavaScript application. For example, a buffer overrun
exploit can allow an attacker to gain access to the operating system's API with superuser privileges.
These flaws have affected major browsers including Firefox,[38] Internet Explorer,[39] and Safari.[40]
Plugins, such as video players, Adobe Flash, and the wide range of ActiveX controls enabled by default in Microsoft
Internet Explorer, may also have flaws exploitable via JavaScript, and such flaws have been exploited in the
past.[41][42]
In Windows Vista, Microsoft has attempted to contain the risks of bugs such as buffer overflows by running the
Internet Explorer process with limited privileges.[43] Google Chrome similarly limits page renderers in its own
"sandbox".
Plugins that contain malicious code can be created by attackers themselves, then users tricked into downloading and
installing them, usually under the ruse of adding some cool new feature or making one's computer run faster.
123
JavaScript
Sandbox implementation errors
Web browsers are capable of running JavaScript outside of the sandbox, with the privileges necessary to, for
example, create or delete files. Of course, such privileges aren't meant to be granted to code from the web.
Incorrectly granting privileges to JavaScript from the web has played a role in vulnerabilities in both Internet
Explorer[44] and Firefox.[45] In Windows XP Service Pack 2, Microsoft demoted JScript's privileges in Internet
Explorer.[46]
Microsoft Windows allows JavaScript source files on a computer's hard drive to be launched as general-purpose,
non-sandboxed programs. This makes JavaScript (like VBScript) a theoretically viable vector for a Trojan horse,
although JavaScript Trojan horses are uncommon in practice.[47] (See Windows Script Host.)
Uses outside web pages
In addition to web browsers and servers, JavaScript interpreters are embedded in a number of tools. Each of these
applications provides its own object model which provides access to the host environment, with the core JavaScript
language remaining mostly the same in each application.
Embedded scripting language
• Google's Chrome extensions, Opera's extensions, Apple's Safari 5 extensions, Apple's Dashboard Widgets,
Microsoft's Gadgets, Yahoo! Widgets, Google Desktop Gadgets, and Serence Klipfolio are implemented using
JavaScript.
• Adobe's Acrobat and Adobe Reader support JavaScript in PDF files.[48]
• Tools in the Adobe Creative Suite, including Photoshop, Illustrator, Dreamweaver, and InDesign, allow scripting
through JavaScript.
• OpenOffice.org office application suite allows for JavaScript as one of its scripting languages.
• The interactive music signal processing software Max/MSP released by Cycling '74, offers a JavaScript model of
its environment for use by developers. It allows much more precise control than the default GUI-centric
programming model.
• ECMAScript was included in the VRML97 standard for scripting nodes of VRML scene description files.
• Some high-end Philips universal remote panels, including TSU9600 and TSU9400, can be scripted using a
JavaScript-based tool called ProntoScript.[49]
• Sphere is an open source and cross platform computer program designed primarily to make role-playing games
that use JavaScript as a scripting language.
• The open-source Re-Animator framework allows developing 2D sprite-based games using JavaScript and
XML.[50]
• Methabot is a web crawler that uses JavaScript as scripting language for custom filetype parsers and data
extraction using E4X.
• The Unity game engine supports a modified JavaScript for scripting (in addition to C# and Boo) via Mono.[51]
• DX Studio (3D engine) uses the SpiderMonkey implementation of JavaScript for game and simulation logic.[52]
• Maxwell Render (rendering software) provides an ECMA standard based scripting engine for tasks
automation.[53]
• Google Apps Script in Google Spreadsheets and Google Sites allows users to create custom formulas, automate
repetitive tasks and also interact with other Google products such as Gmail.[54]
• Many IRC clients, like ChatZilla or XChat, use JavaScript for their scripting abilities.[55][56]
• SpinetiX products media players and software use SpiderMonkey (JavaScript engine) to allow scripting through
JavaScript within SVG files to create digital signage projects.[57]
• Cloud Party virtual world uses a limited version of JavaScript/ECMAScript 5 as in-world scripting language.[58]
124
JavaScript
Scripting engine
• Microsoft's Active Scripting technology supports JScript as a scripting language.[59]
• The Java programming language, in version SE 6 (JDK 1.6), introduced the javax.script package,
including a JavaScript implementation based on Mozilla Rhino. Thus, Java applications can host scripts that
access the application's variables and objects, much like web browsers host scripts that access the browser's
Document Object Model (DOM) for a webpage.[60][61]
• The Qt C++ toolkit includes a QtScript module to interpret JavaScript, analogous to Java's javax.script
package.[62]
• JSDB (JavaScript for Databases) is an open-source JavaScript shell for Windows, Mac OS X, Linux, and Unix,
which extends the Mozilla JavaScript engine with file, database, email, and network objects.[63]
• jslibs is an open-source JavaScript shell for Windows and Linux which extends the Mozilla JavaScript engine. It
has the ability to call functions in commonly used libraries like NSPR, SQLite, libTomCrypt, OpenGL, OpenAL,
and librsvg.[64]
• Late Night Software's JavaScript OSA (aka JavaScript for OSA, or JSOSA) is a freeware alternative to
AppleScript for Mac OS X. It is based on the Mozilla 1.5 JavaScript implementation, with the addition of a
MacOS object for interaction with the operating system and third-party applications.[65]
Application platform
• ActionScript, the programming language used in Adobe Flash, is another implementation of the ECMAScript
standard.
• Adobe Integrated Runtime is a JavaScript runtime that allows developers to create desktop applications.
• CA, Inc.'s AutoShell cross-application scripting environment is built on JavaScript/SpiderMonkey with
preprocessor like extensions for command definitions and custom classes for various system related tasks like file
i/o, operation system command invocation and redirection and COM scripting.
• GNOME Shell, the shell for the GNOME 3 desktop environment.[66] On 2013 GNOME Developer Experience
Hackfest, it was decided to push JavaScript as the default GNOME programming language [67]
• The Mozilla platform, which underlies Firefox, Thunderbird, and some other web browsers, uses JavaScript to
implement the graphical user interface (GUI) of its various products.
• myNFC is a JavaScript based framework that allows developers to create applications for smart phones.[68]
• Qt Quick's markup language (QML) is using JavaScript for the application logic, and the declarative syntax is
JavaScript-like. QML has been available since Qt 4.7.
• TypeScript is a programming language based on JavaScript that adds support for optional type annotations and
some other language extensions such as classes, interfaces and modules. A TS-script compiles into plain
JavaScript and can be executed in any JS host supporting ECMAScript 3 or higher. The compiler is itself written
in TypeScript.
• webOS uses the WebKit implementation of JavaScript in its SDK to allow developers to create stand-alone
applications solely in JavaScript.
• WinJS provides special Windows Library for JavaScript functionality in Windows 8 that enables the development
of Modern style applications (formerly Metro style) in HTML5 and JavaScript.
125
JavaScript
126
Development tools
Within JavaScript, access to a debugger becomes invaluable when developing large, non-trivial programs. Because
there can be implementation differences between the various browsers (particularly within the Document Object
Model), it is useful to have access to a debugger for each of the browsers that a web application targets.[69]
Script debuggers are available for Internet Explorer, Firefox, Safari, Google Chrome, and Opera.[70]
Three debuggers are available for Internet Explorer: Microsoft Visual Studio is the richest of the three, closely
followed by Microsoft Script Editor (a component of Microsoft Office),[71] and finally the free Microsoft Script
Debugger which is far more basic than the other two. The free Microsoft Visual Web Developer Express provides a
limited version of the JavaScript debugging functionality in Microsoft Visual Studio. Internet Explorer has included
developer tools since version 8 (reached by pressing the F12 key).
Web applications within Firefox can be debugged using the Firebug add-on, or the older Venkman debugger. Firefox
also has a simpler built-in Error Console, which logs and evaluates JavaScript. It also logs CSS errors and warnings.
Opera includes a set of tools called Dragonfly.[72]
WebKit's Web Inspector includes a JavaScript debugger[73] used in Safari, along with a modified version in Google
Chrome.
Some debugging aids are themselves written in JavaScript and built to run on the Web. An example is the program
JSLint, developed by Douglas Crockford who has written extensively on the language. JSLint scans JavaScript code
for conformance to a set of standards and guidelines.
Versions
The following table is based on a history compilation forum post,[74] jQuery author's blog post,[75] and Microsoft's
JScript version information webpage.[76]
Version
Release date
Equivalent to
Netscape Mozilla
Navigator Firefox
1.0
March 1996
2.0
1.1
August 1996
3.0
1.2
June 1997
4.0-4.05
1.3
October 1998
ECMA-262 1st + 2nd edition
1.4
Internet
Explorer
Opera Safari
Google
Chrome
3.0
4.06-4.7x
4.0
Netscape
Server
1.5
November
2000
ECMA-262 3rd edition
1.6
November
2005
1.5 + array extras + array and string generics +
E4X
1.7
October 2006
1.8
June 2008
1.8.1
1.6 + Pythonic generators
[77]
+ iterators + let
6.0
1.0
5.5 (JScript
5.5),
6 (JScript 5.6),
7 (JScript 5.7),
8 (JScript 5.8)
7.0
1.5
2.0
1.7 + generator expressions + expression
closures
3.0
1.8 + native JSON support + minor updates
3.5
1.8.2
June 22, 2009
1.8.1 + minor updates
3.6
1.8.5
July 27, 2010
1.8.2 + ECMAScript 5 compliance
4
11.50
9
11.60
3.0-5
1.0-10.0.666
JavaScript
Legend:
Old version
Latest version
Related languages and features
JSON, or JavaScript Object Notation, is a general-purpose data interchange format that is defined as a subset of
JavaScript's literal syntax.
jQuery and Prototype are popular JavaScript libraries designed to simplify DOM-oriented client-side HTML
scripting.
Mozilla browsers currently support LiveConnect, a feature that allows JavaScript and Java to intercommunicate on
the web. However, Mozilla-specific support for LiveConnect is scheduled to be phased out in the future in favor of
passing on the LiveConnect handling via NPAPI to the Java 1.6+ plug-in (not yet supported on the Mac as of March
2010[24]).[78] Most browser inspection tools, such as Firebug in Firefox, include JavaScript interpreters that can act
on the visible page's DOM.
In the first years of the 21st century, Intel turned aside from single threaded Moore's law speedups in favor of
multi-core processors, and the rest of the industry followed their lead.[79] Intel is now working on extensions to
JavaScript to allow programmers to take advantage of their recent processors.[80]
Use as an intermediate language
As JavaScript is the most widely supported client-side language that can run within a web browser, it has become an
intermediate language for other languages to target. This has included both newly-created languages and ports of
existing languages. Some of these include:
• Objective-J, a superset of JavaScript that compiles to standard JavaScript. It adds traditional inheritance and
Smalltalk/Objective-C style dynamic dispatch and optional pseudo-static typing to JavaScript.
• Processing.js, a JavaScript port of Processing, a programming language designed to write visualizations, images,
and interactive content. It allows web browsers to display animations, visual applications, games and other
graphical rich content without the need for a Java applet or Flash plugin.
• CoffeeScript, an alternate syntax for JavaScript intended to be more concise and readable and adding features like
array comprehensions (also available on JavaScript since version 1.7[81]) and pattern matching. Like Objective-J,
it compiles to JavaScript. Ruby and Python have been cited as influential on CoffeeScript syntax.
• Google Web Toolkit translates a subset of Java to JavaScript.
• Quby [82], a proprietary sand-boxed Ruby-like language by PlayMyCode used for building browser games.
• OMeta [83], a functional language featuring pattern matching.
• Phype [84], an open source PHP to JavaScript compiler.
• TIScript [85], a superset of JavaScript that adds classes, namespaces, and lambda expressions.
• ClojureScript [86], a Clojure to JavaScript compiler which is compatible with the advanced compilation mode of
the Google Closure optimizing compiler.
• Parenscript [87], a Common Lisp library that can translate into JavaScript both well-circumscribed Common Lisp
code, and JavaScript rendered as "inlined" S-expressions in Common Lisp source code.
• Py2JS [88], a subset of Python
• Pyjamas, a port of Google Web Toolkit to Python (translates a subset of Python to JavaScript)
• Dart, an open source programming language developed by Google, can be compiled to JavaScript as well as run
on Dart VM.
• Whalesong [89], a Racket-to-JavaScript compiler.
• Emscripten, LLVM-backend for porting native libraries to js
127
JavaScript
• Fantom a programming language that runs on JVM, .NET and JavaScript.
• TypeScript, a free and open source programming language developed by Microsoft. It is a superset of JavaScript,
and essentially adds optional static typing and class-based object-oriented programming to the language.
JavaScript and Java
A common misconception is that JavaScript is similar or closely related to Java. It is true that both have a C-like
syntax, the C language being their most immediate common ancestor language. They are both object-oriented and
typically sandboxed (when used inside a browser). In addition, JavaScript was designed with Java's syntax and
standard library in mind. In particular, all Java keywords were reserved in original JavaScript, JavaScript's standard
library follows Java's naming conventions, and JavaScript's Math and Date objects are based on classes from Java
1.0.[]
However, the similarities end there. Java has static typing; JavaScript's typing is dynamic (meaning a variable can
hold an object of any type and cannot be restricted). JavaScript is weakly typed ('0.0000' == 0, 0 == "",
false == "", etc.) while Java is strongly typed. Java is loaded from compiled bytecode; JavaScript is loaded as
human-readable source code. Java's objects are class-based; JavaScript's are prototype-based. JavaScript also has
many functional programming features based on the Scheme language.
References
[1]
[2]
[4]
[6]
[8]
New in JavaScript 1.8.5 | Mozilla Developer Network (https:/ / developer. mozilla. org/ en/ JavaScript/ New_in_JavaScript/ 1. 8. 5)
RFC 4329 (http:/ / www. apps. ietf. org/ rfc/ rfc4329. html#sec-7. 1)
Flanagan 2006, p. 1.
The Little JavaScripter (http:/ / www. crockford. com/ javascript/ little. html) shows the relationship with Scheme in more detail.
Press release announcing JavaScript (http:/ / web. archive. org/ web/ 20070916144913/ http:/ / wp. netscape. com/ newsref/ pr/
newsrelease67. html), "Netscape and Sun announce Javascript", PR Newswire, December 4, 1995
[11] ECMAScript 3rd Edition specification (http:/ / www. ecma-international. org/ publications/ files/ ECMA-ST/ Ecma-262. pdf)
[16] Flanagan 2006, p. 16.
[17] Flanagan 2006, pp. 176–178.
[18] Properties of the Function Object (http:/ / es5. github. com/ #x15. 3. 4-toc), ECMAScript 5.1 (annotated version)
[19] Flanagan 2006, p. 134.
[20] Flanagan 2006, p. 81.
[21] Flanagan 2006, p. 141.
[22] Robert Nyman, Getters And Setters With JavaScript – Code Samples And Demos (http:/ / robertnyman. com/ 2009/ 05/ 28/
getters-and-setters-with-javascript-code-samples-and-demos/ ), published 29 May 2009, accessed 2 January 2010.
[23] John Resig, JavaScript Getters and Setters (http:/ / ejohn. org/ blog/ javascript-getters-and-setters/ ), 18 July 2007, accessed 2 January 2010
[24] http:/ / en. wikipedia. org/ w/ index. php?title=JavaScript& action=edit
[29] Peter-Paul Koch, Object detection (http:/ / www. quirksmode. org/ js/ support. html)
[30] Peter-Paul Koch, Mission Impossible - mouse position (http:/ / www. evolt. org/ node/ 23335)
[31] Peter-Paul Koch, Browser detect (http:/ / www. quirksmode. org/ js/ detect. html)
[32] Flanagan 2006, pp. 262–263.
[34] ADsafe - Making JavaScript Safe for Advertising (http:/ / www. adsafe. org/ )
[35] Secure ECMA Script (SES) (http:/ / code. google. com/ p/ es-lab/ wiki/ SecureEcmaScript)
[36] MozillaZine, Mozilla Cross-Site Scripting Vulnerability Reported and Fixed (http:/ / www. mozillazine. org/ talkback. html?article=4392)
[38] Mozilla Corporation, Buffer overflow in crypto.signText() (http:/ / www. mozilla. org/ security/ announce/ 2006/ mfsa2006-38. html)
[39] Paul Festa, CNet, Buffer-overflow bug in IE (http:/ / news. com. com/ 2100-1001-214620. html)
[40] SecurityTracker.com, Apple Safari JavaScript Buffer Overflow Lets Remote Users Execute Arbitrary Code and HTTP Redirect Bug Lets
Remote Users Access Files (http:/ / securitytracker. com/ alerts/ 2006/ Mar/ 1015713. html)
[41] SecurityFocus, Microsoft WebViewFolderIcon ActiveX Control Buffer Overflow Vulnerability (http:/ / www. securityfocus. com/ bid/
19030/ info)
[42] Fusion Authority, Macromedia Flash ActiveX Buffer Overflow (http:/ / www. fusionauthority. com/ security/
3234-macromedia-flash-activex-buffer-overflow. htm)
[43] Mike Friedman, Protected Mode in Vista IE7 (http:/ / blogs. msdn. com/ ie/ archive/ 2006/ 02/ 09/ 528963. aspx)
[44] US CERT, Vulnerability Note VU#713878: Microsoft Internet Explorer does not properly validate source of redirected frame (https:/ /
www. kb. cert. org/ vuls/ id/ 713878)
128
JavaScript
[45] Mozilla Foundation, Mozilla Foundation Security Advisory 2005-41: Privilege escalation via DOM property overrides (http:/ / www.
mozilla. org/ security/ announce/ 2005/ mfsa2005-41. html)
[46] Microsoft Corporation, Changes to Functionality in Microsoft Windows XP Service Pack 2: Part 5: Enhanced Browsing Security (http:/ /
technet. microsoft. com/ en-us/ library/ bb457150. aspx#EHAA)
[47] For one example of a rare JavaScript Trojan Horse, see Symantec Corporation, JS.Seeker.K (http:/ / www. symantec. com/
security_response/ writeup. jsp?docid=2003-100111-0931-99)
[50] Re-Animator (https:/ / launchpad. net/ reanimator), in Launchpad
[53] THINK! The Maxwell Render Resourcer Center, Scripting References (http:/ / think. maxwellrender. com/ scripting_references-269. html)
[54] Google Apps Script, Welcome to Google Apps Script (http:/ / www. google. com/ google-d-s/ scripts/ scripts. html)
[59] Version Information (JavaScript) (http:/ / msdn. microsoft. com/ en-us/ library/ s4esdbwz(v=VS. 94). aspx)
[61] Flanagan 2006, pp. 214 et seq.
[62] Nokia Corporation, QtScript Module (http:/ / doc. qt. nokia. com/ 4. 6/ qtscript. html)
[63] JSDB.org (http:/ / www. jsdb. org/ ) (Official website)
[64] jslibs (https:/ / code. google. com/ p/ jslibs/ ) on Google Code
[65] Open Scripting Architecture
[68] myNFC.org (http:/ / www. mynfc. org/ )
[71] JScript development in Microsoft Office 11 (http:/ / msdn2. microsoft. com/ en-us/ library/ aa202668(office. 11). aspx) (MS InfoPath 2003)
[77] https:/ / developer. mozilla. org/ en-US/ docs/ JavaScript/ New_in_JavaScript/ 1. 7?redirectlocale=en-US&
redirectslug=New_in_JavaScript_1. 7#Generators
[78] Java.sun.com (http:/ / java. sun. com/ javase/ 6/ webnotes/ 6u10/ plugin2/ liveconnect/ )
[79] "The death of CPU scaling: From one core to many — and why we’re still stuck." (http:/ / www. extremetech. com/ computing/
116561-the-death-of-cpu-scaling-from-one-core-to-many-and-why-were-still-stuck)
[80] "Parallel Javascript." (http:/ / software. intel. com/ en-us/ blogs/ 2011/ 09/ 15/ parallel-javascript)
[81] New in JavaScript 1.7 (https:/ / developer. mozilla. org/ en/ New_in_JavaScript_1.
7#Array_comprehensions_(Merge_into_Array_comprehensions))
[82] http:/ / www. playmycode. com/ build/ sandbox
[83] http:/ / tinlizzie. org/ ometa/
[84] https:/ / code. google. com/ p/ phype/
[85] https:/ / code. google. com/ p/ tiscript/
[86] https:/ / github. com/ clojure/ clojurescript
[87] http:/ / common-lisp. net/ project/ parenscript
[88] https:/ / github. com/ qsnake/ py2js
[89] http:/ / hashcollision. org/ whalesong/
Further reading
• Bhangal, Sham; Jankowski, Tomasz (2003). Foundation Web Design: Essential HTML, JavaScript, CSS,
PhotoShop, Fireworks, and Flash. APress L. P.. ISBN 1-59059-152-6.
• Burns, Joe; Growney, Andree S. (2001). JavaScript Goodies. Pearson Education. ISBN 0-7897-2612-2.
• Duffy, Scott (2003). How to do Everything with JavaScript. Osborne. ISBN 0-07-222887-3.
• Flanagan, David; Ferguson, Paula (2002). JavaScript: The Definitive Guide (4th ed.). O'Reilly & Associates.
ISBN 0-596-00048-0.
• Flanagan, David (2006). JavaScript: The Definitive Guide (5th ed.). O'Reilly & Associates. ISBN 0-596-10199-6.
• Goodman, Danny; Markel, Scott (2003). JavaScript and DHTML Cookbook. O'Reilly & Associates.
ISBN 0-596-00467-2.
• Goodman, Danny; Eich, Brendan (2001). JavaScript Bible. John Wiley & Sons. ISBN 0-7645-3342-8.
• Harris, Andy (2001). JavaScript Programming for the Absolute Beginner. Premier Press. ISBN 0-7615-3410-5.
• Haverbeke, Marijn (2011). Eloquent JavaScript. No Starch Press. ISBN 978-1593272821.
• Heinle, Nick; Koman, Richard (1997). Designing with JavaScript. O'Reilly & Associates. ISBN 1-56592-300-6.
• McDuffie, Tina Spain (2003). JavaScript Concepts & Techniques: Programming Interactive Web Sites. Franklin,
Beedle & Associates. ISBN 1-887902-69-4.
• McFarlane, Nigel (2003). Rapid Application Development with Mozilla. Prentice Hall Professional Technical
References. ISBN 0-13-142343-6.
129
JavaScript
• Powell, Thomas A.; Schneider, Fritz (2001). JavaScript: The Complete Reference. McGraw-Hill Companies.
ISBN 0-07-219127-9.
• Shelly, Gary B.; Cashman, Thomas J.; Dorin, William J.; Quasney, Jeffrey J. (2000). JavaScript: Complete
Concepts and Techniques. Cambridge: Course Technology. ISBN 0-7895-6233-2.
• Watt, Andrew H.; Watt, Jonathan A.; Simon, Jinjer L. (2002). Teach Yourself JavaScript in 21 Days. Pearson
Education. ISBN 0-672-32297-8.
• Vander Veer, Emily A. (2004). JavaScript For Dummies (4th ed.). Wiley Pub.. ISBN 0-7645-7659-3.
External links
•
•
•
•
JS Beginner's tutorial (http://referencedesigner.com/tutorials/js/js_1.php)
Google's Video tutorials on JS (http://code.google.com/edu/submissions/html-css-javascript/)
Douglas Crockford's video lectures on JavaScript (http://yuiblog.com/crockford/)
Douglas Crockford's A Survey of the JavaScript Programming Language (http://javascript.crockford.com/
survey.html)
• FAQ for Usenet's comp.lang.javascript (http://jibbering.com/faq/)
• Mozilla Developer Center
• Mozilla's Official Documentation on JavaScript (https://developer.mozilla.org/en/JavaScript)
• References for Core JavaScript versions: 1.5+ (https://developer.mozilla.org/en/JavaScript/Reference)
• overview over new features in JavaScript (https://developer.mozilla.org/en/JavaScript/New_in_JavaScript)
• List of JavaScript releases: versions 1.5+ (https://developer.mozilla.org/en/JavaScript/Reference/About)
• Re-Introduction to JavaScript (https://developer.mozilla.org/en/A_re-introduction_to_JavaScript)
• Eloquent JavaScript (http://eloquentjavascript.net/) by Marijn Haverbeke—a free, Creative Commons–licensed
eBook
• JavaScript (http://dev.opera.com/articles/javascript/)—Opera Developer Community
• List of languages that compile to JS (https://github.com/jashkenas/coffee-script/wiki/
List-of-languages-that-compile-to-JS/)
130
131
Formatting
Cascading Style Sheets
Cascading Style Sheets
Filename extension .css
Internet media type text/css
Developed by
World Wide Web Consortium
Initial release
17 December 1996
Type of format
Style sheet language
Standard(s)
[1]
Level 1 (Recommendation)
[2]
Level 2 (Recommendation)
[3]
Level 2 Revision 1 (Recommendation)
HTML
•
HTML and HTML5; HTML editor
•
Dynamic HTML
•
XHTML
•
•
XHTML Basic (Mobile)
XHTML Mobile Profile and C-HTML
•
HTML element
•
Character encodings; Unicode
•
Language code
•
Document Object Model
•
Browser Object Model
•
Style sheets and CSS
•
Font family and Web colors
•
HTML scripting and JavaScript
•
W3C, WHATWG, and validator
•
Quirks mode
•
HTML Frames
•
HTML5 Canvas, WebGL, and WebCL
•
HTML5 Audio and HTML5 video
•
Web storage
•
Web browser (layout) engine
•
Comparison of
•
•
•
document markup languages
web browsers
layout engine support for
•
•
•
HTML; Non-standard HTML
XHTML (1.1)
HTML5; HTML5 canvas,
•
HTML5 media (Audio, Video)
Cascading Style Sheets
Cascading Style Sheets (CSS) is a style sheet language used for describing the presentation semantics (the look and
formatting) of a document written in a markup language. Its most common application is to style web pages written
in HTML and XHTML, but the language can also be applied to any kind of XML document, including plain XML,
SVG and XUL.
CSS is designed primarily to enable the separation of document content (written in HTML or a similar markup
language) from document presentation, including elements such as the layout, colors, and fonts.[4] This separation
can improve content accessibility, provide more flexibility and control in the specification of presentation
characteristics, enable multiple pages to share formatting, and reduce complexity and repetition in the structural
content (such as by allowing for tableless web design). CSS can also allow the same markup page to be presented in
different styles for different rendering methods, such as on-screen, in print, by voice (when read out by a
speech-based browser or screen reader) and on Braille-based, tactile devices. It can also be used to allow the web
page to display differently depending on the screen size or device on which it is being viewed. While the author of a
document typically links that document to a CSS style sheet, readers can use a different style sheet, perhaps one on
their own computer, to override the one the author has specified.
CSS specifies a priority scheme to determine which style rules apply if more than one rule matches against a
particular element. In this so-called cascade, priorities or weights are calculated and assigned to rules, so that the
results are predictable.
The CSS specifications are maintained by the World Wide Web Consortium (W3C). Internet media type (MIME
type) text/css is registered for use with CSS by RFC 2318 (March 1998), and they also operate a free CSS
validation service.[5]
Syntax
CSS has a simple syntax and uses a number of English keywords to specify the names of various style properties.
A style sheet consists of a list of rules. Each rule or rule-set consists of one or more selectors, and a declaration
block. A declaration-block consists of a list of declarations in braces. Each declaration itself consists of a property, a
colon (:), and a value. If there are multiple declarations in a block, a semi-colon (;) must be inserted to separate
each declaration.[6] In CSS, selectors are used to declare which part of the markup a style applies to, a kind of match
expression. Selectors may apply to all elements of a specific type, to elements specified by attribute, or to elements
depending on how they are placed relative to, or nested within, others in the document tree.
Pseudo-classes are used in CSS selectors to permit formatting based on information that is outside the document
tree. An often-used example of a pseudo-class is :hover, which identifies content only when the user 'points to' the
visible element, usually by holding the mouse cursor over it. It is appended to a selector as in a:hover or
#elementid:hover. A pseudo-class classifies document elements, such as :link or :visited, whereas a
pseudo-element makes a selection that may consist of partial elements, such as :first-line or
:first-letter.[7]
Selectors may be combined in many ways, especially in CSS 2.1, to achieve great specificity and flexibility.[8]
Here is an example using the above rules:
selector [, selector2, ...] [:pseudo-class] {
property: value;
[property2: value2;
...]
}
/* comment */
132
Cascading Style Sheets
Use
Prior to CSS, nearly all of the presentational attributes of HTML documents were contained within the HTML
markup; all font colors, background styles, element alignments, borders and sizes had to be explicitly described,
often repeatedly, within the HTML. CSS allows authors to move much of that information to another file, the style
sheet, resulting in considerably simpler HTML.
Headings (h1 elements), sub-headings (h2), sub-sub-headings (h3), etc., are defined structurally using HTML. In
print and on the screen, choice of font, size, color and emphasis for these elements is presentational.
Prior to CSS, document authors who wanted to assign such typographic characteristics to, say, all h2 headings had
to repeat HTML presentational markup for each occurrence of that heading type. This made documents more
complex, larger, and more difficult to maintain. CSS allows the separation of presentation from structure. CSS can
define color, font, text alignment, size, borders, spacing, layout and many other typographic characteristics, and can
do so independently for on-screen and printed views. CSS also defines non-visual styles such as the speed and
emphasis with which text is read out by aural text readers. The W3C has now deprecated the use of all presentational
HTML markup.[citation needed]
An "external" CSS stylesheet file, as described below, can be associated with an HTML document using the
following syntax:
<link href="path/to/file.css" rel="stylesheet">
Sources
CSS information can be provided from various sources. CSS style information can be in a separate document or it
can be embedded into an HTML document. Multiple style sheets can be imported. Different styles can be applied
depending on the output device being used; for example, the screen version can be quite different from the printed
version, so that authors can tailor the presentation appropriately for each medium.
Priority scheme for CSS sources (from highest to lowest priority):
• Author styles (provided by the web page author), in the form of:
• Inline styles, inside the HTML document, style information on a single element, specified using the style
attribute
• Embedded style, blocks of CSS information inside the HTML itself
• External style sheets, i.e., a separate CSS file referenced from the document
• User style:
• A local CSS file the user specifies with a browser option, which acts as an override applied to all documents
• User agent style
• Default styles applied by the user agent, i.e., the browser's default settings for each element's presentation
The style sheet with the highest priority controls the content display. Declarations not set in the highest priority
source are passed on to a source of lower priority, such as the user agent style. This process is called cascading.
One of the goals of CSS is also to allow users greater control over presentation. Someone who finds red italic
headings difficult to read may apply a different style sheet. Depending on the browser and the web site, a user may
choose from various style sheets provided by the designers, or may remove all added styles and view the site using
the browser's default styling, or may override just the red italic heading style without altering other attributes.
133
Cascading Style Sheets
134
History
Style sheets have existed in one form or another since the beginnings of SGML
in the 1980s. Cascading Style Sheets were developed as a means for creating a
consistent approach to providing style information for web documents.
As HTML grew, it came to encompass a wider variety of stylistic capabilities to
meet the demands of web developers. This evolution gave the designer more
control over site appearance, at the cost of more complex HTML. Variations in
web browser implementations, such as ViolaWWW and WorldWideWeb,[] made
consistent site appearance difficult, and users had less control over how web
content was displayed. Robert Cailliau wanted to separate the structure from the
presentation.[] The ideal way would be to give the user different options and
transferring three different kinds of style sheets: one for printing, one for the
presentation on the screen and one for the editor feature.[]
Håkon Wium Lie, chief technical
officer of the Opera Software
company and co-creator of the CSS
web standard
To improve web presentation capabilities, nine different style sheet languages
were proposed to the World Wide Web Consortium's (W3C) www-style mailing
list. Of the nine proposals, two were chosen as the foundation for what became
CSS: Cascading HTML Style Sheets (CHSS) and Stream-based Style Sheet Proposal (SSP). CHSS, a language that
has some resemblance to today's CSS, was proposed by Håkon Wium Lie in October 1994. Bert Bos was working on
a browser called Argo, which used its own style sheet language called SSP.[] Lie and Yves Lafon joined Dave
Raggett to expand the Arena browser for supporting CSS as a testbed application for the W3C.[9][10][11] Lie and Bos
worked together to develop the CSS standard (the 'H' was removed from the name because these style sheets could
also be applied to other markup languages besides HTML).[]
Unlike existing style languages like DSSSL and FOSI, CSS allowed a document's style to be influenced by multiple
style sheets. One style sheet could inherit or "cascade" from another, permitting a mixture of stylistic preferences
controlled equally by the site designer and user.
Lie's proposal was presented at the "Mosaic and the Web" conference (later called WWW2) in Chicago, Illinois in
1994, and again with Bert Bos in 1995.[] Around this time the W3C was already being established, and took an
interest in the development of CSS. It organized a workshop toward that end chaired by Steven Pemberton. This
resulted in W3C adding work on CSS to the deliverables of the HTML editorial review board (ERB). Lie and Bos
were the primary technical staff on this aspect of the project, with additional members, including Thomas Reardon of
Microsoft, participating as well. In August 1996 Netscape Communication Corporation presented an alternative style
sheet language called JavaScript Style Sheets (JSSS).[] The spec was never finished and is deprecated.[12] By the end
of 1996, CSS was ready to become official, and the CSS level 1 Recommendation was published in December.
Development of HTML, CSS, and the DOM had all been taking place in one group, the HTML Editorial Review
Board (ERB). Early in 1997, the ERB was split into three working groups: HTML Working group, chaired by Dan
Connolly of W3C; DOM Working group, chaired by Lauren Wood of SoftQuad; and CSS Working group, chaired
by Chris Lilley of W3C.
The CSS Working Group began tackling issues that had not been addressed with CSS level 1, resulting in the
creation of CSS level 2 on November 4, 1997. It was published as a W3C Recommendation on May 12, 1998. CSS
level 3, which was started in 1998, is still under development as of 2009.
In 2005 the CSS Working Groups decided to enforce the requirements for standards more strictly. This meant that
already published standards like CSS 2.1, CSS 3 Selectors and CSS 3 Text were pulled back from Candidate
Recommendation to Working Draft level.
Cascading Style Sheets
Difficulty with adoption
The CSS 1 specification was completed in 1996. Microsoft's Internet Explorer 3[] was released in that year, featuring
some limited support for CSS. But it was more than three years before any web browser achieved near-full
implementation of the specification. Internet Explorer 5.0 for the Macintosh, shipped in March 2000, was the first
browser to have full (better than 99 percent) CSS 1 support,[13] surpassing Opera, which had been the leader since its
introduction of CSS support 15 months earlier. Other browsers followed soon afterwards, and many of them
additionally implemented parts of CSS 2. As of August 2010[14], no (finished) browser has fully implemented
CSS 2, with implementation levels varying (see Comparison of layout engines (CSS)).
Even though early browsers such as Internet Explorer 3[] and 4, and Netscape 4.x had support for CSS, it was
typically incomplete and had serious bugs. This was a serious obstacle for the adoption of CSS.
When later 'version 5' browsers began to offer a fairly full implementation of CSS, they were still incorrect in certain
areas and were fraught with inconsistencies, bugs and other quirks. The proliferation of such CSS-related
inconsistencies and even the variation in feature support has made it difficult for designers to achieve a consistent
appearance across browsers and platforms. Some authors resorted to workarounds such as CSS hacks and CSS
filters.
Problems with browsers' patchy adoption of CSS, along with errata in the original specification, led the W3C to
revise the CSS 2 standard into CSS 2.1, which moved nearer to a working snapshot of current CSS support in HTML
browsers. Some CSS 2 properties that no browser successfully implemented were dropped, and in a few cases,
defined behaviors were changed to bring the standard into line with the predominant existing implementations.
CSS 2.1 became a Candidate Recommendation on February 25, 2004, but CSS 2.1 was pulled back to Working Draft
status on June 13, 2005,[15] and only returned to Candidate Recommendation status on July 19, 2007.[16]
In the past, some web servers were configured to serve all documents with the filename extension .css[17] as mime
type application/x-pointplus[18] rather than text/css. At the time, the Net-Scene company was selling
PointPlus Maker to convert PowerPoint files into Compact Slide Show files (using a .css extension).[19]
Variations
CSS has various levels and profiles. Each level of CSS builds upon the last, typically adding new features and
typically denoted as CSS 1, CSS 2, CSS 3, and CSS 4. Profiles are typically a subset of one or more levels of CSS
built for a particular device or user interface. Currently there are profiles for mobile devices, printers, and television
sets. Profiles should not be confused with media types, which were added in CSS 2.
CSS 1
The first CSS specification to become an official W3C Recommendation is CSS level 1, published in December
1996.[20] Among its capabilities are support for
•
•
•
•
•
•
Font properties such as typeface and emphasis
Color of text, backgrounds, and other elements
Text attributes such as spacing between words, letters, and lines of text
Alignment of text, images, tables and other elements
Margin, border, padding, and positioning for most elements
Unique identification and generic classification of groups of attributes
The W3C no longer maintains the CSS 1 Recommendation.[21]
135
Cascading Style Sheets
CSS 2
CSS level 2 specification was developed by the W3C and published as a recommendation in May 1998. A superset
of CSS 1, CSS 2 includes a number of new capabilities like absolute, relative, and fixed positioning of elements and
z-index, the concept of media types, support for aural style sheets and bidirectional text, and new font properties
such as shadows.
The W3C no longer maintains the CSS 2 recommendation.[22]
CSS 2.1
CSS level 2 revision 1, often referred to as "CSS 2.1", fixes errors in CSS 2, removes poorly supported or not fully
interoperable features and adds already-implemented browser extensions to the specification. In order to comply
with the W3C Process for standardizing technical specifications, CSS 2.1 went back and forth between Working
Draft status and Candidate Recommendation status for many years. CSS 2.1 first became a Candidate
Recommendation [23] on February 25, 2004, but it was reverted to a Working Draft on June 13, 2005 for further
review. It returned to Candidate Recommendation on 19 July 2007 and then updated twice in 2009. However, since
changes and clarifications were made, it again went back to Last Call Working Draft on 7 December 2010.
CSS 2.1 went to Proposed Recommendation on 12 April 2011.[24] After being reviewed by the W3C Advisory
Committee, it was finally published as a W3C Recommendation on 7 June 2011.[25]
CSS 3
Unlike CSS 2, which is a large single specification defining various features, CSS 3 is divided into several separate
documents called "modules". Each module adds new capabilities or extends features defined in CSS 2, over
preserving backward compatibility. Work on CSS level 3 started around the time of publication of the original CSS 2
recommendation. The earliest CSS 3 drafts were published in June 1999.[]
Due to the modularization, different modules have different stability and statuses.[26] As of June 2012, there are over
fifty CSS modules published from the CSS Working Group.,[] and four of these have been published as formal
recommendations:
•
•
•
•
2012-06-19 : Media Queries
2011-09-29 : Namespaces [27]
2011-09-29 : Selectors Level 3 [28]
2011-06-07 : Color [29]
Some modules (including Backgrounds and Borders [30] and Multi-column Layout [31] among others) have
Candidate Recommendation (CR) status and are considered moderately stable. At CR stage, implementations are
advised to drop vendor prefixes.[32]
CSS 4
There is no such thing as a whole called CSS4,[33] since it is split into separate modules. However, there are "level 4"
modules.[34]
Since CSS3 split the CSS language's definition into modules, the modules have been allowed to level independently.
Most modules are level 3 - they build on things from CSS 2.1. A few level 4 modules exist (such as Image Values
[35]
, Backgrounds & Borders [36], or Selectors [37]), which build on the functionality of a preceding level 3 module.
Others define entirely new functionality, such as Flexbox [38].
So, while there is no monolithic "CSS4" that will be worked on after "CSS3" is finished completely, the level 4
modules can collectively be referred to as "CSS4".
136
Cascading Style Sheets
Browser support
Because not all browsers correctly parse CSS code, developed coding techniques known as CSS hacks can either
filter specific browsers or target specific browsers (generally both are known as CSS filters). The former can be
defined as CSS filtering hacks and the latter can be defined as CSS targeting hacks. Both can be used to hide or show
parts of the CSS to different browsers. This is achieved either by exploiting CSS-handling quirks or bugs in the
browser, or by taking advantage of lack of support for parts of the CSS specifications.[39] Using CSS filters, some
designers have gone as far as delivering different CSS to certain browsers to ensure designs render as expected.
Because very early web browsers were either completely incapable of handling CSS, or rendered CSS very poorly,
designers today often routinely use CSS filters that completely prevent these browsers from accessing any of the
CSS. Internet Explorer support for CSS began with IE 3.0 and increased progressively with each version. By 2008,
the first Beta of Internet Explorer 8 offered support for CSS 2.1 in its best web standards mode.
An example of a well-known CSS browser bug is the Internet Explorer box model bug, where box widths are
interpreted incorrectly in several versions of the browser, resulting in blocks that are too narrow when viewed in
Internet Explorer, but correct in standards-compliant browsers. The bug can be avoided in Internet Explorer 6 by
using the correct doctype in (X)HTML documents. CSS hacks and CSS filters are used to compensate for bugs such
as this, just one of hundreds of CSS bugs that have been documented in various versions of Netscape, Mozilla
Firefox, Opera, and Internet Explorer (including Internet Explorer 7).[40][41]
Even when the availability of CSS-capable browsers made CSS a viable technology, the adoption of CSS was still
held back by designers' struggles with browsers' incorrect CSS implementation and patchy CSS support. Even today,
these problems continue to make the business of CSS design more complex and costly than it was intended to be,
and cross-browser testing remains a necessity. Other reasons for the continuing non-adoption of CSS are: its
perceived complexity, authors' lack of familiarity with CSS syntax and required techniques, poor support from
authoring tools, the risks posed by inconsistency between browsers and the increased costs of testing.
Currently there is strong competition between the WebKit layout engine used in Apple Safari and Google Chrome,
the similar KHTML engine used in KDE's Konqueror browser and Mozilla's Gecko layout engine used in Firefox —
each of them is leading in different aspects of CSS.Wikipedia:Please clarify As of August 2009, Internet Explorer 8,
Firefox 2 and 3 have reasonably complete levels of implementation of CSS 2.1.[42]
Limitations
Some noted limitations of the current capabilities of CSS include:
Selectors are unable to ascend
CSS offers no way to select a parent or ancestor of an element that satisfies certain criteria,[] until CSS
Selectors Level 4,[43] which is still in Working Draft status. A more advanced selector scheme (such as XPath)
would enable more sophisticated style sheets. However, the major reasons for the CSS Working Group
previously rejecting proposals for parent selectors are related to browser performance and incremental
rendering issues.[]
Vertical control limitations
While horizontal placement of elements is generally easy to control, vertical placement is frequently
unintuitive, convoluted, or outright impossible. Simple tasks, such as centering an element vertically or getting
a footer to be placed no higher than bottom of viewport, either require complicated and unintuitive style rules,
or simple but widely unsupported rules.[]
Absence of expressions
There is currently no ability to specify property values as simple expressions (such as margin-left:
10% – 3em + 4px;). This would be useful in a variety of cases, such as calculating the size of columns
137
Cascading Style Sheets
subject to a constraint on the sum of all columns. However, a working draft with a calc() value to address this
limitation has been published by the CSS WG.[44] Internet Explorer versions 5 to 7 support a proprietary
expression() statement,[] with similar functionality. This proprietary expression() statement is no longer
supported from Internet Explorer 8 onwards, except in compatibility modes. This decision was taken for
"standards compliance, browser performance, and security reasons".[]
Lack of column declaration
While possible in current CSS 3 (using the column-count module),[45] layouts with multiple columns can
be complex to implement in CSS 2.1. With CSS 2.1, the process is often done using floating elements, which
are often rendered differently by different browsers, different computer screen shapes, and different screen
ratios set on standard monitors.
Cannot explicitly declare new scope independently of position
Scoping rules for properties such as z-index look for the closest parent element with a position:absolute or
position:relative attribute. This odd coupling has undesired effects. For example, it is impossible to avoid
declaring a new scope when one is forced to adjust an element's position, preventing one from using the
desired scope of a parent element.
Pseudo-class dynamic behavior not controllable
CSS implements pseudo-classes that allow a degree of user feedback by conditional application of alternate
styles. One CSS pseudo-class, ":hover", is dynamic (equivalent of JavaScript "onmouseover") and has
potential for abuse (e.g., implementing cursor-proximity popups),[46] but CSS has no ability for a client to
disable it (no "disable"-like property) or limit its effects (no "nochange"-like values for each property).
Cannot name rules
There is no way to name a CSS rule, which would allow (for example) client-side scripts to refer to the rule
even if its selector changes.
Cannot include styles from a rule into another rule
CSS styles often must be duplicated in several rules to achieve a desired effect, causing additional
maintenance and requiring more thorough testing.
Cannot target specific text without altering markup
Besides the :first-letter pseudo-element, one cannot target specific ranges of text without needing to
utilize place-holder elements.
Advantages
Separation of content from presentation
CSS facilitates publication of content in multiple presentation formats based on nominal parameters. Nominal
parameters include explicit user preferences, different web browsers, the type of device being used to view the
content (a desktop computer or mobile Internet device), the geographic location of the user and many other
variables.
Site-wide consistency
When CSS is used effectively, in terms of inheritance and "cascading," a global style sheet can be used to
affect and style elements site-wide. If the situation arises that the styling of the elements should need to be
changed or adjusted, these changes can be made by editing rules in the global style sheet. Before CSS, this sort
of maintenance was more difficult, expensive and time-consuming.
Bandwidth
138
Cascading Style Sheets
A stylesheet, internal or external, will specify the style once for a range of HTML elements selected by
class, type or relationship to others. This is much more efficient than repeating style information inline for
each occurrence of the element. An external stylesheet is usually stored in the browser cache, and can
therefore be used on multiple pages without being reloaded, further reducing data transfer over a network.
Page reformatting
With a simple change of one line, a different style sheet can be used for the same page. This has advantages
for accessibility, as well as providing the ability to tailor a page or site to different target devices. Furthermore,
devices not able to understand the styling still display the content.
Accessibility
Without CSS, web designers must typically lay out their pages with techniques that hinder accessibility for
vision-impaired users, like HTML tables (see Tableless web design#Accessibility).
CSS frameworks
CSS frameworks are pre-prepared libraries that are meant to allow for easier, more standards-compliant styling of
web pages using the Cascading Style Sheets language. Layout-grid-related CSS frameworks include Blueprint, 960
grid, and YUI CSS grids. Like programming and scripting language libraries, CSS frameworks are usually
incorporated as external .css sheets referenced in the HTML <head>. They provide a number of ready-made
options for designing and laying out the web page. While many of these frameworks have been published, some
authors use them mostly for rapid prototyping, or for learning from, and prefer to 'handcraft' CSS that is appropriate
to each published site without the design, maintenance and download overhead of having many unused features in
the site's styling.[47]
Positioning
CSS 2.1 defines three positioning schemes:
Normal flow
Inline items are laid out in the same way as the letters in words in text, one after the other across the available
space until there is no more room, then starting a new line below. Block items stack vertically, like paragraphs
and like the items in a bulleted list. Normal flow also includes relative positioning of block or inline items, and
run-in boxes.
Floats
A floated item is taken out of the normal flow and shifted to the left or right as far as possible in the space
available. Other content then flows alongside the floated item.
Absolute positioning
An absolutely positioned item has no place in, and no effect on, the normal flow of other items. It occupies its
assigned position in its container independently of other items.[]
139
Cascading Style Sheets
Position: top, bottom, left, and right
There are four possible values of the position property. If an item is positioned in any way other than static,
then the further properties top, bottom, left, and right are used to specify offsets and positions.
Static
The default value places the item in the normal flow
Relative
The item is placed in the normal flow, and then shifted or offset from that position. Subsequent flow items are
laid out as if the item had not been moved.
Absolute
Specifies absolute positioning. The element is positioned in relation to its nearest non-static ancestor.
Fixed
The item is absolutely positioned in a fixed position on the screen even as the rest of the document is scrolled[]
Float and clear
The float property may have one of three values. Absolutely positioned or fixed items cannot be floated. Other
elements normally flow around floated items, unless they are prevented from doing so by their clear property.
left
Floats to the left of the line that it would have appeared in; other items may flow around its right side
right
Floats to the right of the line that it would have appeared in; other items may flow around its left side
clear
Forces the element to appear underneath ('clear') floated elements to the left (clear:left), right
(clear:right) or both sides (clear:both).[][48]
References
[1] http:/ / www. w3. org/ TR/ 2008/ REC-CSS1-20080411/
[2] http:/ / www. w3. org/ TR/ 2008/ REC-CSS2-20080411/
[3] http:/ / www. w3. org/ TR/ 2011/ REC-CSS2-20110607/
[8] see the complete definition of selectors at the W3C Web site (http:/ / www. w3. org/ TR/ CSS21/ selector. html).
[14] http:/ / en. wikipedia. org/ w/ index. php?title=Cascading_Style_Sheets& action=edit
[20] W3C: Cascading Style Sheets, level 1 (http:/ / www. w3. org/ TR/ CSS1) CSS 1 specification
[21] W3C: Cascading Style Sheets level 1 specification (http:/ / www. w3. org/ TR/ 2008/ REC-CSS1-20080411/ ) CSS level 1 specification
[22] W3C: Cascading Style Sheets, level 2 (http:/ / www. w3. org/ TR/ 2008/ REC-CSS2-20080411/ ) CSS 2 specification (1998
recommendation)
[23] http:/ / www. w3. org/ TR/ 2004/ CR-CSS21-20040225/
[24] W3C: Cascading Style Sheets, level 2 revision 1 (http:/ / www. w3. org/ TR/ 2011/ PR-CSS2-20110412/ ) CSS 2.1 specification (W3C
Proposed Recommendation)
[25] W3C: Cascading Style Sheets Standard Boasts Unprecedented Interoperability (http:/ / www. w3. org/ 2011/ 05/ css-pr. html. en)
[27] http:/ / www. w3. org/ Style/ CSS/ specs#namespace
[28] http:/ / www. w3. org/ Style/ CSS/ specs#selectors
[29] http:/ / www. w3. org/ Style/ CSS/ specs#color
[30] http:/ / www. w3. org/ Style/ CSS/ specs#background
[31] http:/ / www. w3. org/ Style/ CSS/ specs#multicol
[34] W3C CSS Selectors Level 4 (http:/ / www. w3. org/ TR/ 2011/ WD-selectors4-20110929/ )
[35] http:/ / www. w3. org/ TR/ css4-images/
[36] http:/ / dev. w3. org/ csswg/ css4-background/
[37] http:/ / www. w3. org/ TR/ selectors4/
[38] http:/ / www. w3. org/ TR/ css3-flexbox/
140
Cascading Style Sheets
[41] bugs (http:/ / css. nu/ pointers/ bugs. html)
Further reading
• Jeffrey Zeldman (2009): Designing With Web Standards, New Riders, ISBN 978-0321616951 (paperback) (
book's companion site (http://www.zeldman.com/dwws/))
• Dan Cederholm (2009): Web Standards Solutions, The Markup and Style Handbook, Friends of Ed, ISBN
978-1430219200 (paperback) ( Author's site (http://www.simplebits.com/publications/solutions/))
• Meyer, Eric A. (2006). Cascading Style Sheets: The Definitive Guide, Third Edition (http://www.oreilly.com/
catalog/csstdg3/). O'Reilly Media, Inc. ISBN 0-596-52733-0.
• More Eric Meyer On CSS (http://more.ericmeyeroncss.com/) (2004) ISBN 0-7357-1425-8
• Eric Meyer On CSS (http://www.ericmeyeroncss.com/) (2002), ISBN 0-7357-1245-X
• Meyer, Eric A. (2001) Cascading Style Sheets 2.0 Programmer's Reference, McGraw-Hill Osborne Media, ISBN
0-07-213178-0
• The Zen of CSS Design (2005) (co-authored by CSS Zen Garden Owner, Dave Shea, and Molly E. Holzschlag),
ISBN 0-321-30347-4
• Kynn Bartlett: Teach Yourself CSS in 24 Hours, 2nd Edition (2006), Sams Publishing, ISBN 978-0672329067
• Cascading Style Sheets: Designing for the Web (http://www.aw-bc.com/catalog/academic/product/
0,1144,0321193121,00.html) (2005) by Håkon Wium Lie and Bert Bos, ISBN 0-321-19312-1
• Cascading Style Sheets (http://people.opera.com/howcome/2006/phd/) Cascading Style Sheets, PhD thesis,
by Håkon Wium Lie – provides an authoritative historical reference of CSS
• Cascading Style Sheets: Separating Content from Presentation (http://friendsofed.com/book.
html?isbn=978-1590592311), (co-authored by Owen Briggs, Steven Champeon, Eric Costello, and Matt
Patterson), Friends of Ed (2004), ISBN 978-1590592311
• Keith Schengili-Roberts (2003): Core CSS, 2nd Edition, Prentice Hall, ISBN 0-13-009278-9
External links
• CSS home page at W3C (http://www.w3.org/Style/CSS) – Includes links to the CSS specifications.
• CSS (http://www.dmoz.org/Computers/Data_Formats/Style_Sheets/CSS//) at the Open Directory Project
141
142
Related Technologies
Application programming interface
An application programming interface (API) is a protocol intended to be used as an interface by software
components to communicate with each other. An API is a library that may include specification for routines, data
structures, object classes, and variables. An API specification can take many forms, including an International
Standard such as POSIX, vendor documentation such as the Microsoft Windows API, the libraries of a programming
language, e.g. Standard Template Library in C++ or Java API.
An API differs from an application binary interface (ABI) in that an API is source code based while an ABI is a
binary interface. For instance POSIX is an API, while the Linux Standard Base is an ABI.[1]
Detailed explanation
In more details in a human readable format in ebooks, or in electronic formats like the man pages: e.g., on Unix
systems, the command man 3 sqrt presents the signature of the function sqrt in the form:
SYNOPSIS
#include <math.h>
double sqrt(double X);
float sqrtf(float X);
DESCRIPTION
DESCRIPTION
sqrt computes the positive square root of the argument. ...
RETURNS
On success, the square root is returned. If X is real and
positive...
That means that the function returns the square root of a positive floating point number (single or double
precision) as another floating point number. Hence the API in this case can be interpreted as the collection of the
include files used by the C language and its human readable description provided by the man pages.
Documentation
Many program development environments provide the documentation associated with an API in some digital format,
e.g. perl comes with the tool perldoc:
$ perldoc -f sqrt
sqrt EXPR
sqrt
#Return the square root of EXPR. If EXPR is omitted,
returns
#square root of $_. Only works on non-negative
operands, unless
#you've loaded the standard Math::Complex module.
python comes with the tool pydoc:
Application programming interface
$ pydoc math.sqrt
Help on built-in function sqrt in math:
math.sqrt = sqrt(...)
sqrt(x)
Return the square root of x.
Java comes with the documentation organized in HTML pages (JavaDoc format), while Microsoft distributes the
API documentation for its languages (Visual C++, C#, Visual Basic, F#, etc...) embedded in Visual Studio's help
system.
API in object-oriented languages
In object-oriented languages, an API usually includes a description of a set of class definitions, with a set of
behaviors associated with those classes. This abstract concept is associated with the real functionality exposed, or
made available, by the classes that are implemented in terms of class methods (or more generally by all its public
components hence all public methods, but also possibly including any internal entity made public, like fields,
constants, nested objects, enums, etc.).
The API in this case can be conceived as the totality of all the methods publicly exposed by the classes (usually
called the class interface). This means that the API prescribes the methods by which one interacts with/handles the
objects derived from the class definitions.
More generally, one can see the API as the collection of all the kinds of objects one can derive from the class
definitions, and their associated possible behaviors. Again: the use is mediated by the public methods, but in this
interpretation, the methods are seen as a technical detail of how the behavior is implemented.
For instance: a class representing a Stack can simply expose publicly two methods push() (to add a new item
to the stack), and pop() (to extract the last item, ideally placed on top of the stack).
In this case the API can be interpreted as the two methods pop() and push(), or, more generally, as the idea that
one can use an item of type Stack that implements the behavior of a stack: a pile exposing its top to add/remove
elements. The second interpretation appears more appropriate in the spirit of object orientation.
This concept can be carried to the point where a class interface in an API has no methods at all, but only behaviors
associated with it. For instance, the Java language and Lisp (programming language) API include the interface
Serializable, which is a marker interface that requires that each class that implements it should behave in a
serialized fashion. This does not require to have any public method, but rather requires that any class that
implements it to have a representation that can be saved (serialized) at any time (this is typically true for any class
containing simple data and no link to external resources, like an open connection to a file, a remote system, or an
external device).
Similarly the behavior of an object in a concurrent (multi-threaded) environment is not necessarily determined by
specific methods, belonging to the interface implemented, but still belongs to the API for that Class of objects, and
should be described in the documentation.[2]
In this sense, in object-oriented languages, the API defines a set of object behaviors, possibly mediated by a set of
class methods.
In such languages, the API is still distributed as a library. For example, the Java language libraries include a set of
APIs that are provided in the form of the JDK used by the developers to build new Java programs. The JDK includes
the documentation of the API in JavaDoc notation.
The quality of the documentation associated with an API is often a factor determining its success in terms of ease of
use.
143
Application programming interface
API libraries and frameworks
An API is usually related to a software library: the API describes and prescribes the expected behavior while the
library is an actual implementation of this set of rules. A single API can have multiple implementations (or none,
being abstract) in the form of different libraries that share the same programming interface.
An API can also be related to a software framework: a framework can be based on several libraries implementing
several APIs, but unlike the normal use of an API, the access to the behavior built into the framework is mediated by
extending its content with new classes plugged into the framework itself. Moreover the overall program flow of
control can be out of the control of the caller, and in the hands of the framework via inversion of control or a similar
mechanisms.[3]
API and protocols
An API can also be an implementation of a protocol.
When an API implements a protocol it can be based on proxy methods for remote invocations that underneath rely
on the communication protocol. The role of the API can be exactly to hide the detail of the transport protocol. E.g.:
RMI is an API that implements the JRMP protocol or the IIOP as RMI-IIOP.
Protocols are usually shared between different technologies (system based on given computer programming
languages in a given operating system) and usually allow the different technologies to exchange information, acting
as an abstraction/mediation level between the two worlds. APIs are usually specific to a given technology: hence the
APIs of a given language cannot be used in other languages, unless the function calls are wrapped with specific
adaptation libraries.
Object API and protocols
An object API can prescribe a specific object exchange format, an object exchange protocol can define a way to
transfer the same kind of information in a message sent to a remote system.
When a message is exchanged via a protocol between two different platforms using objects on both sides, the object
in a programming language can be transformed (marshalled and unmarshalled) in an object in a remote and different
language: so, e.g., a program written in Java invokes a service via SOAP or IIOP written in C# both programs use
APIs for remote invocation (each locally to the machine where they are working) to (remotely) exchange
information that they both convert from/to an object in local memory.
Instead when a similar object is exchanged via an API local to a single machine the object is effectively exchanged
(or a reference to it) in memory: e.g. via memory allocated by a single process, or among multiple processes using
shared memory or other sharing technologies like tuple spaces.
API sharing and reuse via virtual machine
Some languages like those running in a virtual machine (e.g. .NET CLI compliant languages in the Common
Language Runtime and JVM compliant languages in the Java Virtual Machine) can share APIs.
In this case the virtual machine enables the language interoperation thanks to the common denominator of the virtual
machine that abstracts from the specific language using an intermediate bytecode and its language binding.
Web APIs
When used in the context of web development, an API is typically defined as a set of Hypertext Transfer Protocol
(HTTP) request messages, along with a definition of the structure of response messages, which is usually in an
Extensible Markup Language (XML) or JavaScript Object Notation (JSON) format. While "web API" historically
has been virtually synonymous for web service, the recent trend (so-called Web 2.0) has been moving away from
Simple Object Access Protocol (SOAP) based web services and service-oriented architecture (SOA) towards more
144
Application programming interface
direct representational state transfer (REST) style web resources and resource-oriented architecture (ROA).[4] Part of
this trend is related to the Semantic Web movement toward Resource Description Framework (RDF), a concept to
promote web-based ontology engineering technologies. Web APIs allow the combination of multiple APIs into new
applications known as mashups.[5]
Web use to share content
The practice of publishing APIs has allowed web communities to create an open architecture for sharing content and
data between communities and applications. In this way, content that is created in one place can be dynamically
posted and updated in multiple locations on the web.
1. Photos can be shared from sites like Flickr and Photobucket to social network sites like Facebook and MySpace.
2. Content can be embedded, e.g. embedding a presentation from SlideShare on a LinkedIn profile.
3. Content can be dynamically posted. Sharing live comments made on Twitter with a Facebook account, for
example, is enabled by their APIs.
4. Video content can be embedded on sites served by another host.
5. User information can be shared from web communities to outside applications, delivering new functionality to
the web community that shares its user data via an open API. One of the best examples of this is the Facebook
Application platform. Another is the Open Social platform.[6]
Implementations
The POSIX standard defines an API that allows writing a wide range of common computing functions in a way such
that they can operate on many different systems (Mac OS X, and various Berkeley Software Distributions (BSDs)
implement this interface). However, using this requires re-compiling for each platform. A compatible API, on the
other hand, allows compiled object code to function with no changes to the system that implements that API. This is
beneficial to both software providers (where they may distribute existing software on new systems without
producing and distributing upgrades) and users (where they may install older software on their new systems without
purchasing upgrades), although this generally requires that various software libraries implement the necessary APIs
as well.
Microsoft has shown a strong commitment to a backward compatible API, particularly within their Windows API
(Win32) library, such that older applications may run on newer versions of Windows using an executable-specific
setting called "Compatibility Mode".[7]
Among Unix-like operating systems, there are many related but incompatible operating systems running on a
common hardware platform (particularly Intel 80386-compatible systems). There have been several attempts to
standardize the API such that software vendors may distribute one binary application for all these systems; however,
to date, none of these have met with much success. The Linux Standard Base is attempting to do this for the Linux
platform, while many of the BSD Unixes, such as FreeBSD, NetBSD, and OpenBSD, implement various levels of
API compatibility for both backward compatibility (allowing programs written for older versions to run on newer
distributions of the system) and cross-platform compatibility (allowing execution of foreign code without
recompiling).
145
Application programming interface
Release policies
The two options for releasing API are:
1. Protecting information on APIs from the general public. For example, Sony used to make its official PlayStation
2 API available only to licensed PlayStation developers. This enabled Sony to control who wrote PlayStation 2
games. This gives companies quality control privileges and can provide them with potential licensing revenue
streams.
2. Making APIs freely available. For example, Microsoft makes the Microsoft Windows API public, and Apple
releases its APIs Carbon and Cocoa, so that software can be written for their platforms.
A mix of the two behaviors can be used as well.
APIs and copyrights
In 2010 Oracle sued Google for having distributed a new implementation of Java embedded in the Android operating
system.[8] Google had not acquired any permission to reproduce the Java API, although a similar permission had
been given to the OpenJDK project. Judge William Alsup ruled in the Oracle v. Google case that APIs cannot be
copyrighted in the U.S.[9]
API examples
•
•
•
•
•
•
•
•
•
•
ASPI for SCSI device interfacing
Carbon and Cocoa for the Macintosh
DirectX for Microsoft Windows
EHLLAPI
Java APIs
ODBC for Microsoft Windows
OpenAL cross-platform sound API
OpenCL cross-platform API for general-purpose computing for CPUs & GPUs
OpenGL cross-platform graphics API
OpenMP API that supports multi-platform shared memory multiprocessing programming in C, C++ and Fortran
on many architectures, including Unix and Microsoft Windows platforms.
• Simple DirectMedia Layer (SDL)
• Talend integrates its data management with BPM from Bonita Open Solution
Language bindings and interface generators
APIs that are intended to be used by more than one high-level programming language often provide, or are
augmented with, facilities to automatically map the API to features (syntactic or semantic) that are more natural in
those languages. This is known as language binding, and is itself an API. The aim is to encapsulate most of the
required functionality of the API, leaving a "thin" layer appropriate to each language.
Below are listed some interface generator tools that bind languages to APIs at compile time.
• SWIG open-source interfaces bindings generator from many languages to many languages (Typically
Compiled->Scripted)
• F2PY:[10] Fortran to Python interface generator.
146
Application programming interface
147
References
External links
• What is an API? Your Guide to the Internet (R)evolution (http://www.3scale.net/wp-content/uploads/2012/
06/What-is-an-API-1.0.pdf)
• How to design a good API and why it matters (http://lcsd05.cs.tamu.edu/slides/keynote.pdf)
• How to Write an API (http://www.lior.ca/publications/api_design.pdf)
• LMAX Application Programming Interface (API) technology (http://www.lmax.com/trading-tech/api-trading)
Scalable Vector Graphics
Scalable Vector Graphics
Filename extension
.svg, .svgz
Internet media type
image/svg+xml
[1][2]
Uniform Type Identifier public.svg-image
UTI conforms to
public.image
Developed by
World Wide Web Consortium
Initial release
4 September 2001
Latest release
1.1 (Second Edition) / 16 August 2011
Type of format
vector image format
Extended from
XML
Open format?
Yes
Website
w3.org/Graphics/SVG/
[3]
Scalable Vector
Graphics
•
SXBL
•
SVG Working Group
•
SVG filter effects
•
Precision Graphics Markup Language
•
Vector Markup Language
•
XHTML+MathML+SVG
•
SVG animation
•
Comparison of layout engines (SVG)
Scalable Vector Graphics
148
Scalable Vector Graphics (SVG) is an
XML-based vector image format for
two-dimensional graphics that has support
for interactivity and animation. The SVG
specification is an open standard developed
by the World Wide Web Consortium (W3C)
since 1999.
SVG images and their behaviors are defined
in XML text files. This means that they can
be searched, indexed, scripted, and, if need
be, compressed. As XML files, SVG images
can be created and edited with any text
editor, but it is often more convenient to
create them with drawing programs such as
Inkscape.
This image illustrates the difference between bitmap and vector images. The
bitmap image is composed of a fixed set of dots, while the vector image is
composed of a fixed set of shapes. In the picture, scaling the bitmap reveals the
dots while scaling the vector image preserves the shapes.
All major modern web browsers—including
Mozilla Firefox, Internet Explorer 9 and 10, Google Chrome, Opera, and Safari—have at least some degree of
support for SVG and can render the markup directly.
Overview
SVG has been in development since 1999 by a group of companies within the W3C after the competing standards
Precision Graphics Markup Language (PGML, developed from Adobe's PostScript) and Vector Markup Language
(VML, developed from Microsoft's RTF) were submitted to W3C in 1998. SVG drew on experience from the
designs of both those formats.[4]
SVG allows three types of graphic objects: vector graphics, raster graphics, and text. Graphical objects, including
PNG and JPEG raster images, can be grouped, styled, transformed, and composited into previously rendered objects.
SVG does not directly support z-indices[5] that separate drawing order from document order for overlapping objects,
unlike some other vector markup languages like VML. Text can be in any XML namespace suitable to the
application, which enhances search ability and accessibility of the SVG graphics. The feature set includes nested
transformations, clipping paths, alpha masks, filter effects, template objects, and extensibility.
Since 2001, the SVG specification has been updated to version 1.1 (current Recommendation) and 1.2 (still a
Working Draft). The SVG Mobile Recommendation introduced two simplified profiles of SVG 1.1, SVG Basic and
SVG Tiny, meant for devices with reduced computational and display capabilities. SVG Tiny later became an
autonomous Recommendation (current version 1.2) and the basis for SVG 1.2. In addition to these variants and
profiles, the SVG Print specification (still a Working Draft) contains guidelines for printable SVG 1.2 and SVG
Tiny 1.2 documents.
Printing
Though the SVG Specification primarily focuses on vector graphics markup language, its design includes the basic
capabilities of a page description language (PDL), like Adobe's PDF. It contains provisions for rich graphics, and is
also compatible with CSS for styling purposes. It is unlike XHTML, whose primary purpose is communication of
content, not presentation, and therefore specifies objects to be displayed but not where to place such objects.
Conversely SVG is an ideal PDL for print-oriented uses, as it contains all the functionality required to place each
glyph and image in a chosen location on the final page.[6] A much more print-specialized subset of SVG (SVG Print,
authored by Canon, HP, Adobe and Corel) is currently[7] a W3C Working Draft.[8]
Scalable Vector Graphics
Scripting and animation
SVG drawings can be dynamic and interactive. Time-based modifications to the elements can be described in SMIL,
or can be programmed in a scripting language (e.g., ECMAScript or JavaScript). The W3C explicitly recommends
SMIL as the standard for animation in SVG.[9] A rich set of event handlers such as onmouseover and onclick can be
assigned to any SVG graphical object.
Compression
SVG images, being XML, contain many repeated fragments of text, so they are well suited for lossless data
compression algorithms. When an SVG image has been compressed with the industry standard gzip algorithm, it is
referred to as an "SVGZ" image and uses the corresponding .svgz filename extension. Conforming SVG 1.1
viewers will display compressed images.[10] An SVGZ file is typically 20 to 50 percent of the original size.[11] W3C
provides SVGZ files to test for conformance.[12]
Development history
SVG was developed by the W3C SVG Working Group starting in 1998, after Macromedia and Microsoft introduced
VML whereas Adobe Systems and Sun Microsystems submitted a competing format known as PGML. The working
group was chaired by Chris Lilley of the W3C.
• SVG 1.0 became a W3C Recommendation on 4 September 2001.[13]
• SVG 1.1 became a W3C Recommendation on 14 January 2003.[] The SVG 1.1 specification is modularized in
order to allow subsets to be defined as profiles. Apart from this, there is very little difference between SVG 1.1
and SVG 1.0.
•
•
•
•
•
• SVG Tiny and SVG Basic (the Mobile SVG Profiles) became W3C Recommendations on 14 January 2003.
These are described as profiles of SVG 1.1.[14]
SVG Tiny 1.2 became a W3C Recommendation on 22 December 2008.[15]
SVG Full 1.2 has had a W3C Working Draft in process for years, but now will be dropped soon in favor of a SVG
2.0.[] SVG Tiny 1.2 was initially released as a profile and later refactored to be a complete specification,
including all needed parts of SVG 1.1 and SVG 1.2. SVG 1.2 Full adds modules onto the SVGT 1.2 core.
SVG Print adds syntax for multi-page documents and mandatory color management support.
SVG 1.1 Second Edition, which includes all the errata and clarifications, but no new features to the original SVG
1.1 was released on 16 August 2011.[16]
SVG 2.0 will completely rework draft 1.2 with more integration with new web features such as CSS, HTML5 and
WOFF. It is scheduled as "recommendation" for August 2014.[17]
The MPEG-4 Part 20 standard - Lightweight Application Scene Representation (LASeR) and Simple Aggregation
Format (SAF) is based on SVG Tiny.[18] It was developed by MPEG (ISO/IEC JTC1/SC29/WG11) and published as
ISO/IEC 14496-20:2006.[19] SVG capabilities are enhanced in MPEG-4 Part 20 with key features for mobile
services, such as dynamic updates, binary encoding, state-of-art font representation.[20] SVG was also
accommodated in MPEG-4 Part 11, in the Extensible MPEG-4 Textual (XMT) format - a textual representation of
the MPEG-4 multimedia content using XML.[21]
149
Scalable Vector Graphics
Mobile profiles
Because of industry demand, two mobile profiles were introduced with SVG 1.1: SVG Tiny (SVGT) and SVG Basic
(SVGB). These are subsets of the full SVG standard, mainly intended for user agents with limited capabilities. In
particular, SVG Tiny was defined for highly restricted mobile devices such as cellphones, and SVG Basic was
defined for higher-level mobile devices, such as PDAs.
In 2003, the 3GPP, an international telecommunications standards group, adopted SVG Tiny as the mandatory vector
graphics media format for next-generation phones. SVGT is the required vector graphics format and support of
SVGB is optional for Multimedia Messaging Service (MMS) and Packet-switched Streaming Service
(PSS).[22][23][24] It was later added as required format for vector graphics in 3GPP IP Multimedia Subsystem
(IMS).[25] Neither mobile profile includes support for the full DOM, while only SVG Basic has optional support for
scripting, but because they are fully compatible subsets of the full standard, most SVG graphics can still be rendered
by devices which only support the mobile profiles.[26]
SVGT 1.2 adds a microDOM (μDOM), allowing all mobile needs to be met with a single profile.
Functionality
The SVG 1.1 specification defines 14 functional areas or feature sets:[]
Paths
Simple or compound shape outlines are drawn with curved or straight lines that can be filled in, outlined, or
used as a clipping path. Paths have a compact coding. For example M (for 'move to') precedes initial numeric x
and y coordinates and L (line to) precedes a point to which a line should be drawn. Further command letters
(C, S, Q, T and A) precede data that is used to draw various Bézier and elliptical curves. Z is used to close a
path. In all cases, absolute coordinates follow capital letter commands and relative coordinates are used after
the equivalent lower-case letters.[]
Basic shapes
Straight-line paths and paths made up of a series of connected straight-line segments (polylines), as well as
closed polygons, circles and ellipses can be drawn. Rectangles and round-cornered rectangles are also standard
elements.[]
Text
Unicode character text included in an SVG file is expressed as XML character data. Many visual effects are
possible, and the SVG specification automatically handles bidirectional text (for composing a combination of
English and Arabic text, for example), vertical text (as Chinese was historically written) and characters along a
curved path (such as the text around the edge of the Great Seal of the United States).[]
Painting
SVG shapes can be filled and/or outlined (painted with a color, a gradient, or a pattern). Fills can be opaque or
have any degree of transparency. "Markers" are line-end features, such as arrowheads, or symbols that can
appear at the vertices of a polygon.[]
Color
Colors can be applied to all visible SVG elements, either directly or via 'fill', 'stroke,' and other properties.
Colors are specified in the same way as in CSS2, i.e. using names like black or blue, in hexadecimal such
as #2f0 or #22ff00, in decimal like rgb(255,255,127), or as percentages of the form
rgb(100%,100%,50%).[]
Gradients and patterns
SVG shapes can be filled or outlined with solid colors as above, or with color gradients or with repeating
patterns. Color gradients can be linear or radial (circular), and can involve any number of colors as well as
150
Scalable Vector Graphics
repeats. Opacity gradients can also be specified. Patterns are based on predefined raster or vector graphic
objects, which can be repeated in x and/or y directions. Gradients and patterns can be animated and scripted.[]
Since 2008, there has been discussion[27][28] among professional users of SVG that either gradient meshes or
preferably diffusion curves could usefully be added to the SVG specification. It is said that a "simple
representation [using diffusion curves] is capable of representing even very subtle shading effects"[29] and that
"Diffusion curve images are comparable both in quality and coding efficiency with gradient meshes, but are
simpler to create (according to several artists who have used both tools), and can be captured from bitmaps
fully automatically."[30]
Clipping, masking and compositing
Graphic elements, including text, paths, basic shapes and combinations of these, can be used as outlines to
define both 'inside' and 'outside' regions that can be painted (with colors, gradients and patterns)
independently. Fully opaque clipping paths and semi-transparent masks are composited together to calculate
the color and opacity of every pixel of the final image, using alpha blending.[]
Filter effects[]
Interactivity
SVG images can interact with users in many ways. In addition to hyperlinks as mentioned below, any part of
an SVG image can be made receptive to user interface events such as changes in focus, mouse clicks, scrolling
or zooming the image and other pointer, keyboard and document events. Event handlers may start, stop or alter
animations as well as trigger scripts in response to such events.[]
Linking
SVG images can contain hyperlinks to other documents, using XLink. URLs of SVG images can specify
geometrical transforms in the fragment section.[]
Scripting
All aspects of an SVG document can be accessed and manipulated using scripts in a similar way to HTML.
The default scripting language is ECMAScript (closely related to JavaScript) and there are defined Document
Object Model (DOM) objects for every SVG element and attribute. Scripts are enclosed in <script>
elements. They can run in response to pointer events, keyboard events and document events as required.[]
Animation
SVG content can be animated using the built-in animation elements such as <animate>,
<animateMotion> and <animateColor>. Content can be animated by manipulating the DOM using
ECMAScript and the scripting language's built-in timers. SVG animation has been designed to be compatible
with current and future versions of Synchronized Multimedia Integration Language (SMIL). Animations can
be continuous, they can loop and repeat, and they can respond to user events, as mentioned above.[]
Fonts
As with HTML and CSS, text in SVG may reference external font files, such as system fonts. If the required
font files do not exist on the machine where the SVG file is rendered, the text may not appear as intended. To
overcome this limitation, text can be displayed in an 'SVG font', where the required glyphs are defined in SVG
as a font that is then referenced from the <text> element.[]
Metadata
In accord with the W3C's Semantic Web initiative, SVG allows authors to provide metadata about SVG
content. The main facility is the <metadata> element, where the document can be described using Dublin
Core metadata properties (e.g., title, creator/author, subject, description, etc). Other metadata schemas may
also be used. In addition, SVG defines <title> and <desc> elements where authors may also provide
plain-text descriptive material within an SVG image to help indexing, searching and retrieval by a number of
151
Scalable Vector Graphics
means.[]
An SVG document can define components including shapes, gradients etc., and use them repeatedly. SVG images
can also contain raster graphics, such as PNG and JPEG images, and further SVG images.
SVG on the web
Google announced on 31 August 2010 that it had started to index SVG content on the web, whether it is in
standalone files or embedded in HTML, and that users would begin to see such content listed among their search
results.[31] It was announced on 8 December 2010 that Google Image Search would also begin indexing SVG
files.[32] On 28 January 2011, it was discovered that Google was allowing Image Search results to be restricted
exclusively to SVG files.[33] This feature was announced officially on 11 February 2011.[34]
Support for SVG in web browsers
The use of SVG on the web is still limited by the lack of support in older versions of Internet Explorer (IE). Version
8 does not support SVG.[35][36] IE9 (released 14 March 2011) supports the basic SVG feature set.[] Many web sites
that serve SVG images, such as Wikipedia, also provide the images in a raster format, either automatically by HTTP
content negotiation or by allowing the user directly to choose the file.
Native support
Konqueror was the first browser to support SVG in release version 3.2 in February 2004.[37] As of 2011, all major
desktop browsers, and many minor ones, have some level of SVG support. Other browsers' implementations are not
yet complete; see comparison of layout engines for further details.
Some earlier versions of Firefox (e.g., versions between 1.5 and 4.0[38]) and some other outdated web browsers that
can display SVG graphics needed them embedded in <object> or <iframe> elements to display them
integrated as parts of an HTML webpage instead of using the standard way of integrating images with <img>.[39]
However, SVG images may be included in XHTML pages using XML namespaces.[40]
Tim Berners-Lee, the inventor of the World Wide Web, had been critical of Internet Explorer for its failure to
support SVG.[41]
• Opera (since 8.0) has support for the SVG 1.1 Tiny specification while Opera 9 includes SVG 1.1 Basic support
and some of SVG 1.1 Full. Opera 9.5 has partial SVG Tiny 1.2 support. It also supports SVGZ (compressed
SVG).
• Browsers based on the Gecko layout engine (such as Firefox, Flock, Camino, and SeaMonkey) all have had
incomplete support for the SVG 1.1 Full specification since 2005. The Mozilla site has an overview of the
modules which are supported in Firefox[42] and of the modules which are in progress in the development.[43]
Gecko 1.9, included in Firefox 3.0, adds support for more of the SVG specification (including filters).[44]
• Browsers based on WebKit (such as Apple's Safari, Google Chrome, and The Omni Group's OmniWeb) have had
incomplete support for the SVG 1.1 Full specification since 2006.[45]
• Amaya has partial SVG support.
• Native support became partially available in Internet Explorer 9 (released in March 2011).[]
There are several advantages to native and full support: plugins are not needed, SVG can be freely mixed with other
content in a single document, and rendering and scripting become considerably more reliable.[citation needed]
152
Scalable Vector Graphics
Compatibility
Internet Explorer, up to and including IE8, was the only major browser not to provide native SVG support. IE8 and
older require a plug-in to render SVG content. There are a number of plug-ins available to assist, including:
• Ample SDK Open-Source JavaScript GUI Framework provides partial support for SVG 1.1, SMIL, DOM and
style scripting in Internet Explorer (5.5 - 8.0) too. It is not dependent on any plugins and relies on presence of
alternative Vector Graphics format VML in Internet Explorer.
• Batik, a widely deployed Java plugin[46]
• Google Chrome Frame from Google can support all web elements supported by WebKit, including SVG 1.0 and
partially SVG 1.1.
• GPAC, targets SVGT 1.2[47]
• Adobe SVG Viewer from Adobe Systems plugin supports most of SVG 1.0/1.1. Zooming and panning of the
image are also supported to enable viewing of any area of the SVG lying outside the visible area of its containing
window, but scrolling is not supported. Adobe SVG Viewer is available for download from Adobe Systems free
of charge.[48] However, on 1 January 2009, Adobe Systems discontinued support for Adobe SVG Viewer.[]
• Corel SVG Viewer[49] (discontinued)
• Raphaël is another JavaScript library that takes advantage of the intersection between VML's and SVG's features
to create vector graphics and animate them.
• Renesis Player for Internet Explorer from examotion GmbH, supports SVG 1.1 on IE 6 and 7 (discontinued)[50]
• SVG Web[] is a JavaScript library for Web developers, targeted at Internet Explorer and dependent on the
presence of an installed Adobe Flash plugin on the client machine. SVG Web provides partial support for SVG
1.1, SVG Animation (SMIL), Fonts, Video and Audio, DOM and style scripting.[51]
On 5 January 2010, a senior manager of the Internet Explorer team at Microsoft announced on his official blog that
Microsoft had just requested to join the SVG Working Group of the W3C in order to "take part in ensuring future
versions of the SVG spec will meet the needs of developers and end users," although no plans for SVG support in
Internet Explorer were mentioned at that time.[52] Internet Explorer 9 beta supported a basic SVG feature set based
on the SVG 1.1 W3C recommendation. Functionality has been implemented for most of the SVG document
structure, interactivity through scripting and styling inline and through CSS. The presentation elements, attributes
and DOM interfaces that have been implemented include basic shapes, colors, filling, gradients, patterns, paths and
text.[]
Software and support in applications
SVG images can be produced by the use of a vector graphics editor, such as Inkscape, Adobe Illustrator, or
CorelDRAW, and rendered to common raster image formats such as PNG using the same software.
Software can be programmed to render SVG images by using a library such as librsvg or Batik. SVG images can
also be rendered to any desired popular image format by using the free software command-line utility ImageMagick.
Web browsers which can display SVG images on web pages include Firefox, Internet Explorer (IE 9+), Opera,
Safari and Google Chrome.
SVG on the desktop has also become common. The GNOME project has supported and extensively used SVG icons
since 2000.
Other uses for SVG include embedding for use in word processing (e.g. with LibreOffice) and desktop publishing
(e.g., Scribus), plotting graphs (e.g., gnuplot), and importing paths (e.g., for use in GIMP or Blender).
153
Scalable Vector Graphics
Online SVG converters
This is an incomplete list of web applications that can convert SVG files to raster image formats (this process is
known as rasterization), or raster images to SVG (this process is known as image tracing or vectorization) - without
the need of installing a desktop software or browser plug-in.
SVG to raster images only
• FileFormat.info [53] - Converts SVG to PNG, JPEG, TIFF. Output resolution can be specified. No batch
processing. Upload limit: 5MB.
• SVGConv [54] - Converts SVG to JPEG, PNG, GIF, BMP, TGA, TIFF, PDF, PS, EPS. Allows the user to
customize the output (like image size, background color) and has batch processing features (converting multiple
files in a single step). Upload limit: 10MB
Raster images to SVG only
• Mobilefish [55] - Converts BMP, JPEG, GIF, PNG to SVG. No batch processing. Upload limit: 100KB
• VectorMagic [56] - Converts JPEG,GIF, PNG to vector formats like SVG, EPS, PS, PDF. No batch processing.
Both directions
• OnlineConvert [57] - Converts to/from BMP, EPS, GIF, HDR, ICO, JPEG, PNG, SVG, TGA, TIFF, WBMP,
WebP. No batch processing. The output (e. g. image size) is customizable.
Mobile support
SVG 1.1
Most modern smart phones have support for SVG 1.1.[58]
SVG Tiny Support
SVG Tiny (SVGT) 1.1 and 1.2 are mobile profiles for SVG. SVGT 1.2 includes some features not found in SVG 1.1,
including non-scaling strokes, which are supported by some SVG 1.1 implementations, such as Opera, Firefox and
WebKit. As shared code bases between desktop and mobile browsers increased, the use of SVG 1.1 over SVGT 1.2
also increased.
History of SVG mobile support
Support for SVG may be limited to SVGT on older or more limited smart phones, or may be primarily limited by
their respective operating system. Adobe Flash Lite has optionally supported SVG Tiny since version 1.1. At the
SVG Open 2005 conference, Sun demonstrated a mobile implementation of SVG Tiny 1.1 for the Connected
Limited Device Configuration (CLDC) platform.[59]
Mobiles that use Opera Mobile, as well as the iPhone's built in browser, also include SVG support. However, even
though it used the WebKit engine, the Android built-in browser did not support SVG prior to v3.0 (Honeycomb).[60]
Prior to v3.0, Firefox Mobile 4.0b2 (beta) for Android was the first browser running under Android to support SVG
by default.[61]
The level of SVG Tiny support available varies from mobile to mobile, depending on the SVG engine installed.
Many newer mobile products support additional features beyond SVG Tiny 1.1, like gradient and opacity; this is
sometimes referred as "SVGT 1.1+", though there is no such standard.
154
Scalable Vector Graphics
Rim's BlackBerry has built-in support for SVG Tiny 1.1 since version 5.0.[62] Support continues for WebKit-based
BlackBerry Torch browser in OS 6 and 7.[63]
Nokia's S60 platform has built-in support for SVG. For example, icons are generally rendered using the platform's
SVG engine. Nokia has also led the JSR 226: Scalable 2D Vector Graphics API expert group that defines Java ME
API for SVG presentation and manipulation. This API has been implemented in S60 Platform 3rd Edition Feature
Pack 1 and onward.[64] Some Series 40 phones also support SVG (such as Nokia 6280).
Most Sony Ericsson phones beginning with K700 (by release date) support SVG Tiny 1.1. Phones beginning with
K750 also support such features as opacity and gradients. Phones with Sony Ericsson Java Platform-8 have support
for JSR 226.
Windows Phone has supported SVG since version 7.5
SVG is also supported on various mobile devices from Motorola, Samsung, LG, and Siemens
mobile/BenQ-Siemens. eSVG, an SVG rendering library mainly written for embedded devices, is available on some
mobile platforms.[65][66]
Hardware rendering
Implementations of SVG that uses the OpenVG API will be hardware accelerated on devices which have hardware
acceleration of OpenVG. Examples include Unix-like operating systems with Gallium3D based graphics drivers and
several GPUs intended for handheld devices (see OpenVG).
References
[3] http:/ / www. w3. org/ Graphics/ SVG/
[7] http:/ / en. wikipedia. org/ w/ index. php?title=Scalable_Vector_Graphics& action=edit
[10] See http:/ / www. w3. org/ TR/ SVG11/ conform. html#ConformingSVGViewers which states, "SVG implementations must correctly
support gzip-encoded [RFC1952] and deflate-encoded [RFC1951] data streams, for any content type (including SVG, script files, images)."
[12] For example, http:/ / dev. w3. org/ SVG/ profiles/ 1. 1F2/ test/ harness/ htmlObject/ conform-viewers-01-t. html
[16] http:/ / www. w3. org/ TR/ 2011/ REC-SVG11-20110816/
[17] w3.org, SVG roadmap (http:/ / www. w3. org/ Graphics/ SVG/ WG/ wiki/ Roadmap)
[53] FileFormat.info - SVG to raster image conversion (http:/ / www. fileformat. info/ convert/ image/ svg2raster. htm)
[54] SVGConv - The free online SVG converter (http:/ / svgconv. blasiussecundus. me/ )
[55] Online image to SVG converter (http:/ / www. mobilefish. com/ services/ image2svg/ image2svg. php)
[56] Precision Bitmap To Vector Conversion Online (http:/ / vectormagic. com/ home)
[57] - Online image converter (http:/ / image. online-convert. com/ )
External links
• W3C SVG page (http://www.w3.org/Graphics/SVG/) specifications, list of implementations
• W3C SVG primer (http://www.w3.org/Graphics/SVG/IG/resources/svgprimer.html) W3C Primer (draft)
under auspices of SVG Interest Group
• Army Civilian Employment (http://wafo.cpol.army.mil/employment/) An example of an SVG website
delivered as HTML with a non-standard <embed> tag. Works in Firefox, Chrome, Opera, Safari, IE7 w/Adobe
and IE8 w/Adobe.
• Army Civilian Service (http://wafo.cpol.army.mil/issue/) An example of an SVG website delivered as SVG.
Works in Firefox, Chrome, Opera, Safari, IE9, IE8 w/Adobe and IE7 w/Adobe.
• Scalable Vector Graphics (http://www.dmoz.org/Computers/Data_Formats/Graphics/Vector/SVG/) at the
Open Directory Project
• Compatibility tables for features in HTML5, CSS3, SVG and other upcoming web technologies (http://caniuse.
com/)
155
Scalable Vector Graphics
156
• SVG examples (http://srufaculty.sru.edu/david.dailey/svg/) Many examples of SVG animation, Filters and
Tiling.
• SVG Elves (http://www.svgelves.com/) Tutorials and code snippets shared by the SVG community.
• Fully Scalable Website (http://vectorweb.cwsurf.de/) Html example, Contains only vector objects, No nedd
html5, Without any plugin, Cross Browser Compatibility: works in Firefox 3.0+, Safari 3.0+, Chrome 5.0+, Opera
9.5+ and Internet Explorer 6.0+.
Web browser
Usage share of web browsers according to
StatCounter.
Internet
An Opte Project visualization of routing paths through a portion of the Internet.
Internet portal
A web browser (commonly referred to as a browser) is a software application for retrieving, presenting and
traversing information resources on the World Wide Web. An information resource is identified by a Uniform
Resource Identifier (URI) and may be a web page, image, video or other piece of content.[1] Hyperlinks present in
resources enable users easily to navigate their browsers to related resources. A web browser can also be defined as an
application software or program designed to enable users to access, retrieve and view documents and other resources
on the Internet.
Although browsers are primarily intended to use the World Wide Web, they can also be used to access information
provided by web servers in private networks or files in file systems. The major web browsers are Chrome, Firefox,
Internet Explorer, Opera, and Safari.[2]
Web browser
157
History
The first web browser was invented in 1990 by Sir Tim Berners-Lee. It was called WorldWideWeb (no spaces) and
was later renamed Nexus.[3]
Marc Andreessen inventor of
Netscape
In 1993, browser software was further innovated by Marc Andreessen with the
release of Mosaic (later Netscape), "the world's first popular browser",[] which
made the World Wide Web system easy to use and more accessible to the
average person. Andreesen's browser sparked the internet boom of the 1990s.[]
The introduction of Mosaic in 1993 – one of the first graphical web browsers –
led to an explosion in web use. Andreessen, the leader of the Mosaic team at
NCSA, soon started his own company, named Netscape, and released the
Mosaic-influenced Netscape Navigator in 1994, which quickly became the
world's most popular browser, accounting for 90% of all web use at its peak (see
usage share of web browsers).
Microsoft responded with its Internet Explorer in 1995, also heavily influenced
by Mosaic, initiating the industry's first browser war. Bundled with Windows,
Internet Explorer gained dominance in the web browser market; Internet Explorer usage share peaked at over 95%
by 2002.[]
Opera debuted in 1996; although it has never achieved widespread use,
having less than 2% browser usage share as of February 2012
according to Net Applications.[5] Its Opera-mini version has an
additive share, in April 2011 amounting to 1.1% of overall browser
use, but focused on the fast-growing mobile phone web browser
market, being preinstalled on over 40 million phones. It is also
available on several other embedded systems, including Nintendo's Wii
video game console.
In 1998, Netscape launched what was to become the Mozilla
WorldWideWeb for NeXT, released in 1991, was
Foundation in an attempt to produce a competitive browser using the
[4]
the first web browser.
open source software model. That browser would eventually evolve
into Firefox, which developed a respectable following while still in the
beta stage of development; shortly after the release of Firefox 1.0 in late 2004, Firefox (all versions) accounted for
7% of browser use.[] As of August 2011, Firefox has a 28% usage share.[5]
Apple's Safari had its first beta release in January 2003; as of April 2011, it had a dominant share of Apple-based
web browsing, accounting for just over 7% of the entire browser market.[5]
The most recent major entrant to the browser market is Chrome, first released in September 2008. Chrome's take-up
has increased significantly year on year, by doubling its usage share from 8% to 16% by August 2011. This increase
seems largely to be at the expense of Internet Explorer, whose share has tended to decrease from month to month.[6]
In December 2011, Chrome overtook Internet Explorer 8 as the most widely used web browser but still has lower
usage that all versions of Internet Explorer combined.[7]
Web browser
Function
The primary purpose of a web browser is to bring information resources to the user ("retrieval" or "fetching"), allow
them to view the information ("display", "rendering"), and then access other information ("navigation", "following
links").
This process begins when the user inputs a Uniform Resource Locator (URL), for example http://en.wikipedia.org/,
into the browser. The prefix of the URL, the Uniform Resource Identifier or URI, determines how the URL will be
interpreted. The most commonly used kind of URI starts with http: and identifies a resource to be Retrieved over the
Hypertext Transfer Protocol (HTTP).[8] Many browsers also support a variety of other prefixes, such as https: for
HTTPS, ftp: for the File Transfer Protocol, and file: for local files. Prefixes that the web browser cannot directly
handle are often handed off to another application entirely. For example, mailto: URIs are usually passed to the
user's default e-mail application, and news: URIs are passed to the user's default newsgroup reader.
In the case of http, https, file, and others, once the resource has been Retrieved the web browser will display it.
HTML and associated content (image files, formatting information such as CSS, etc.) is passed to the browser's
layout engine to be transformed from markup to an interactive document, a process known as "rendering". Aside
from HTML, web browsers can generally display any kind of content that can be part of a web page. Most browsers
can display images, audio, video, and XML files, and often have plug-ins to support Flash applications and Java
applets. Upon encountering a file of an unsupported type or a file that is set up to be downloaded rather than
displayed, the browser prompts the user to save the file to disk.
Information resources may contain hyperlinks to other information resources. Each link contains the URI of a
resource to go to. When a link is clicked, the browser navigates to the resource indicated by the link's target URI, and
the process of bringing content to the user begins again.
Features
Available web browsers range in features from minimal, text-based user interfaces with bare-bones support for
HTML to rich user interfaces supporting a wide variety of file formats and protocols. Browsers which include
additional components to support e-mail, Usenet news, and Internet Relay Chat (IRC), are sometimes referred to as
"Internet suites" rather than merely "web browsers".[9][10][11]
All major web browsers allow the user to open multiple information resources at the same time, either in different
browser windows or in different tabs of the same window. Major browsers also include pop-up blockers to prevent
unwanted windows from "popping up" without the user's consent.[12][13][14][15]
Most web browsers can display a list of web pages that the user has bookmarked so that the user can quickly return
to them. Bookmarks are also called "Favorites" in Internet Explorer. In addition, all major web browsers have some
form of built-in web feed aggregator. In Firefox, web feeds are formatted as "live bookmarks" and behave like a
folder of bookmarks corresponding to recent entries in the feed.[16] In Opera, a more traditional feed reader is
included which stores and displays the contents of the feed.[17]
Furthermore, most browsers can be extended via plug-ins, downloadable components that provide additional
features.
158
Web browser
159
User interface
Most major web browsers have these user interface elements in
common:[18]
• Back and forward buttons to go back to the previous resource and
forward respectively.
• A refresh or reload button to reload the current resource.
• A stop button to cancel loading the resource. In some browsers, the
stop button is merged with the reload button.
• A home button to return to the user's home page.
• An address bar to input the Uniform Resource Identifier (URI) of
the desired resource and display it.
Some home media devices now include web
browsers, like this LG Smart TV. The browser is
controlled using an on-screen keyboard and LG's
"Magic Motion" remote.
• A search bar to input terms into a search engine. In some browsers,
the search bar is merged with the address bar.
• A status bar to display progress in loading the resource and also the URI of links when the cursor hovers over
them, and page zooming capability.
Major browsers also possess incremental find features to search within a web page.
Privacy and security
Most browsers support HTTP Secure and offer quick and easy ways to delete the web cache, cookies, and browsing
history. For a comparison of the current security vulnerabilities of browsers, see comparison of web browsers.
Standards support
Early web browsers supported only a very simple version of HTML. The rapid development of proprietary web
browsers led to the development of non-standard dialects of HTML, leading to problems with interoperability.
Modern web browsers support a combination of standards-based and de facto HTML and XHTML, which should be
rendered in the same way by all browsers.
Extensibility
A browser extension is a computer program that extends the functionality of a web browser. Every major web
browser supports the development of browser extensions.
References
[5] http:/ / gs. statcounter. com/ #browser-ww-monthly-201108-201108-bar
External links
• Architecture of the World Wide Web, Volume One (http://www.w3.org/TR/webarch/)
• WorldWideWeb: Proposal for a HyperText Project (http://www.w3.org/Proposal.html)
• How Browsers Work: Behind the scenes of modern web browsers (http://www.html5rocks.com/en/tutorials/
internals/howbrowserswork/)
• Existing browsers (http://www.browserchoice.eu/BrowserChoice/browserchoice_en.htm)
160
Web Browsers
Firefox
Mozilla Firefox
Firefox 19.0 on Windows 7
Developer(s)
Mozilla Foundation
Mozilla Corporation
Initial release
September 23, 2002
Stable release
19.0.2 [ edit
Preview release
20.0b4
[3]
[1]]
(March 7, 2013)
[2]
[4]
(March 7, 2013)
Development status Active
[5]
C/C++, JavaScript,
Operating system
Microsoft Windows
OS X
Linux
Android
FreeBSD
Engine
Gecko
Size
[]
20 MB: Windows
[]
37 MB: OS X
[]
22-24 MB: Linux
[]
19 MB: Android
[]
94 MB: source code
Available in
89 locales (79 languages)
Type
Web browser
License
MPL
Website
www.mozilla.org/firefox
[6][7]
Written in
CSS,
[]
[]
[8]
XUL, XBL
Firefox
161
Contents
•
Firefox 5 and higher
•
Firefox 4
•
Firefox 3, 3.5, 3.6
•
Firefox 2
•
Firefox 1.5
•
Firefox 1
•
History of Firefox
•
Features of Firefox
•
Gecko
•
Add-ons
•
Extensions
•
Firefox market adoption
Origins and lineage
•
•
•
Netscape Navigator
Mozilla Foundation
Mozilla Suite
Category
Mozilla Firefox is a free and open source[] web browser developed for Microsoft Windows, OS X and Linux
(including Android) coordinated by Mozilla Foundation and its subsidiary, the Mozilla Corporation. Firefox uses the
Gecko layout engine to render web pages, which implements current and anticipated web standards.[9]
As of October 2012[10], Firefox has approximately 20% to 24% of worldwide usage share of web browsers, making
it the third most used web browser, according to different sources.[][11][][] According to Mozilla, Firefox counts over
450 million users around the world.[] The browser has had particular success in Indonesia, Germany, Poland and
Estonia, where it is the most popular browser with 65%,[] 47%[12] 47%[13] and 35%[14] of the market share,
respectively.
History
The Firefox project began as an experimental branch of the Mozilla project by Dave Hyatt, Joe Hewitt and Blake
Ross. They believed the commercial requirements of Netscape's sponsorship and developer-driven feature creep
compromised the utility of the Mozilla browser.[15] To combat what they saw as the Mozilla Suite's software bloat,
they created a stand-alone browser, with which they intended to replace the Mozilla Suite. On April 3, 2003, the
Mozilla Organization announced that they planned to change their focus from the Mozilla Suite to Firefox and
Thunderbird.[16]
Firefox
162
Phoenix 0.1 screenshot
though it is often abbreviated as FF.[20]
released on November 9, 2004.
The Firefox project has undergone several name changes. Originally
titled Phoenix, it was renamed because of trademark problems with
Phoenix Technologies. The replacement name, Firebird, provoked an
intense response from the Firebird free database software
project.[17][18] In response, the Mozilla Foundation stated that the
browser should always bear the name Mozilla Firebird to avoid
confusion with the database software. After further pressure from the
database server's development community, on February 9, 2004,
Mozilla Firebird became Mozilla Firefox,[19] often referred to as
simply Firefox. Mozilla prefers that Firefox be abbreviated as Fx or fx,
The Firefox project went through many versions before version 1.0 was
On October 4, 2012, Mozilla released a preview of the Metro interface version of Firefox, included in the Nightly 18
build, to be used in Windows 8. The nightly build was only available to those running the 64-bit RTM release of
Windows 8. [21]
Features
Features include tabbed browsing, spell checking, incremental find, live bookmarking, smart bookmarks, a download
manager, private browsing, location-aware browsing (also known as "geolocation") based on a Google service[22]
and an integrated search system that uses Google by default in most localizations. Functions can be added through
extensions, created by third-party developers,[] of which there is a wide selection, a feature that has attracted many of
Firefox's users.
Additionally, Firefox provides an environment for web developers in which they can use built-in tools, such as the
Error Console or the DOM Inspector, or extensions, such as Firebug.
Standards
Firefox implements many web standards, including
HTML4 (partial HTML5), XML, XHTML,
MathML, SVG 1.1 (partial),[23] CSS (with
extensions),[24] ECMAScript (JavaScript), DOM,
XSLT, XPath, and APNG (Animated PNG) images
with alpha transparency.[25] Firefox also
implements standards proposals created by the
WHATWG such as client-side storage,[26][27] and
canvas element.[28]
Firefox has passed the Acid2 standards-compliance
test since version 3.0.[29] Mozilla had originally
stated that they did not intend for Firefox to pass
The result of the Acid3 test on Firefox 17.
the Acid3 test fully because they believed that the
SVG fonts part of the test had become outdated and irrelevant, due to WOFF being agreed upon as a standard by all
major browser makers.[30] Because the SVG font tests were removed from the Acid3 test in September 2011, Firefox
4 and greater scored 100/100.[31][]
Firefox also implements[32] a proprietary protocol[33] from Google called "Safe Browsing", used to exchange data
related with phishing and malware protection.
Firefox
Security
Firefox uses a sandbox security model,[34] and limits scripts from accessing data from other web sites based on the
same origin policy.[35] It uses SSL/TLS to protect communications with web servers using strong cryptography when
using the HTTPS protocol.[36] It also provides support for web applications to use smartcards for authentication
purposes.[37]
The Mozilla Foundation offers a "bug bounty" (up to 3000 USD cash reward and a Mozilla T-shirt) to researchers
who discover severe security holes in Firefox.[38] Official guidelines for handling security vulnerabilities discourage
early disclosure of vulnerabilities so as not to give potential attackers an advantage in creating exploits.[39]
Because Firefox generally has fewer publicly known unpatched security vulnerabilities than Internet Explorer (see
Comparison of web browsers), improved security is often cited as a reason to switch from Internet Explorer to
Firefox.[][40][41][42] The Washington Post reports that exploit code for known critical unpatched security
vulnerabilities in Internet Explorer was available for 284 days in 2006. In comparison, exploit code for known,
critical security vulnerabilities in Firefox was available for 9 days before Mozilla issued a patch to remedy the
problem.[43]
A 2006 Symantec study showed that, although Firefox had surpassed other browsers in the number of
vendor-confirmed vulnerabilities that year through September, these vulnerabilities were patched far more quickly
than those found in other browsers – Firefox's vulnerabilities were fixed on average one day after the exploit code
was made available, as compared to nine days for Internet Explorer.[44] Symantec later clarified their statement,
saying that Firefox still had fewer security vulnerabilities than Internet Explorer, as counted by security
researchers.[45]
In 2010 a study of the National Institute of Standards and Technology (NIST) based on data compiled from the
National Vulnerability Database (NVD) Firefox was listed as the 5th most vulnerable desktop software, Internet
Explorer ranked 8th, and Google Chrome as 1st.[46]
InfoWorld has cited security experts saying that as Firefox becomes more popular, more vulnerabilities will be
found,[47] a claim that Mitchell Baker, president of the Mozilla Foundation, has denied: "There is this idea that
market share alone will make you have more vulnerabilities. It is not relational at all."[]
In October 2009, Microsoft's security engineers acknowledged that Firefox was vulnerable since February of that
year due to a .NET Framework 3.5 SP1 Windows update that silently installed a buggy 'Windows Presentation
Foundation' plug-in into Firefox.[48] This vulnerability has since been patched by Microsoft.[49]
As of February 11, 2011, Firefox 3.6 had no known unpatched security vulnerabilities according to Secunia.[50]
Internet Explorer 8 had five unpatched security vulnerabilities, the worst being rated "Less Critical" by Secunia.[51]
Mozilla claims that all patched vulnerabilities of Mozilla products are publicly listed.[52]
Telemetry
When Firefox is upgraded to version 7.0, an information bar will appear asking users whether they would like to
send performance statistics (also known as “telemetry”) to Mozilla. According to Mozilla's privacy policy,[53] these
statistics are stored only in aggregate format, and the only personally identifiable information transmitted is the user's
IP address.
Localizations
Firefox is a heavily localized web browser. The first official release in November 2004 was available in 24 different
languages and for 28 locales, including British English/American English, European Spanish/Argentine Spanish and
Chinese in Traditional Chinese characters/Simplified Chinese characters.[54] Currently supported versions 17.0.3esr
and 19.0 are available in 89 locales (79 languages).[]
163
Firefox
164
Platform availability
Firefox for desktop is available for Windows, OS X and Linux. Firefox for mobile is available for Android.
Firefox 19 on Windows 7
Firefox 18 on Ubuntu 12.10
Firefox 19 on OS X 10.8
Firefox 14 on Android
Licensing
Firefox source code is free software, with most of it being released under the Mozilla Public License (MPL).[] This
license permits anyone to view, modify, and/or redistribute the source code, and several publicly released
applications have been built on it; for example, Netscape, Flock, Miro, Iceweasel, and Songbird make use of code
from Firefox.
In the past, Firefox was licensed solely under the MPL,[] which the FSF (Free Software Foundation) criticized for
being weak copyleft; the license permitted, in limited ways, proprietary derivative works. Additionally, code only
licensed under the MPL could not legally be linked with code under the GPL.[55][56] To address these concerns,
Mozilla re-licensed most of Firefox under the tri-license scheme of MPL, GPL, or LGPL. Since the re-licensing,
developers were free to choose the license under which they received most of the code, to suit their intended use:
GPL or LGPL linking and derivative works when one of those licenses is chosen, or MPL use (including the
possibility of proprietary derivative works) if they chose the MPL.[] However, on January 3, 2012, Mozilla released
the GPL-compatible MPL 2.0,[57] and with the release of Firefox 13 on June 5, 2012, Mozilla used it to replace the
tri-licensing scheme.[58]
The crash reporting service was initially closed source, but switched with version 3 from a program called Talkback
to the open source Breakpad & Socorro.
Firefox
Trademark and logo
The name "Mozilla Firefox" is a registered trademark; along with the official Firefox logo, it may only be used under
certain terms and conditions. Anyone may redistribute the official binaries in unmodified form and use the Firefox
name and branding for such distribution, but restrictions are placed on distributions which modify the underlying
source code.[59] The name "Firefox" derives from a nickname of the red panda.[60]
Mozilla has placed the Firefox logo files under open-source licenses,[61][62] but its trademark guidelines do not allow
displaying altered[] or similar logos[63] in contexts where trademark law applies.
There has been some controversy over the Mozilla Foundation's intentions in
stopping certain open source distributions from using the "Firefox" trademark.[]
Mozilla Foundation Chairperson Mitchell Baker explained in an interview in 2007
that distributions could freely use the Firefox trademark if they did not modify
source-code, and that the Mozilla Foundation's only concern was with users
getting a consistent experience when they used "Firefox".[64]
To allow distributions of the code without using the official branding, the Firefox
source code contains a "branding switch". This switch allows the code to be
Logo used for Iceweasel
compiled without the official logo and name, for example to produce a derivative
work unencumbered by restrictions on the Firefox trademark (this is also often
used for alphas of future Firefox versions). In the unbranded compilation the trademarked logo and name are
replaced with a freely distributable generic globe logo and the name of the release series from which the modified
version was derived.
Distributing modified versions of Firefox under the "Firefox" name requires explicit approval from Mozilla for the
changes made to the underlying code, and requires the use of all of the official branding. For example, it is not
permissible to use the name "Firefox" without also using the official logo. When the Debian project decided to stop
using the official Firefox logo in 2006 (because Mozilla's copyright restrictions at the time were incompatible with
Debian's guidelines), they were told by a representative of the Mozilla Foundation that this was not acceptable, and
were asked either to comply with the published trademark guidelines or cease using the "Firefox" name in their
distribution.[65] Ultimately, Debian switched to branding their modified version of Firefox "Iceweasel", along with
other Mozilla software.
Branding and visual identity
Early Firebird and Phoenix releases of Firefox were considered to have had reasonable visual designs, but were not
up to the same standards as many professionally released software packages. In October 2003, professional interface
designer Steven Garrity wrote an article covering everything he considered to be wrong with Mozilla's visual
identity.[] The page received a great deal of attention; the majority of criticism leveled at the article fell along the
lines of "where's the patch?"[citation needed]
165
Firefox
166
Shortly afterwards, Garrity was invited by the Mozilla Foundation to head up the
new visual identity team. The release of Firefox 0.8 in February 2004 saw the
introduction of the new branding efforts, including new icon designs by
silverorange, a group of web developers with a long-standing relationship with
Mozilla, with final renderings by Jon Hicks, who had previously worked on
Camino.[][] The logo was later revised and updated, fixing several flaws found
when it was enlarged.[]
The animal shown in the logo is a stylized fox, although "firefox" is considered to
be a common name for the red panda. The panda, according to Hicks, "didn't really
conjure up the right imagery" and wasn't widely known.[] The logo was chosen to
make an impression while not shouting out with overdone artwork. It had to stand
out in the user's mind, be easy for others to remember, and stand out without
causing too much distraction when seen among other icons.
Blue globe artwork is distributed
with Firefox source code, and is
explicitly not protected as a
[66]
trademark
The Firefox icon is a trademark used to designate the official Mozilla build of the Firefox software and builds of
official distribution partners.[67] For this reason, Debian and other software distributors who distribute patched or
modified versions of Firefox do not use the icon.
Logo history :
Logo of "Phoenix" and "Firebird" before
being renamed as Firefox
Logo used for Firefox 3.5 Current
Other logos are also used for specific versions of the software:
The current Aurora logo
(alpha/pre-beta)
The current "nightly" logo
(experimental/pre-alpha)
Minefield logo (former name for
"nightly" Firefox)
Firefox
167
Promotion
The rapid adoption of Firefox, 100 million downloads in its first year of availability,[68] followed a series of
aggressive marketing campaigns starting in 2004 with a series of events Blake Ross and Asa Dotzler called
"marketing weeks".[69]
On September 12, 2004,[70] a marketing portal dubbed "Spread Firefox" (SFX) debuted along with the Firefox
Preview Release, creating a centralized space for the discussion of various marketing techniques. A two-page ad in
the December 16 edition of the New York Times, placed by Mozilla Foundation in coordination with Spread Firefox,
featured the names of the thousands of people worldwide who contributed to the Mozilla Foundation's fundraising
campaign to support the launch of the Firefox 1.0 web browser.[] SFX portal enhanced the "Get Firefox" button
program, giving users "referrer points" as an incentive. The site lists the top 250 referrers. From time to time, the
SFX team or SFX members launch marketing events organized at the Spread Firefox website. As a part of the
Spread Firefox campaign, there was an attempt to break the world download record with the release of Firefox 3.[]
This resulted in an official certified Guinness world record, with over eight million downloads.[71]
The "World Firefox Day" campaign started on July 15, 2006,[72] the third anniversary of the founding of the Mozilla
Foundation,[73] and ran until September 15, 2006.[74] Participants registered themselves and a friend on the website
for nomination to have their names displayed on the Firefox Friends Wall, a digital wall that will be displayed at the
headquarters of the Mozilla Foundation.
In December 2007, Mozilla launched Live Chat [75], a service allowing users to seek technical support from
volunteers. Because Live chat is kept running by volunteers, it is only available when they are online.[76]
On February 21, 2008 in honor of reaching 500 million downloads, the Firefox community celebrated by visiting
FreeRice to earn 500 million grains of rice.[77]
Some of Firefox's contributors made a crop circle of the Firefox logo in an oat field near Amity, Oregon, near the
intersection of Lafayette Highway and Walnut Hill Road.[78]
In February 2011, Mozilla announced that it would be retiring Spread Firefox (SFX). Three months later, in May
2011, Mozilla officially closed Spread Firefox. Mozilla wrote that "there are currently plans to create a new
iteration of this website [Spread Firefox] at a later date."[79]
Reception
Most used web browser by country as of
February 2013 according to StatCounter. Google
Chrome Internet Explorer Firefox Opera (web
browser)Opera Safari
Firefox
168
Market Share Overview
[81]
According to StatCounter data February 2013
Browser
% of Fx
% of Total
Firefox 1
0.05%
0.01%
Firefox 1.5
0.05%
0.01%
Firefox 2
0.19%
0.04%
Firefox 3
0.56%
0.12%
Firefox 3.5
0.42%
0.09%
Firefox 3.6
2.48%
0.53%
Firefox 4
0.80%
0.17%
Firefox 5
0.52%
0.11%
Firefox 6
0.47%
0.10%
Firefox 7
0.47%
0.10%
Firefox 8
0.66%
0.14%
Firefox 9
0.80%
0.17%
Firefox 10
Firefox 10 ESR
1.45%
0.31%
Firefox 11
1.17%
0.25%
Firefox 12
2.72%
0.58%
Firefox 13
1.41%
0.30%
Firefox 14
2.01%
0.43%
Firefox 15
1.87%
0.40%
Firefox 16
3.28%
0.70%
Firefox 17
Firefox 17 ESR
2.72%
0.59%
Firefox 18
59.70%
12.74%
Firefox 19
15.56%
3.32%
Firefox 20
0.52%
0.11%
Firefox 21
0.09%
0.02%
100%
21.34%
[82]
All variants
Firefox
169
Distinctions
2004
• Forbes.com calls Firefox "the best browser" in a commentary piece.[1]
2005
•
•
•
•
•
•
•
•
•
PC World names Firefox "Product of the Year" in 2005 on their "100 Best Products of 2005" list.[2]
PC Pro Real World Award (Mozilla Foundation), December 2005[3]
CNET Editors' Choice, November 2005[4]
UK Usability Professionals' Association Best Software Award, November 2005[5]
Macworld Editor's Choice with a 4.5 Mice Rating, November 2005[6]
Softpedia User’s Choice Award, September 2005[7]
TUX 2005 Readers' Choice Award, September 2005[8]
Forbes Favorite of Best of the Web picks, April 2005[9]
PC Magazine Editor’s Choice Award, May 2005[10]
2006
• After the release of Firefox 2 and Internet Explorer 7, PC World reviewed both and declared that Firefox was the
better browser.[]
•
•
•
•
PC Magazine Editors' Choice, October 2006[11]
CNET Editors' Choice, October 2006[12]
PC World's 100 Best Products of 2006, July 2006[13]
PC Magazine Software and Development Tools Award, January 2006[14]
2007
• Which? Magazine names Firefox its "Best Buy" web browser.[15]
• Webware 100 winner, June 2007[16]
• PC World 100 Best Products of 2007, May 2007[17]
2008
• CNET compares Safari, Chrome, Firefox, and Internet Explorer in their "Battle of the Browsers" in terms of
performance, security, and features, where Firefox is selected as a favorite.[18]
• PC Magazine Editors' Choice, June 2008[19]
• PC World 100 Best Products of 2008, May 2008[20]
• Webware 100 winner, April 2008[21]
2009
• Webware 100 winner, May 2009[22]
• LinuxQuestions.org Members Choice Awards, February 2009[23]
2010
• CNET Top 10 Mac Downloads, December 2010[24]
2011
• Tom's Hardware WBGP 7, September 2011[25]
• CNET Editors' Choice, March 2011[26]
2012
• In February, Tom's Hardware compared Safari 5.1.2, Google Chrome 17, Mozilla Firefox 10, Opera 11.61 and
Microsoft Internet Explorer 9 on both Ubuntu 11.10 and Windows 7 (Internet Explorer and Safari excluded from
Ubuntu because of OS availability) in a "Web Browser Grand Prix". They concluded, that based on performance,
Chrome 17 was selected as their favorite on Ubuntu – but they also concluded that on Windows, Firefox 10 was
their favorite.[27]
Firefox
Performance
In December 2005, Internet Week ran an article in which many readers reported high memory usage in Firefox
1.5.[28] Mozilla developers said that the higher memory use of Firefox 1.5 was at least partially due to the new fast
backwards-and-forwards (FastBack) feature.[29] Other known causes of memory problems were malfunctioning
extensions such as Google Toolbar and some older versions of Adblock,[30] or plug-ins, such as older versions of
Adobe Acrobat Reader.[31] When PC Magazine compared memory usage of Firefox 2, Opera 9, and Internet
Explorer 7, they found that Firefox used approximately as much memory as the other two browsers.[32]
Softpedia noted that Firefox 1.5 took longer to start up than other browsers,[33] which was confirmed by further
speed tests.[] IE 6 launched more swiftly than Firefox 1.5 on Windows XP since many of its components were built
into the OS and loaded during system startup. As a workaround for the issue, a preloader application was created that
loaded components of Firefox on startup, similar to Internet Explorer.[34] A Windows Vista feature called
SuperFetch performs a similar task of preloading Firefox if it is used often enough.
Tests performed by PC World and Zimbra in 2006 indicated that Firefox 2 used less memory than Internet Explorer
7.[][35] Firefox 3 used less memory than Internet Explorer 7, Opera 9.50 Beta, Safari 3.1 Beta, and Firefox 2 in tests
performed by Mozilla, CyberNet, and The Browser World.[36][37][38] In mid 2009, Betanews benchmarked Firefox
3.5 and declared that it performed "nearly ten times better on XP than Microsoft Internet Explorer 7".[]
In January 2010, Lifehacker compared the performance of Firefox 3.5, Firefox 3.6, Google Chrome 4 (stable and
Dev versions), Safari 4, and Opera (10.1 stable and 10.5 pre-alpha versions). Lifehacker timed how long browsers
took to start and reach a page (both right after boot-up and after running at least once already), timed how long
browsers took to load nine tabs at once, tested JavaScript speeds using Mozilla's Dromaeo online suite (which
implements Apple's SunSpider and Google's V8 tests) and measured memory usage using Windows 7's process
manager. They concluded that Firefox 3.5 and 3.6 were the fifth and sixth fastest browsers respectively on startup,
3.5 was third and 3.6 was sixth fastest to load nine tabs at once, 3.5 was sixth and 3.6 was fifth fastest on the
JavaScript tests. They also concluded that Firefox 3.6 was the most efficient with memory usage followed by Firefox
3.5.[39]
In February 2012, Tom's Hardware performance tested Chrome 17, Firefox 10, Internet Explorer 9, Opera 11.61, and
Safari 5.1.2 on Windows 7. Tom's Hardware summarized their tests into four categories: Performance, Efficiency,
Reliability, and Conformance. In the performance category they tested HTML 5, Java, JavaScript, DOM, CSS 3,
Flash, Silverlight, and WebGL – they also tested start up time and page load time. The performance tests showed
that Firefox was either "acceptable" or "strong" in most categories, winning three categories (HTML5, HTML5
Hardware acceleration, and Java) only finishing "weak" in CSS performance. In the efficiency tests, Tom's Hardware
tested memory usage and management. In this category, it determined that Firefox was only "acceptable" at
performing light memory usage, while it was "strong" at performing heavy memory usage. In the reliability category,
Firefox performed a "strong" amount of proper page loads. In the final category, conformance, it was determined that
Firefox had "strong" conformance for JavaScript and HTML5. In conclusion, Tom's Hardware determined that
Firefox was the best browser for Windows 7 OS, but that it only narrowly beat out Google Chrome.[40]
170
Firefox
171
Market adoption
Downloads have continued at an increasing
rate since Firefox 1.0 was released in
November 2004, and as of July 31, 2009
Firefox has been downloaded over one
billion times.[41] This number does not
include downloads using software updates
or those from third-party websites.[42] They
do not represent a user count, as one
download may be installed on many
machines, one person may download the
software multiple times, or the software may
be obtained from a third party. According to
Mozilla, Firefox has more than 450 million
users as of October 2012 (http:/ / en.
wikipedia.
org/
w/
index.
[][43]
php?title=Firefox&action=edit).
Usage share of web browsers according to StatCounter.
In July 2010, all IBM employees (about
400,000) were asked to use Firefox as their
default browser.[44]
Firefox was the second-most used web
browser until December 2011, when Google
Chrome surpassed it.[45]
As of May 2012 (http:/ / en. wikipedia. org/
w/ index. php?title=Firefox& action=edit),
Firefox was the third most widely used
browser, with approximately 25% of
worldwide usage share of web browsers.[][][]
According to StatCounter, Firefox usage
peaked in November 2009 and usage share
remained stagnant until October 2010 when
it lost market share, a trend that continued
for over a year. Its first consistent gains in
usage share since September 2010 occurred
in February through May 2012 before
declining again in June and July.[]
Usage share of web browsers (November 2012 – StatCounter)
Firefox
172
Release history
Color
Red
Meaning
Former release; no longer supported
Yellow Former release; still supported
Green
Current supported release
Blue
Future release
Release history Version 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.0.8 1.51.5.0.12 2.02.0.0.20 3.03.0.19 3.53.5.19
3.63.6.28 4.04.0.1 5.05.0.1 6.06.0.2 7.07.0.1 8.08.0.1 9.09.0.1 10.010.0.1 10.0.2 10.0.3esr 10.0.4esr 10.0.5esr
10.0.6esr 10.0.7esr 10.0.8esr 10.0.9esr 10.0.10esr 10.0.11esr 10.0.12esr 11.012.013.013.0.1 14.014.0.1 15.015.0.1
16.016.0.1 16.0.2 17.017.0.1 17.0.2esr 17.0.3esr 17.0.4esr 18.018.0.1 18.0.2 19.019.0.1 19.0.2 Version Release date
2002-09-23 2002-10-01 2002-10-14 2002-10-19 2002-12-07 2003-05-17 2003-10-15 2004-02-09 2004-05-15
2004-11-09 2006-04-13 2005-11-29 2007-05-30 2006-10-24 2008-12-18 2008-06-17 2010-03-30 2009-06-30
2011-04-28 2010-01-21 2012-03-13 2011-03-22 2011-04-28 2011-06-21 2011-07-11 2011-08-16 2011-09-06
2011-09-27 2011-09-29 2011-11-08 2011-11-21 2011-12-20 2011-12-21 2012-01-31 2012-02-10 2012-02-16
2012-03-13 2012-04-24 2012-06-05 2012-07-17 2012-08-28 2012-10-09 2012-10-12 2012-10-26 2012-11-20
2013-01-08 2012-03-13 2012-04-24 2012-06-05 2012-06-15 2012-06-26 2012-07-17 2012-08-28 2012-09-06
2012-10-09 2012-10-11 2012-10-26 2012-11-20 2012-11-30 2013-01-08 2013-02-19 2013-03-07 2013-01-08
2013-01-18 2013-02-05 2013-02-19 2013-02-27 2013-03-07 Release date Gecko
version 1.2
• Web form auto-complete
• Sidebar is back
•
•
•
•
•
•
•
• Downloads Sidebar
• Bookmarks Sidebar
• History Sidebar
Extension management
Toolbar customization
Search bar
Improved preference defaults
Speed improvements
Ctrl+Mousewheel to resize fonts
Bug fixes[46]
•
•
•
•
•
•
•
Image Blocking
Pop-up Blocking Whitelist
Bookmarks Changes
Global Go Menu and Other Menu Changes
Tabbed Browsing Improvements
Size and Speed Improvements
Bug fixes[47]
1.3
•
•
•
•
•
Multiple homepages
Intellimouse 5-button support
Sidebar remembers its state across sessions
Download fixes
History improvements
Firefox
•
•
•
•
•
•
•
173
Accessibility improvements
Size and memory reduction
Performance improvements
Stability improvements
Better Windows appearance
Many more new themes
Many bug fixes[48]
1.5
•
•
•
•
•
•
•
•
•
Advanced preferences panel
Download/helper apps preferences panel
Cookie whitelisting
New password manager (all passwords now stored encrypted[49])
Web panels (like Mozilla's sidebar panels)
Alternate stylesheet support (through a status bar button)
Send Page, Send Link, and Send Image menu items
Autoscroll
Lots of bug fixes and other small improvements[50]
1.6 1.7
• Better Tabbed Browsing Controls
• Horde of bug fixes[51]
• Security fixes
• Bug fixes
• Stability fixes[52]
1.8
• Bug fixes
• Stability fixes
• Security fixes[53]
1.8.1
• Bug fixes
• Security fixes
• Stability fixes[54]
1.9
• Fixed several security problems.
• Fixed several stability issues.[55]
1.9.1
• Fixed several security issues
• Fixed several stability issues[56]
1.9.2
• Added Out-of-process plugins
• Fixed several security issues
• Fixed several stability issues[57][58]
2.0
• Fixed several security issues
• Fixed several stability issues[59]
Firefox
174
5.0
• Fixed an issue in Mac OS X 10.7 that could cause Firefox to crash[60]
• Fixed an issue caused by Apple's "Java for Mac OS X 10.6 Update 5" where the Java plugin would not be
loaded[61]
6.0
• Revoked the root certificate for DigiNotar due to fraudulent SSL certificate issuance[62]
• Removed trust exceptions for certificates issued by Staat der Nederlanden
• Resolved an issue with gov.uk websites[63]
7.0
• Fixed a rare issue where some users could find one or more of their add-ons hidden after a Firefox update[64]
8.0
• Fixed Mac OS X crash that occurred in certain instances when a Java Applet is loaded with Java SE 6 version
1.6.0_29 installed.
• Fixed Windows startup crash caused by RoboForm versions older than 7.6.2.[65]
9.0
• Fixed crash on Windows, Mac and Linux[66]
10.0
• Security fix.[67]
• Fixed Java applets that sometimes caused text input to become unresponsive.[68]
• Security fixes.[69]
• Fixed web workers running out of memory, affecting some add-ons used by organizations.[70]
• Fixed an issue in Firefox ESR 10.0.3 that caused the "Whats New" page to open after an update.
• Fixed extensions.checkCompatibility.* prefs not working in ESR releases.[71]
• Fixed the 10.0.5 Firefox top crash with signature [@ GLEngine@0x620cf ].[72]
• Security fixes.
• Stability fixes.
• Fixed some text editing inconsistencies.[73]
• Fixed contenteditable breaks in 10.0.7 that middle-click to open links
• Addressed a fix that allows specifying wildcard that matches all simple netbiosnames in
network.automatic-ntlm-auth.trusted-uris.[74]
• Security fixes.[75]
• Security fix.[76]
• Security fix.[77]
• Security fix.[78]
• Security fix.[79]
11.0 12.0 13.0
•
•
•
•
Fixed an issue when Windows Messenger did not load in Hotmail, and the Hotmail inbox did not auto-update
Fixed the Hebrew text that was sometimes rendered incorrectly
Fixed an issue in Adobe Flash 11.3 that sometimes caused a crash on quit
Various security fixes[80]
14.0
• Various security fixes
Firefox
175
• Fixed the GIF animation that can get stuck when src and image size are changed
• Mac OSX: Fixed the nsCocoaWindow::ConstrainPosition that uses wrong screen in multi-display setup
• Fixed the CSS :hover regression when an element's class name is set by Javascript[81]
15.0
• Addressed a fix where sites visited while in Private Browsing mode could be found through manual browser
cache inspection[82]
16.0
• Fixed security vulnerabilities[83]
• Fixed security vulnerability[84]
17.0
• Reverted user agent change causing some website incompatibilities
• Fixed font rendering issue[85]
• Security and stability fixes.
• Fixed improvements to the Click-to-Play vulnerable plugin blocklisting feature[86]
• Security fix.[87]
• Security fix.[88]
18.0
• Fixed problems involving HTTP Proxy Transactions
• Fixed unity player crashes on Mac OS X
• Disabled HIDPI support on external monitors to avoid rendering glitches[89]
• Fixed JavaScript related stability issues[90]
19.0
• Windows 8 only: Fixed stability issue for some AMD Radeon HD graphics cards[91]
• Security-driven release[92]
Gecko
version Release notes
• First release[93]
•
•
•
•
•
•
•
Improvements to pop-up blocking
Improvements to toolbar customization
Improvements to tabbed browsing and shortcut keys
Type ahead find returns
Address bar gets smarter
Themes
Bug fixes[94]
•
•
•
•
•
•
•
New default theme
Redesigned Preferences window
Improved Privacy Options
Improved Bookmarks
Talkback enabled to tell Mozilla why the browser crashed
Automatic Image Resizing
Smooth Scrolling
• Access to more preferences through about:config
• Custom profile save location
Firefox
176
• Mac OS X compatibility
• Lots of bug fixes[95]
•
•
•
•
•
•
•
•
Windows Installer
Download Manager
New Add Bookmark Dialog
Work Offline
Better Handling of File Types
New XPInstall Frontend
New default theme for Mac OS X
Lots of bug fixes and improvements [96]
•
•
•
•
•
•
New Default Theme
Comprehensive Data Migration from Internet Explorer
Extension/Theme Manager
Smaller Download
Online help system
Lots of bug fixes and improvements[97]
• Dropped support for Mac OS X v10.1, minimum is now Mac OS X v10.2
• Private data clear data
• Back and forward now fast
• Improved web standards
• Improved HTML
• Improved CSS
• Improved HTTP
• Improved JavaScript/DOM
• SVG compatibility
• Huge amount of bug fixes[98]
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Visual Refresh of main theme
Built-in phishing protection
Enhanced search capabilities
Improved tabbed browsing
Resuming your browsing session (session restore)
Previewing and subscribing to Web feeds
Inline spell checking
Live Web Titles
Improved Add-ons manager
JavaScript 1.7
Extended search plugin format (predictive search)
Improved security with extension system
Client-side session and persistent storage
SVG text support
New Windows installer[99]
• One-click site info
• Malware Protection
• New Web Forgery Protection page
• New SSL error pages
• Add-ons and Plugin version check
Firefox
177
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Secure add-on updates
Anti-virus integration with download manager
Vista Parental Controls
Effective top-level domain (eTLD) service better restricts cookies and other restricted content to a single domain.
Better protection against cross-site JSON data leaks.
Easier password management – save passwords after successful login
Simplified add-on installation from 3rd party’s
New Download Manager
Resumable downloading after closing the browser
Full page zoom
Podcasts and Videocasts can be associated with your media playback tools
Tab scrolling and quickmenu
Save what you were doing - Firefox 3 will prompt users to save tabs on exit.
Optimized Open in Tabs behavior
Location and Search bar size can now be customized with a simple resizer item.
Text selection improvements (select multiple selections of text)
Find toolbar: the Find toolbar now opens with the current selection.
•
•
•
•
•
•
•
•
•
•
•
•
•
Plugin management with the add-on manager
Improved integration with Windows
Improved integration with the Mac
Integration with Linux GTK theme
Bookmark star button
Bookmark tags
Smart Location Bar
Library of bookmarks, history, etc.
Smart Bookmark Folders
Web-based protocol handlers for mail:to
Download & Install Add-ons from the Add-on manager
Easy to use Download Actions
New graphics and font handling in Gecko 1.9 provide rendering improvements in:
• CSS
• SVG
• Display of fonts with ligatures and complex scripts
•
•
•
•
•
•
•
•
Color management of images with capabilities
Offline support for web applications
Improved speed
Reduced memory usage
Increased reliability
25000 total code changes
Security fixes
Stability fixes[100]
• Support for the HTML5 <video> and <audio> elements including native support for Ogg Theora video and
Vorbis audio
• Improved tools for controlling your private data, including a Private Browsing Mode
• Better web application performance using the new TraceMonkey JavaScript engine
• The ability to share your location with websites using Location Aware Browsing
• Support for native JSON, and web worker threads
Firefox
178
• Improvements to the Gecko layout engine, including speculative parsing for faster content rendering
• Support for new web technologies such as:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Downloadable fonts
CSS media queries
New transformations and properties
JavaScript query selectors
HTML5 local storage and offline application storage
<canvas> text
ICC profiles
SVG transforms.[101]
Support for Persona themes
Protection from out-of-date plugins to keep users safer as they browse.
Open, native video can now be displayed full screen and supports poster frames.
Improved JavaScript performance, overall browser responsiveness, and startup time.
The ability for web developers to indicate that scripts should run asynchronously to speed up page load times.
Continued support for downloadable web fonts using the new WOFF font format.
Support for new CSS attributes such as gradients, background sizing, and pointer events.
• Support for new DOM and HTML5 specifications including the Drag & Drop API and the File API, which allow
for more interactive web pages.
• Changes to how third-party software can integrate with Firefox in order to prevent crashes.[102]
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Firefox 4 is available in over 80 languages
Uses JägerMonkey, a faster JavaScript engine
Support for Do Not Track ("DNT") header that allows users to opt-out of behavioral advertising
Firefox Sync is included by default
Graphic rendering is now hardware-accelerated using Direct3D 9 (Windows XP), Direct3D 10 (Windows Vista &
7), and OpenGL on Mac OS
Direct2D Hardware Acceleration is now on by default for Windows 7 users
WebGL is enabled on all platforms that have a capable graphics card with updated drivers
Native support for the HD HTML5 WebM video format, hardware accelerated where available
Firefox button has a new look for Windows Vista and Windows 7 users
Tabs are now on top by default on Windows, Mac OS X, and Linux
You can search for and switch to already open tabs in the Smart Location Bar
The stop and reload buttons have been merged into a single button on Windows, Mac OS X, and Linux
The Bookmarks Toolbar has been replaced with a Bookmarks Button by default (you can switch it back if you'd
like)
Crash protection when there is a crash in Adobe Flash Player, Apple QuickTime or Microsoft Silverlight plugins
You can turn any tab into an "App Tab"
The default homepage design has been refreshed
Overhaul of the bookmarks and history code, enabling faster bookmarking and startup performance
Per-compartment garbage collection is now enabled, reducing work done during complex animations
Additional polish for the Firefox add-on Manager
Improved web typography using OpenType with support for ligatures, kerning and font variants
Web developers can animate content using CSS Transitions
Responsiveness and scrolling improvements from the new retained layers layout system
• HTML5 Forms API makes web based forms easier to implement and validate
• Support for the new proposed Audio Data API
• Support for HSTS security protocol allowing sites to insist that they only be loaded over SSL
Firefox
179
• A new feature called Panorama gives users a visual overview of all open tabs, allowing them to be sorted and
grouped
• An experimental API is included to provide more efficient Javascript animations
• Firefox now supports the HTML5 video "buffered" property
• Changes to how XPCOM components are registered in order to help startup time and process separation
• New Addons Manager and extension management API
• Significant API improvements are available for JS-ctypes, a foreign function interface for extensions
• CSS Transitions are partially supported
• Core Animation rendering model for plugins on Mac OS X
• Web developers can update the URL field without reloading the page using HTML History APIs
• More responsive page rendering using lazy frame construction
• Link history lookup is done asynchronously to provide better responsiveness during pageload
• CSS :visited selectors have been changed to block websites from being able to check a user's browsing history
• New HTML5 parser
• Support for more HTML5 form controls
• Web authors can now get touch events from Firefox users on Windows 7 machines
• A new way of representing values in JavaScript that allows Firefox to execute heavy, numeric code more
efficiently[103]
•
•
•
•
•
•
•
•
•
Better standards support for HTML5, CSS3, MathML, XHR and SMIL
Better visibility for the Do not track header preference[]
Stability and security improvements[][][104]
Better tuned HTTP idle connection logic[]
Improved canvas, JavaScript, memory, and networking performance
Improved spell checking for some locales
Improved desktop environment integration for Linux users
Better WebGL security (WebGL content can no longer load cross-domain textures).[]
Background tabs have setTimeout and setInterval clamped to 1000 ms to improve performance[]
• about:permissions, a permissions manager. The user can choose what information can be shared with sites, e.g.
location.
• The address bar now highlights the domain of the website you are visiting.
• Streamlined the look of the site identity block
• Added support for the latest draft version of WebSockets with a prefixed API
• Added support for EventSource / server-sent events
• Added support for window.matchMedia
• Added Scratchpad, an interactive JavaScript prototyping environment
• Added a new Web Developer menu item and moved development-related items into it
• Improved usability of the Web Console
• Improved the discoverability of Firefox Sync
• Reduced browser startup time when using Panorama
• Fixed several stability issues
• Fixed several security issues[105]
• Drastically improved memory handling for certain use cases
• Added a new rendering backend to speed up Canvas operations on Windows systems
• Bookmark and password changes now sync almost instantly when using Firefox Sync
• The 'http://' URL prefix is now hidden by default.
• Added support for text-overflow: ellipsis
• Added support for the Web Timing specification
Firefox
180
•
•
•
•
•
Enhanced support for MathML
The WebSocket protocol has been updated from version 7 to version 8.
Added an opt-in system for users to send performance data back to Mozilla to improve future versions of Firefox
Fixed several stability issues
Fixed several security issues[106]
•
•
•
•
•
•
•
•
•
•
•
Add-ons installed by third-party programs are now disabled by default
Added a one-time add-on selection dialog to manage previously installed add-ons
Added Twitter to the search bar
Added a preference to load tabs on demand, improving start-up time when windows are restored
Improved performance and memory handling when using <audio> and <video> elements
Added Cross-Origin Resource Sharing (CORS) support for cross-domain textures in WebGL
Added support for HTML5 context menus
Added support for insertAdjacentHTML()
Improved CSS hyphen support for many languages
Improved WebSocket support
Fixed several stability issues[107]
• Added type inference, significantly improving JavaScript performance.
•
•
•
•
•
•
•
Improved theme integration for Mac OS X Lion.
Added two finger swipe navigation for Mac OS X Lion.
Added support for querying Do Not Track status via JavaScript.
Added support for the font-stretch CSS property.
Improved support for the text-overflow CSS property.
Improved standards support for HTML5, MathML, and CSS.
Fixed several stability issues.[108]
•
•
•
•
•
Most add-ons are now compatible with new versions of Firefox by default.
Anti-Aliasing for WebGL is now implemented.
CSS3 3D-Transforms are now supported.
New <bdi> element for bi-directional text isolation, along with supporting CSS properties.
Full Screen APIs allow you to build a web application that runs full screen.[109]
•
•
•
•
•
•
•
Migration of settings from Google Chrome
SPDY protocol support (disabled by default)
RFC 6455 WebSocket protocol support with a unprefixed API
Page Inspector Tilt (3D View)
Sync Add-ons
Redesigned HTML5 video controls
Style Editor (CSS)[110]
•
•
•
•
•
•
•
•
Windows: Firefox is now easier to update with one less prompt (User Account Control)
Reintroduced on-demand loading of pinned tabs after restoring a session
Page Source now has line numbers
Line breaks are now supported in the title attribute
Improvements to "Find in Page" to center search result
URLs pasted into the download manager window are now automatically downloaded
Support for the text-align-last CSS property has been added
Experimental support for ECMAScript 6 Map and Set objects has been implemented
• Various security fixes
• Many bug fixes
Firefox
181
• Some TinyMCE-based editors failed to load (739141)
• OS X: WebGL performance may be degraded on some hardware (713305)[111]
•
•
•
•
•
•
•
•
•
•
•
When opening a new tab, users are now presented with their most visited pages
The default home page now has quicker access to bookmarks, history, settings, and more
SPDY protocol now enabled by default for faster browsing on supported sites
Restored background tabs are not loaded by default for faster startup
Smooth scrolling is now enabled by default
72 total improvements to Page Inspector, HTML panel, Style Inspector, Scratchpad and Style Editor
The column-fill CSS property has been implemented
Experimental support for ECMAScript 6 Map and Set objects has been implemented
Support for the CSS3 background-position property extended syntax has been added
The :invalid pseudo-class can now be applied to the element
The CSS turn angle unit is now supported[112]
•
•
•
•
Google searches now utilize HTTPS
Full screen support for Mac OS X Lion implemented
Plugins can now be configured to only load on click (about:config)
The Awesome Bar now auto-completes typed URLs
•
•
•
•
•
•
Improved site identity manager, to prevent spoofing of an SSL connection with favicons
Pointer Lock API implemented
New API to prevent your display from sleeping
New text-transform and font-variant CSS improvements for Turkic languages and Greek[113][114]
Long URLs now extend the status bar almost to the whole width of the viewport.
Gstreamer backend for HTML5 video to allow H.264 playback (needs to be enabled at compile time).
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Silent update: Background updates
Support for SPDY networking protocol v3
WebGL enhancements, including compressed textures for better performance
Localization in Maithili
Optimized memory usage for add-ons
JavaScript debugger integrated into developer tools
New layout view added to Inspector
High precision event timer implemented
The CSS word-break property has been implemented
New responsive design tool allows web developers to switch between desktop and mobile views of sites
Native support for the Opus audio format added
The <audio> and <video> elements now support the played attribute
The source element now supports the media attribute
Fixed the focus rings that keep growing when repeatedly tabbing through elements[115]
•
•
•
•
•
Firefox on Mac OS X now has preliminary VoiceOver support turned on by default
Initial web app support (Windows/Mac/Linux)
Acholi and Kazakh localizations added
Improvements around JavaScript responsiveness through incremental garbage collection
New Developer Toolbar with buttons for quick access to tools, error count for the Web Console, and a new
command line for quick keyboard access
• CSS3 Animations, Transitions, Transforms and Gradients unprefixed
• Recently opened files list in Scratchpad implemented
• Fixed an issue where debugger breakpoints do not catch on page reload
Firefox
•
•
•
•
•
182
No longer supporting MD5 as a hash algorithm in digital signatures
Opus support by default
Reverse animation direction has been implemented
Per tab reporting in about:memory
User Agent strings for pre-release Firefox versions now show only major version[116]
• First revision of the Social API and support for Facebook Messenger
• Click-to-play blocklisting implemented to prevent vulnerable plugin versions from running without the user's
permission
• Updated Awesome Bar experience with larger icons
• Mac OS X 10.5 is no longer supported
• JavaScript Maps and Sets are now iterable
• SVG FillPaint and StrokePaint implemented
• Improvements that make the Web Console, Debugger and Developer Toolbar faster and easier to use
• New Markup panel in the Page Inspector allows easy editing of the DOM
• Sandbox attribute for iframes implemented, enabling increased security
• Over twenty performance improvements, including fixes around the New Tab page
• Fixed pointer lock that doesn't work in web apps
• Fixed page scrolling on sites with fixed headers[117]
•
•
•
•
•
•
•
•
•
•
Faster JavaScript performance via IonMonkey compiler
Support for Retina Display on OS X 10.7 and up
Preliminary support for WebRTC
Better image quality with Mozilla's new HTML scaling algorithm
Performance improvements around tab switching
Support for new DOM property window.devicePixelRatio
Improvement in startup time through smart handling of signed extension certificates
Support for W3C touch events implemented, taking the place of MozTouch events
Disable insecure content loading on HTTPS pages
Improved responsiveness for users on proxies[118]
•
•
•
•
•
Built-in PDF Viewer
Canvas elements can export their content as an image blob using canvas.toBlob()
Startup performance improvements
Debugger now supports pausing on exceptions and hiding non-enumerable properties
Remote Web Console is available for connecting to Firefox on Android or Firefox OS (experimental, set
devtools.debugger.remote-enabled to true)
There is now a Browser Debugger available for add-on and browser developers (experimental, set
devtools.chrome.enabled to true)
Web Console CSS links now open in the Style Editor
CSS @page is now supported
CSS viewport-percentage length units implemented (vh, vw, vmin and vmax)
CSS text-transform now supports full-width
Fixed certain valid WebGL drawing operations that were incorrectly rejected, leaving incomplete rendering in
affected pages
Fixed an issue that starting Firefox with -private flag incorrectly claims you are not in Private Browsing mode
•
•
•
•
•
•
•
• Fixed plugins that stop rendering when the top half of the plugin is scrolled off the top of the page, in HiDPI
mode[119]
Release notes
Firefox
183
Platform support
Mozilla provides development builds of Firefox in the following channels:
"Beta", "Aurora", and "Nightly". As of March 2013 (http:/ / en. wikipedia.
org/ w/ index. php?title=Firefox& action=edit), Firefox 20 beta is in the
"Beta" channel, Firefox 21 alpha is in the "Aurora" channel, and Firefox 22
pre-alpha is in the "Nightly" channel.[]
Features planned for future versions include silent updating so that version
increments will not bother the user, although the user will be able to disable
that function.[120]
Firefox running on a digital advertising
sign (identifiable by its connection
failure message)
Firefox for mobile
Firefox for mobile, codenamed Fennec, is a web browser for smaller non-PC
devices, mobile phones and PDAs. It was first released for the Nokia Maemo
operating system (specifically the Nokia N900) on January 28, 2010.[121]
Version 4 for Android and Maemo was released on March 29, 2011.[] The
browser's version number was bumped from version 2 to version 4 to
synchronize with all future desktop releases of Firefox since the rendering
engines used in both browsers are the same.[122] Version 7 was the last
release for Maemo on the N900.[123] The user interface is completely
redesigned and optimized for small screens, the controls are hidden away so
that only the web content is shown on screen, and it uses touchscreen
interaction methods. It includes the Awesomebar, tabbed browsing, Add-on
support, password manager, location-aware browsing, and the ability to
synchronize with the user's computer Firefox browser using Firefox Sync.[124]
Extended Support Release
Firefox for mobile 14.0 on Android
Firefox ESR is a version of Firefox for organizations and other adopters who
need extended support for mass deployments.[] Unlike the regular ("rapid")
releases, the ESR will be updated with new features and performance enhancements annually, receiving regular
security updates during the year.[125]
Firefox
184
CPU architecture
Native 64-bit builds are officially supported on Linux and OS X, but not on Windows:[]
Operating system 32-bit support 64-bit support
Linux[a]
Yes
OS X[b]
Yes
Windows[c]
Yes
[126]
No
Notes:
• a) Linux: Mozilla made Firefox for 64-bit Linux a priority with the release of Firefox 4, labeling it as tier 1
priority.[][127] Since being labeled tier 1, Mozilla has been providing official 64-bit releases for its browser for
Linux.[128][129] Vendor-backed 64-bit support has existed for Linux distributions such as Novell-Suse Linux, Red
Hat Enterprise Linux, and Ubuntu prior to Mozilla's support of 64-bit, even though vendors were faced with the
challenge of having to turn off the 64-bit JIT compiler due to its instability prior to Firefox 4.[130][131][132]
• b) OS X: The official releases of Firefox for OS X are universal builds that include both 32-bit and 64-bit versions
of the browser in one package, and have been this way since Firefox 4. A typical browsing session uses a
combination of the 64-bit browser process and a 32-bit plugin process, because some popular plugins still are
32-bit.[133]
• c) Windows: The 32-bit and 64-bit versions of Windows Vista and Windows 7 can be used to run 32-bit Firefox.[]
Mozilla does not currently support Win64 because many plug-ins do not yet support Win64 and other issues.[]
Mozilla does provide a 64-bit version for their Firefox nightly builds, but they are considered unstable by
Mozilla.[134][135]
System requirements
Browsers compiled from Firefox source code may run on various operating systems; however, officially distributed
binaries are meant for the following: Microsoft Windows (XP SP2/SP3, Server 2003, Vista, 7 or 8), OS X 10.6 or
higher, and Linux (with the following libraries installed: GTK+ 2.10 or higher, GLib 2.12 or higher, Pango 1.14 or
higher, X.Org 1.0 or higher (1.7 or higher is recommended), libstdc++ 4.3 or higher).[]
[]
Recommended Hardware
Windows
OS X
Processor
Pentium 4 or newer with SSE2 Any Intel processor
Memory (RAM)
512 MB
Hard Drive (free space)
200 MB
Firefox
185
Operating system
Microsoft
Windows
OS X
XP / 2003 / Vista /
2008 / 7 / 2008R2 / 8 /
2012
Latest stable version
Support
status
2004–present
[]
19.0.2 (ftp:/ / ftp. mozilla. org/ pub/ firefox/ releases/ latest/ win32/ en-US/ )
2000
10.0.12esr (ftp:/ / ftp. mozilla. org/ pub/ firefox/ releases/ 10. 0. 12esr/ win32/
[136]
en-US/ )
2004–2013
NT 4 / 98 / ME
2.0.0.20 (ftp:/ / ftp. mozilla. org/ pub/ firefox/ releases/ 2. 0. 0. 20/ win32/ en-US)
2004–2008
95
1.5.0.12 (ftp:/ / ftp. mozilla. org/ pub/ firefox/ releases/ 1. 5. 0. 12/ win32/ en-US)
2004–2007
10.6 - 10.8
19.0.2 (ftp:/ / ftp. mozilla. org/ pub/ firefox/ releases/ latest/ mac/ en-US/ )
10.5 (Intel)
10.0.12esr (ftp:/ / ftp. mozilla. org/ pub/ firefox/ releases/ 10. 0. 12esr/ mac/
[137]
en-US/ )
2007–2013
10.4 - 10.5 (PPC)
3.6.28 (ftp:/ / ftp. mozilla. org/ pub/ firefox/ releases/ 3. 6. 28/ mac/ en-US/
[138][139]
)
2005–2012
10.2 - 10.3
2.0.0.20 (ftp:/ / ftp. mozilla. org/ pub/ firefox/ releases/ 2. 0. 0. 20/ mac/ en-US)
2004–2008
10.0 - 10.1
1.0.8 (ftp:/ / ftp. mozilla. org/ pub/ firefox/ releases/ 1. 0. 8/ mac/ en-US)
2004–2006
Linux kernel 2.2.14 and newer
[]
(with some libraries )
[]
2009–present
[]
2004–present
19.0.2 (ftp:/ / ftp. mozilla. org/ pub/ firefox/ releases/ latest/ linux-i686/ en-US/ )
Notes:
• Firefox 3.5.9 is the last version to work on HP-UX 11i, as packaged by Hewlett-Packard.[140]
• Firefox 2.0 has been ported to RISC OS (i.e. not supported by Mozilla).[141][142][143][144]
Affiliations
Google
The Mozilla Corporation's relationship with Google has been noted in the popular press,[145][146] especially with
regard to their paid referral agreement. Mozilla's original search deal with Google expired in 2011, but a new deal
was struck, where Google agreed to pay Mozilla just under a billion dollars over three years in exchange for the
browser to leave Google as its default search engine. The price was driven up due to aggressive bidding from
Microsoft's Bing search engine, and Yahoo!'s presence in the auction as well. Despite the deal, Mozilla Firefox
maintains relationships with Bing, Yahoo!, Yandex, Amazon.com and eBay.[]
In 2005, the Mozilla Foundation and Mozilla Corporation had a combined revenue of US$52.9 million, with
approximately 95% derived from search engine royalties.[147][148] In 2006, the Mozilla Foundation and Mozilla
Corporation had a combined revenue of US$66.9 million, with approximately 90% derived from search engine
royalties.[147][149] In 2007, the Mozilla Foundation and Mozilla Corporation had a combined revenue of US$81
million, with 88% of this sum (US$66 million) from Google.[][150] In 2008, both Mozilla organizations had a
combined revenue of US$78.6 million, with 91% coming from Google.[] In 2009, Google accounted for 86% of
Mozilla's revenue, and in 2010, Google was responsible for 84% of Mozilla's $123 million in revenue that year.[]
The release of the anti-phishing protection in Firefox 2 in particular raised considerable controversy:[151]
anti-phishing protection enabled by default is based on a list updated by twice-hourly downloads to the user's
computer from Google's server.[] The user cannot change the data provider within the GUI,[152] and is not informed
who the default data provider is. The browser also sends Google's cookie with each update request.[153]
Firefox
SomeWikipedia:Avoid weasel words internet privacy advocacy groups have expressed concerns surrounding
Google's possible uses of this data, especially that Firefox's privacy policy states that Google may share information
(that is not personally identifying) gathered with "safebrowsing" service with third parties, including business
partners.[]
Following Google CEO Eric Schmidt's comments in December 2009 regarding privacy during a CNBC show,[154]
Asa Dotzler, Mozilla's director of community development suggested that users use the Bing search engine instead
of Google search.[155] Google also promoted Firefox through YouTube until the release of Google Chrome. In
August 2009, Mozilla Security assisted Google by pointing out a security flaw in Google's Chrome browser.[156]
Microsoft
Microsoft's head of Australian operations, Steve Vamos, stated in late 2004 that he did not see Firefox as a threat and
that there was not significant demand for the feature-set of Firefox among Microsoft's users.[157] Microsoft Chairman
Bill Gates has used Firefox, but has commented that "it's just another browser, and IE [Microsoft's Internet Explorer]
is better".[158]
A Microsoft SEC filing on June 30, 2005 acknowledged that "competitors such as Mozilla offer software that
competes with the Internet Explorer Web browsing capabilities of our Windows operating system products."[159] The
release of Internet Explorer 7 was fast tracked, and included functionality that was previously available in Firefox
and other browsers, such as tabbed browsing and RSS feeds.[160]
Despite the cold reception from Microsoft's top management, the Internet Explorer development team maintains a
relationship with Mozilla. They meet regularly to discuss web standards such as extended validation certificates.[161]
In 2005, Mozilla agreed to allow Microsoft to use its Web feed logo in the interest of common graphical
representation of the Web feeds feature.[162]
In August 2006, Microsoft offered to help Mozilla integrate Firefox with the then-forthcoming Windows Vista,[163]
an offer Mozilla accepted.[164]
In October 2006, as congratulations for a successful ship of Firefox 2, the Internet Explorer 7 development team sent
a cake to Mozilla.[165][166] As a nod to the browser wars, some jokingly suggested that Mozilla send a cake back
along with the recipe, in reference to the open-source software movement.[167] The IE development team sent
another cake on June 17, 2008, upon the successful release of Firefox 3,[168] again on March 22, 2011, for Firefox
4,[169] and yet again for the Firefox 5 release.[170]
In November 2007, Jeff Jones (a "security strategy director" in Microsoft's Trustworthy Computing Group) criticized
Firefox, claiming that Internet Explorer experienced fewer vulnerabilities and fewer higher severity vulnerabilities
than Firefox in typical enterprise scenarios.[171] Mozilla developer Mike Shaver discounted the study, citing
Microsoft's bundling of security fixes and the study's focus on fixes, rather than vulnerabilities, as crucial flaws.[172]
In February 2009, Microsoft released Service Pack 1 for version 3.5 of the .NET Framework. This update also
installed Microsoft .NET Framework Assistant add-on (enabling ClickOnce support).[173] The update received media
attention after users discovered that the add-on could not be uninstalled through the add-ons interface.[][174] Several
hours after the website Annoyances.org posted an article regarding this update, Microsoft employee Brad Abrams
posted in his blog Microsoft's explanation for why the add-on was installed, and also included detailed instructions
on how to remove it.[175] However, the only way to get rid of this extension was to modify manually the Windows
Registry, which could cause Windows systems to fail to boot up if not done correctly.[]
On October 16, 2009, Mozilla blocked all versions of Microsoft .NET Framework Assistant from being used with
Firefox and from the Mozilla Add-ons service.[176] Two days later, the add-on was removed from the blocklist after
confirmation from Microsoft that it is not a vector for vulnerabilities.[177][178] Version 1.1 (released on June 10, 2009
to the Mozilla Add-ons service) and later of the Microsoft .NET Framework Assistant allows the user to disable and
uninstall in the normal fashion.[179]
186
Firefox
187
Firefox is one of the twelve browsers offered to European Economic Area users of Microsoft Windows since 2010 –
see BrowserChoice.eu.[180]
IRS Audit
The IRS opened an audit of the Mozilla Foundation's 2004-5 revenues in 2008, due to its search royalties, and in
2009, the investigation was expanded to the 2006 and 2007 tax years, though that part of the audit was closed. As
Mozilla does not derive at least a third of its revenue from public donations, it does not automatically qualify as a
public charity.[181]
References
[130] }
[147] Page 11.
[180] BBC, Microsoft offers browser choices to Europeans (http:/ / news. bbc. co. uk/ 1/ hi/ technology/ 8537763. stm), March 1, 2010
Further reading
• Cheah, Chu Yeow (2005). Firefox Secrets: A Need-To-Know Guide. O'Reilly. ISBN 0-9752402-4-2.
• Feldt, Kenneth C. (2007). Programming Firefox. O'Reilly. ISBN 0-596-10243-7.
• Granneman, Scott (2005). Don't Click on the Blue e!: Switching to Firefox. O'Reilly. ISBN 0-596-00939-9.
• Hofmann, Chris; Marcia Knous, & John Hedtke (2005). Firefox and Thunderbird Garage. Prentice Hall PTR.
ISBN 0-13-187004-1.
• McFarlane, Nigel (2005). Firefox Hacks. O'Reilly. ISBN 0-596-00928-3.
• Reyes, Mel (2005). Hacking Firefox: More Than 150 Hacks, Mods, and Customizations. Wiley.
ISBN 0-7645-9650-0.
• Ross, Blake (2006). Firefox for Dummies. Wiley. ISBN 0-471-74899-4.
External links
•
•
•
•
•
•
Official website (http://www.firefox.com) for end-users
Firefox Nightly Builds (http://nightly.mozilla.org/)
Firefox ESR Builds (http://www.mozilla.org/en-US/firefox/organizations/all.html)
Mozilla Foundation homepage (http://www.mozilla.org/)
Firefox Marketing/Advertising Site (http://www.spreadfirefox.com/)
Firefox (http://www.dmoz.org/Computers/Software/Internet/Clients/WWW/Browsers/Firefox/) at the
Open Directory Project
Internet Explorer
188
Internet Explorer
Internet Explorer
Internet Explorer 10 in Windows 7
Developer(s)
Microsoft
Stable release
10.0.3
Preview release
N/A
[1] [ edit [2]]
(March 12, 2013)
[3]
Development status Active
Written in
C++
Operating system
Microsoft Windows Windows Phone
License
Proprietary software
Website
[4]
Internet Explorer
A component of Microsoft
Windows
Internet Explorer 10 in Windows 8
Details
Type
Web browser
Included with
Windows 95 OSR 1 and
later
Windows NT 4 and later
Related components
Internet Explorer
189
Windows Filtering Platform
Windows Update
WinSock
Versions:
Internet Explorer versions:
1 · 2 · 3 · 4 · 5 · 6 · 7 · 8 · 9 · 10
Internet Explorer (formerly Microsoft Internet Explorer and
Windows Internet Explorer, commonly abbreviated IE or MSIE) is a
series of graphical web browsers developed by Microsoft and included
as part of the Microsoft Windows line of operating systems, starting in
1995. It was first released as part of the add-on package Plus! for
Windows 95 that year. Later versions were available as free
downloads, or in service packs, and included in the OEM service
releases of Windows 95 and later versions of Windows.
Most used web browser by country as of
February 2013 according to StatCounter. Google
Chrome Internet Explorer Firefox Opera (web
browser)Opera Safari
Internet Explorer is one of the most widely used web browsers,
attaining a peak of about 95% usage share during 2002 and 2003.[5] Its
usage share has since declined with the launch of Safari (2003), Firefox (2004), and Google Chrome (2008), each of
which now has significant market share. Estimates for Internet Explorer's overall market share range from 27.4% to
54.13%, as of October 2012[6] (browser market share is notoriously difficult to calculate). Microsoft spent over
US$100 million per year on Internet Explorer in the late 1990s,[] with over 1000 people working on it by 1999.[]
Since its first release, Microsoft has added features and technologies such as basic table display (in version 1.5);
XMLHttpRequest (in version 5), which aids creation of dynamic web pages; and Internationalized Domain Names
(in version 7), which allow Web sites to have native-language addresses with non-Latin characters. The browser has
also received scrutiny throughout its development for use of third-party technology (such as the source code of
Spyglass Mosaic, used without royalty in early versions) and security and privacy vulnerabilities, and both the
United States and the European Union have alleged that integration of Internet Explorer with Windows has been to
the detriment of other browsers.
The latest stable release is Internet Explorer 10, with a new interface allowing for use as both a desktop application,
and as a Windows 8 application.
Versions of Internet Explorer for other operating systems have also been produced, including an Xbox 360 version
called Internet Explorer for Xbox and an embedded OEM version called Pocket Internet Explorer, later rebranded
Internet Explorer Mobile, which is currently based on Internet Explorer 9 and made for Windows Phone, Windows
CE, and previously, based on Internet Explorer 7 for Windows Mobile. It remains in development alongside the
desktop versions. Internet Explorer for Mac and Internet Explorer for UNIX (Solaris and HP-UX) have been
discontinued.
History
The Internet Explorer project was started in the summer of 1994[citation needed] by Thomas Reardon,[7] using source
code from Spyglass, Inc. Mosaic, an early commercial web browser with formal ties to the pioneering NCSA Mosaic
browser.[][] In late 1994, Microsoft licensed Spyglass Mosaic for a quarterly fee plus a percentage of Microsoft's
non-Windows revenues for the software.[] Although bearing a name similar to NCSA Mosaic, Spyglass Mosaic had
used the NCSA Mosaic source code sparingly.[] Microsoft was sued by Synet Inc. in 1996 over the trademark
infringement.[]
Internet Explorer
190
Internet Explorer 1
The first version of Internet Explorer (later referred to as Internet
Explorer 1) made its debut on 16 August 1995. It was a reworked
version of Spyglass Mosaic, which Microsoft had licensed, like many
other companies initiating browser development, from Spyglass Inc.[][]
It came with Microsoft Plus! for Windows 95 and the OEM release of
Windows 95, and was installed as part of the Internet Jumpstart Kit in
Plus!.[] The Internet Explorer team began with about six people in
early development.[][8] Internet Explorer 1.5 was released several
Internet Explorer 1
months later for Windows NT and added support for basic table
rendering. By including it free of charge on their OS, they did not have to pay royalties to Spyglass Inc, resulting in a
lawsuit and a multi-million USD settlement.
Internet Explorer 2
Internet Explorer 2 was released for Windows 95, Windows NT 3.5, and NT 4.0 on 22 November 1995 (following
a 2.0 beta in October). It featured support for SSL, cookies, VRML, RSA, and Internet newsgroups. Version 2 was
also the first release for Windows 3.1 and Macintosh System 7.0.1 (PPC or 68k), although the Mac version was not
released until January 1996 for PPC, and April for 68k.[9] Version 2.1 for the Mac came out in August 1996,
although by this time, Windows was getting 3.0. Version 2 was included in Windows 95 OSR 1 and Microsoft's
Internet Starter Kit for Windows 95 in early 1996.[] It launched with twelve languages, including English, but by
April 1996, this expanded to 24, 20, and 9 for Win 95, Win 3.1, and Mac, respectively.[] The 2.0i version supported
double-byte character-set.[]
Market share history
snapshot
[10]
for February 2005
IE4: 0.07%
IE5: 6.17%
IE6: 82.79%
Internet Explorer 3
Internet Explorer 3 was released on 13 August 1996 and went on to be much more popular than its predecessors.
Internet Explorer 3 was the first major browser with CSS support, although this support was only partial. It also
introduced support for ActiveX controls, Java applets, inline multimedia, and the PICS system for content metadata.
Version 3 also came bundled with Internet Mail and News, NetMeeting, and an early version of the Windows
Address Book, and was itself included with Windows 95 OSR 2. Version 3 proved to be the first more popular
version of Internet Explorer, bringing with it increased scrutiny. In the months following its release, a number of
security and privacy vulnerabilities were found by researchers and hackers. This version of Internet Explorer was the
first to have the 'blue e' logo.[] The Internet Explorer team consisted of roughly 100 people during the development
of three months.[] The first major IE security hole, the Princeton Word Macro Virus Loophole, was discovered on 22
August 1996 in IE3.[11]Wikipedia:Verifiability Backwards compatibility was handled by allowing users who
upgraded to IE3 to still use the last IE, because the installation converted the previous version to a separate
directory.[12]
Internet Explorer
191
Market share history
snapshot
[13]
for October 2008
IE4: 0.01%
IE5: 0.20%
IE6: 37.01%
IE7: 35.81%
Internet Explorer 4
Internet Explorer 4, released in September 1997, deepened the level of integration between the web browser and
the underlying operating system. Installing version 4 on a Windows 95 or Windows NT 4 machine and choosing
Windows Desktop Update would result in the traditional Windows Explorer being replaced by a version more akin to
a web browser interface, as well as the Windows desktop itself being web-enabled via Active Desktop. The
integration with Windows, however, was subject to numerous packaging criticisms (see United States v. Microsoft).
This option was no longer available with the installers for later versions of Internet Explorer, but was not removed
from the system if already installed. Internet Explorer 4 introduced support for Group Policy, allowing companies to
configure and lock down many aspects of the browser's configuration as well as support for offline browsing.[14]
Internet Mail and News was replaced with Outlook Express, and Microsoft Chat and an improved NetMeeting were
also included. This version was also included with Windows 98. New features that allowed users to save and retrieve
posts in comment forms were added, but they are not used today. Internet Explorer 4.5 offered new features such as
easier 128-bit encryption. It also offered a dramatic stability improvement over prior versions, particularly the 68k
version, which was especially prone to freezing.[15][16][17]
Internet Explorer 5
Internet Explorer 5, launched on 18 March 1999, and subsequently included with Windows 98 Second Edition and
bundled with Office 2000, was another significant release that supported bi-directional text, ruby characters, XML,
XSLT, and the ability to save web pages in MHTML format. IE5 was bundled with Outlook Express 5. Also, with
the release of Internet Explorer 5.0, Microsoft released the first version of XMLHttpRequest, giving birth to Ajax
(even though the term "Ajax" was not coined until years later). It was the last with a 16-bit version. Internet Explorer
5.01, a bug fix version included in Windows 2000, was released in December 1999. Internet Explorer 5.5 followed in
July 2000, improving its print preview capabilities, CSS and HTML standards support, and developer APIs; this
version was bundled with Windows Me. However, version 5 was the last version for Mac and UNIX. Version 5.5
was the last to have Compatibility Mode, which allowed Internet Explorer 4[18] to be run side by side with the
5.x.[][19] The IE team consisted of over 1,000 people by 1999, with funding on the order of US$100 million per
year.[][]
Internet Explorer 6
Internet Explorer 6 was released on 27 August 2001, a few months before Windows XP. This version included
DHTML enhancements, content restricted inline frames, and partial support of CSS level 1, DOM level 1, and SMIL
2.0.[] The MSXML engine was also updated to version 3.0. Other new features included a new version of the
Internet Explorer Administration Kit (IEAK), Media bar, Windows Messenger integration, fault collection,
automatic image resizing, P3P, and a new look-and-feel that was in line with the Luna visual style of Windows XP,
when used in Windows XP. Internet Explorer 6.0 SP1 offered several security enhancements and coincided with the
Windows XP SP1 patch release. In 2002, the Gopher protocol was disabled, and support for it was dropped in
Internet Explorer 7.[] Internet Explorer 6.0 SV1[20] came out on 6 August 2004 for Windows XP SP2 and offered
Internet Explorer
various security enhancements and new colour buttons on the user interface. Internet Explorer 6 updated the original
'blue e' logo to a lighter blue and more 3D look.[] Microsoft now considers IE6 to be an obsolete product and
recommends that users upgrade to Internet Explorer 8. Some corporate IT users have not upgraded despite this, in
part because some still use Windows 2000, which will not run Internet Explorer 7 or above.[21] Microsoft has
launched a website, http:/ / ie6countdown. com/ , with the goal of getting Internet Explorer 6 usage to drop below 1
percent worldwide. Its usage is 6% globally as of October 2012, and depending to the country the usage differs
heavily: while the usage in Norway is 0.1%, it is 21.3% in the People's Republic of China.[22] On 3 January 2012,
Microsoft announced that usage of IE6 in the United States had dropped below 1%.[][23]
Internet Explorer 7
Internet Explorer 7 was released on 18 October 2006. It includes bug fixes, enhancements to its support for web
standards, tabbed browsing with tab preview and management, a multiple-engine search box, a web feeds reader,
Internationalized Domain Name support (IDN), Extended Validation Certificate support, and an anti-phishing filter.
With IE7, Internet Explorer has been decoupled from the Windows Shell—unlike previous versions, the Internet
Explorer ActiveX control is not hosted in the Windows Explorer process, but rather runs in a separate Internet
Explorer process. It is included with Windows Vista and Windows Server 2008, and is available for Windows XP
Service Pack 2 and later, and Windows Server 2003 Service Pack 1 and later. The original release of Internet
Explorer 7 required the computer to pass a Windows Genuine Advantage validation check prior to installing, but on
October 5, 2007, Microsoft removed this requirement. As some statistics show, by mid-2008, Internet Explorer 7
market share exceeded that of Internet Explorer 6 in a number of regions.[24][25]
Internet Explorer 8
Internet Explorer 8 was released on 19 March 2009. It had been in development since August 2007 at the latest.[]
On 5 March 2008, the first public beta (Beta 1) was released to the general public.[26] On 27 August 2008, the
second public beta (Beta 2) was released.[27] It is supported in Windows XP SP2 and SP3, Windows Server 2003
SP2, Windows Vista, Windows 7, and Windows Server 2008 on both 32-bit and 64-bit architectures.[28] Internet
Explorer 8 (IE8) RC1 was released on 26 January 2009. Internet Explorer 8 "Final" was released on March 19, 2009.
Security, ease of use, and improvements in RSS, CSS, and Ajax support are Microsoft's priorities for IE8.[29][] It
includes much stricter compliance with web standards, including a planned full Cascading Style Sheets 2.1
compliance for the release version.[] All of these changes allowed Internet Explorer 8 to pass the Acid2 test.[30]
However, to prevent compatibility issues, IE8 also includes the IE7 rendering behaviour. Sites that expect IE7 quirks
can disable IE8's breaking changes by including a meta element in the HEAD section of the HTML document. IE8
also includes numerous improvements to JavaScript support as well as performance improvements,[] although it still
does not pass the Acid3 test, with version 8.0 scoring 20/100.[31] It includes support for accelerators, which allow
supported web applications to be invoked without explicitly navigating to them; and WebSlices, which allows
portions of a page to be subscribed to and monitored from a redesigned Favourites Bar.[] Other features include
InPrivate privacy features and a SmartScreen phishing filter.[32]
Internet Explorer 9
Internet Explorer 9 was released on 14 March 2011.[] Development for Internet Explorer 9 began shortly after the
release of Internet Explorer 8.[33] Microsoft first announced Internet Explorer 9 at PDC 2009, and spoke mainly
about how it takes advantage of hardware acceleration in DirectX to improve the performance of web applications
and quality of web typography. At MIX 10, Microsoft showed and publicly released the first Platform Preview for
Internet Explorer 9, a frame for IE9's engine not containing any UI of the browser. Leading up to the release of the
final browser, Microsoft released updated platform previews, each featuring improved JavaScript compiling (32-bit
version), improved scores on the Acid3 test, as well as additional HTML5 standards support, approximately every 6
192
Internet Explorer
193
weeks. Ultimately, eight platform previews were released. The first public beta was released at a special event in San
Francisco, which was themed around "the beauty of the web". The release candidate was released on February 10,
2011, and featured improved performance, refinements to the UI, and further standards support. The final version
was released during the South by Southwest (SXSW) music and film festival in Austin, Texas, on 14 March 2011.[]
Internet Explorer 9 is only supported on Windows Vista SP2, Windows 7, and Windows Server 2008.[34] It supports
several CSS 3 properties (including border-radius, box-shadow, etc.), and embedded ICC v2 or v4 colour profiles
support via Windows Color System. The 32-bit version has faster JavaScript performance, this being due to a new
JavaScript engine called "Chakra".[35] It also features hardware accelerated graphics rendering using Direct2D,
hardware-accelerated text rendering using DirectWrite, hardware-accelerated video rendering using Media
Foundation, imaging support provided by Windows Imaging Component, and high fidelity printing powered by the
XPS print pipeline.[36] IE9 also supports the HTML5 video and audio tags and the Web Open Font Format.[37]
Internet Explorer 9 initially scored 95/100 on the Acid3 test, but has scored 100/100 since the test was updated in
September 2011.[38]
Internet Explorer was to be omitted from Windows 7 and Windows Server 2008 R2 in Europe, but Microsoft
ultimately included it, with a browser option screen allowing users to select any of several web browsers (including
Internet Explorer).[39][40][41][42]
Internet Explorer is now available on Xbox 360 with Kinect support, as of October 2012.[43]
Internet Explorer 10
Internet Explorer 10 became generally available on October 26, 2012
alongside Windows 8 and Windows Server 2012. It became available
for Windows 7 on February 26, 2013.[44] Microsoft announced Internet
Explorer 10 in April 2011 at MIX 11 in Las Vegas, releasing the first
Platform Preview at the same time. At the show, it was said that
Internet Explorer 10 was about 3 weeks in development.[45] This
release further improves upon standards support, including CSS3
gradients. Internet Explorer 10 drops support for Windows Vista and
will only run on Windows 7 and later.[] Internet Explorer 10 Release
Preview was also released on the Windows 8 Release Preview
platform.
Internet Explorer 10 (desktop version) in
Windows 8
Features
Internet Explorer has been designed to view a broad range of web pages and provide certain features within the
operating system, including Microsoft Update. During the heyday of the browser wars, Internet Explorer superseded
Netscape only when it caught up technologically to support the progressive features of the time.[46]WP:NOTRS
Standards support
Internet Explorer, using the Trident layout engine:
• supports HTML 4.01, CSS Level 1, XML 1.0, and DOM Level 1, with minor implementation gaps.
• fully supports XSLT 1.0 as well as an obsolete Microsoft dialect of XSLT often referred to as WD-xsl, which was
loosely based on the December 1998 W3C Working Draft of XSL. Support for XSLT 2.0 lies in the future:
semi-official Microsoft bloggers have indicated that development is underway, but no dates have been announced.
• Almost full conformance to CSS 2.1 has been added in the Internet Explorer 8 release.[47][48] The trident
rendering engine in Internet Explorer 9 in 2011 scores highest in the official W3C conformance test suite for CSS
2.1 [49] of all major browsers.
Internet Explorer
• supports XHTML in Internet Explorer 9 (Trident version 5.0). Prior versions can render XHTML documents
authored with HTML compatibility principles and served with a text/html MIME-type.
• supports a subset[50] of SVG in Internet Explorer 9 (Trident version 5.0), excluding SMIL, SVG fonts and filters.
Internet Explorer uses DOCTYPE sniffing to choose between standards mode and a "quirks mode" in which it
deliberately mimicks nonstandard behaviours of old versions of MSIE for HTML and CSS rendering on screen
(Internet Explorer always uses standards mode for printing). It also provides its own dialect of ECMAScript called
JScript.
Internet Explorer had been subjected to criticism by W3C over its limited support for SVG promoted by W3C.[]
Non-standard extensions
Internet Explorer has introduced an array of proprietary extensions to many of the standards, including HTML, CSS,
and the DOM. This has resulted in a number of web pages that appear broken in standards-compliant web browsers
and has introduced the need for a "quirks mode" to allow for rendering improper elements meant for Internet
Explorer in these other browsers.
Internet Explorer has introduced a number of extensions to the DOM that have been adopted by other browsers.
These include the innerHTML property, which provides access to the HTML string within an element[citation needed] ;
the XMLHttpRequest object, which allows the sending of HTTP request and receiving of HTTP response, and is
essential to the AJAX web programming technique[citation needed] ; and the designMode attribute of the
contentDocument object, which enables rich text editing of HTML documents[citation needed] . Some of these
functionalities were not possible until the introduction of the W3C DOM methods. Its Ruby character extension to
HTML is also accepted as a module in W3C XHTML 1.1, though it is not found in all versions of W3C HTML.
Microsoft submitted several other features of IE for consideration by the W3C for standardization. These include the
'behaviour' CSS property, which connects the HTML elements with JScript behaviours (known as HTML
Components, HTC); HTML+TIME profile, which adds timing and media synchronization support to HTML
documents (similar to the W3C XHTML+SMIL), and the VML vector graphics file format. However, all were
rejected, at least in their original forms; VML was subsequently combined with PGML (proposed by Adobe and
Sun), resulting in the W3C-approved SVG format, currently one of the few vector image formats being used on the
web, but which IE did not support until version 9.[51]
Other non-standard behaviours include: support for vertical text, but in a syntax different from W3C CSS3 candidate
recommendation, support for a variety of image effects[52] and page transitions, which are not found in W3C CSS,
support for obfuscated script code, in particular JScript.Encode().[53] Support for embedding EOT fonts in
web pages.[54]
Favicon
The favicon (short for "favorites icon") introduced by Internet Explorer is now also supported and extended in other
browsers. It allows web pages to specify a 16-by-16 pixel image for use in bookmarks. In IE, support was, and still
is, provided only for the native Windows ICO format; in other browsers it has now been extended to other types of
images such as PNG and GIF.
Usability and accessibility
Internet Explorer makes use of the accessibility framework provided in Windows. Internet Explorer is also a user
interface for FTP, with operations similar to that of Windows Explorer. Pop-up blocking and tabbed browsing were
added respectively in Internet Explorer 6 and Internet Explorer 7. Tabbed browsing can also be added to older
versions by installing MSN Search Toolbar or Yahoo Toolbar.
194
Internet Explorer
Cache
Internet Explorer caches visited content in the Temporary Internet Files folder to allow quicker access (or offline
access) to previously visited pages. The content is indexed in a database file, known as Index.dat. Multiple Index.dat
files exist which index different content—visited content, web feeds, visited URLs, cookies, etc.[55]
Prior to IE7, clearing the cache used to clear the index but the files themselves were not reliably removed, posing a
potential security and privacy risk. In IE7 and later, when the cache is cleared, the cache files are more reliably
removed, and the index.dat file is overwritten with null bytes.
Caching has been improved in IE9.[56]
Group Policy
Internet Explorer is fully configurable using Group Policy. Administrators of Windows Server domains (for
domain-joined computers) or the local computer can apply and enforce a variety of settings on computers that affect
the user interface (such as disabling menu items and individual configuration options), as well as underlying security
features such as downloading of files, zone configuration, per-site settings, ActiveX control behaviour and others.
Policy settings can be configured for each user and for each machine. Internet Explorer also supports Integrated
Windows Authentication.
Architecture
Internet Explorer uses a componentized architecture built on
the Component Object Model (COM) technology. It consists
of several major components, each of which is contained in a
separate Dynamic-link library (DLL) and exposes a set of
COM programming interfaces hosted by the Internet
Explorer main executable, iexplore.exe:[]
• WinInet.dll is the protocol handler for HTTP,
HTTPS and FTP. It handles all network communication
over these protocols.
• URLMon.dll is responsible for MIME-type handling
and download of web content, and provides a thread-safe
wrapper around WinInet.dll and other protocol
implementations.
• MSHTML.dll houses the Trident rendering engine
The architecture of IE8. Previous versions had a similar
introduced in Internet Explorer 4, which is responsible for
architecture, except that both tabs and the UI were within the
same process. Consequently, each browser window could
displaying the pages on-screen and handling the
have only one "tab process".
Document Object Model of the web pages. MSHTML.dll
parses the HTML/CSS file and creates the internal DOM
tree representation of it. It also exposes a set of APIs for runtime inspection and modification of the DOM tree.
The DOM tree is further processed by a layout engine which then renders the internal representation on screen.
• IEFrame.dll contains the user interface and window of IE in Internet Explorer 7 and above.
• ShDocVw.dll provides the navigation, local caching and history functionalities for the browser.
• BrowseUI.dll is responsible for the browser user interface, including the browser chrome, which houses all
the menus and toolbars.[57]
Internet Explorer does not include any native scripting functionality. Rather, MSHTML.dll exposes an API that
permit a programmer to develop a scripting environment to be plugged-in and to access the DOM tree. Internet
Explorer 8 includes the bindings for the Active Scripting engine, which is a part of Microsoft Windows and allows
195
Internet Explorer
any language implemented as an Active Scripting module to be used for client-side scripting. By default, only the
JScript and VBScript modules are provided; third party implementations like ScreamingMonkey (for ECMAScript 4
support) can also be used. Microsoft also makes available the Microsoft Silverlight runtime that allows CLI
languages, including DLR-based dynamic languages like IronPython and IronRuby, to be used for client-side
scripting.
Internet Explorer 8 introduces some major architectural changes, called Loosely Coupled IE (LCIE). LCIE separates
the main window process (frame process) from the processes hosting the different web applications in different tabs
(tab processes). A frame process can create multiple tab processes, each of which can be of a different integrity level;
each tab process can host multiple web sites. The processes use asynchronous Inter-Process Communication to
synchronize themselves. Generally, there will be a single frame process for all web sites. In Windows Vista with
Protected Mode turned on, however, opening privileged content (such as local HTML pages) will create a new tab
process as it will not be constrained by Protected Mode.[58]
Extensibility
Internet Explorer exposes a set of Component Object Model (COM) interfaces that allow other components to
extend the functionality of the browser.[] Extensibility is divided into two types: Browser extensibility and Content
extensibility. The browser extensibility interfaces can be used to plug in components to add context menu entries,
toolbars, menu items or Browser Helper Objects (BHO). BHOs are used to extend the feature set of the browser,
whereas the other extensibility options are used to expose the feature in the UI. Content extensibility interfaces are
used by different content-type handlers to add support for non-native content formats.[] BHOs not only have
unrestricted access to the Internet Explorer DOM and event model, they also can access the filesystem, registry and
other OS components. Content extensibility can be either in terms of Active Documents (Doc Objects) (e.g., SVG or
MathML) or ActiveX controls.[] ActiveX controls are used for content handlers that render content embedded within
an HTML page (e.g., Adobe Flash or Microsoft Silverlight). Doc objects are used when the content type will not be
embedded in HTML (e.g., Microsoft Word, PDF or XPS). In fact, the Trident rendering engine is itself exposed as a
Doc object, so HTML in itself is treated as an Active Document.[]
Internet Explorer add-on components run with the same privileges as the browser itself, unlike client-side scripts that
have a very limited set of privileges. Add-ons can be installed either locally, or directly by a web site. Since the
add-ons have a more privileged access to the system, malicious add-ons can and have been used to compromise the
security of the system. Internet Explorer 6 Service Pack 2 onwards provide various safeguards against this, including
an Add-on Manager for controlling ActiveX controls and Browser Helper Objects and a "No Add-Ons" mode of
operation as well as greater restrictions on sites installing add-ons.
Internet Explorer 9 introduced a new component — Add-on Performance Advisor. Add-on Performance Advisor
shows a notification when one or more of installed add-ons exceed a pre-set performance threshold. The notification
appears in the Notification Bar when the user launches the browser.
Internet Explorer itself can be hosted by other applications via a set of COM interfaces. This can be used to embed
the browser functionality inside the application. Also, the hosting application can choose to host only the
MSHTML.dll rendering engine, rather than the entire browser.[]
196
Internet Explorer
Security
Internet Explorer uses a zone-based security framework that groups sites based on certain conditions, including
whether it is an Internet- or intranet-based site as well as a user-editable whitelist. Security restrictions are applied
per zone; all the sites in a zone are subject to the restrictions.
Internet Explorer 6 SP2 onwards uses the Attachment Execution Service of Microsoft Windows to mark executable
files downloaded from the Internet as being potentially unsafe. Accessing files marked as such will prompt the user
to make an explicit trust decision to execute the file, as executables originating from the Internet can be potentially
unsafe. This helps in preventing accidental installation of malware.
Internet Explorer 7 introduced the phishing filter, that restricts access to phishing sites unless the user overrides the
decision. With version 8, it also blocks access to sites known to host malware. Downloads are also checked to see if
they are known to be malware-infected.
In Windows Vista, Internet Explorer by default runs in what is called Protected Mode, where the privileges of the
browser itself are severely restricted—it cannot make any system-wide changes. One can optionally turn this mode
off but this is not recommended. This also effectively restricts the privileges of any add-ons. As a result, even if the
browser or any add-on is compromised, the damage the security breach can cause is limited.
Patches and updates to the browser are released periodically and made available through the Windows Update
service, as well as through Automatic Updates. Although security patches continue to be released for a range of
platforms, most feature additions and security infrastructure improvements are only made available on operating
systems which are in Microsoft's mainstream support phase.
On December 16, 2008, Trend Micro recommended users switch to rival browsers until an emergency IE patch was
released to fix a potential security risk which "could allow outside users to take control of a person's computer and
steal their passwords". Microsoft representatives countered this recommendation, claiming that "0.02% of internet
sites" were affected by the flaw.
On December 17, 2008, a fix to the security problem above became available, with the release of the Security
Update for Internet Explorer KB960714, which is available from Microsoft Windows Update's webpage. Microsoft
has said that this update fixes the security risk found by Trend Micro the previous day.[59][60]
In 2011, a report by Accuvant, funded by Google, rated the security (based on sandboxing) of Internet Explorer
worse than Google Chrome but better than Mozilla Firefox.[61][62]
Security vulnerabilities
Internet Explorer has been subjected to many security vulnerabilities and concerns: Much of the spyware, adware,
and computer viruses across the Internet are made possible by exploitable bugs and flaws in the security architecture
of Internet Explorer, sometimes requiring nothing more than viewing of a malicious web page in order to install
themselves. This is known as a "drive-by install". There are also attempts to trick the user into installing malicious
software by misrepresenting the software's true purpose in the description section of an ActiveX security alert.
A number of security flaws affecting IE originated not in the browser itself, but ActiveX-based add-ons used by it.
Because the add-ons have the same privilege as IE, the flaws can be as critical as browser flaws. This has led to the
ActiveX-based architecture being criticized for being fault-prone. By 2005, some experts maintained that the dangers
of ActiveX have been overstated and there were safeguards in place.[63] In 2006, new techniques using automated
testing found more than a hundred vulnerabilities in standard Microsoft ActiveX components.[64] Security features
introduced in Internet Explorer 7 mitigated some of these vulnerabilities.
Internet Explorer in 2008 had a number of published security vulnerabilities. According to research done by security
research firm Secunia, Microsoft did not respond as quickly as its competitors in fixing security holes and making
patches available.[65] The firm also reported 366 vulnerabilities in ActiveX controls, an increase from the prior year.
197
Internet Explorer
198
According to an October 2010 report in The Register, researcher Chris Evans had detected a known security
vulnerability which, then dating back to 2008, had not been fixed for at least 600 days.[66] Microsoft says that it had
known about this vulnerability but it was of very low severity as the victim web site must be configured in a special
way for this attack to be feasible at all.[67]
In December 2010, researchers have been able to bypass the "Protected Mode" feature in Internet Explorer.[68]
A security vulnerability exists in all versions of Internet Explorer higher than version 6, which allows the user's
mouse cursor to be tracked by malicious display ads, even when Internet Explorer has been minimized. Microsoft
has stated that it has no immediate plans to fix this vulnerability.[69][70]
Vulnerability exploited in attacks on U.S. firms
In an advisory on January 14, 2010, Microsoft said that attackers targeting Google and other U.S. companies used
software that exploits a security hole, which had already been patched, in Internet Explorer. The vulnerability
affected Internet Explorer 6, IE7, and IE8 on Windows 7, Vista, Windows XP, Server 2003, and Server 2008 R2, as
well as IE 6 Service Pack 1 on Windows 2000 Service Pack 4.[71]
The German government warned users against using Internet Explorer and recommended switching to an alternative
web browser, due to the major security hole described above that was exploited in Internet Explorer.[72] The
Australian and French Government issued a similar warning a few days later.[73][74] The first browser they
recommended was Mozilla Firefox, followed by Google Chrome.[75][76]
Market adoption and usage share
Usage share of web browsers according to
StatCounter
Usage share of web browsers
Internet Explorer
199
The adoption rate of Internet Explorer seems
to be closely related to that of Microsoft
Windows, as it is the default web browser
that comes with Windows. Since the
integration of Internet Explorer 2.0 with
Windows 95 OSR 1 in 1996, and especially
after version 4.0's release, the adoption was
greatly accelerated: from below 20% in
1996 to about 40% in 1998 and over 80% in
2000.
Historical market share of Internet Explorer, 1994–2011.
A CNN article noted at the release of
Internet Explorer 4: "Microsoft's Internet Explorer has made inroads and various estimates put its share of the
browser market 30 to 35 percent from about 10 percent a year ago."[77] By 2002, Internet Explorer had almost
completely superseded its main rival Netscape and dominated the market with up to 95 percent market share. After
having fought and won the browser wars of the late 1990s, Internet Explorer gained almost total dominance of the
browser market. Having attained a peak of about 95% during 2002 and 2003, its market share has since declined at a
slow but steady pace. Usage is higher in Asia and lower in Europe.
Firefox 1.0 had surpassed Internet Explorer 5 in early 2005 with Firefox 1.0 at roughly 8 percent market share.[78]
An article notes at the release of Internet Explorer 7 in October 2006 that "IE6 had the lion's share of the browser
market with 77.22%. Internet Explorer 7 had climbed to 3.18%, while Firefox 2.0 was at 0.69%."[79]
Internet Explorer 7 was released at the same time as Firefox 2.0, and overtook Firefox 1.x by November 2006, at
roughly 9% market share.[80] Firefox 2.0 had overtaken 1.x by January 2007,[81] but IE7 did not surpass IE6 until
December 2007.[82] By January 2008, their respective version market share stood at 43% IE7, 32% IE6, 16% FF2,
4% Safari 3 and both FF1.x and IE5 versions at less than half a percent.[83]
Approximate usage over time based on various usage share counters averaged for the year overall, or for the fourth
quarter, or for the last month in the year depending on availability of reference.[][84][][][][]
According to StatCounter Internet Explorer's marketshare fell below 50% in September 2010.[85] In May 2012 it was
announced that Google Chrome overtook Internet Explorer as the most used browser worldwide.
Desktop Market share by year and version
Approximate usage over time based on various usage share counters averaged for the year overall, or for the fourth
quarter, or for the last month in the year depending on availability of reference.[84][][][][][][86][87][88]
Total
[88]
2012
53.77%
2011
56.24%
2010
60.04%
2009
66.92%
IE10
[88]
0.14%
IE9
[88]
16.77%
[87]
IE8
[88]
25.87%
[87]
-
[86]
-
-
29.43%
[]
-
-
10.40%
2008 72.65% []
-
-
0.34%
2007 78.60% []
-
-
5.30%
[87]
32.36%
[86]
[]
IE7
[88]
3.49%
[87]
7.00%
[86]
11.61%
26.10%
[]
46.06%
-
45.50%
[]
[]
[]
IE6
[88]
6.81%
[87]
10.19%
[86]
16.79%
27.40%
26.20%
32.64%
[]
[]
[]
IE5
IE4
IE3 IE2 IE1
[88]
0% 0% 0%
[87]
0%
0% 0% 0%
[86]
0%
0% 0% 0%
[88]
0%
0.01%
0.01%
0.02%
0.08%
0.15%
0.45%
[]
[]
[]
0%
0% 0% 0%
[]
0% 0% 0%
[]
0% 0% 0%
0.01%
0.01%
Internet Explorer
200
2006 83.30% []
-
-
-
2005 87.12 %[]
-
-
-
-
82.71%
2004 91.27 %[]
-
-
-
-
83.39%
[]
-
-
-
-
59.00%
[]
-
-
-
-
50.00%
[]
-
-
-
-
19.00%
[]
-
-
-
-
-
71.00%
[]
-
-
-
-
-
41.00%
[]
-
-
-
-
-
-
?
?
?
?
[84]
-
-
-
-
-
-
?
?
?
?
[84]
-
-
-
-
-
-
-
?
?
?
[84]
-
-
-
-
-
-
-
-
?
?
2003
94.43%
2002
93.94%
2001
90.83%
2000
83.95%
1999
75.31%
1998
45.00%
1997
39.40%
1996
20.00%
1995
2.90%
3.49%
[]
78.08%
[]
1.42%
[]
4.35%
[]
7.77%
[]
[]
0.02%
[]
0.06%
[]
0.10%
[]
34.00%
[]
[]
41.00%
[]
[]
68.00%
[]
[]
1.00%
1.00%
5.00%
[]
0% 0% 0%
[]
0% 0% 0%
[]
0% 0% 0%
[]
0% 0% 0%
[]
0% 0% 0%
[]
0% 0% 0%
[]
13.00%
[]
36.00%
0%
1.00%
0% 0%
[] 0% 0%
Industry adoption
Browser Helper Objects are also used by many search engine companies and third parties for creating add-ons that
access their services, such as search engine toolbars. Because of the use of COM, it is possible to embed
web-browsing functionality in third-party applications. Hence, there are a number of Internet Explorer shells, and a
number of content-centric applications like RealPlayer also use Internet Explorer's web browsing module for
viewing web pages within the applications.
OS compatibility
IE versions, over time, have had widely varying OS compatibility, ranging from being available for many platforms
and several versions of Windows to only a few versions of Windows. Many versions of IE had some support for an
older OS but stopped getting updates. The increased growth of the Internet in the 1990s and 2000s (decade) means
that current browsers with small market shares have more total users than the entire market early on. For example,
90% market share in 1997 would be roughly 60 million[] users, but by the start of 2007 90% market share would
equate to over 900 million users.[] The result is that later versions of IE6 had many more users in total than all the
early versions put together.
The release of IE7 at the end of 2006 resulted in a collapse of IE6 market share; by February 2007, market version
share statistics showed IE6 at about 50% and IE7 at 29%.[89] Regardless of the actual market share, the most
compatible version (across operating systems) of IE was 5.x, which had Mac OS 9 and Mac OS X, Unix, and most
Windows versions available and supported for a short period in the late 1990s (although 4.x had a more unified
codebase across versions). By 2007, IE had much narrower OS support, with the latest versions supporting only
Windows XP Service Pack 2 and above. Internet Explorer 5.0, 5.5, 6.0, and 7.0 (Experimental) have also been
Internet Explorer
201
unofficially ported to the Linux operating system from the project IEs4Linux.
Years
Layout
IBM
Microsoft Windows
engine
Apple Mac OS
Unix
OS/2
8, WS 12
7, WS 08 R2
Vista,
WS 03
XP
Me
2000
98
NT 4.0
95
NT 3.51
NT 3.5
NT 3.1
3.1x
from 2.1
WS 08
X
PPC
7.6 to
7.5.x
7.1 to 8.1
9.2.2
PPC
68K
PPC
7.0.1
68K
HP-UX
Solaris
7.1.2
PPC
-
-
2012–present 2009–present 2006-2011 2003-2009 2001-2009 2000-2001 2000-2001 1998-2001 1996-2001 1995-2000 1995-1999 1994-1996 1993-1995 1992-1999 1993-1996
Years
2001
1997-1999 1994-1999 1992-1997 1991-1995 1996-1999
(PPC
(SP 2/3)
Systems
available
only)
2012
Trident
IE 10
Included
Yes
No
Yes
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
Yes with
Yes with
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
SP2
SP2/3
Yes with
Yes with
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
SP1/2
SP2/3&
Included
Included
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
6.0
2011
IE 9
Trident
[90]
Yes with
Update
5.0
2009
IE 8
Trident
[91]
No
Included
Yes
4.0
2006
Trident
IE 7
No
2001
Included
Trident
IE 6
No
2000
No
No
No$
Yes
Yes
Yes
Yes
6.0 SP1
6.0 SP1
6.0 SP1
6.0 SP1
Included
Yes
Yes
Yes
Trident
IE 5.5
No
No
No
No
No***
Yes
5.5 SP2
1999
Trident
Win
IE 5.0
No
No
No
No
No***
No
Tasman
Included
Included
Yes
5.01 SP4
with 98SE
Yes
Yes
16-bit
Yes
No
16-bit
Included Included¥
5.2.3
€
5.1.7
Yes
5.01 SP1
€
Mac
IE 4.5
1999
-
1997
Trident
IE 4.0
1996
No
No
No
No
No
No
No
No
No
No
No
No
No***
No
No
Included
Yes
-
IE 3.0
No
1995
No
No***
No
No***
No
No***
No
Yes
-
IE 2.0
IE 1.5
No
No
1996
Spyglass
1995
Spyglass
IE 1.0
No
No
No
No
No
No
No
Included
No
No
No
No
No
No
No
No
Yes
No
No
No
No
No
No
No
No
No
No
No
Included
Yes
OSR2.5
16-bit
No
No
No
No
No
Yes
No
No
Included€
Yes
No
No
Included€
Yes
Yes
Yes
OSR2
16-bit
16-bit
No
No
Included€
Yes
Included€
No
Yes
Yes
Yes£
Yes
Win.
16-bit
16-bit
No
Yes
No
Beta
Yes£
Included
Yes
Yes
Yes
Yes
Win.
OSR1
16-bit
16-bit
16-bit
16-bit
16-bit
Yes
Yes
Yes
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No
2.0.1
Non-free
[92][93]
Internet Explorer 6 SP2 is only available as part of Windows XP SP2 or Windows Server 2003 SP1 or SP2.
The version of Internet Explorer included with Windows 95 varied by OSR release; 2.0 was included with OSR1,
3.0 was included with OSR2, and 4.0 was included with OSR2.5.
***
No native support, but possible with third-party "Standalone" installer.
&
Final version of Windows XP Service Pack 3 does not include IE7.
$
No native support, but possible with third party Standalone installer of IE6 Alpha. See also Internet Explorer
Mobile. Non-desktop versions of IE have supported Windows CE also.
**
No
Yes
Plus!
*
No
4.01
16-bit
Included
No
Internet Explorer
202
£
Internet Explorer 2.0 and 2.0.1 requires System 7.0.1 or higher. Internet Explorer 2.1 requires System 7.1 or higher.
Included Internet Explorer 3.01 in Mac OS 8.0 and Mac OS 8.1; Internet Explorer 4.01 in Mac OS 8.5 and 8.5.1;
Internet Explorer 4.5 from Mac OS 8.6 to 9.0.4; Internet Explorer 5 from Mac OS 9.1 to 9.2.2 and Mac OS X v10.0;
Internet Explorer 5.1 in Mac OS X v10.1; Internet Explorer 5.2 in Mac OS X v10.2.
¥
Internet Explorer 5 Macintosh Edition requires Mac OS 7.6 or higher. Internet Explorer version 5.1; 5.1.4; 5.1.5;
5.1.6 and 5.1.7 requires Mac OS 8.0 or higher or Mac OS 7.6.1 with Appearance Manager.
16
16-bit version
€
"Standalone" Internet Explorer
While Microsoft claims it is impossible to keep multiple versions of Internet Explorer on the same machine, some
hackers have successfully separated several versions of Internet Explorer, making them standalone
applications.[citation needed] A web developer, Joe Maddalone, is credited with finding a solution (Multiple IEs in
Windows Web Design [94]). These are referred to as "standalone" IEs[citation needed] and go as far back as Internet
Explorer version 3.
Standalone installers
Microsoft has discontinued standalone installers for Internet Explorer to the general public. However, there are
unofficial procedures for downloading the complete install package. Internet Explorer standalone uses a feature
introduced in Windows 2000 called DLL redirection [95] to force it to load older DLLs than the ones installed on the
system.
• IE Collection [96]. An installer for the standalone versions of IE8.0, IE7.0, IE6.0, IE5.51, IE5.01, IE4.01, IE3.0,
IE2.01, IE1.5, and IE1.0.
• Microsoft Support [97] document, with instructions for downloading the entire set of installation files.
Alternative environments
It is also possible to install Internet Explorer in Wine (a compatibility
layer):
• IEs4Linux automatically sets up Internet Explorer 5.0, 5.5, and 6.0
in Wine. Support for Internet Explorer 7 development was started
August 2007, and stalled with the last package being available in
2008. That package used an IE7 rendering engine with the IE6 user
interface.[98] There was a blog post on January 5, 2011 announcing
that the developers are working to support IE9 and will soon release
a new version after almost 3 years of inactivity.[99]
Internet Explorer 6 running on Linux in Wine.
• IETester is a side-by-side compatibility checker for different versions of Internet Explorer. As of 2011, it is
available from DebugBar [100] as an alpha release. Its highest tester rating from the WineHQ profile [101] has been
Bronze.
As an alternative to using IE standalone, Microsoft now makes available Windows Virtual PC images containing
copies of Microsoft Windows with IE installed:[]
• Windows XP SP3 with IE6 (with installers for IE7 and IE8)
• Windows Vista SP2 with IE7 (with installers for IE8 and IE9)
• Windows 7 SP1 with IE8 (with install files for IE9)
• Windows 7 IE9 + Tools Image
According to Microsoft's site, the images were last released on 16 August 2011 and expired on 17 November 2011.
Internet Explorer
Microsoft recommends this approach for web developers seeking to test their pages in the different versions of IE as
the standalone versions are unsupported and may not work the same way as a properly installed copy of IE.[102][]
Versioning
Despite the official stance that only one version of Internet Explorer can be installed on the same machine, there are
notable exceptions.
Early versions of Internet Explorer such as 5 had a compatibility mode to run Internet Explorer 4, though this feature
was dropped (also, Internet Explorer for Mac users could still use 4.5 after installing IE 5[citation needed]). Internet
Explorer 8 brought back the concept of a compatibility mode, but users cannot actually run the earlier versions of
Internet Explorer.
Removal
While a major upgrade of Internet Explorer can be uninstalled in a traditional way if the user has saved the original
application files for installation, the matter of uninstalling the version of the browser that has shipped with an
operating system remains a controversial one.
The idea of removing a stock install of Internet Explorer from a Windows system was proposed during the United
States v. Microsoft case. One of Microsoft's arguments during the trial was that removing Internet Explorer from
Windows may result in system instability.
Removing Internet Explorer does have a number of consequences. Applications that depend on libraries installed by
IE will fail to function correctly. The Windows help and support system will also not function due to the heavy
reliance on HTML help files and components of IE. In versions of Windows before Vista, it is also not possible to
run Microsoft's Windows Update or Microsoft Update with any other browser due to the service's implementation of
an ActiveX control, which no other browser supports. In Windows Vista, Windows Update is implemented as a
Control Panel applet.
With Windows 7, Microsoft added the ability to safely remove Internet Explorer 8 from Windows.[103] Doing so
removes the browser's executable file, unregisters its HTTP shell protocol handlers, and removes the icons from the
user interface.
References
[2] http:/ / en. wikipedia. org/ w/ index. php?title=Template:Latest_stable_software_release/ Internet_Explorer& action=edit
[3] http:/ / en. wikipedia. org/ w/ index. php?title=Template:Latest_preview_software_release/ Internet_Explorer& action=edit
[4] http:/ / windows. microsoft. com/ en-US/ internet-explorer/ download-ie
[6] http:/ / en. wikipedia. org/ w/ index. php?title=Internet_Explorer& action=edit
[12] "By having IE3 rename your previous version, Microsoft gives you a fallback in case IE3 crashes. IE3 also scans for Netscape bookmarks
and converts them to IE3 favorites."
[20] SV1 stands for "Security Version 1", referring to the set of security enhancements made for that release []. This version of Internet Explorer
is more popularly known as IE6 SP2, given that it is included with Windows XP Service Pack 2, but this can lead to confusion when
discussing Windows Server 2003, which includes the same functionality in the SP1 update to that operating system.
[49] http:/ / test. csswg. org/ suites/ css2. 1/ 20110323/ report/ results. html
[56] Internet Explorer 9 Network Performance Improvements (http:/ / blogs. msdn. com/ b/ ie/ archive/ 2011/ 03/ 17/
internet-explorer-9-network-performance-improvements. aspx)
[77] A CNN article noted at the release of Internet Explorer 4, "Microsoft's Internet Explorer has made inroads and various estimates put its
share of the browser market 30 to 35 percent from about 10 percent a year ago".
[84] Borland, John. Browser wars: High price, huge rewards (http:/ / www. zdnet. com/ news/ browser-wars-high-price-huge-rewards/
128738?tag=search-results-rivers;item2), ZDNet, April 15, 2003. Accessed June 2, 2012.
[86] Market Share 2010 overall (http:/ / marketshare. hitslink. com/ browser-market-share. aspx?qprid=0& qptimeframe=Y& qpsp=2010&
qpnp=1) Market Share 2010 browsers (http:/ / marketshare. hitslink. com/ browser-market-share. aspx?qprid=2& qptimeframe=M&
qpsp=132& qpnp=12)
203
Internet Explorer
[87] Market Share (http:/ / marketshare. hitslink. com/ browser-market-share. aspx?qprid=0& qpcustomd=0& qptimeframe=M& qpsp=144&
qpnp=12) Version Share (http:/ / marketshare. hitslink. com/ browser-market-share. aspx?qprid=2& qpcustomd=0)
[88] Market Share (http:/ / marketshare. hitslink. com/ browser-market-share. aspx?qprid=0& qpcustomd=0& qptimeframe=M& qpsp=156&
qpnp=12) Version Share (http:/ / marketshare. hitslink. com/ browser-market-share. aspx?qprid=2& qpcustomd=0)
[94] http:/ / labs. insert-title. com/ Multiple-IEs-in-Windows_article795. aspx
[95] http:/ / msdn2. microsoft. com/ en-us/ library/ ms682600. aspx
[96] http:/ / finalbuilds. edskes. net/ iecollection. htm
[97] http:/ / support. microsoft. com/ kb/ 257249/ EN-US
[100] http:/ / www. my-debugbar. com/ wiki/ IETester/ HomePage
[101] http:/ / appdb. winehq. org/ objectManager. php?sClass=application& iId=7039
Further reading
• "Microsoft Windows Family Home Page" (http://www.microsoft.com/windows/WinHistoryIE.mspx).
Windows History: Internet Explorer History. Retrieved 2005-05-12.
• "Index DOT Html and Index DOT Css" (http://www.blooberry.com/indexdot/history/ie.htm). Browser
History: Windows Internet Explorer. Retrieved 2005-05-12.
• "Microsoft Windows Family Home Page" (http://www.microsoft.com/windows/WinHistoryIE.mspx).
Windows History: Internet Explorer History. Retrieved 2005-05-12.
• "Microsoft Knowledge Base" (http://support.microsoft.com/?kbid=164539). How to determine which version
of Internet Explorer is installed. Retrieved 2005-11-06.
• "Index DOT Html and Index DOT Css" (http://www.blooberry.com/indexdot/history/ie.htm). Browser
History: Windows Internet Explorer. Retrieved 2005-05-12.
• "Windows Vista & IE7 Beta 1 Available" (http://blogs.msdn.com/ie/archive/2005/07/27/444004.aspx).
IEBlog. Retrieved 2005-07-27.
• "Standards and CSS in IE" (http://blogs.msdn.com/ie/archive/2005/07/29/445242.aspx). Retrieved
2005-07-29.
• "IE7 Is Coming This Month" (http://blogs.msdn.com/ie/archive/2006/10/06/
IE7-Is-Coming-This-Month_2E002E002E00_Are-you-Ready_3F00_.aspx). IEBlog. Retrieved 2006-10-09.
• "IE7 Platforms And Outlook Express" (http://blogs.msdn.com/ie/archive/2005/02/28/382054.aspx).
IEBlog. Retrieved 2005-05-12.
• "RSA Conference 2005 - Gates Highlights Progress on Security, Outlines Next Steps for Continued Innovation"
(http://www.microsoft.com/presspass/press/2005/feb05/02-15RSA05KeynotePR.asp). Microsoft News
Center. Retrieved 2005-05-12.
• Williams, Mary-Lynne; MacNeil, Leslie; Hall, Marty. "User Experiences: Evolving the blue "e"" (http://blogs.
msdn.com/b/ie/archive/2010/09/16/internet-explorer-9-logo-visual-refresh.aspx). IEBlog. Microsoft
corporation. Retrieved 2010-10-17.
External links
•
•
•
•
Official website (http://www.microsoft.com/windows/internet-explorer/)
IEBlog - MSDN Blogs (http://blogs.msdn.com/ie)—The weblog of the Internet Explorer team
Internet Explorer Architecture (http://msdn2.microsoft.com/en-us/library/aa741312.aspx)
Internet Explorer Community (http://www.microsoft.com/windows/ie/community/)—The official Microsoft
Internet Explorer Community
• Internet Explorer History (http://www.microsoft.com/windows/WinHistoryIE.mspx)
• IE Leak Patterns (http://msdn2.microsoft.com/en-us/library/Bb250448.aspx)—Microsoft's analysis of how
web pages can cause memory leaks in Internet Explorer, and how developers can prevent them.
204
Google Chrome
205
Google Chrome
Google Chrome
Google Chrome displaying the Wikipedia home page in Windows 8
Developer(s)
Google Inc.
Initial release
September 2, 2008
Stable release
25.0.1364.172 [ edit
[1]]
[2]
(March 12, 2013)
Mobile versions:
Android
[3]
25.0.1364.169 (ARM, x86) [ edit ]
[4][5]
(March 8, 2013)
iOS
[6]
[7]
25.0.1364.124 [ edit ] (March 12, 2013)
Preview release
Beta
[8]
[]
26.0.1410.33
(March 13, 2013)
Dev
[8]
[]
27.0.1438.7
(March 13, 2013)
Development status Active
Written in
C++, assembly, Python, JavaScript
Operating system
Android (4.0 and later)
iOS (4.3 or later)
Linux
OS X (10.6 and later)
Windows (XP Service Pack 2 and later)
Engine
WebKit, V8 JavaScript engine
Available in
53 languages
Type
Web browser, mobile web browser
License
[][9]
Freeware under Google Chrome Terms of Service
Website
www.google.com/chrome
[10]
Google Chrome
206
Google Chrome is a freeware web browser[] developed by Google that uses the WebKit layout engine. It was
released as a beta version for Microsoft Windows on September 2, 2008, and as a stable public release on December
11, 2008. As of February 2013[11], according to StatCounter, Google Chrome has a 37% worldwide usage share of
web browsers making it the most widely used web browser in the world.[] Net Applications, however, indicates that
Chrome is only third when it comes to the size of its user base, behind Internet Explorer and Firefox.[12]
In September 2008, Google released a large portion of Chrome's source code as an open source project called
Chromium,[13][14] on which Chrome releases are still based.
History
Google's Eric Schmidt opposed the development of an independent web browser for six years. He stated that "at the
time, Google was a small company", and he did not want to go through "bruising browser wars". After co-founders
Sergey Brin and Larry Page hired several Mozilla Firefox developers and built a demonstration of Chrome, however,
Schmidt admitted that "It was so good that it essentially forced me to change my mind".[15]
Announcement
The release announcement was originally scheduled for September 3, 2008, and a comic by Scott McCloud was to
be sent to journalists and bloggers explaining the features within the new browser.[] Copies intended for Europe were
shipped early and German blogger Philipp Lenssen of Google Blogoscoped[] made a scanned copy of the 38-page
comic available on his website after receiving it on September 1, 2008.[] Google subsequently made the comic
available on Google Books[] and mentioned it on their official blog along with an explanation for the early release.[]
Public release
The browser was first publicly released for Microsoft Windows (XP
and later versions) on September 2, 2008 in 43 languages, officially a
beta version.[16]
On the same day, a CNET news item[17] drew attention to a passage in
the Terms of Service statement for the initial beta release, which
seemed to grant to Google a license to all content transferred via the
Chrome browser. This passage was inherited from the general Google
terms of service.[18] Google responded to this criticism immediately by
stating that the language used was borrowed from other products, and
removed this passage from the Terms of Service.[19]
[][][][20]
Chrome quickly gained about 1% usage share.
After the initial
surge, usage share dropped until it hit a low of 0.69% in October 2008.
It then started rising again and by December 2008, Chrome again
passed the 1% threshold.[21]
An early version of Chromium for Linux,
explaining the difference between Chrome and
Chromium
In early January 2009, CNET reported that Google planned to release versions of Chrome for OS X and Linux in the
first half of the year.[] The first official Chrome OS X and Linux developer previews[22] were announced on June 4,
2009 with a blog post[23] saying they were missing many features and were intended for early feedback rather than
general use.
In December 2009, Google released beta versions of Chrome for OS X and Linux.[24][] Google Chrome 5.0,
announced on May 25, 2010, was the first stable release to support all three platforms.[25]
Chrome was one of the twelve browsers offered to European Economic Area users of Microsoft Windows in
2010.[26]
Google Chrome
207
Development
Chrome was assembled from 25 different code libraries from Google and third parties such as Mozilla's Netscape
Portable Runtime, Network Security Services, NPAPI, Skia Graphics Engine, SQLite, and a number of other
open-source projects.[27] The V8 JavaScript virtual machine was considered a sufficiently important project to be
split off (as was Adobe/Mozilla's Tamarin) and handled by a separate team in Denmark coordinated by Lars Bak at
Aarhus. According to Google, existing implementations were designed "for small programs, where the performance
and interactivity of the system weren't that important", but web applications such as Gmail "are using the web
browser to the fullest when it comes to DOM manipulations and JavaScript", and therefore would significantly
benefit from a JavaScript engine that could work faster.
Web browser statistics on Wikimedia
Chrome
30.60%
I.E.
22.01%
Firefox
19.11%
Safari
15.15%
Android
4.26%
Opera
4.37%
Other
4.50%
[]
Web browser usage for Wikimedia visitors as of October 2012[11]. I.E. = Internet Explorer.
Chrome uses the WebKit rendering engine to display web pages, on advice from the Android team.[] Chrome is
tested internally with unit testing, "automated user interface testing of scripted user actions", fuzz testing, as well as
WebKit's layout tests (99% of which Chrome is claimed to have passed) and against commonly accessed websites
inside the Google index within 20–30 minutes.[]
Google created Gears for Chrome, which added features for web developers typically relating to the building of web
applications, including offline support.[] However, Google phased out Gears in favor of HTML5.[28]
On January 11, 2011 the Chrome product manager, Mike Jazayeri, announced that Chrome would remove H.264
video codec support for its HTML5 player, citing the desire to bring Google Chrome more in line with the currently
available open codecs available in the Chromium project, which Chrome is based on.[29] Despite this, on November
6, 2012, Google released a version of Chrome on Windows which added hardware-accelerated H.264 video
decoding.[30] As of January 2013, there has been no further announcement about the future of Chrome H.264
support.
On February 7, 2012, Google launched Google Chrome Beta for Android 4.0 (Ice Cream Sandwich) devices.[] On
many new devices with Jelly Bean preinstalled, Chrome is the default browser.[31]
Google Chrome
Windows 8 mode
In March 2012 Google announced the development of a version of Chrome for both the Metro and desktop versions
of Windows 8.[32] After the release of Windows 8, a new version of the browser was released to work with the
Microsoft Metro/Modern design. The browser can be run on both Desktop and Metro version. The title-bar changes
to black when it is switched to Windows 8 mode. Only Pepper API plugins run in Windows 8 mode.[33]
Enterprise deployment
In December 2010 Google announced that to make deploying Chrome easier in a business environment they would
provide an official Chrome MSI package. For enterprise deployments it's important to have full-fledged MSI
packages that can be customized via transform files (.mst), but the provided MSI is only a very limiting MSI wrapper
around the normal installer that does not fulfill enterprise needs.[34] The normal downloaded Chrome installer puts
the browser in the user's local app data directory and provides invisible background updates, but the MSI package
will allow installation at the system level, providing system administrators control over the update process[] — it was
formerly possible only when Chrome was installed using Google Pack. Google also created Group Policies to fine
tune the behavior of Chrome in the business environment, for example setting automatic updates interval, disable
auto-updates, a home page and to workaround their basic Windows design flaws and bugs if it comes to roaming
profiles support, etc.[35] Until version 24 the software is known not to be ready for enterprise deployments with
roaming profiles or Terminal Server/Citrix environments.[36]
Chromium
In September 2008, Google released a large portion of Chrome's source code as an open source project called
Chromium. This move enabled third-party developers to study the underlying source code and to help port the
browser to the OS X and Linux operating systems. The Google-authored portion of Chromium is released under the
permissive BSD license.[37] Other portions of the source code are subject to a variety of open source licenses.[38]
Chromium is similar to Chrome, but lacks built-in automatic updates, built-in PDF reader and built-in Flash player,
as well as Google branding and has a blue-colored logo instead of the multicolored Google logo.[][39] Chromium
does not implement user RLZ tracking.[][][]
Release history
Click "show" to expand the release version history table below.
Features
Google Chrome aims to be secure, fast, simple[41] and stable. There are extensive differences from its peers in
Chrome's minimalistic user interface,[] which is atypical of modern web browsers.[42] For example, Chrome does not
render RSS feeds.[43] One of Chrome's strengths is its application performance and JavaScript processing speed, both
of which were independently verified by multiple websites to be the swiftest among the major browsers of its
time.[44][45] Many of Chrome's unique features had been previously announced by other browser developers, but
Google was the first to implement and publicly release them.[46] For example, its most prominent graphical user
interface (GUI) innovation, the merging of the address bar and search bar (the Omnibox), was first announced by
Mozilla in May 2008 as a planned feature for Firefox.[47] Both Internet Explorer 9 and Safari (version 6) have since
merged the search and address bar.
208
Google Chrome
209
Web standards support
The first release of Google Chrome passed both the Acid1 and Acid2
tests. Beginning with version 4.0, Chrome has passed all aspects of the
Acid3 test.[]
Chrome has currently quite good support for JavaScript/ECMAScript
according to Ecma International's ECMAScript standards conformance
Test 262[48] (version ES5.1 of 2012-05-18). This test reports as final
score the number of tests a browser failed; hence lower scores are
better. In this test, Chrome version 25.0.1364.97 scored 15/11572. For
comparison, Firefox 15 scored 172/11752 and Internet Explorer 9 has a
score of 600+, while Internet Explorer 10 has a score of 7.
The results of the Acid3 test on Google Chrome
4.0
On the official CSS 2.1 test suite by standardization organization W3C, WebKit, the Chrome rendering engine,
passes 89.75% (89.38% out of 99.59% covered) CSS 2.1 tests.[49]
On the HTML5 test (version 4.0), Chrome 25 on desktop scored 463 out of 500, with 13 bonus points. Chrome's
tablet version was fourth place, with 390 points and 11 bonus points. Chrome got fourth place on mobile browsers,
with 390 points.[50][51][52]
Security
Chrome periodically retrieves updates of two blacklists (one for phishing and one for malware), and warns users
when they attempt to visit a harmful site. This service is also made available for use by others via a free public API
called "Google Safe Browsing API".[]
Chrome uses a complex process-allocation model to allocate different tabs to fit into different processes to prevent
what happens in one tab from affecting what happens in others.[53] Following the principle of least privilege, each
process is stripped of its rights and can compute, but cannot interact with sensitive areas (e.g. OS memory, user files)
— this is similar to the "Protected Mode" used by Internet Explorer 9 and 10. The Sandbox Team is said to have
"taken this existing process boundary and made it into a jail." This enforces a computer security model whereby
there are two levels of multilevel security (user and sandbox) and the sandbox can only respond to communication
requests initiated by the user.[] On Linux sandboxing uses the seccomp mode.[54][55]
In December 2011 a report by Accuvant, funded by Google, rated the sandbox security of Google Chrome 12 and 13
as better than either Internet Explorer 9 or Mozilla Firefox 5.[56]
Security vulnerabilities
No security vulnerabilities in Chrome had been successfully exploited in the three years of Pwn2Own from
2009–11.[57]
However, Chrome was the first browser to be defeated at Pwn2Own 2012, by a French team who used zero day
exploits to take complete control of a fully patched 64-bit Windows 7 PC using a booby-trapped website that
overcame Chrome's sandboxing.[]
Chrome was also compromised twice at the 2012 CanSecWest Pwnium.[][58][59] Google's official response to the
exploits was delivered by Jason Kersey, who congratulated the researchers, noting "We also believe that both
submissions are works of art and deserve wider sharing and recognition."[] Fixes for these vulnerabilities were
deployed within 10 hours of the submission.[60][61]
The browser Version 23 fixed 15 security vulnerabilities of which six were rated as high sensitivity.[62]
Google Chrome
210
Malware blocking
A study has shown that users are four times more likely to be tricked into downloading malware than be
compromised by an exploit.[63] A May 2011 study reported Chrome 10 blocked only 13% of malicious URLs, the
same as Safari and Firefox, behind Internet Explorer 9 which blocked 92%, and 100% with application-based
filtering enabled. Referring to that study, Ars Technica wrote in July 2011 that "Even with the false positives,
Microsoft's approach appears to be more secure."[64][65] A February 2012 study reported that Chrome 15 had a
34.1% malware-blocking rate.[66][67] Neither study analyzed exploits that install malware without the user being
aware (for example clickjacking and drive-by downloads).
Google introduced new security functionality — download scanning protection — in Chrome 17.[][68]
Plugins
• Chrome supports plug-ins with the Netscape Plugin Application Programming Interface (NPAPI),[] so that
plug-ins (for example Adobe Flash Player) run as an unrestricted separate process outside the browser and cannot
be sandboxed as tabs are. ActiveX is not supported.[] On March 30, 2010 Google announced that the latest
development version of Chrome would bundle Adobe Flash with the browser, eliminating the need to download
and install it separately. Flash would be kept up to date as part of Chrome's own updates.[] Java applet support is
available in Chrome with Java 6 update 12 and above.[69] Support for Java under OS X was provided by a Java
Update released on May 18, 2010.[70]
• On August 12, 2009, Google introduced a replacement for NPAPI that is more portable and more secure[71] called
Pepper Plugin API (PPAPI).[72] The default bundled PPAPI Flash Player (or Pepper-based Flash Player) was
available on Chrome OS first, then replaced the NPAPI Flash Player on Linux from Chrome version 20, on
Windows from version 21 (which also reduced Flash crashes by 20%),[] and eventually came to OS X at version
23.[]
Privacy
Privacy mode
The private browsing feature called Incognito mode prevents the browser from permanently storing any history
information or cookies from the websites visited.[73] Incognito mode is similar to the private browsing feature in
other web browsers. Chrome was the second browser to implement this feature, after Safari.
Usage tracking
Chrome sends details about its usage to Google through both optional and non-optional user tracking
mechanisms.[74]
Tracking methods
[]
Method
Information sent
When
Installation
Randomly generated token included in installer. Used to measure success
[]
rate of Google Chrome once at installation.
On installation
RLZ
[75]
identifier
Encoded string, according to Google, contains non-identifying
information how Chrome was downloaded and its install week, and is
[]
used to measure promotional campaigns. Google provides the source
[]
code to decode this string.
•
[]
clientID
Unique identifier along with user preferences, logs of usage metrics and
crashes.
•
On Google
search query
On first launch
and first use of
[]
address bar
Unknown
Optional?
If optional,
is default?
No
n/a
[76][]
Partial
[77]
Yes
n/a
No
Google Chrome
211
Omnibox
[]
predictions
Text typed into the address bar.
While typing
Page not found
Text typed into the address bar.
Upon receiving
"Server not found"
response
Google Update
(Windows)
Yes
Yes
Yes
Yes
No
n/a
Information about how often Chrome is used, details about the OS and
Chrome version.
Unknown
Google Software
Update (OS X)
Some of the tracking mechanisms can be optionally enabled and disabled through the installation interface[78] and
through the browser's options dialog.[] Unofficial builds, such as SRWare Iron and CoolNovo (previously known as
ChromePlus), seek to remove these features from the browser altogether.[] The RLZ feature is not included in the
Chromium browser either.[]
In March 2010, Google devised a new method to collect installation statistics: the unique ID token included with
Chrome is now only used for the first connection that Google Update makes to its server.[79]
The optional suggestion service included in Google Chrome has been criticized because it provides the information
typed into the Omnibox to the search provider before the user even hits return. This allows the search engine to
provide URL suggestions, but also provides them with web usage information tied to an IP address.[]
Do Not Track
In February 2012, Google announced that Chrome would support Do Not Track by the end of 2012 and the protocol
was implemented on version 23.[80]
Speed
The JavaScript virtual machine used by Chrome, the V8 JavaScript engine, has features such as dynamic code
generation, hidden class transitions, and precise garbage collection.[]
Several websites performed benchmark tests using the SunSpider JavaScript Benchmark tool as well as Google's
own set of computationally intense benchmarks, which include ray tracing and constraint solving.[81] They
unanimously reported that Chrome performed much faster than all competitors against which it had been tested,
including Safari (for Windows), Firefox 3.0, Internet Explorer 7, Opera, and Internet Explorer 8.[82][83][84][85][86][87]
However in more recent independent tests of JavaScript performance, Chrome has been scoring just behind Opera's
Presto engine since it was updated in version 10.5.[88]
On September 3, 2008, Mozilla responded by stating that their own TraceMonkey JavaScript engine (then in beta),
was faster than Chrome's V8 engine in some tests.[89][90][91] John Resig, Mozilla's JavaScript evangelist, further
commented on the performance of different browsers on Google's own suite, commenting on Chrome's "decimating"
of the other browsers, but he questioned whether Google's suite was representative of real programs. He stated that
Firefox 3.0 performed poorly on recursion-intensive benchmarks, such as those of Google, because the Mozilla team
had not implemented recursion-tracing yet.[92]
Two weeks after Chrome's launch, the WebKit team announced a new JavaScript engine, SquirrelFish Extreme,[93]
citing a 36% speed improvement over Chrome's V8 engine.[94][95][96]
Chrome uses DNS prefetching to speed up website lookups,[] as other browsers like Firefox,[97] Safari,[98] Internet
Explorer (called DNS Pre-resolution),[99] and in Opera as a UserScript (not built-in).[100]
Chrome utilizes the faster SPDY protocol instead of HTTP[101][102] when communicating with Google services, such
as Google Search, Gmail, Chrome sync and when serving Google's ads. Google acknowledges that the use of SPDY
is enabled in the communication between Chrome and Google's SSL-enabled servers.[103]
Google Chrome
Stability
A multi-process architecture is implemented in Chrome[104] where, by default, a separate process is allocated to each
site instance and plugin. This procedure is termed process isolation,[105] and it prevents tasks from interfering with
each other, raising security and stability. An attacker successfully gaining access to one application gains access to
no others,[106] and failure in one instance results in a Sad Tab screen of death, similar to the well-known Sad Mac,
but only one tab crashes instead of the whole application. This strategy exacts a fixed per-process cost up front, but
results in less memory bloat overall as fragmentation is confined to each instance and no longer needs further
memory allocations.[] This architecture is being adopted in upcoming versions of Safari[107] and Firefox.[108]
Chrome includes a process management utility called Task Manager which lets users see what sites and plugins are
using the most memory, downloading the most bytes and overusing the CPU and provides the ability to terminate
them.[] Chrome Version 23 ensures its users a improved battery life for the systems supporting Chrome's GPU
accelerated video decoding.[109][110]
User interface
By default, the main user interface includes back, forward, refresh/cancel and menu buttons. A home button is not
shown by default, but can be added through the Settings page to take the user to the new tab page or a custom home
page.[]
Tabs are the main component of Chrome's user interface and as such, have been moved to the top of the window
rather than below the controls. This subtle change contrasts with many existing tabbed browsers which are based on
windows and contain tabs. Tabs, with their state, can be transferred seamlessly between window containers by
dragging. Each tab has its own set of controls, including the Omnibox.[]
The Omnibox is a URL box that combines the functions of both the address bar and search box. If a user enters the
URL of a site previously searched from, Chrome allows pressing Tab to search the site again directly from the
Omnibox. When a user starts typing in the Omnibox, Chrome provides suggestions for previously visited sites
(based on the URL or in-page text), popular websites (not necessarily visited before — powered by Google Instant),
and popular searches. Although Instant can be turned off, suggestions based on previously visited sites cannot be
turned off. Chrome will also autocomplete the URLs of sites visited often.[] If a user types keywords into the
Omnibox that don't match any previously visited websites and presses enter, Chrome will conduct the search using
the default search engine.
One of Chrome's differentiating features is the New Tab Page, which can replace the browser home page and is
displayed when a new tab is created. Originally, this showed thumbnails of the nine most visited web sites, along
with frequent searches, recent bookmarks, and recently closed tabs; similar to Internet Explorer and Firefox with
Google Toolbar, or Opera's Speed Dial.[] In Google Chrome 2.0, the New Tab Page was updated to allow users to
hide thumbnails they did not want to appear.[]
Starting in version 3.0, the New Tab Page was revamped to display thumbnails of the eight most visited web sites.
The thumbnails could be rearranged, pinned, and removed. Alternatively, a list of text links could be displayed
instead of thumbnails. It also features a "Recently closed" bar that shows recently closed tabs and a "tips" section
that displays hints and tricks for using the browser.[111]
212
Google Chrome
Google Chrome logos. Top: 3D motif from project start until March 2011. Bottom: 2D motif from March 2011 to
present.
Chrome includes a bookmark manager that can be opened from a menu. Adding the command-line option
--bookmark-menu adds a bookmarks button to the right of the Omnibox that can be used in place of the bookmarks
bar.[112] As of 2009[11], this function was unavailable on the Linux and OS X platforms.[]
Popup windows are associated with the tab they came from and will not appear outside the tab unless the user
explicitly drags them out.[]
For web developers, Chrome features an element inspector similar to the one in Firebug.[]
Chrome has special URLs that load application-specific pages instead of websites or files on disk. Chrome also has a
built-in ability to enable experimental features. Originally called about:labs, the address was changed to about:flags
to make it less obvious to casual users.[113][]
In March 2011, Google introduced a new simplified logo to replace the previous 3D logo that had been used since
the project's inception. Google designer Steve Rura explained the company reasoning for the change: "Since Chrome
is all about making your web experience as easy and clutter-free as possible, we refreshed the Chrome icon to better
represent these sentiments. A simpler icon embodies the Chrome spirit – to make the web quicker, lighter, and easier
for all."[]
Desktop shortcuts and apps
Chrome allows users to make local desktop shortcuts that open web applications in the browser. The browser, when
opened in this way, contains none of the regular interface except for the title bar, so as not to "interrupt anything the
user is trying to do". This allows web applications to run alongside local software (similar to Mozilla Prism and
Fluid).[]
This feature, according to Google, will be enhanced with the Chrome Web Store, a one-stop web-based web
applications directory which opened in December 2010.[114][115]
Chrome Web Store
Announced on December 7, 2010, the Chrome Web Store allows users to install web applications as extensions to
the browser, although most of these function simply as links to popular web pages and/or games, but some of the
apps like Springpad do provide extra features like offline access. The themes and extensions have also been tightly
integrated into the new store, allowing users to search the entire catalog of Chrome extras.[]
The Chrome Web Store was opened on February 11, 2011 with the release of Google Chrome 9.0.[]
Extensions
On September 9, 2009, Google enabled extensions by default on Chrome's Dev channel, and provided several
sample extensions for testing.[116] In December, the Google Chrome extension gallery beta began with over 300
extensions.[][117]
Along with Google Chrome 4.0, the extension gallery was officially launched on January 25, 2010, containing over
1500 extensions.[118]
As of February 4, 2011, the extension gallery featured more than 11,500 extensions,[119] including official extensions
from the Independent,[120] CEOP,[121] Transport for London,[122] Cricinfo,[123] Web of Trust (WOT)[124] and
FIFA.[125]
Many Chrome extensions, once installed, have access to the user's data. There are three levels of permissions that an
app or extension may request.[126]
213
Google Chrome
Themes
Starting with Google Chrome 3.0, users can install themes to alter the appearance of the browser.[127] Many free
third-party themes are provided in an online gallery,[128] accessible through a "Get themes" button in Chrome's
options.[129]
Automatic web page translation
Starting with Google Chrome 4.1 the application added a built-in translation bar using Google Translate. Translation
is currently available for 52 languages.[130]
Release channels and updates
On January 8, 2009, Google introduced a new release system with three distinct channels: Stable, Beta, and
Developer preview (called the "Dev" channel). Before this change there were only two channels: Beta and Developer
preview. All previous Developer channel users were moved to the Beta channel. The reason given by Google is that
the Developer channel builds are less stable and polished than those that Developer channel users were getting
during Google Chrome's Beta period. The stable channel will be updated with features and fixes once they have been
thoroughly tested in the Beta channel, and the Beta channel will be updated roughly monthly with stable and
complete features from the Developer channel. The Developer channel is where ideas get tested (and sometimes fail)
and can be very unstable at times.[131][132] On July 22, 2010, Google announced it will ramp up the speed it will
release new stable versions; they will shorten the release cycles from quarterly to 6 weeks.[133] The faster release
cycle brought a fourth channel: the "Canary" release; the name refers to using canaries in coal mines, so if a change
"kills" Chrome Canary, they will block it from the developer build. Canary will be "the most bleeding-edge official
version of Chrome and somewhat of a mix between Chrome dev and the Chromium snapshot builds". Canary
releases run side-by-side with any other channel; it is not linked to the other Google Chrome installation and can
therefore run different synchronization profiles, themes, and browser preferences.[134] It does not natively include the
option to be the default browser, although on OS X it can be set through Safari's preferences. Canary was
Windows-only at first; an OS X version was released on May 3, 2011.[135]
Chrome beta for Android was launched on January 10, 2013; like Canary, it runs side-by-side with the stable channel
for Android.[136][137]
Chrome automatically keeps itself up-to-date. The details differ by platform. On Windows, it uses Google Update,
and auto-update can be controlled via Group Policy,[138] or users can download a standalone version that does not
autoupdate.[139][140] On OS X, it uses Google Update Service, and auto-update can be controlled via the OS X
"defaults" system.[141] On Linux, it lets the system's normal package management system supply the updates.
Color management
Chrome supports color management by using the system provided ICC v2 and v4 support on OS X, and from version
22 supports ICC v2 profiles by default on other platforms.[40]
Platforms
Chrome is available for[142]
• Windows: XP Service Pack 2 or later / Vista / 7 / 8.
• OS X: 10.6 or later[143]
• Linux: Ubuntu 10.04 or later / Debian 6 or later / openSUSE 11.3 or later / Fedora
As of 2012, 32-bit and 64-bit builds are available for Linux, with only 32-bit builds available for OS X and Windows
at this time.[144][145]
• iOS, iPhone, iPod touch, iPad
214
Google Chrome
• Android 4.0 or later
Android version
A beta version for Android 4.0 devices was launched on February 7, 2012, available for a limited number of
countries from Google Play.[146]
Notable features: synchronization with desktop Chrome to provide the same bookmarks and view the same browser
tabs,[147] page pre-rendering,[148] hardware acceleration.[]
Many of the latest HTML5 features: almost all of the Web Platform’s features: GPU-accelerated canvas, including
CSS 3D Transforms, CSS animations, SVG, WebSocket (including binary messages), Dedicated Workers; it has
overflow scroll support, strong HTML5 video support, and new capabilities such as IndexedDB, WebWorkers,
Application Cache and the File APIs, date and time pickers, parts of the Media Capture API.[148][149] Also supports
mobile oriented features such as Device Orientation and Geolocation.[149]
Mobile customisations: swipe gesture tab switching,[147] link preview allows zooming in on (multiple) links to
ensure the desired one is clicked,[147] font size boosting to ensure readability regardless of the zoom level.[149]
Missing in the mobile version are sandboxed tabs,[148][150] Safe Browsing,[148] apps or extensions,[] Adobe Flash
(now and in future),[] WebGL, Native Client.[]
Development changes: remote debugging,[148][151] part of the browser layer has been implemented in Java,
communicating with the rest of the Chromium and WebKit code through Java Native Bindings.[149] The code of
Chrome for Android is a fork of the Chromium project. It is a priority to upstream most new and modified code to
Chromium and WebKit to resolve the fork.[149]
The April 17, 2012 update included the availability to access in 31 additional languages and in all countries where
Google Play is available. A desktop version of a website can also be requested as opposed to a mobile version. In
addition, Android users can now add bookmarks to their Android home screens if they choose and decide which apps
should handle links opened in Chrome.[152]
On the June 27, 2012 Google Chrome for Android exited beta and became stable.[153]
Chrome 18.0.1026311, released at September 26, 2012 was the first version of Chrome for Android to support Intel
x86 based mobile devices.[154]
Google is aiming to bring Chrome for Android in line with the desktop version, first with Chrome 25. They released
a separate Chrome for Android beta channel on January 10, 2013, with version 25.[136]
Chrome OS
Google Chrome is the basis of Google's Chrome OS operating system that ships on specific hardware from Google's
manufacturing partners.[] The user interface has a minimalist design resembling the Google Chrome browser.
Chrome OS is aimed at users who spend most of their computer time on the Web; the only applications on the
devices are a browser incorporating a media player and a file manager.[][][][][155]
Google announced Chrome OS on July 7, 2009.[]
iOS version
Google Chrome for iOS is the mobile rendition of Google's Chrome web browser for Apple's iOS operating system
as its name implies. It was released on the App Store on June 26, 2012. It supports the iPad, iPhone, and iPod touch,
and requires that the device have at least iOS version 4.3 installed.[156] Per Apple's requirements for browsers
released through the App Store, this version of Chrome uses the iOS WebKit, that is the mobile Safari iOS engine
and components, but restricted from using their Nitro JavaScript engine.[157]
215
Google Chrome
216
In a review by Chitika on July 18, 2012, Google Chrome was noted as having 1.5% of the iOS web browser
market.[158]
Metro version
In June 2012, Google released the developers version of Chrome 21.[159] On Windows 8, this version of Chrome can
be run in the Metro UI as long as it is set as the default browser on the computer. The Metro version of Chrome
looks identical to its desktop counterpart and does not support the standard design principles of the Metro UI.
Usage
In 2008, Matthew Moore in the The Daily Telegraph summarized the
verdict of early reviewers: "Google Chrome is attractive, fast and has
some impressive new features, but may not — yet — be a threat to its
Microsoft rival."[160]
Initially, Microsoft reportedly played down the threat from Chrome
and predicted that most people will embrace Internet Explorer 8. Opera
Software said that "Chrome will strengthen the Web as the biggest
application platform in the world".[161] But by February 25, 2010,
BusinessWeek had reported that "For the first time in years, energy and
resources are being poured into browsers, the ubiquitous programs for
accessing content on the Web. Credit for this trend—a boon to
consumers—goes to two parties. The first is Google, whose big plans
for the Chrome browser have shaken Microsoft out of its competitive
torpor and forced the software giant to pay fresh attention to its own
browser, Internet Explorer. Microsoft all but ceased efforts to enhance
IE after it triumphed in the last browser war, sending Netscape to its
doom. Now it's back in gear."[162] Mozilla said that Chrome's
introduction into the web browser market comes as "no real surprise",
that "Chrome is not aimed at competing with Firefox", and furthermore
that it would not affect Google's revenue relationship with
Mozilla.[163][164]
Usage share of web browsers according to
[]
StatCounter.
Most used web browser by country as of
February 2013 according to StatCounter. Google
Chrome Internet Explorer Firefox Opera (web
browser)Opera Safari
Chrome's design bridges the gap between desktop and so-called
"cloud computing." At the touch of a button, Chrome lets you
make a desktop, Start menu, or QuickLaunch shortcut to any
Web page or Web application, blurring the line between what's online and what's inside your PC. For example,
I created a desktop shortcut for Google Maps. When you create a shortcut for a Web application, Chrome
strips away all of the toolbars and tabs from the window, leaving you with something that feels much more
like a desktop application than like a Web application or page.
—PC World[165]
Chrome overtook Firefox in November 2011. As of September 2012[11], according to StatCounter, Google Chrome
had 34% worldwide usage share, making it the most widely used web browser, while Internet Explorer had 33% and
Firefox had 22%.[][166]
Along with Safari and Mozilla Firefox, Chrome receives a weekend "bump", which boosts its marketshare by as
much as three percentage points on week-ends, at the expense of Internet Explorer.[167]
It was reported by StatCounter, a web analytics company, that for the single day of Sunday, March 18, 2012 Chrome
was the most used web browser in the world for the first time. Chrome secured 32.7% of the global web browsing on
Google Chrome
that day, while Internet Explorer followed closely behind with 32.5%.[168]
From May 14–21, 2012 Google Chrome was responsible for more Internet traffic than Microsoft's Internet Explorer
(for the first time), which long had held its spot as the most used web browser in the world.[169] According to
StatCounter, 31.88% of web traffic was generated by Chrome for a sustained period of one week and 31.47% by
Internet Explorer. Though Chrome has topped Internet Explorer for single day's usage in the past, this is the first
time it has led for one full week.[170]
At the 2012 Google I/O developers' conference, Google claimed that there were 310 million active users of Chrome,
almost double the number in 2011, which was stated as 160 million active users.[171]
Notes
[1]
[3]
[6]
[8]
[9]
http:/ / en. wikipedia. org/ w/ index. php?title=Template:Latest_stable_software_release/ Google_Chrome& action=edit
http:/ / en. wikipedia. org/ w/ index. php?title=Template:Latest_stable_software_release/ Google_Chrome_for_Android& action=edit
http:/ / en. wikipedia. org/ w/ index. php?title=Template:Latest_stable_software_release/ Google_Chrome_(iOS)& action=edit
http:/ / en. wikipedia. org/ w/ index. php?title=Template:Latest_preview_software_release/ Google_Chrome& action=edit
Google Chrome's WebKit layout engine and V8 JavaScript engine are all Free and open source software. Other parts may be open-source or
proprietary. Google Chrome's Terms of Service makes the entire package proprietary freeware. (see Terms of Service text (http:/ / www.
google. com/ chrome/ intl/ en/ eula_text. html), section 9.2).
[10] http:/ / www. google. com/ chrome
[11] http:/ / en. wikipedia. org/ w/ index. php?title=Google_Chrome& action=edit
[14] "Google Chrome is built with open source code from Chromium." Retrieved from dev.chromium.org (http:/ / dev. chromium. org/
developers/ how-tos/ getting-started)
[18] Redirecting (http:/ / www. google. com/ intl/ en/ policies/ terms/ )
[31] "Chrome Out Of Beta, Default Browser Of Android 4.1" (http:/ / www. muktware. com/ 3779/
chrome-out-beta-default-browser-android-41). Muktware.com. June 28, 2012. Retrieved September 15, 2012.
[33] Launch Chrome as a Windows 8 app (https:/ / support. google. com/ chrome/ bin/ answer. py?hl=en& answer=2762879), Google Chrome
help
[40] Issue 143: Handle color profiles in tagged images (http:/ / code. google. com/ p/ chromium/ issues/ detail?id=143)
[57] Gregg Keizer, Google's Chrome untouched at Pwn2Own hack match (http:/ / www. computerworld. com/ s/ article/ 9214022/
Google_s_Chrome_untouched_at_Pwn2Own_hack_match), Computerworld, March 10, 2011
[60] Google Chrome exploit fetches "Pinkie Pie" $60,000 hacking prize (http:/ / arstechnica. com/ security/ 2012/ 10/
google-chrome-exploit-fetches-pinkie-pie-60000-hacking-prize/ ), Ars Technica, October 10, 2012
[61] Pwnium 2: results and wrap-up (http:/ / blog. chromium. org/ 2012/ 10/ pwnium-2-results-and-wrap-up_10. html), Chromium Blog, October
10, 2012
[71] Pepper.wiki (http:/ / code. google. com/ p/ ppapi/ wiki/ Concepts)
[72] Pepper Plugin API (PPAPI) (http:/ / www. chromium. org/ nativeclient/ getting-started/
getting-started-background-and-basics#TOC-Pepper-Plugin-API-PPAPI-)
[76] Browser must be downloaded directly from the Google Chrome website (http:/ / www. google. com/ chrome) to opt-out of the RLZ
identifier.
[77] Controlled by the setting "Send usage statistics and error reports". Default off.
[129] Basic settings: Change browser theme (http:/ / www. google. com/ support/ chrome/ bin/ answer. py?hl=en& answer=148695) Google
Chrome Help
[135] .
[136] TheNextWeb: Google launches Chrome Beta channel for Android 4.0+ phones and tablets, releases version 25 (http:/ / thenextweb. com/
google/ 2013/ 01/ 10/ google-launches-chrome-beta-channel-for-android-4-0-phones-and-tablets-releases-version-25)
[137] Chrome beta for Android on Google Play (https:/ / play. google. com/ store/ apps/ details?id=com. chrome. beta)
[147] .
[148] .
[149] .
[150] .
[151] .
[152] Lardinois, Frederic (April 17, 2012), Chrome For Android Gets Desktop View, Home Screen Bookmarks, File Downloads (http:/ /
techcrunch. com/ 2012/ 04/ 17/ chrome-for-android-gets-desktop-view-home-screen-bookmarks-file-downloads/ )
[153] .
[154] Chrome for Android Update (http:/ / googlechromereleases. blogspot. hu/ 2012/ 09/ chrome-for-android-update_26. html)
[156] Apple's App Store Chrome entry (http:/ / itunes. apple. com/ app/ chrome/ id535886823).
217
Google Chrome
[157] Forbes Google Chrome on iOS Hits #1 Free App (http:/ / www. forbes. com/ sites/ davidthier/ 2012/ 06/ 29/
google-chrome-on-ios-hits-1-free-app/ )
[162] .
[166] For additional sources see Usage share of web browsers#Summary table
References
External links
• Official website (https://www.google.com/chrome)
• Google Chrome (http://www.chrome.blogspot.com) on Blogger
• Google Chrome celebrates 4 years with Google Chrome Time Machine (http://www.google.com/intl/en/
chrome/timemachine/)
• Google Chrome Releases (http://www.googlechromereleases.blogspot.com) on Blogger
218
Opera (web browser)
219
Opera (web browser)
Opera
Opera 12.12 displaying Wikipedia on OS X.
Developer(s)
Opera Software ASA
Initial release
late 1994
Stable release
12.14 [ edit
Preview release
12.14 (Build 1738)
[1]
[2]]
(February 5, 2013)
[3]
(February 6, 2013)
Development status Active
[4]
Written in
C++
Operating system
FreeBSD
Linux
Mac OS X
Microsoft Windows
Solaris until v. 10.11
Engine
Presto until 12.14 - WebKit (Opera ice and future Opera desktop version)
Type
Web browser and Internet suite
License
[5][6]
Proprietary freeware with open source components
Website
www.opera.com
[7]
Opera is a web browser and Internet suite developed by Opera Software with over 300 million users
worldwide.[8]Wikipedia:No original research#Primary, secondary and tertiary sources The browser handles common
Internet-related tasks such as displaying web sites, sending and receiving e-mail messages, managing contacts,
chatting on IRC, downloading files via BitTorrent, and reading web feeds. Opera is offered free of charge for
personal computers and mobile phones.
Opera Mini, which is the most popular[9] mobile web browser as of May 2011, has been chosen as the default
integrated web browser in several mobile handsets[10][11][12] by their respective manufacturers.
Features include tabbed browsing, page zooming, mouse gestures, and an integrated download manager. Its security
features include built-in phishing and malware protection and the ability to delete private data such as HTTP
cookies. Opera has been noted for originating many features later adopted by other web browsers.[][13]
Opera runs on a variety of personal computer operating systems, including Microsoft Windows, Mac OS X, Linux,
and FreeBSD. Opera editions are available for devices using the Maemo, Bada, BlackBerry, Symbian, Windows
Mobile, Android, and iOS operating systems, and Java ME.[][14][15] Approximately 120 million mobile phones have
been shipped with Opera.[16] Opera is the only commercial web browser available for the Nintendo DS and Wii
gaming systems. Some television set-top boxes as well as TV-set use Opera to render HTML-based interactive
content. Adobe Systems has licensed Opera technology for use in the Adobe Creative Suite.[][]
Opera (web browser)
220
Up to version 12.02, released on August 30, 2012, Opera was the only one of the major web browsers that still
actively supported Windows 2000 in new releases.[17]
History
Opera began in 1994 as a research project at Telenor, the largest Norwegian
telecommunications company. In 1995, it branched out into a separate company
named Opera Software ASA.[18] Opera was first released publicly with version
2.0 in 1996,[] which only ran on Microsoft Windows.[] In an attempt to capitalize
on the emerging market for Internet-connected handheld devices, a project to
port Opera to mobile device platforms was started in 1998.[] Opera 4.0, released
in 2000,[] included a new cross-platform core that facilitated creation of editions
of Opera for multiple operating systems and platforms.[19]
Up to this point, Opera was trialware and had to be purchased after the trial
period ended. Version 5.0 (released in 2000) saw the end of this requirement.
Instead, Opera became ad-sponsored, displaying advertisements to users who had
not paid for it.[20] Later versions of Opera gave the user the choice of seeing
banner ads or targeted text advertisements from Google. With version 8.5
(released in 2005) the advertisements were removed entirely and primary
financial support for the browser came through revenue from Google (which is
by contract Opera's default search engine).[]
Håkon Wium Lie, chief technical
officer of the Opera Software
company and co-creator of the CSS
web standard
Among the new features introduced in version 9.1 (released in 2006) was fraud protection using technology from
GeoTrust, a digital certificate provider, and PhishTank, an organization that tracks known phishing web sites.[21]
This feature was further improved and expanded in version 9.5, when GeoTrust was replaced with Netcraft, and
malware protection from Haute Secure was added.[22]
Also in 2006, editions of Opera were made and released for Nintendo's DS and Wii gaming systems.[][][][] Opera for
the Wii, called the Internet Channel, was free to download from its release on 12 April 2007[] until 30 June 2007.
After that date, Wii users had to pay 500 Wii Points to download it.[] As of 2 September 2009, it is again free to
download. Users who previously paid to download are offered a NES game of their choice of the same value.[][23]
The Nintendo DS Browser is not free; it is sold as a physical DS game cartridge. The Nintendo DSi has an Internet
Channel that can be downloaded for free from the DSi shop.[]
A new JavaScript engine called Carakan, after the Javanese alphabet, was introduced with version 10.50.[] According
to Opera Software, Carakan makes Opera 10.50 more than seven times faster in SunSpider than Opera
10.10.[24][25][26] On December 16, 2010, Opera 11 was released, featuring extensions, tab stacking, visual mouse
gestures, and changes to the address bar.[] The new address bar hides the address's protocol and query information by
default.[] Opera 12 was released on 14 June 2012.[27] On 12 February 2013, Opera announced it will transition its
rendering engine to WebKit and JavaScript engine to V8, so that it can take advantage of advancement of open
source standards of the Chromium project. Opera will contribute to the WebKit and Chromium projects.[28]
Opera (web browser)
221
Features
Opera includes built-in tabbed browsing, ad blocking, fraud protection, a download manager and BitTorrent client, a
search bar, and a web feed aggregator. Opera also comes with an e-mail client called Opera Mail and an IRC chat
client built in.[]
Opera includes a "Speed Dial" feature, which allows the user to add an unlimited number of pages shown in
thumbnail form in a page displayed when a new tab is opened. Thumbnails of the linked pages are automatically
generated and used for visual recognition on the Speed Dial page or can be modified using Opera Image Dial
Generator [29]. Once set up, this feature allows the user to more easily navigate to the selected web pages.[30]
Opera is extensible in a third way via plug-ins, relatively small programs that add specific functions to the
browser,[31] and as of Opera 11, third-party extensions. However, Opera limits what plug-ins can do. Additionally,
"User JavaScript" may be used to add custom JavaScript to web pages.
Languages and localization
Opera is currently available[32] in 56 languages and locales: Afrikaans, Azerbaijani, Belarusian, Bengali, Bulgarian,
Czech, Chinese (Simplified and Traditional), Croatian, Danish, Dutch, English (UK and US), Estonian, Finnish,
French (France and Canadian), West Frisian, Georgian, German, Greek, Hindi, Hungarian, Indonesian, Italian,
Japanese, Korean, Lithuanian, Macedonian, Malay, Montenegrin, Norwegian (Nynorsk and Bokmål), Polish,
Portuguese (Portugal and Brazil), Punjabi, Romanian, Russian, Scottish Gaelic, Serbian, Slovak, Spanish (Latin
America and Spain), Swahili, Swedish, Tagalog, Tamil, Thai, Telugu, Turkish, Ukrainian, Uzbek, Vietnamese and
Zulu.
Usability and accessibility
Sample mouse gestures in Opera
Back: hold down right mouse button, move mouse left, and release. Alternative: hold the right button down and click the left button
Forward: hold down right mouse button, move mouse right, and release. Alternative: hold the left button down and click the right
button
New tab: hold down right mouse button, move mouse down, and release. Clicking a link with the middle mouse button produces a
similar effect, but the new tab is opened in the background instead of becoming the active tab.
Opera was designed with a commitment to computer accessibility for users who have visual or motor impairments.
As a multimodal browser, it also caters to a wide variety of personal preferences in the user interface.
It is possible to control nearly every aspect of the browser using only the keyboard,[33] and the default keyboard
shortcuts can be modified to suit the user.[34][35] It is the only major browser to include support for spatial
navigation. Opera also includes support for mouse gestures,[36] patterns of mouse movement that trigger browser
actions such as "back" or "refresh".[37]
Page zooming allows text, images and other content such as Adobe Flash Player, Java platform and Scalable Vector
Graphics to be increased or decreased in size (20% to 1,000%) to help those with impaired vision. The user may also
specify the fonts and colors for web pages, and even override the page's CSS styling as well. This can be useful for
making sites appear in high contrast or in more readable fonts.[38]
Voice control, co-developed with IBM, allows control of the browser without the use of a keyboard or mouse.[39][40]
It can also read aloud pages and marked text.[]
Opera Turbo is a feature intended for slower Internet connections; when enabled, Opera's servers act as a proxy
which compresses the requested web page by up to 80% before sending it to the user. This process reduces the total
Opera (web browser)
size of the data being sent, and thus shortens the amount of time necessary for the page to load. This technique is
also used in Opera Mini.[41]
Privacy and security
Opera has several security features visible to the end user. One is the option to delete private data, such as HTTP
cookies, the browsing history, and the cache, with the click of a button. This lets users erase personal data after
browsing from a shared computer.[42]
When visiting a secure web site, Opera encrypts data using either SSL 3 or TLS.[43][44] It then adds information
about the site's security to the address bar. It will also check the web site that is being visited against blacklists for
phishing and malware, and warn if it matches any of these lists. This behavior is enabled by default, but the user may
opt to not make such checks automatically. If this check is disabled, the user can still check sites individually by
opening a Page Info dialog.[45]
The user can protect every saved password stored in Opera with a master password. This prevents malware from
accessing those passwords unless the master password is known. Also, Opera does not show saved passwords using
password manager unlike Firefox and Chrome.
To catch security flaws and other software bugs before they are exploited or become a serious problem, the Opera
Software company maintains a public web form where users can submit bug reports.[46] According to Secunia, a
computer security service provider, the mean average of unpatched vulnerabilities in the last 365 days is 0.01. This
stands in contrast to Internet Explorer (38.3), Firefox (5.77), and Safari (1.54).[47]
In January 2007, Asa Dotzler of the competing Mozilla Corporation accused the Opera Software company of
downplaying information about security vulnerabilities in Opera that were fixed in December 2006. Dotzler claimed
that users were not clearly informed of security vulnerabilities present in the previous version of Opera, and thus
they would not realize that they needed to upgrade to the latest version or risk being exploited.[48] Opera responded
to these accusations the next day.[49]
Standards support
Opera was one of the first browsers to support Cascading Style Sheets (CSS), now a major building block of web
design.[50] Today, Opera supports many web standards, including CSS 2.1, HTML 5, XHTML 1.1, XHTML Basic,
XHTML Mobile Profile, XHTML+Voice, WML 2.0, XSLT, XPath, XSL-FO, ECMAScript 5.1 (JavaScript), DOM
2, XMLHttpRequest, HTTP 1.1, TLS 1.0 (1.1 and 1.2 are supported but disabled by default),[51] Unicode, SVG 1.1
Basic, SVG 1.1 Tiny, GIF89a, JPEG, and full support for PNG, including alpha transparency.[52] Since version 9,
Opera passes the Acid2 test, a test of whether or not a browser properly supports certain web standards. Opera was
the second or fourth web browser to pass the test (depending on opinions regarding hiding the scrollbar)[53] and the
first Windows browser to do so. Opera 10.5+ achieves a score of 100/100 on the Acid3 test[54] which is primarily
focused on DOM and JavaScript standards compliance.
On Ecma International's ECMAScript standards conformance Test 262[55] (version 0.7.2), Opera version 11.10
scores 3840/10872. Lower scores are better, as the figure represents the number of failed tests out of the total number
of tests. A pre-release build of Opera 12 scores 1/10927 on Test 262,[56] the one failed test being invalid.
On the official CSS 2.1 test suite by standardization organization W3C, Opera's rendering engine Presto passes
89.37% (77.44% out of 86.65%) of covered CSS 2.1 tests.[57]
222
Opera (web browser)
223
Devices
In addition to the primary edition of Opera for personal computers, there are editions for a variety of devices, all
based on the same core,[58] with some variation in the features offered and the user interface.
Smartphones and PDAs
Opera Mobile is an edition of Opera designed for smartphones
and personal digital assistants (PDAs). The first version of
Opera Mobile was released in 2000 for the Psion Series 7 and
NetBook, with a port to the Windows Mobile platform coming
in 2004.[59][60] Today, Opera Mobile is available for a variety of
devices that run Android, the Windows Mobile, S60 platform, or
UIQ operating systems.[]
Users may also try Opera Mobile free.[61] Devices that use the
Opera Mobile can be used on smartphones such as the
UIQ 3 operating system, such as the Sony Ericsson P990 and
Nokia 5800.
Motorola RIZR Z8, come pre-installed with Opera Mobile, the
former price of Opera Mobile being included in the price of the phone.[]
One of Opera Mobile's major features is the ability to dynamically reformat web pages to better fit the handheld's
display using small screen rendering technology.[62] Alternatively, the user may use page zooming for a closer or
broader look.[] However, like previous versions of Opera for personal computers, Opera Mobile's user interface has
come under fire for being difficult to use or customize.[63][64]
Mobile phones
Opera Mini, offered free of charge, is
designed primarily for mobile phones, but
also for smartphones and personal digital
assistants. Versions up to 4 used the Java
ME platform, requiring the mobile device to
be capable of running Java ME applications.
The browser began as a pilot project in
2005.[]
After
limited
releases
in
[65][66]
Europe,
it was officially launched
worldwide on 24 January 2006.[67]
When a user browses the web using Opera Mini, the request is sent via the General
Packet Radio Service (GPRS) to one of the Opera Software company's servers,
which retrieves the web page, processes it, compresses it, and sends it back to the
user's mobile phone.
Opera Mini requests web pages through the Opera Software company's servers, which process and compress them
before relaying the pages back to the mobile phone.[][68] This compression process reduces bandwidth use by up to
90%, with a consequent speed increase,[69] and the pre-processing smooths compatibility with web pages not
designed for mobile phones.[70]
In March 2010, Opera Software launched a new beta version of Opera Mini for mobile phones running on Google's
open source Android platform.[]
From version 5, there is a native version of Opera Mini 5 for Windows Mobile 2003, 5- and 6-based handsets which
does not require Java;[71] it implements the same features as the Java version.
On April 13, 2010, Opera Mini was officially approved as a free download for iPhone (and iPod Touch) on Apple's
App Store.[72]
Opera (web browser)
Tablets
An iPad-specific version of Opera was demonstrated at Mobile World Congress 2011,[73] and released with Opera
Mini 6 for iOS on 24 May 2011.[74] An Android version of Opera for tablets is under development.[75] and has been
available in Opera Mobile for Android since mid 2011
Nintendo DS
The Nintendo DS Browser is an edition of Opera for the Nintendo DS
handheld gaming system. The Nintendo DS Browser was released in
Japan on 24 July 2006,[76] in Europe on 6 October 2006,[77] and in
North America on 4 June 2007.[78] It is sold as a physical game
cartridge for US$30.[]
The Nintendo DS Browser includes the same small screen rendering
and page zooming technology present in Opera Mobile.[][] It also
includes handwriting recognition software and an on-screen keyboard
to enable user input. Additionally, Nintendo partnered with Astaro
The Nintendo DS
Internet Security to provide web filtering for the Nintendo DS
Browser. The technology is simply a professionally maintained proxy server that blocks web sites related to
pornography, discrimination, security hacking, software piracy, violence, gambling, illegal drugs, alcohol, tobacco,
dating, weapons, abortion, and other content that Nintendo deems objectionable.[79] Users can configure the
Nintendo DS Browser to receive web pages through this proxy server, and this setting can be password-protected (by
a parent, for example) to prevent circumvention.[80]
In August 2007, the Nintendo DS Browser was quietly discontinued in North America,[][81] although it is still
available from Nintendo's online store.[82]
Wii
On 10 May 2006, the Opera Software company announced that it was partnering
with Nintendo to provide a web browser for Nintendo's Wii gaming
console.[][][][] Opera for the Wii, called the Internet Channel, was free to
download from its release on 12 April 2007[] until 30 June 2007. After that date,
Wii users had to pay 500 Wii Points to download it.[] However, in late August /
early September of the year 2009, the Internet Channel was once again available
to download for free and those who paid for the service had their Wii Points
returned in the form of a free NES virtual console game.[]
Scott Hedrick, an executive of the Opera Software company, explained that the
Wii browser was designed to suit a "living room environment".[] In contrast to
Nintendo's Wii console
Opera's appearance on computer monitors, fonts are larger and the interface is
simplified for easier use.[] Notwithstanding the changes in design, the Wii
browser supports the same web standards as the desktop version of Opera 9,[] including passing the Acid2 test.[83]
224
Opera (web browser)
225
Market adoption
As of December 2011[84], Opera has a 1.3% to 2.6% worldwide usage
share of web browsers.[]
The browser has been more successful in Eastern Europe, including
about 47% market share in 2009 in Georgia, 43% in Ukraine, 39% in
Kazakhstan, 36% in Russia, and 8–11% in Poland, Latvia, Lithuania,
and the Czech Republic.[85]
In July 2011, Opera broke its previous download records when Opera
11.50 was released and was recorded to be downloaded 35 million
times during the first week of release.[86]
Most used web browser by country as of
February 2013 according to StatCounter. Google
Chrome Internet Explorer Firefox Opera (web
browser)Opera Safari
Since its first release in 1996, the browser has had limited success on personal computers. It has had more success in
the area of mobile browsing, with product releases for a variety of platforms.[87] Opera Mini had more than 140
million active users in October 2011, and Opera had the highest market share of all mobile browsers, according to
StatCounter.[88][89]
It is used on some television set-top boxes as well.[90] In 2005, Adobe Systems opted to integrate Opera's layout
engine, Presto, into its Adobe Creative Suite applications. Opera technology is now found in Adobe GoLive, Adobe
Photoshop, Adobe Dreamweaver, and other components of the Adobe Creative Suite.[][] Opera's layout engine is also
found in Virtual Mechanics SiteSpinner Pro.[91]
Reception
Critical reception of Opera has been largely positive,[92][93][94] although it has been criticized for website
compatibility issues.[95][] According to one of Opera's competitors, this is partly because developers do not test web
sites with Opera due to its lack of market share, as well as the fact that Opera follows the published web standards
more strictly than others.[] Because of this issue, Opera 8.01 and higher have included workarounds to help certain
popular but problematic web sites display properly.[96][97]
Awards
Over the years, Opera for personal computers has received several awards. These awards include:[98]
•
•
•
•
•
About.com Best Major Desktop Browser [99]
2010
[100]
Webware 100 winner, 2009
[101]
Webware 100 winner, 2008
PC World World Class Award, 2004 and 2005
Web Host Magazine & Buyer's Guide Editors'
Choice
•
•
•
•
PC Magazine Testsieger (Test Winner),
2006
PC Plus Performance Award
PC World Best Data Product, 2003
PC World Best i Test, 2003
•
•
•
Web Attack Editor's Pick, 2003
ZDNet Editor's Pick, 2000
Tech Cruiser Award 4 Excellence,
1999
Opera (web browser)
References
[2] http:/ / en. wikipedia. org/ w/ index. php?title=Template:Latest_stable_software_release/ Opera& action=edit
[3] http:/ / en. wikipedia. org/ w/ index. php?title=Template:Latest_preview_software_release/ Opera& action=edit
[7] http:/ / www. opera. com
[29] http:/ / miya2000. up. seesaa. net/ opera/ idg/ dial_generator. html
[84] http:/ / en. wikipedia. org/ w/ index. php?title=Opera_(web_browser)& action=edit
[85] Georgia (http:/ / gs. statcounter. com/ #browser-GE-monthly-200901-201001-bar) Ukraine (http:/ / gs. statcounter. com/
#browser-UA-monthly-200901-201001-bar), Russia (http:/ / gs. statcounter. com/ #browser-RU-monthly-200901-201001-bar), Poland (http:/ /
gs. statcounter. com/ #browser-PL-monthly-200901-201001-bar), Latvia (http:/ / gs. statcounter. com/
#browser-LV-monthly-200901-201001-bar), Lithuania (http:/ / gs. statcounter. com/ #browser-LT-monthly-200901-201001-bar), Czech
Republic (http:/ / gs. statcounter. com/ #browser-CZ-monthly-200901-201001-bar)
External links
• Official website (http://www.opera.com)
226
Safari (web browser)
227
Safari (web browser)
Safari
Safari 6.0 on OS X Mountain Lion
Developer(s)
Apple Inc.
Initial release
January 7, 2003
Stable release
6.0.3 [ edit
[1]]
(March 14, 2013)
Development status Active
[2]
Written in
C++,
Operating system
OS X
iOS
Engine
WebKit
Type
Web browser
License
Freeware; some components GNU LGPL
Website
apple.com/safari
Objective-C
[3]
Safari is a web browser developed by Apple Inc. and included with the Mac OS X and iOS operating systems. First
released as a public beta on January 7, 2003[4] on the company's OS X operating system, it became Apple's default
browser beginning with Mac OS X v10.3 "Panther". Safari is also the native browser for iOS. A version of Safari for
the Microsoft Windows operating system was first released on June 11, 2007,[5] and supported Windows XP Service
Pack 2/3, Windows Vista, and Windows 7,[] but it is no longer promoted or updated.[6] Safari 5.1.7 is the last version
available for Windows PC.[7]
According to Net Applications, Safari accounted for 62.17 percent of mobile web browsing traffic and 5.43 percent
of desktop traffic in October 2011, giving a combined market share of 8.72 percent.[]
History and development
Until 1997, Apple Macintosh computers were shipped with the Netscape Navigator and Cyberdog web browsers
only. Internet Explorer for Mac was later included as the default web browser for Mac OS 8.1 and onwards,[] as part
of a five year agreement between Apple and Microsoft. During that time, Microsoft released three major versions of
Internet Explorer for Mac that were bundled with Mac OS 8 and Mac OS 9, though Apple continued to include
Netscape Navigator as an alternative. Microsoft ultimately released a Mac OS X edition of Internet Explorer for
Mac, which was included as the default browser in all Mac OS X releases from Mac OS X DP4[] up to and including
Mac OS X v10.2.[]
Safari 1
On January 7, 2003, at Macworld San Francisco, Steve Jobs announced that Apple had developed their own web
browser, called Safari. It was based on Apple's internal fork of the KHTML rendering engine, called WebKit.[8]
Apple released the first beta version for OS X that day. A number of official and unofficial beta versions followed,
until version 1.0 [9] was released on June 23, 2003. Initially only available as a separate download for Mac OS X
v10.2, it was included with the Mac OS X v10.3 release on October 24, 2003 as the default browser, with Internet
Explorer for Mac included only as an alternative browser. 1.0.3, released on August 13, 2004 was the last version to
Safari (web browser)
support Mac OS X v10.2, while 1.3.2, released on January 12, 2006 was the last version to support Mac OS X v10.3.
However, 10.3 received security updates through 2007.
Safari 2
In April 2005, Dave Hyatt, one of the Safari developers at Apple, documented his study by fixing specific bugs in
Safari, thereby enabling it to pass the Acid2 test developed by the Web Standards Project. On April 27, 2005, he
announced that his development version of Safari now passed the test, making it the first web browser to do so.[]
Safari 2.0 was released on April 29, 2005 as the only web browser included with Mac OS X v10.4. This version was
touted by Apple as possessing a 1.8x speed boost over version 1.2.4, but did not yet include the Acid2 bug fixes. The
necessary changes were not initially available to end-users unless they downloaded and compiled the WebKit source
code themselves or ran one of the nightly automated builds available at OpenDarwin.org.[] Apple eventually released
version 2.0.2 of Safari, which included the modifications required to pass Acid2, on October 31, 2005.
In June 2005, after some criticism from KHTML developers over lack of access to change logs, Apple moved the
development source code and bug tracking of WebCore and JavaScriptCore to OpenDarwin.org. WebKit itself was
also released as open source. The source code for non-renderer aspects of the browser, such as its GUI elements,
remains proprietary.
The final stable version of Safari 2, Safari 2.0.4, was released on January 10, 2006 for Mac OS X. It was only
available as part of Mac OS X Update 10.4.4. This version addresses layout and CPU usage issues, among others.[10]
Safari 2.0.4 was the last version to be released exclusively on Mac OS X.
Safari 3
On January 9, 2007, at Macworld SF, Jobs announced Apple's iPhone, which would use a mobile version of the
Safari browser.[11]
On June 11, 2007, at the Apple Worldwide Developers Conference, Jobs announced Safari 3 for Mac OS X v10.5,
Windows XP, and Windows Vista. During the announcement, he ran a benchmark based on the iBench browser test
suite comparing the most popular Windows browsers,[12] hence claiming that Safari was the fastest browser. Later
third-party tests of HTTP load times would support Apple's claim that Safari 3 was indeed the fastest browser on the
Windows platform in terms of initial data loading over the Internet, though it was found to be only negligibly faster
than Internet Explorer 7 and Mozilla Firefox when loading static content from local cache.[13]
The initial Safari 3 beta version for Windows, released on the same day as its announcement at WWDC 2007, had
several known bugs[14] and a zero day exploit that allowed remote execution.[15] The addressed bugs were then
corrected by Apple three days later on June 14, 2007, in version 3.0.1 for Windows. On June 22, 2007, Apple
released Safari 3.0.2 to address some bugs, performance issues and other security issues. Safari 3.0.2 for Windows
handles some fonts that are missing in the browser but already installed on Windows computers, such as Tahoma,
Trebuchet MS, and others.
The iPhone was formally released on June 29, 2007. It includes a version of Safari based on the same WebKit
rendering engine as the desktop version, but with a modified feature set better suited for a mobile device. The
version number of Safari as reported in its user agent string is 3.0,[16] in line with the contemporary desktop versions
of Safari.
The first stable, non-beta release of Safari for Windows, Safari 3.1, was offered as a free download on March 18,
2008. In June 2008, Apple released version 3.1.2,[17][18] addressing a security vulnerability in the Windows version
where visiting a malicious web site could force a download of executable files and execute them on the user's
desktop.[19]
Safari 3.2, released on November 13, 2008, introduced anti-phishing features and Extended Validation Certificate
support. The final version of Safari 3 is 3.2.3, released on May 12, 2009.
228
Safari (web browser)
229
Safari 4
On June 2, 2008, the WebKit development team announced SquirrelFish,[20] a new JavaScript engine that vastly
improves Safari's speed at interpreting scripts.[21] The engine is one of the new features in Safari 4, released to
developers on June 11, 2008. The new JavaScript engine quickly evolved into SquirrelFish Extreme, featuring even
further improved performance over SquirrelFish,[22] and was eventually marketed as Nitro. A public beta of Safari 4
was released on February 24, 2009, with new features such as the Top Sites tool (similar to Opera's Speed Dial
feature), which displays the user's most visited sites on a 3D wall.[23] Cover Flow, a feature of Mac OS X and
iTunes, was also implemented in Safari. In the public beta versions, tabs were placed in the title bar of the window,
similar to Google Chrome. The tab bar was moved back to its original location, below the URL bar, in the final
release.[24] The Windows version adopted a native Windows theme, rather than the previously employed Mac OS
X-style interface. Also Apple removed the blue progress bar located in the address bar (later reinstated in Safari 5).
Safari 4.0.1 was released for Mac on June 17 and fixed problems with Faces in iPhoto '09. Safari 4 in Mac OS X
v10.6 "Snow Leopard" has 64-bit support, which can make JavaScript loading up to 50% faster. It also has built-in
crash resistance unique to Snow Leopard; crash resistance will keep the browser intact if a plug-in like Flash player
crashes, such that the other tabs or windows will be unaffected.[25] Safari 4.0.4, released on November 11, 2009 for
both OS X and Windows, further improves JavaScript performance.[26]
Safari was one of the twelve browsers offered to EU users of Microsoft Windows in 2010. It was one of the five
browsers displayed on the first page of browser choices along with Chrome, Firefox, Internet Explorer and
Opera.[27][28]
Safari 5
Apple released Safari 5 on June 7, 2010, featuring the new Safari Reader for reading articles on the web without
distraction (based on Arc90's Readability tool[]), and a 30 percent JavaScript performance increase over Safari 4.
Safari 5 includes improved developer tools and supports more than a dozen new HTML5 technologies, focused on
interoperability. With Safari 5, developers can now create secure Safari Extensions to customize and enhance the
browsing experience.[29] Apple also re-added the progress bar behind the address bar in this release. Safari 5.0.1
enabled the Extensions PrefPane by default; previously, users had to enable it via the Debug menu.
Apple also released Safari 4.1 concurrently with Safari 5, exclusively for Mac OS X Tiger. The update included the
majority of the features and security enhancements found in Safari 5. It did not, however, include Safari Reader or
Safari Extensions. Together with Mac OS X 10.7 Lion, Apple released Safari 5.1 for both Windows and Mac on July
20, 2011, with the new function 'Reading List' and a faster browsing experience. Apple simultaneously released
Safari 5.0.6 for Mac OS X 10.5 Leopard, excluding Leopard users from the new functions in Safari 5.1.
Safari 6
Safari 6.0 was previously known as Safari 5.2 until Apple announced
the change at WWDC 2012. The stable release of Safari 6 coincided
with the release of OS X Mountain Lion on July 25, 2012, and is
integrated into the OS.[30] As Apple integrated it with Mountain Lion,
it is no longer available for download from the Apple website or other
sources. Apple released Safari 6 via Software Update for users of OS X
Lion. It has not been released for OS X versions prior to Lion or for
Windows. Regarding the unavailability of Safari 6 on Windows, Apple
has stated "Safari 6 is available for Mountain Lion and Lion. Safari 5
continues to be available for Windows."[31] Microsoft removed Safari
from its BrowserChoice page.
Safari 6.0 Developer Preview on Mountain Lion
displaying a page in Reader view
Safari (web browser)
On June 11, 2012, Apple released a developer preview of Safari 6.0 with a feature called iCloud Tabs, which allows
users to 'sync' their open tabs with any iOS or other OS X device running the latest software. Safari 6 also included
new privacy features, including an "Ask websites not to track me" preference, and the ability for websites to send OS
X 10.8 Mountain Lion users notifications, although it removed RSS support.[32] Safari 6 has the Share Sheets
capability in OS X Mountain Lion. The Share Sheet options are: Add to Reading List, Add Bookmark, Email this
Page, Message, Twitter and Facebook. Users can now see tabs with full page previews available.[33]
WebKit2
On April 9, 2010, Apple announced WebKit2.[] This was integrated into Safari as of version 5.1.[34]
Features
Safari offers numerous features, including:
•
•
•
•
Ability to save webpage clips for viewing on the Apple Dashboard (Mac OS X only)
A resizable web-search box in the toolbar which allows choice among Google, Yahoo! or Bing only
Automatic filling in of web forms ("autofill")
Bookmark integration with Address Book
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Bookmark management
Built-in password management via Keychain (Mac OS X only)
History and bookmark search
Expandable text boxes
ICC color profile (version 4) support
Inline PDF viewing (Mac OS X only)
iPhoto integration (Mac OS X only)
Mail integration (Mac OS X only)
Pop-up ad blocking
Private browsing
Quartz-style font smoothing
Reader mode, for viewing an uncluttered version of Web articles
Spell checking
Subscribing to and reading web feeds
Support for CSS 3 web fonts
Support for CSS animation
Support for HTML5
Support for Transport Layer Security protocol (version unknown)
Tabbed browsing
Text search
Web Inspector, a DOM Inspector-like utility that lets users and developers browse the Document Object Model of
a web page[35]
On Mac OS X, Safari is a Cocoa application.[36] It uses Apple's WebKit for rendering web pages and running
JavaScript. WebKit consists of WebCore (based on Konqueror's KHTML engine) and JavaScriptCore (originally
based on KDE's JavaScript engine, named KJS). Like KHTML and KJS, WebCore and JavaScriptCore are free
software and are released under the terms of the GNU Lesser General Public License. Some Apple improvements to
the KHTML code are merged back into the Konqueror project. Apple also releases additional code under an open
source 2-clause BSD-like license.
Until Safari 6.0, it included a built-in web feed aggregator that supported the RSS and Atom standards. Current
features include Private Browsing (a mode in which no record of information about the user's web activity is retained
230
Safari (web browser)
by the browser),[37] a "Ask websites not to track me" privacy setting, the ability to archive web content in
WebArchive format, the ability to e-mail complete web pages directly from a browser menu, the ability to search
bookmarks, and the ability to share tabs between all Macs and iOS devices running appropriate versions of software
via an iCloud account.
New features in Safari 4
Beginning with Safari 4, the address bar has been completely revamped:
• The blue inline progress bar is replaced with a spinning bezel and a loading indicator attached to it.
• The button to add a bookmark is now attached to the address bar by default.
• The reload/stop button is now superimposed on the right end of the address bar.
These modifications make Safari on Mac OS X and Windows look more similar to Safari on iPhone than previous
versions.
Safari 4 also includes the following new features:
• Completely passes the Acid3 standards test
• Cover Flow browsing for History and Bookmarks
• Improved developer tools, including Web Inspector, CSS element viewing, JavaScript debugger and profiler,
offline table and database management with SQL support, and resource graphs
• Nitro JavaScript engine that executes JavaScript up to eight times faster than Internet Explorer 8 and more than
four times faster than Firefox 3[38]
• Native Windows look on Windows (Aero, Luna, Classic, etc., depending on OS and settings) with standard
Windows font rendering and optional Apple font rendering
• Support for CSS image retouching effects
• Support for CSS Canvas
• Speculative loading, where Safari loads the documents, scripts, and style information that are required to view a
web page ahead of time
• Support for HTML5
• Top Sites, which displays up to 24 thumbnails of a user's most frequently visited pages on startup
New features in Safari 5
This list is incomplete; you can help by expanding it [39].
Safari 5 includes the following new features:
• Full-text search through the browser history[]
• Safari Reader, which removes formatting and ads from webpages.[]
• Smarter address field, where the address bar autocomplete will match against titles of web page in history or
bookmarks.
• Extensions, which are add-ons that customize the web browsing experience.[]
• Improved support for HTML5, including full screen video, closed caption, geolocation, EventSource, and a now
obsolete early variant of the WebSocket protocol.
• Improved Web Inspector.
• Faster Nitro JavaScript Engine.
• DNS prefetching, where Safari finds links and looks up addresses on the web page ahead of time.
• Bing search.
• Improved graphics hardware acceleration on Windows.
Additionally, the blue inline progress bar has returned to the address bar, in addition to the spinning bezel and
loading indicator introduced in Safari 4. Top Sites view now has a button to switch to Full History Search. Other
231
Safari (web browser)
features include Extension builder for developers of Safari Extensions, which are built using web standards such as
HTML5, CSS3, and JavaScript.
New features in Safari 6
Safari 6 introduced the following features, many of which are only available on OS X 10.8 Mountain Lion:[]
• Unified smart search field, which combines the web address and search fields, similar to Chrome's Omnibox and
Firefox's Awesome Bar.
• Tab view (Mountain Lion only), which enables movement between tabs using multi-touch gestures.
• iCloud tabs (Mountain Lion only) synchronizes recent websites across OS X and iOS devices.
• Built-in sharing (Mountain Lion only) to email, Messages, and Twitter. Facebook integration will also be added
in autumn 2012.
• Improved performance
iOS-specific features
iOS-specific features for Safari enable:
• Bookmarking links to particular pages as "Web Clip" icons on the Home screen.[citation needed]
•
•
•
•
MDI-style browsing (with up to 8 pages open concurrently, limited by cache storage).[citation needed]
Opening specially designed pages in full-screen mode.[citation needed]
Pressing on an image for 3 seconds to save it to the photo album.[citation needed]
Support for HTML5 new input types.[citation needed]
New in iOS 4.2
• Find feature built into search box.[40]
• Ability to print the current webpage using AirPrint.[41]
New in iOS 4.3
• Integration of the Nitro JavaScript engine for faster page loads. This feature was expanded to all applications in
iOS 5.0.
New in iOS 5
• True tabbed browsing, similar to the desktop experience, only for iPads.[]
• Reading List, a bookmarking feature that allows tagging of certain sites for reading later, which syncs across all
Safari browsers (mobile and desktop) via Apple's iCloud service.[]
• Reader, a reading feature that can format text and images from a web page into a more readable format, similar to
a PDF document, while stripping out web advertising and superfluous information.[]
• Private browsing, like in most desktop browsers a feature that doesn't save the user's cookies and history, or allow
anything to be written into local storage or webSql databases.
232
Safari (web browser)
New in iOS 6
• iCloud Tabs, linking the desktop and iOS versions of Safari.
• Offline Reading Lists allow users to read pages stored previously without remaining connected to the internet.
• Full-screen landscape view for iPhone and iPod Touch users hides the Safari controls and status bar when in
landscape mode.
Security
Apple maintains a plugin blacklist that it can remotely update to prevent potentially dangerous or vulnerable plug-ins
from running on Safari. So far, Apple has blocked versions of Flash and Java.
Browser exploits
In the PWN2OWN contest at the 2008 CanSecWest security conference in Vancouver, British Columbia, a
successful exploit of Safari caused Mac OS X to be the first OS to fall in a hacking competition. Participants
competed to find a way to read the contents of a file located on the user's desktop, in one of three operating systems:
Mac OS X Leopard, Windows Vista SP1, and Ubuntu 7.10. On the second day of the contest, when users were
allowed to physically interact with the computers (the prior day permitted only network attacks), Charlie Miller
compromised Mac OS X through an unpatched vulnerability of the PCRE library used by Safari.[] Miller had been
aware of the flaw prior to the beginning of the conference and worked to exploit it unannounced, as is the common
approach in these contests.[] The exploited vulnerability was patched in Safari 3.1.1, among other flaws.[42]
In the 2009 PWN2OWN contest, Charlie Miller performed another successful exploit of Safari to hack into a Mac.
Miller again acknowledged that he had advance knowledge of the security flaw prior to the competition, and had
done considerable research and preparation work on the exploit.[43][44] Apple released a patch for this exploit and
others on May 12, 2009 with Safari 3.2.3.[45][46]
System requirements
Safari 6.0 requires a Mac running Mac OS X v10.7.4 or later.[47] Safari 5.1.7 requires a Mac running Mac OS X
v10.6.8 or any PC running Windows XP Service Pack 2 or later, Windows Vista, or Windows 7.[][48] Safari 5.0.6
requires a Mac running on Mac OS X 10.5.8.[49]
64-bit builds
The version of Safari included in Mac OS X v10.6 (and later versions) is now compiled for 64-bit architecture.
Apple claims that running Safari in 64-bit mode will increase rendering speeds by up to 50%.
233
Safari (web browser)
234
Criticism
Distribution through Apple Software Update
An earlier version of Apple Software Update (bundled with Safari,
QuickTime, and iTunes for Microsoft Windows) selected Safari for
installation from a list of Apple programs to download by default, even
when a pre-existing installation of Safari was not detected on a user's
machine. John Lilly, CEO of Mozilla, stated that Apple's use of its
updating software to promote its other products was "a bad practice
and should stop." He argued that the practice "borders on malware
distribution practices" and "undermines the trust that we're all trying to
build with users."[] Apple spokesman Bill Evans sidestepped Lilly's
statement, saying that Apple was only "using Software Update to make
it easy and convenient for both Mac and Windows users to get the
latest Safari update from Apple."[50] Apple also released a new version
of Apple Software Update that puts new software in its own section,
though still selected for installation by default.[51] In a newer update,
Apple Software Update no longer selected new installation items in the
new software section by default (as of late 2008).[citation needed]
Usage share of web browsers on Wikimedia
servers
Security updates for Snow Leopard and Windows platforms
Software security firm Sophos detailed in a post in their security news site how Snow Leopard and Windows users
are not supported by the Safari 6 release at this time,[52] while there are over 121 vulnerabilities left unpatched on
those platforms.[53]
References
[1] http:/ / en. wikipedia. org/ w/ index. php?title=Template:Latest_stable_software_release/ Safari& action=edit
[3] http:/ / apple. com/ safari
[6] Broken download link (http:/ / www. apple. com/ safari/ download) now has no information regarding Windows version
[9] http:/ / support. apple. com/ kb/ HT2964
[10] About the Mac OS X 10.4.4 Update (Delta) (http:/ / support. apple. com/ kb/ HT2343)
[11] Apple Reinvents the Phone with iPhone (http:/ / www. apple. com/ pr/ library/ 2007/ 01/ 09iphone. html)
[16] Mobile Safari (http:/ / the. taoofmac. com/ space/ com/ Apple/ iPhone/ Safari)
[17] About the security content of Safari 3.1.2 for Windows (http:/ / support. apple. com/ kb/ HT2092)
[18] Keizer, Gregg. Apple does about-face, fixes Safari's 'carpet bomb' bug (http:/ / www. computerworld. com/ action/ article.
do?command=viewArticleBasic& taxonomyName=macintosh_os& articleId=9101239& taxonomyId=123), ComputerWorld (June 19, 2008).
[22] Introducing SquirrelFish Extreme (http:/ / webkit. org/ blog/ 214/ introducing-squirrelfish-extreme/ )
[23] Hands on: Safari 4 beta fast, mixes polish, rough UI edges (http:/ / arstechnica. com/ apple/ news/ 2009/ 02/
hands-on-safari-4-beta-fast-mixes-polish-rough-ui-edges. ars)
[25] Apple - Mac OS X - What is Mac OS X - Safari (http:/ / www. apple. com/ macosx/ what-is-macosx/ safari. html)
[26] Safari 4.0.4 (http:/ / support. apple. com/ kb/ DL877)
[36] Apple Developer Connection: " What Is Cocoa? (http:/ / developer. apple. com/ documentation/ Cocoa/ Conceptual/ CocoaFundamentals/
WhatIsCocoa/ WhatIsCocoa. html)" ("Most of the applications you see on Mac OS X and iPhone OS, including Mail and Safari, are Cocoa
applications."). Accessed 2009-08-19.
[38] What's new in Safari 4. (http:/ / www. apple. com/ safari/ whats-new. html)
[39] http:/ / en. wikipedia. org/ w/ index. php?title=Safari_(web_browser)& action=edit
[41] Apple AirPrint Product Page (http:/ / www. apple. com/ ipad/ features/ airprint. html)
[42] Update: Apple patches Safari's $10,000 bug, fixes other flaws (http:/ / www. computerworld. com/ s/ article/ 9078399/
Update_Apple_patches_Safari_s_10_000_bug_fixes_other_flaws)
Safari (web browser)
[43] Pwn2Own winner says Macs are more safe, though less secure (http:/ / arstechnica. com/ apple/ news/ 2009/ 03/
pwn2own-winner-says-macs-are-more-safe-though-less-secure. ars)
[46] Apple issues patches for Mac OS X (http:/ / www. mxlogix. net/ securitynews/ web-security/ apple-issues-patches-for-mac-os-x265. cfm)
[50] Apple Distributes Safari Via Software Update (http:/ / www. informationweek. com/ news/ internet/ webdev/ showArticle.
jhtml?articleID=206905039)
External links
• Official website (https://www.apple.com/safari)
235
236
Key Organizations
Internet Engineering Task Force
Internet Engineering
Task Force
Abbreviation
IETF
Formation
January 16, 1986
Type
Standards Organization
Purpose/focus
Creating standards applying to the internet to improve internet usability.
Region served
Worldwide
IETF Chair
Russ Housley
Parent organization Internet Society
Website
ietf.org
[1]
Internet
An Opte Project visualization of routing paths through a portion of the Internet.
Internet portal
The Internet Engineering Task Force (IETF) develops and promotes Internet standards, cooperating closely with
the W3C and ISO/IEC standards bodies and dealing in particular with standards of the Internet protocol suite
(TCP/IP).[2][3] It is an open standards organization, with no formal membership or membership requirements.
All participants and managers are volunteers, though their work is usually funded by their employers or sponsors; for
instance, the current chairperson is funded by Verisign and the U.S. government's National Security Agency.[4]
Organization
The IETF is organized into a large number of working groups and informal discussion groups (BoF), each dealing
with a specific topic. Each group is intended to complete work on that topic and then disband. Each working group
has an appointed chairperson (or sometimes several co-chairs), along with a charter that describes its focus, and what
and when it is expected to produce. It is open to all who want to participate, and holds discussions on an open
mailing list or at IETF meetings, where the entry fee is currently around USD $650 per person.[5] The mailing list
consensus is the primary basis for decision of-making. There is no voting procedure, as it operates on rough
Internet Engineering Task Force
consensus process.
The working groups are organized into areas by subject matter. Current areas include: Applications, General,
Internet, Operations and Management, Real-time Applications and Infrastructure, Routing, Security, and
Transport.[6] Each area is overseen by an area director (AD), with most areas having two co-ADs. The ADs are
responsible for appointing working group chairs. The area directors, together with the IETF Chair, form the Internet
Engineering Steering Group (IESG), which is responsible for the overall operation of the IETF. The groups will
normally be closed once the work described in its charter is finished. In some cases, the WG will instead have its
charter updated to take on new tasks as appropriate.
The IETF is formally a part of the Internet Society. The IETF is overseen by the Internet Architecture Board (IAB),
which oversees its external relationships, and relations with the RFC Editor.[7] The IAB is also jointly responsible for
the IETF Administrative Oversight Committee (IAOC), which oversees the IETF Administrative Support Activity
(IASA), which provides logistical, etc. support for the IETF. The IAB also manages the Internet Research Task
Force (IRTF), with which the IETF has a number of cross-group relations.
A committee of ten randomly chosen volunteers who participate regularly at meetings is vested with the power to
appoint, reappoint, and remove members of the IESG, IAB, IASA, and the IAOC.[8] To date, no one has been
removed by a NOMCOM, although several people have resigned their positions, requiring replacements.
History
The first IETF meeting was on January 16, 1986, consisting of 21 U.S.-government-funded researchers. It was a
continuation of the work of the earlier GADS Task Force.
Initially, it met quarterly, but from 1991, it has been meeting 3 times a year. Representatives from non-governmental
entities were invited starting with the fourth IETF meeting, during October of that year. Since that time all IETF
meetings have been open to the public. The majority of the IETF's work is done on mailing lists, and meeting
attendance is not required for contributors.
The initial meetings were very small, with fewer than 35 people in attendance at each of the first five meetings. The
maximum attendance during the first 13 meetings was only 120 attendees. This occurred at the 12th meeting held
during January 1989. These meetings have grown in both participation and scope a great deal since the early 1990s;
it had a maximum attendance of 2,810 at the December 2000 IETF held in San Diego, CA. Attendance declined with
industry restructuring during the early 2000s, and is currently around 1,200.[9]
During the early 1990s the IETF changed institutional form from an activity of the U.S. government to an
independent, international activity associated with the Internet Society.
There are statistics available that show who the top contributors have been, by RFC publication.[10] While the IETF
only allows for participation by individuals, and not by corporations or governments, sponsorship information is
available from those same statistics.
Operations
The details of its operations have changed considerably as it has grown, but the basic mechanism remains
publication of draft specifications, review and independent testing by participants, and republication. Interoperability
is the chief test for IETF specifications becoming standards. Most of its specifications are focused on single
protocols rather than tightly interlocked systems. This has allowed its protocols to be used in many different systems,
and its standards are routinely re-used by bodies which create full-fledged architectures (e.g. 3GPP IMS).
Because it relies on volunteers and uses "rough consensus and running code" as its touchstone, results can be slow
whenever the number of volunteers is either too small to make progress, or so large as to make consensus difficult,
or when volunteers lack the necessary expertise. For protocols like SMTP, which is used to transport e-mail for a
user community in the many hundreds of millions, there is also considerable resistance to any change that is not fully
237
Internet Engineering Task Force
backwards compatible. Work within the IETF on ways to improve the speed of the standards-making process is
ongoing but, because the number of volunteers with opinions on it is very great, consensus mechanisms on how to
improve have been slow.
Because the IETF does not have members (nor is it an organisation per se), the Internet Society provides the
financial and legal framework for the activities of the IETF and its sister bodies (IAB, IRTF,...). Recently the IETF
has set up an IETF Trust that manages the copyrighted materials produced by the IETF. IETF activities are funded
by meeting fees, meeting sponsors and by the Internet Society via its organizational membership and the proceeds of
the Public Interest Registry.
IETF meetings vary greatly in where they are held. The list of past and future meeting locations can be found on the
IETF meetings[11] page. The IETF has striven to hold the meetings near where most of the IETF volunteers are
located. For a long time, the goal was 3 meetings a year, with 2 in North America and 1 in either Europe or Asia
(alternating between them every other year). The goal ratio is currently, during a two-year period, to have 3 in North
America, 2 in Europe and 1 in Asia. However, corporate sponsorship of the meetings is typically a more important
factor and this schedule has not been kept strictly in order to decrease operational costs.
Chairs
The IETF Chairperson is selected by the NOMCOM process specified in RFC 3777 for a 2-year term, renewable.
Before 1993, the IETF Chair was selected by the IAB.
•
•
•
•
•
•
•
Mike Corrigan (1986)
Phill Gross (1986–1994)
Paul Mockapetris (1994–1996)
Fred Baker (1996–2001)
Harald Tveit Alvestrand (2001–2005)
Brian Carpenter (2005–2007)
Russ Housley (2007–)[12]
References
[1] http:/ / ietf. org
[5] IETF Meeting Registration Page (http:/ / www. ietf. org/ meeting/ register. html)
[6] List IETF of Areas and Working Group Charters (http:/ / datatracker. ietf. org/ wg/ )
[7] RFC 2850 (http:/ / tools. ietf. org/ html/ rfc2850)
[8] The NOMCOM web page (https:/ / www. ietf. org/ nomcom/ )
[10] Jari Arkko's IETF Author Statistics Page (http:/ / www. arkko. com/ tools/ allstats/ )
External links
• Official website (http://ietf.org/)
• IETF Online Proceedings (http://www.ietf.org/old/2009/proceedings_directory.html)
• Early IETF Proceedings (http://www.ietf.org/old/2009/proceedings/directory2.html) (note: large pdf
files, one for each volume)
• Past Meetings of the IETF (http://www.ietf.org/meeting/past.html)
• Past IESG Members and IETF Chairs (http://www.ietf.org/iesg/past-members.html)
• The Tao of the IETF (http://tools.ietf.org/rfcmarkup?doc=fyi17): details on how IETF is organized
• MyIETF (http://myietf.unfix.org) Personalized notification service on RFC's and drafts with full archive of old
drafts etc.
238
International Organization for Standardization
239
International Organization for Standardization
International Organization for
Standardization
Organisation internationale de
normalisation
Международная организация по
стандартизации [1]
English language logo of the ISO
List of members
Formation
February 23, 1947
Type
NGO
Purpose/focus
International standardization
Headquarters
Geneva, Switzerland
Membership
[]
163 members
Official languages
English, French, and Russian
Website
www.iso.org
[]
[2]
The International Organization for Standardization (French: Organisation internationale de normalisation,
Russian: Международная организация по стандартизации, tr. Myezhdunarodnaya organizatsiya po
standartizatsii),[1] widely known as ISO, is an international standard-setting body composed of representatives from
various national standards organizations. Founded on February 23, 1947, the organization promotes worldwide
proprietary, industrial, and commercial standards. It has its headquarters in Geneva, Switzerland.[]
Name and abbreviation
The three official languages of the ISO are English, French, and Russian.[] The organization's logos in two of its
official languages, English and French, include the word ISO, and it is usually referred to by this short-form name.
The organization states that ISO is not an acronym or initialism for the organization's full name in any official
language.[citation needed] Recognizing that its initials would be different in different languages, the organization
adopted ISO, based on the Greek word isos (ἴσος, meaning equal), as the universal short form of its name.[3]
However, one of the founding delegates, Willy Kuert, recollected the original naming question with the comment: "I
recently read that the name ISO was chosen because 'iso' is a Greek term meaning 'equal'. There was no mention of
that in London!"[4]
The logo and the name ISO are both registered trademarks, and their use is restricted.[5]
International Organization for Standardization
240
History
The organization today known as ISO began in 1926 as the
International Federation of the National Standardizing Associations
(ISA), whose focus was mainly mechanical engineering.[6] It was
disbanded in 1942 during World War II but was reorganized under its
current name, ISO, in 1946, when delegates from 25 countries met at
the Institute of Civil Engineers in London; the new organization
officially began operations in February 1947.[]
Memory plaque of founding ISA in Prague
ISO is a voluntary organization whose members are recognized authorities on standards, each one representing one
country. The bulk of the work of ISO is done by the 2,700 technical committees, subcommittees, and working
groups. Each committee and subcommittee is headed by a Secretariat from one of the member organizations.[citation
needed]
Financing
ISO is funded by a combination of:[7][]
• Organizations that manage the specific projects or loan experts to participate in the technical work.
• Subscriptions from member bodies ("the national body most representative of standardization in its country").[8]
These subscriptions are in proportion to each country's gross national product and trade figures.
• Sale of standards.
International Standards and other publications
ISO's main products are international standards. ISO also publishes technical reports, technical specifications,
publicly available specifications, technical corrigenda, and guides.[9][]
International standards are designated with the format ISO[/IEC] [/ASTM] [IS] nnnnn[-p]:[yyyy] Title, where
nnnnn is the number of the standard, p is an optional part number, yyyy is the year published, and Title describes the
subject. IEC for International Electrotechnical Commission is included if the standard results from the work of
ISO/IEC JTC1 (the ISO/IEC Joint Technical Committee). ASTM (American Society for Testing and Materials) is
used for standards developed in cooperation with ASTM International. The date and IS are not used for an
incomplete or unpublished standard and may under some circumstances be left off the title of a published work.
Technical reports are issued when a technical committee or subcommittee has collected data of a different kind from
that normally published as an International Standard.[9] such as references and explanations. The naming conventions
for these are the same as for standards, except TR prepended instead of IS in the report's name. Examples:
• ISO/IEC TR 17799:2000 Code of Practice for Information Security Management
• ISO/TR 19033:2000 Technical product documentation — Metadata for construction documentation
Technical specifications can be produced when "the subject in question is still under development or where for any
other reason there is the future but not immediate possibility of an agreement to publish an International Standard".
Publicly Available Specifications may be "an intermediate specification, published prior to the development of a full
International Standard, or, in IEC may be a 'dual logo' publication published in collaboration with an external
organization".[9] Both are named by convention similar to Technical Reports, for example:
• ISO/TS 16952-1:2006 Technical product documentation — Reference designation system — Part 1: General
application rules
• ISO/PAS 11154:2006 Road vehicles — Roof load carriers
ISO sometimes issues technical corrigenda. Corrigenda (plural of corrigendum) are amendments to existing
standards because of minor technical flaws, usability improvements, or limited applicability extensions. Generally,
International Organization for Standardization
these are issued with the expectation that the affected standard will be updated or withdrawn at its next scheduled
review.[9]
ISO Guides are meta-standards covering "matters related to international standardization".[9] They are named in the
format "ISO[/IEC] Guide N:yyyy: Title", for example:
• ISO/IEC Guide 2:2004 Standardization and related activities — General vocabulary
• ISO/IEC Guide 65:1996 General requirements for bodies operating product certification
Standardization process
A standard published by ISO/IEC is the last stage of a long process that commonly starts with the proposal of new
work within a committee. Here are some abbreviations used for marking a standard with its status:[][][][][][][]
•
•
•
•
•
•
PWI - Preliminary Work Item
NP or NWIP - New Proposal / New Work Item Proposal (e.g., ISO/IEC NP 23007)
AWI - Approved new Work Item (e.g., ISO/IEC AWI 15444-14)
WD - Working Draft (e.g., ISO/IEC WD 27032)
CD - Committee Draft (e.g., ISO/IEC CD 23000-5)
FCD - Final Committee Draft (e.g., ISO/IEC FCD 23000-12)
•
•
•
•
DIS - Draft International Standard (e.g., ISO/IEC DIS 14297)
FDIS - Final Draft International Standard (e.g., ISO/IEC FDIS 27003)
PRF - Proof of a new International Standard (e.g., ISO/IEC PRF 18018)
IS - International Standard (e.g., ISO/IEC 13818-1:2007)
Abbreviations used for amendments:[][][][][][][][]
•
•
•
•
•
•
•
•
NP Amd - New Proposal Amendment (e.g., ISO/IEC 15444-2:2004/NP Amd 3)
AWI Amd - Approved new Work Item Amendment (e.g., ISO/IEC 14492:2001/AWI Amd 4)
WD Amd - Working Draft Amendment (e.g., ISO 11092:1993/WD Amd 1)
CD Amd / PDAmd - Committee Draft Amendment / Proposed Draft Amendment (e.g., ISO/IEC
13818-1:2007/CD Amd 6)
FPDAmd / DAM (DAmd) - Final Proposed Draft Amendment / Draft Amendment (e.g., ISO/IEC
14496-14:2003/FPDAmd 1)
FDAM (FDAmd) - Final Draft Amendment (e.g., ISO/IEC 13818-1:2007/FDAmd 4)
PRF Amd - (e.g., ISO 12639:2004/PRF Amd 1)
Amd - Amendment (e.g., ISO/IEC 13818-1:2007/Amd 1:2007)
Other abbreviations:[][][][]
•
•
•
•
•
•
•
•
•
TR - Technical Report (e.g., ISO/IEC TR 19791:2006)
DTR - Draft Technical Report (e.g., ISO/IEC DTR 19791)
TS - Technical Specification (e.g., ISO/TS 16949:2009)
DTS - Draft Technical Specification (e.g., ISO/DTS 11602-1)
PAS - Publicly Available Specification
TTA - Technology Trends Assessment (e.g., ISO/TTA 1:1994)
IWA - International Workshop Agreement (e.g., IWA 1:2005)
Cor - Technical Corrigendum (e.g., ISO/IEC 13818-1:2007/Cor 1:2008)
Guide - a guidance to technical committees for the preparation of standards
International Standards are developed by ISO technical committees (TC) and subcommittees (SC) by a process with
six steps:[][]
• Stage 1: Proposal stage
• Stage 2: Preparatory stage
241
International Organization for Standardization
•
•
•
•
242
Stage 3: Committee stage
Stage 4: Enquiry stage
Stage 5: Approval stage
Stage 6: Publication stage
The TC/SC may set up working groups (WG) of experts for the preparation of a working drafts. Subcommittees may
have several working groups, which can have several Sub Groups (SG).[]
Stages in the development process of an ISO standard[][][][][][]
Stage
code
Stage
Associated document name
Abbreviations
00
Preliminary
stage
Preliminary work item
PWI
10
Proposal stage
New work item proposal
NP or NWIP, NP Amd/TR/TS/IWA
20
Preparatory
stage
Working draft(s)
AWI, AWI Amd/TR/TS, WD, WD Amd/TR/TS
30
Committee stage Committee draft(s)
CD, CD Amd/Cor/TR/TS, PDAmd (PDAM), PDTR, PDTS
40
Enquiry stage
Enquiry draft
DIS, FCD, FPDAmd, DAmd (DAM), FPDISP, DTR, DTS
50
Approval stage
Final draft International
Standard
FDIS, FDAmd (FDAM), PRF, PRF Amd/TTA/TR/TS/Suppl,
FDTR
60
Publication stage International Standard
ISO TR, TS, IWA, Amd, Cor
90
Review stage
ISO TR, TS, IWA, Amd, Cor
95
Withdrawal
stage
Description
(CDV in
IEC)
It is possible to omit certain stages, if there is a document with a certain degree of maturity at the start of a
standardization project, for example a standard developed by another organization. ISO/IEC directives allow also the
so-called "Fast-track procedure". In this procedure a document is submitted directly for approval as a draft
International Standard (DIS) to the ISO member bodies or as a final draft International Standard (FDIS) if the
document was developed by an international standardizing body recognized by the ISO Council.[]
The first step—a proposal of work (New Proposal) is approved at the relevant subcommittee or technical committee
(e.g., SC29 and JTC1 respectively in the case of Moving Picture Experts Group - ISO/IEC JTC1/SC29/WG11). A
working group (WG) of experts is set up by the TC/SC for the preparation of a working draft. When the scope of a
new work is sufficiently clarified, some of the working groups (e.g., MPEG) usually make open request for
proposals—known as a "call for proposals". The first document that is produced for example for audio and video
coding standards is called a verification model (VM) (previously also called a "simulation and test model"). When a
sufficient confidence in the stability of the standard under development is reached, a working draft (WD) is
produced. This is in the form of a standard but is kept internal to working group for revision. When a working draft
is sufficiently solid and the working group is satisfied that it has developed the best technical solution to the problem
being addressed, it becomes committee draft (CD). If it is required, it is then sent to the P-members of the TC/SC
(national bodies) for ballot.
The CD becomes final committee draft (FCD) if the number of positive votes is above the quorum. Successive
committee drafts may be considered until consensus is reached on the technical content. When it is reached, the text
is finalized for submission as a draft International Standard (DIS). The text is then submitted to national bodies for
voting and comment within a period of five months. It is approved for submission as a final draft International
Standard (FDIS) if a two-thirds majority of the P-members of the TC/SC are in favour and not more than one-quarter
International Organization for Standardization
of the total number of votes cast are negative. ISO will then hold a ballot with National Bodies where no technical
changes are allowed (yes/no ballot), within a period of two months. It is approved as an International Standard (IS) if
a two-thirds majority of the P-members of the TC/SC is in favour and not more than one-quarter of the total number
of votes cast are negative. After approval, only minor editorial changes are introduced into the final text. The final
text is sent to the ISO Central Secretariat, which publishes it as the International Standard.[][]
ISO document copyright
ISO documents are copyrighted and ISO charges for copies of most. ISO does not, however, charge for most draft
copies of documents in electronic format. Although useful, care must be taken using these drafts as there is the
possibility of substantial change before it becomes finalized as a standard. Some standards by ISO and its official
U.S. representative (and the International Electrotechnical Commission's via the U.S. National Committee) are made
freely available.[10][11]
Members
ISO has 162 national members,[] out of
the 205 total countries in the world.
ISO has three membership categories:
• Member bodies are national bodies
considered the most representative
standards body in each country.
These are the only members of ISO
that have voting rights.
• Correspondent members are
A map of standards bodies who are ISO membersKey: members correspondent
countries that do not have their own
members subscriber members other places with an ISO 3166-1 code who aren't members
standards organization. These
of ISO
members are informed about ISO's
work, but do not participate in standards promulgation.
• Subscriber members are countries with small economies. They pay reduced membership fees, but can follow the
development of standards.
Participating members are called "P" members, as opposed to observing members, who are called "O" members.
Products named after ISO
The fact that many of the ISO-created standards are ubiquitous has led, on occasion, to common use of "ISO" to
describe the actual product that conforms to a standard. Some examples of this are:
• Many CD images end in the file extension "ISO" to signify that they are using the ISO 9660 standard file system
as opposed to another file system—hence CD images are commonly referred to as "ISOs". Virtually all computers
with CD-ROM drives can read CDs that use this standard. Some DVD-ROMs also use ISO 9660 file systems.
• Photographic film's sensitivity to light, its "film speed", is described by ISO 6, ISO 2240 and ISO 5800. Hence,
the film's speed is often referred to as its "ISO number".
• Often, the flash hot shoe found on cameras is called "ISO shoe", as it was originally defined in ISO 518.
243
International Organization for Standardization
ISO/IEC Joint Technical Committee 1
To deal with the consequences of substantial overlap in areas of standardization and work related to information
technology, ISO and IEC formed a Joint Technical Committee known as the ISO/IEC JTC1. It was the first such
joint committee. The second joint committee was created in 2009 - Joint Project Committee - Energy efficiency and
renewable energy sources - Common terminology (ISO/IEC/JTC 2).[12]
Criticism
With the exception of a small number of isolated standards,[10] ISO standards are normally not available free of
charge, but for a purchase fee,[13] which has been seen by some as too expensive for small open source projects.[14]
The ISO/IEC JTC1 fast-track procedures ("Fast-track" as used by OOXML and "PAS" as used by OpenDocument)
have garnered criticism in relation to the standardization of Office Open XML (ISO/IEC 29500). Martin Bryan,
outgoing Convenor of ISO/IEC JTC1/SC34 WG1, is quoted as saying:
I would recommend my successor that it is perhaps time to pass WG1’s outstanding standards over to
OASIS, where they can get approval in less than a year and then do a PAS submission to ISO, which
will get a lot more attention and be approved much faster than standards currently can be within WG1.
The disparity of rules for PAS, Fast-Track and ISO committee generated standards is fast making ISO a
laughing stock in IT circles. The days of open standards development are fast disappearing. Instead we
are getting 'standardization by corporation'.[15]
Computer security entrepreneur and Ubuntu investor, Mark Shuttleworth, commented on the Standardization of
Office Open XML process by saying
I think it de-values the confidence people have in the standards setting process,
and Shuttleworth alleged that ISO did not carry out its responsibility. He also noted that Microsoft had intensely
lobbied many countries that traditionally had not participated in ISO and stacked technical committees with
Microsoft employees, solution providers and resellers sympathetic to Office Open XML.
When you have a process built on trust and when that trust is abused, ISO should halt the process... ISO
is an engineering old boys club and these things are boring so you have to have a lot of passion … then
suddenly you have an investment of a lot of money and lobbying and you get artificial results. The
process is not set up to deal with intensive corporate lobbying and so you end up with something being a
standard that is not clear.[16]
Notes and references
[1] The 3 official full names of ISO can be found at the beginning of the foreword sections of the PDF document: ISO/IEC Guide 2:2004
Standardization and related activities — General vocabulary (http:/ / www. iso. org/ iso/ iso_iec_guide_2_2004. pdf)
[2] http:/ / www. iso. org/
[9] The ISO directives are published in two distinct parts:
Further reading
• JoAnne Yates & Craig N. Murphy: Coordinating International Standards: The Formation of the ISO (http://web.
mit.edu/iandeseminar/Papers/Fall2006/Yates.pdf), MIT Innovations and Entrepreneurship Seminar Series
(http://web.mit.edu/iandeseminar/index2006.html), Fall 2006.
244
International Organization for Standardization
External links
• Official website (http://www.iso.org) (free access to the catalogue of standards only, not to the contents)
• Publicly Available Standards (http://standards.iso.org/ittf/PubliclyAvailableStandards/index.html) (free
access to a small subset of the standards)
• ISO/TC 37 "Terminology and other language and content resources", a fundamental committee for all ISO
standardization projects
• ISO/IEC JTC1 (http://www.jtc1.org/)
• ISO Advanced search for standards and/or projects (http://www.iso.org/iso/search/extendedsearchstandards.
htm?formKeyword=&displayForm=true&published=true)
• ISO Concept Database (http://cdb.iso.org) (terminology database of ISO standards)
245
World Wide Web Consortium
246
World Wide Web Consortium
World Wide Web Consortium
Abbreviation
W3C
Motto
Leading the Web to Its Full Potential
Formation
October 1994
Type
Standards organization
Purpose/focus Developing protocols and guidelines that ensure long-term growth for the Web.
Location
MIT/CSAIL in USA, (Main Office) ERCIM in France, Keio University in Japan and many other offices around the world
Region served Worldwide
[]
Membership
386 member organizations
Director
Tim Berners-Lee
Staff
62
Website
www.w3.org
[1]
The World Wide Web Consortium (W3C) is the main international standards organization for the World Wide
Web (abbreviated WWW or W3).
Founded by Tim Berners-Lee at MIT and currently headed by him,[] the consortium is made up of member
organizations which maintain full-time staff for the purpose of working together in the development of standards for
the World Wide Web. As of 29 March 2012[2], the World Wide Web Consortium (W3C) has 351 members.[]
W3C also engages in education and outreach, develops software and serves as an open forum for discussion about
the Web.
History
The World Wide Web Consortium (W3C) was founded by Tim Berners-Lee after he left the European Organization
for Nuclear Research (CERN) in October, 1994. It was founded at the Massachusetts Institute of Technology
Laboratory for Computer Science (MIT/LCS) with support from the European Commission and the Defense
Advanced Research Projects Agency (DARPA),[] which had pioneered the Internet and its predecessor ARPANET.
W3C tries to enforce compatibility and agreement among industry members in the adoption of new standards
defined by the W3C. Incompatible versions of HTML are offered by different vendors, causing inconsistency in how
Web pages are displayed. The consortium tries to get all those vendors to implement a set of core principles and
components which are chosen by the consortium.
World Wide Web Consortium
It was originally intended that CERN host the European branch of W3C; however, CERN wished to focus on particle
physics, not information technology. In April 1995 the Institut national de recherche en informatique et en
automatique (INRIA) became the European host of W3C, with Keio University becoming the Japanese branch in
September 1996. Starting in 1997, W3C created regional offices around the world; as of September 2009, it has
eighteen World Offices covering Australia, the Benelux countries (Netherlands, Luxembourg, and Belgium), Brazil,
China, Finland, Germany, Austria, Greece, Hong Kong, Hungary, India, Israel, Italy, South Korea, Morocco, South
Africa, Spain, Sweden, and the United Kingdom and Ireland.[]
In January 2003, the European host was transferred from INRIA to the European Research Consortium for
Informatics and Mathematics (ERCIM), an organization that represents European national computer science
laboratories.[citation needed]
In October 2012, W3C convened a community of large Web players and publishers to establish a MediaWiki wiki
that seeks to documents open Web standards called WebPlatform and WebPlatform Docs.[3]
Specification Maturation
Sometimes, when a Specification becomes too large, it is split into independent Modules which can mature at their
own pace. Subsequent Editions of a Module or Specification are known as Levels, and are denoted by the first
integer in the title (eg. CSS3 = Level 3). Subsequent Revisions on each Level are denoted by an integer following a
decimal point (eg. CSS2.1 = Revision 1).
The W3C Standard Formation Process is defined within the W3C Process Document, outlining Four Maturity Levels
that each new Standard or Recommendation must progress through: []
Working Draft (WD)
After enough content has been gathered from Editor Drafts and discussion, it may be published as a Working Draft
for review by the community. A WD document is the first form of a standard that is publicly available. Commentary
by virtually anyone is accepted, though no promises are made with regard to action on any particular element of said
commentary.[]
At this stage, the standard document may likely have significant differences from its final form. As such, any who
implement WD standards should be ready to significantly modify their implementations as the standard matures.[]
Candidate Recommendation (CR)
A candidate recommendation is a version of the standard that is more firm than the WD. At this point, the group
responsible for the standard is satisfied that the standard does what is needed of it. The purpose of the CR is to elicit
aid from the development community as to how implementable the standard is.[]
The standard document may change further, but at this point, significant features are mostly locked. The design of
those features can still change due to feedback from implementors.[]
247
World Wide Web Consortium
Proposed Recommendation (PR)
A proposed recommendation is the version of the standard that has passed the prior two levels. The users of said
standard have had their say, and the implementors of the standard have likewise had a chance at providing input. At
this stage, the document has been submitted to the W3C Advisory Council for final approval.[]
While this step is important, it rarely causes any significant changes to a standard as it passes to the next phase.[]
Note: both Candidates and Proposals may enter "Last Call" to signal that any further feedback must be
provided expeditiously.
W3C Recommendation (REC)
This is the most mature stage of development. At this point, the standard has undergone extensive review and testing,
under both theoretical and practical conditions. The standard is now endorsed by the W3C as a standard, indicating
its readiness for deployment within its problem domain, and encouraging more widespread support among
implementors and authors.[]
Recommendations can sometimes be implemented incorrectly, partially, or not at all, but many standards define two
or more levels of conformance that developers must follow if they wish to label their product as W3C-compliant.[]
Later Revisions (WD)(NOTES)
A Recommendation may be updated or extended by separately-published, non-technical Errata or Editor Drafts until
enough substantial edits accumulate for producing a new edition or level of the Recommendation. Additionaly, The
W3C publishes various kinds of informative Notes which are to be used as a reference.[]
Certification
Unlike the ISOC and other international standards bodies, the W3C does not have a certification program. The W3C
has decided, for now, that it is not suitable to start such a program owing to the risk of creating more drawbacks for
the community than benefits.[]
Administration
The Consortium is jointly administered by the MIT Computer Science and Artificial Intelligence Laboratory
(CSAIL, located in Stata Center[4]) in the USA, the European Research Consortium for Informatics and Mathematics
(ERCIM) (in Sophia Antipolis, France), and Keio University (in Japan). The W3C also has World Offices in sixteen
regions around the world. The W3C Offices work with their regional Web communities to promote W3C
technologies in local languages, broaden W3C's geographical base, and encourage international participation in W3C
Activities.
W3C has a relatively small staff team, around 50–60 worldwide recently (as of 2010).[5] The CEO of W3C as of
Dec. 2010 is Jeffrey Jaffe,[6] former CTO of Novell. The majority of standardization work is done by external
experts in W3C's various working groups.
248
World Wide Web Consortium
249
Membership
The domain w3.org attracted at least 11 million visitors annually by 2008 according to a Compete.com study.[7]
The Consortium is governed by its membership. The list of members is available to the public.[] Members include
businesses, nonprofit organizations, universities, governmental entities, and individuals.[]
Membership requirements are transparent except for one requirement. An application for membership must be
reviewed and approved by W3C. Many guidelines and requirements are stated in detail, but there is no final
guideline about the process or standards by which membership might be finally approved or denied.[]
The cost of membership is given on a sliding scale, depending on the character of the organization applying and the
country in which it is located.[8] Countries are categorized by the World Bank's most recent grouping by GNI
("Gross National Income") per capita.[9]
Criticism
Domination by large organizations
The W3C has been criticized as being dominated by larger organizations and thus writing standards that represent
their interests. For example, a member of the Web Content Accessibility Guidelines Working Group (WCAG
WG)[10] complained that:
The process is stacked in favour of multinationals with expense accounts who can afford to talk on the
phone for two hours a week and jet to world capitals for meetings.[11]
A similar criticism, responding to large software company complaints about the slow pace of W3C's formulation of
XML/web services standards, appeared in Cnet's news.com in 2002:
"I'm not convinced that developers are too bothered," said Edd Dumbill, editor of XML.com, who has
worked as a software developer on Web services. "I think developers are being poorly served by the fact
that the big companies have dominated the work of the W3C over the last year. The W3C does more or
less what its members tell it to. So I don't have a huge amount of sympathy for the complaints of large
companies."[12]
Standards
W3C/IETF Standards (over Internet protocol suite):
•
CGI
•
SMIL
•
XML Information Set
•
CSS
•
SOAP
•
XML Schema
•
DOM
•
SPARQL
•
XPath
•
GRDDL •
SRGS
•
XQuery
•
HTML
SSML
•
XSL-FO
•
MathML •
SVG
•
XSLT
•
OWL
•
VoiceXML
•
WCAG
•
P3P
•
XHTML
•
WSDL
•
RDF
•
XHTML+Voice •
•
SISR
•
XML
•
SKOS
•
XML Events
•
XForms
World Wide Web Consortium
References
[1] http:/ / www. w3. org
[2] http:/ / en. wikipedia. org/ w/ index. php?title=World_Wide_Web_Consortium& action=edit
[8] W3C Membership Fee Calculator (http:/ / www. w3. org/ Consortium/ fees. php3?showall=1)
External links
•
•
•
•
•
•
W3C homepage (http://www.w3.org) (with links to local Offices, and many others)
About the World Wide Web Consortium (http://www.w3.org/Consortium/)
W3C Technical Reports and Publications (http://www.w3.org/TR/)
W3C Process Document (http://www.w3.org/Consortium/Process/)
W3C History (http://www.w3.org/History/)
How to read W3C specs (http://www.alistapart.com/articles/readspec)
250
Article Sources and Contributors
Article Sources and Contributors
Hypertext Source: http://en.wikipedia.org/w/index.php?oldid=541275841 Contributors: 16@r, 2D, AXRL, Ahoerstemeier, AlainV, Alan Liefting, Alan1963, Alexwcovington, Andyjsmith,
Avono, Avsa, Azul carmona, Ben Ben, Ben-Zin, Binksternet, Blainster, Blanchardb, Bobo192, Bongwarrior, Bookofjude, BozMo, CQ, Caltas, Charles Matthews, Charles dye, Chicopac,
Cholmes75, ChrisCork, Christian List, Christian75, Circuitsoft, Classicfilms, Colonies Chris, Conversion script, Coolcaesar, CryptoDerk, DARTH SIDIOUS 2, DXBari, DanBri, DanMS, Danny
lost, DavidLevinson, Deb, Delldot, Diego Moya, Dilgreen, Dominic, Dracothejuggler, Ebear422, Ecnal24, Edward, Ehrenkater, Erianna, Erich Schneider, Esanchez7587, Excirial,
Fieldday-sunday, Fjbfour, Fmccown, Furrykef, G7huiben, Gaius Cornelius, Gil Almaliach, Graham87, Grlloyd, Guppy, Guruweb, Gwguffey, Hadal, Harryboyles, Hopeiamfine, Hux, Ibuzzo,
InteractiveHuman, JSpung, Ja 62, Jake Nelson, JamesBWatson, Janus1339, Jay, Jbinder, Jblatt, Jenni gmas229, Jeroen, JetLover, Jevon, Jnate19, John Abbe, John Vandenberg, Johnwbaker,
Jojalozzo, Jstanley01, KYPark, KateKnowledge, KayEss, Kbdank71, Kbrose, Kelly Fallon, Kendalfong, Kingpin13, Kiripolszky, Korny O'Near, Krellis, Lee Daniel Crocker, Lifefeed, Ligulem,
Lijil, Liquidizer, Lsolan, Lyla1205, MER-C, Madhatter198, Mandarax, MarkBernstein, Markbanang, Materialscientist, Matusz, MaxEnt, Mdwh, Meiskam, Melchoir, Michael miceli,
MichaelMcGuffin, MikeIantosca, Mindmatrix, Miquonranger03, Missmarple, Mnemeson, MorrisRob, Mprove, Mq122, Mxn, NLoriel, Nakon, Nallan, NeonMerlin, Netnuevo, Newmanbe,
Noahwf, Ohnoitsjamie, Oicumayberight, Open2universe, Optim, OrgasGirl, Paperinik, Patrick, Pcap, PeterNuernberg, Phil Boswell, Philip Trueman, Philthecow, Pixi, Pjacobi, Plesiosaur,
Pol430, Prolog, PseudoSudo, Psychless, Pyrop, Q43, Rangi42, RazorXX8, Remember the dot, Revatim, Reza1615, Rjwilmsi, Rleon, Rodrigob, Ronz, Rp, SabaKahn, Sabbut, Shalom Yechiel,
Shinyplasticbag, Shiraazgabru, SmoothPorcupine, Spdegabrielle, Ss3teddy, Steven Walling, Stratocracy, Subversive.sound, Suschil20c, Swamibooba, Syo, Tabletop, Tainter, Tannin, Tarquin,
Tassedethe, Tedickey, Tekks, Terryn3, ThT, The Anome, The Cunctator, The Thing That Should Not Be, The wub, Thehelpfulone, Themightyquill, Thingg, Timneu22, Tobby72, Toddsschneider,
Tony1, Tregoweth, Tzag, Uncle G, Uriah923, VaderRacer, Vague Rant, Voyager640, Warren, Wayland, Wernher, Wetman, Weyes, WikHead, Wikid77, Wikidudeman, Wikifun95, Wikilibrarian,
Wikipelli, Wrad, Wschiffe, Xaosflux, Yonidebest, Саша Стефановић, ‫ﺳﺎﺟﺪ ﺍﻣﺠﺪ ﺳﺎﺟﺪ‬, 285 anonymous edits
Hypertext Transfer Protocol Source: http://en.wikipedia.org/w/index.php?oldid=544160819 Contributors: 1234r00t, 2404:9800:0:4:D227:88FF:FEBF:A4D1, 4342, A!eX, A-moll9, Aapo
Laitinen, Abdull, Abu ali, Acdx, Ace of Spades, Adoniscik, Agawish, Agupte, Agus puryanto, Ahoerstemeier, Aitias, Alansohn, Aldie, AlefZet, Alerante, [email protected], AlistairMcMillan,
Amalthea, Andareed, Andkim99, Andre Engels, Android Mouse, Aneah, Angus Lepper, Anna Lincoln, AnotherSprocket, Anwar saadat, Apparition11, Arch o median, Ash, Ashley Y, Asj123fds,
Asteiner, Astroview120mm, Atemperman, Audriusa, Avb, Avnjay, Baa, Babbage, Babedacus, Babysabre, Bamkin, BaronLarf, Basil.bourque, BeakerK44, Beefyt, Beinder, Beland, Ben-Zin,
BenBildstein, Benandorsqueaks, Benanhalt, Bernfarr, Betacommand, Betterworld, Bevan7, Bevo, Bg, Bgwwlm, Bihco, Bil1, Bjankuloski06en, Blade44, Blanchardb, Blm, Bluemask,
Bluerasberry, Bobo192, Bongwarrior, Booyabazooka, Bpantalone, Brian.fsm, Brownsteve, Bsrdjan, Bull3t, C. A. Russell, C.Fred, CWii, Calabe1992, Callmederek, Calor, Caltas, Calvin 1998,
Cambalachero, Cameltrader, Can't sleep, clown will eat me, Canderson7, Capricorn42, CardinalDan, Catamorphism, Cburnett, CecilWard, Cedy, Chadfiller, Charles Gaudette, Chasingsol,
Chealer, Checking, Chenqiang.prc, ChongDae, Christian75, Chruck, Coasting, Conversion script, Coroberti, Corpx, Cryptic, Cwolfsheep, Cyberstrike3000X, CyrilB, DKEdwards, DVdm, Daf,
Dalitvoice, Damian Yerrick, Damnreds, DanBLOO, DanBishop, Danculley, Daniboydl07, Daniel.Cardenas, Danielfolsom, DarTar, DasRakel, Davidjk, Davilima, Dawn Bard, Dcoetzee, Ddas,
De728631, DeadEyeArrow, Delicates, Delirium, DerBorg, DerHexer, DigitalNinja, Dionyziz, Discospinster, Dmufasa, Dmyersturnbull, Doc Armitage, Don4of4, Doria, Dr bab, Drcwright,
Dspradau, Ducknish, ENeville, Earthlyreason, Edward, Ehn, El C, ElKevbo, Electron9, Eli the Bearded, Elimerl, Ellywa, Elving, Englishrose, Enjoi4586, Ent, Epbr123, EphemeralJun, Equendil,
Esanchez7587, Evil Monkey, Ewawer, Extra999, Extransit, Eyreland, Falsestuff, Favonian, Femto, Ferkelparade, Firetrap9254, Flockmeal, Frap, Fraxtil, Fred Bradstadt, Fresheneesz, Funandtrvl,
Furrykef, Fuzzygenius, GGShinobi, GJHC1, Gaccolin, Gaius Cornelius, Galund, Gamernotnerd, Gavinmorrice, Gdo01, Gen. von Klinkerhoffen, Gfoley4, Giftlite, GimliDotNet, GioeleBarabucci,
Godtrog, GordonMcKinney, Gracenotes, Graciella, Graham87, GrahamColm, Grantglendinning, Gregkaye, Grouse, Gscshoyru, Gsiegman, Gurchzilla, Guy Harris, Guy Macon, Haakon,
Habbabuba91, Haiiiiilllsatana, Ham Pastrami, Hans Genten, HappyCamper, Happysailor, HarisM, Haseo9999, Hashar, Hashproduct, Helix84, HexaChord, Himichellet, Horsten,
Hrafnkell.palsson, Hrvoje Simic, Htonl, Hu12, Huw Powell, Hydrogen Iodide, Hyperthermia, I am One of Many, IMSoP, IRedRat, IShadowed, Icairns, Idyllic press, Ihatejava, Iluvcapra,
Imnotminkus, Imroy, Incnis Mrsi, InfoRetrieval, Interiot, Intgr, Irrypride, Itpastorn, Ivank06, Ivko, Ixfd64, J.Dong820, J.delanoy, JHolman, JTN, Jaan513, Jacobolus, James086, JamesBWatson,
Jarble, Jarkospratt, Jarkspratt, Jasper Deng, Jdowland, Jeffq, Jeltz, Jennica, Jleedev, Jmar777, John Quiggin, John Vandenberg, John of Reading, Jojhutton, Jonathan O'Donnell, Jonnabuz, JonoF,
Josh3736, Joyous!, Jrobinjapan, Jstrater, Jusdafax, JustAnotherJoe, KAtremer, KGasso, Ka-Ping Yee, Karingo, Karl Dickman, Kbrose, Keilana, Kesac, Kesla, Kgfleischmann, Kinema, Kiwi128,
Knutux, Koavf, Kocio, Konniret3, Korealin, KrakatoaKatie, Krellion, Krellis, Ksn, Kundor, Kungfuadam, KurtRaschke, Kvng, Kwi, Kylu, Kymacpherson, La Parka Your Car, Lady Serena,
Lannm, Leafyplant, Lee Carre, Lee J Haywood, Lethe, Lezek, Lightdarkness, Lilac Soul, Linusnk, Lloydpick, Lotje, Lotu, Lproven, Lugia2453, Luna Santin, Lupinoid, Lysdexia, M0rphzone,
M4gnum0n, MLauba, Mabdul, Macademe, MackSalmon, Madhero88, Maebmij, Magaman dude, Magioladitis, Mange01, Marc Kupper, Marcos canbeiro, Marek69, Mark Arsten, Martin
BENOIT, Marx01, Materialscientist, Mathiastck, Mauro Lanari, Mblumber, Mdd, Mdf, Meekohi, Mehfuz, Meneth, MikeF, Mikerlynn, Mindmatrix, Mjb, Mlibby, Mmj, Mnot, Modster, Moe
Epsilon, Mohammedsheikh786, Mormegil, Mortense, Moustafaza, Mpeylo, Mr Stephen, MrExplosive, MsDivagin, Mschel, Mumia-w-18, Mwarren us, Mwtoews, Nageh, Nanshu, NawlinWiki,
Negrulio, Nevyn, NewEnglandYankee, Newone, Nezzadar, Nickshanks, Nicolas1981, Nigelj, Nightraider0, Nightstallion, Nikola Smolenski, Ninly, Niqueco, Nixdorf, Nixeagle, Nknight, Nlu, No
Guru, Nubiatech, Nurg, Nyelvmark, ObfuscatePenguin, Okyea, Omniplex, Oneiros, Onlynone, Optiguy54, Orbnauticus, OsoLeon, Oxymoron83, Papadakis2007, Part Deux, Pascal666, Patrick,
Paul Mackay, Paul-L, Pb30, Perceptes, Persian Poet Gal, Petero9, Pforret, Pgan002, Phatom87, Philip Trueman, Piano non troppo, Pioneerking, Pip2andahalf, Pnm, Praefectorian, Produke,
Psychonaut, Pxma, Qff828, R3m0t, RHaworth, RJaguar3, RainbowOfLight, Rainman-sr, Raise exception, RandomHumanoid, Ravik, Reach Out to the Truth, RedWolf, Reschke, Retiono
Virginian, RexNL, Rhaskallion, Rich Farmbrough, Rischmueller, Rjwilmsi, Rmhermen, Rmosler2100, RobMattson, Robert Xia, RockMFR, Ronhjones, RossPatterson, Rror, RyanCross,
Ryulong, SJP, SWAdair, Sae1962, Saebjorn, Sakkath, Salvio giuliano, Samuel, Sander Säde, Saoshyant, Saturn star, SchnitzelMannGreek, Schwallex, Scientus, Sdrtirs, Sean Whitton, Seb-Gibbs,
Sekro, Shadowjams, Sharon08tam, SheeEttin, Sheldon Rampton, Shiftoften66, Shuipzv3, Sietse Snel, SiobhanHansa, SixSix, SkE, Smsarmad, Socrates2008, Sodabrew, SoftX, Spaceman85,
Spandrawn, Sparky132, SpyMagician, SqueakBox, Sri Krishna Geova Allah, Sriharsh1234, Sses401, Sstteevvee, Stephan Leeds, StephenBuxton, Stephenb, SteveLoughran, Stevenup7002,
Stolee, Stupid Corn, Suppie, Suruena, Syrthiss, T-borg, THEN WHO WAS PHONE?, Tabledhote, TakuyaMurata, Tbhotch, TechTony, Template namespace initialisation script, Tempodivalse,
TenOfAllTrades, Th.matt.wiki, The Anome, The Quirky Kitty, The Thing That Should Not Be, The Utahraptor, The wub, TheJosh, Theopolisme, Think777, Thumperward, Tianjiao, Tide rolls,
Timc1212, Timmywimmy, Timneu22, Tinogomes, Tlesher, Tobby72, Tobias Bergemann, Tobias382, Todd Vierling, Tomaxer, Tommy2010, TonyAiuto, Toto Mommam, Tpbradbury, Tpirfan28,
Tregoweth, Trusilver, Trygvis, TuukkaH, UU, Uncle Dick, Uncle G, UncleBubba, Universalss, Universimmedia, Uruiamme, Utcursch, VMS Mosaic, Valenciano, Versus22, VictorAnyakin,
Vinoth.t, Voxii, Vrenator, WDGraham, Wavelength, Wayne Hardman, Widefox, Wikipelli, Wintonian, Wizzard2k, Wolfomatic5, Wonko, Woohookitty, Wtmitchell, Y98, Yacht, Yaronf,
Yomcat, Yonatan, Yuhong, Zachlipton, Zalnas, Zekefast, Zvn, ^demon, Île flottante, 1344 anonymous edits
World Wide Web Source: http://en.wikipedia.org/w/index.php?oldid=544124550 Contributors: *feridiák, -Kerplunk-, 0wner170, 10metreh, 11rcombs, 16@r, 194.109.232.xxx,
203.109.250.xxx, 20coconuts, 2206, 23kal, 2602:304:CCEC:F80:8561:D8D6:133B:7948, 3rdTriangle, 5theye, 75th Trombone, 8ung3st, A Stop at Willoughby, ABF, AJR, AL3X TH3 GR8,
AMHR285, AManWithNoPlan, AVand, Aamirbk1, AaronLLF, AaronTownsend, Abarry, Abatres, Abce2, Abd, Abdel.a.saleh, Abovemost, Abrech, Acather96, Accurizer, Acuppert,
AdamXgamer, Adashiel, Adnanmuhammad95, Adrian.benko, Aeolien, Aesopos, Af648, AgadaUrbanit, Ageekgal, Agendum, Agent Smith (The Matrix), Ahoerstemeier, Akendall, Al guy, Alan
Liefting, Alansohn, AlefZet, Alerante, AlexWangombe, Alexf, Alexius08, Alexjohnc3, AlistairMcMillan, Alokchakrabarti, Alpha Quadrant (alt), Alphachimp, Alvestrand, Amillar,
Amplitude101, AmyzzXX, Andre Engels, Andrea Parri, Andrew D. Jones, AndrewWTaylor, Android Mouse, Andromeda321, Andy Dingley, Andyjsmith, Angela, Anomalocaris, Anonymous
Dissident, Anonymous101, Anoobmca, Antandrus, Anthony, AntiVan, Aodonnel, Applechair, ArchonMagnus, Arensa, Argonistic professor, Arkiedragon, ArnoldReinhold, Arnon Chaffin, Art
LaPella, Arthena, Artw, Aruncherry, Aselfcallednowhere, Ash, Asteffey, Astrobloby, Atomice, Autopilots, Avoided, Avono, Avram, Avriette, Awanta, Azotochtli, B, Balloomc, Bambuway,
Bananaclaw, Barek, Barras, Barthandelus, Bbatsell, Bcorr, Bdesham, Beavis6325, Beddingplane, Beetstra, Beland, Bender235, Bendy1, Benqish, Bevo, Bgs264, Bibi Saint-Pol, Big Bird, BigHaz,
BilCat, BillFlis, Billoraani123, Binksternet, Birds are weird, Bk0, Blacabyss, BlackAndy, Blahcake666, Bloodshedder, Bluffmaster541, Bo, Bo Lindbergh, Bobblewik, Bobet, Bobo192,
Boccobrock, Boerman, Bongwarrior, Bookandcoffee, Bookofjude, Boomshadow, Boraxx, Boris Allen, Borislav, Boriszex, Bornhj, Bossk-Office, Bostonian Mike, Bounce1337, Branddobbe,
Brian0918, Brianga, Brion VIBBER, Bronger, Brougham96, Bryan Derksen, Buchanan-Hermit, BudSipkiss, Buddyscruggs, BuffStuffer, Bumm13, Burto88, Butters77777, BziB, CSEditor,
CUTKD, Cabbatime, Cadiomals, Cailliau, Calvin 1998, Camster342, Can't sleep, clown will eat me, Canadian-Bacon, CanadianLinuxUser, Capricorn42, CaptainVindaloo, CardinalDan, Carlsotr,
Carta00, Cenarium, Centrx, Charraksus, Chbarts, Chininazu12, Chip1990, Chris 73, Chris G, ChrisLoosley, ChrisO, Christian List, Christopher Parham, Chuckiesdad, CiaPan, Cielomobile,
Cirrus Editor, Claidheamohmor, Classicfilms, Claud1996, CliffC, Clirmion, Closedmouth, Clpo13, Cntras, Coflo1994, Coldfire82, Colijunior, CommonsDelinker, Computerjoe, ComradeSlice,
Connelly90, Conversion script, Coolcaesar, Cooldemilou, Coolninja98, Coplston, CoramN, Corpx, Correctingothers, Corvus cornix, Cotinthecity, Courcelles, Cov87, Cpbaseball5, Craig
Pemberton, CrazyChemGuy, Crazycomputers, Credema, Crisco 1492, Cst17, Cuahl, Cwolfsheep, Cybercobra, Cyclopia, Cyde, D, D6, DARTH SIDIOUS 2, DBigXray, DD2K, DJ Clayworth,
DMacks, DRBar, DVdm, Daaah5, Daedelus, Damian Yerrick, Dan100, Dancter, Danny5000, DarkFalls, Darkenn, Darkwind, Darkx1337, Darth Panda, Dave6, Daveblack, Daverocks, Daverose
33, Daveydweeb, David Gerard, David Latapie, David Starkey, David.Mestel, DavidLevinson, Davnor, Davodd, Dawnseeker2000, Dbsanfte, DeadEyeArrow, DearPrudence, Deathtopudding,
Decltype, Deepugn, Den fjättrade ankan, Denis C., Denisarona, DennyColt, DerHexer, DestroyerBDT, Diamond2, Diberri, Dickguertin, DigbyDalton, Dina, DirkvdM, Discospinster, Dispenser,
Djavidan, Djg2006, Dlrohrer2003, DocWatson42, Docbug, Doggieman159, Dogmavskarma, Dominic, Donfbreed, Doradus, DoubleBlue, Doug A. Hole, Download, Dputig07, DragonHawk,
Drbb01, Drcarver, DreamGuy, Drift chambers, DriveMySol, Drmies, Drphilharmonic, Drunken Pirate, Dry., Dube-k Nkiribari, DugDownDeep, Dustinasby, Dwilz, Dylan Damien, Dynaflow,
Dzhatse, E Wing, EagleFan, Eagleamn, Eamonn sullivan, Earlebird, EarthPerson, Editmaniac, Edward Zimmermann, EdwinHJ, Efitu, Egmontaz, Ehsan™, Ekren, El C, El0i, ElfQrin, Elmoro,
Eloquence, Eluchil404, EmeryD, Emperorbma, Eneville, Enil, Epbr123, EpicBit, Erick.Antezana, Ericoides, Esanchez7587, Escalader, Everyking, Excirial, Exert, Eyu100, Ezeu, Falexi,
FatalError, FeldBum, Fenrisulfr, Fireice, Flewis, Florentino floro, Flowerparty, Flowerpotman, Flyer 13, Fmccown, Foxwolfblood, Fratrep, Freakingme, Freakofnurture, Frederik S, Ftu78,
Fumitol, Funandtrvl, Func, Furrykef, G2g2day, GB fan, GDonato, Gail, Gaius Cornelius, Gareth Griffith-Jones, Garion96, Gary King, Gary the gnome, Gary13579, Gdo01, Geniac, Genixp,
Gholson, Giftlite, Giggy, Gilliam, Glane23, GlassCobra, Glenn, Gman124, GoShow, Gobonobo, Gogo Dodo, GoingBatty, Gooday.1, Goplat, GorgeCustersSabre, Gott wisst, Gracenotes,
GraemeL, Graham87, Grantglendinning, Grawity, Graylorde, Greatbigtwit, Grison, Gsandi, Gscshoyru, Gsklee, Gun Powder Ma, Guoguo12, Gurch, Gustav von Humpelschmumpel, Guy Macon,
Gwernol, H2g2bob, Hadal, Hailey C. Shannon, Hairy Dude, Ham123de, HamburgerRadio, Happy darrenchong, Hardyplants, Harfi66, Harmil, Harryboyles, Harryzilber, Haseo9999, Hashar,
Hassim1983, Headbomb, Hellisp, Hendry, Henry Flower, Herehere, HexaChord, HiJohnSpencer, Highonhendrix, Hillgentleman, Hon-3s-T, Hoof Hearted, Hoppeduppeanut, Hotcrocodile,
251
Article Sources and Contributors
Howdoesthiswo, Hrvoje Simic, Hugovanmeijeren, Hung3rd, Husond, Huw Powell, Hydrargyrum, Hydrogen Iodide, I amm Beowulf!, I dream of horses, IByte, II MusLiM HyBRiD II, IMSoP,
IRP, IShadowed, IW.HG, Icairns, Icrutt, Ignatzmice, Imgaril, Imnotminkus, Informatic17, Inoen, Inter, Invistec, Ipso2, Iridescent, Ironrd, Irrbloss, Isam, Isilanes, Ixfd64, J.delanoy, JFG, JForget,
JHMM13, JNW, JOSHUAH HEBY, Ja2k8el, Jab52359, Jackol, JacobCurtis, Jacobolus, Jake Wartenberg, Jake-515-, JamesBWatson, Jamie89104, Jasper Deng, Jatkins, Javidan, JayJay, Jayhawk
of Justice, Jblatt, Jedsayaman, Jeff G., Jeffq, Jeffreylkk, Jehfes, Jeltz, Jemappelleungarcon, Jengod, JeremyA, Jesant13, Jeveteca, Jfdwolff, Jhessela, JialiangGao, Jim1138, Jimmi Hugh, Jj137,
Jjshapiro, Jleedev, Jmfriesen, Jnc, Jncraton, Jneal55, Joanjoc, Joe11miles, JoeOnSunset, Joeblakesley, JohanL, John, John Broughton, John Carter, John Fader, JohnI, JohnOwens, JohnPritchard,
JohnTechnologist, Johnwrw, JokelineUK, JonHarder, Jonathan Drain, Jonvvv2, JordeeBec, Jorel314, Jorunn, Joseph Solis in Australia, Josephf, Joshthegreat, Joshua, Joshua Issac, Josquius,
Jovianeye, Joy, Jpbowen, Jpo, Jrockley, Jschnur, Jsmestad, Jtiza, Jufert, Jugander, Juliancolton, Junnel, Junon, Jusdafax, Justinfr, JzG, Jzylstra, KYPark, Kaiyir Minoia, Karen Johnson, Karl Stas,
Karlson2k, Karmona, Kate, Katieh5584, Kbolino, Kbrose, Keilana, Kenny sh, Kezze, Khalid, Kim Bruning, Kingsaini, Kirbytime, Kiwi128, KiwiRyan, Kkram, Knff, Knutux, Koavf, Korath,
Korg, Kornfan71, Kpwa gok, KrakatoaKatie, Kri, Krishvanth, Krothor, Kubigula, KuroiShiroi, Kvasilev, Kvng, Kwamikagami, Kwiki, Kwlothrop, Kyle1278, L Kensington, LUUSAP,
Lachatdelarue, Lakefall, Lars Trebing, Lars Washington, Ldg2135a-14, Leafyplant, Leandrod, Learnaffilate, Lee Carre, Lee Daniel Crocker, Lee S. Svoboda, Legedevin, Leonig Mig, Leszek
Jańczuk, Letdorf, Levineps, Lifefeed, Lightmouse, Ligulem, Little Mountain 5, LittleOldMe, LizardJr8, Loalhe, Logan, Loki500, Longhair, LorenzoB, Lotje, Lovetinkle, Lowellian, Luk, Luna
Santin, Lwoodyiii, Lykoyrgos, Lynchyboi, MBisanz, MC10, MER-C, MITBeaverRocks, MONGO, Mabdul, Mac, Macy, Maestrosync, Magicxcian, Magioladitis, Mail4james, Mailer diablo,
Malatesta, Malcolm Farmer, Malleus Fatuorum, Manbilong, Manop, Manway, Marek69, Mark Arsten, Mark Foskey, Mark91, Markaci, Mars fenix, Martinp, Master Jay, Master of Puppets,
Masterhomer, Materialscientist, Matt Gies, Matt McIrvin, MattGiuca, Matteh, Matthieupinard, Mattisse, Matusz, Maurreen, Mav, Maxamegalon2000, Maxis ftw, Maxschmelling, Mayooranathan,
Mayor Westfall, Mbell, McSly, Mcalliph, Mcm, Mdbest, Mditto, Meigwil, Mentifisto, Meowkittymeow, Mervyn, Meshach, Metao, Mets501, Mgiganteus1, Michael Hardy, MichaelJanich,
Michaeljr97, Michaeloqu, Migabreu, MikeWren, Mindmatrix, Minghong, Mini-Geek, Minimac, Mirt Tenk, MisterCharlie, Mjb, Mjgw, Mlouns, Mm32pc, Modemac, Mohitngm, Monty845,
Moogwrench, Mooquackwooftweetmeow, Moosehadley, Moriori, Mort432, Mr random, Mr. Lefty, Mrqueen, Mrzaius, Mschel, Msikma, Mttcmbs, Mumia-w-18, Musicandnintendo, Muso799,
Mvuijlst, Mxn, My favourite teddy bear, Mywyb2, NCurse, NEO369, NHRHS2010, Naerii, Nageh, Nagy, Nakon, Nanshu, NantonosAedui, Nantoseiken, Nathanlandis, NawlinWiki, Nbarth,
NeilN, Nepenthes, Nertzy, Netoholic, Netvor, Neutral current, Neutrino007, NewEnglandYankee, Newmac, Newmanbe, Nicholasstorriearce, Nick C, NickBush24, NickW557, Nigelj, Nihiltres,
Niickibarra20, Nikai, Nikkimaria, Nishkid64, Nivix, Nixeagle, Nkeel34, Nlu, Noah Salzman, Noformation, Noisy, Noldoaran, NorthernThunder, Not home, NotinREALITY, Nubiatech, Nurg,
Oberst, Oblivious, Of, Ohconfucius, Ohnoitsjamie, Ohsayanything, Okiefromokla, Olgerd, Oli Filth, Oliver Pereira, Olivier Debre, OnePt618, Oniscoid, Onorem, Open4D, Opendna, Orange
Suede Sofa, Orderinchaos, OregonD00d, Oroso, Osarius, Ost316, Ours, Outriggr, OverlordQ, Oxymoron83, Paliku, Pastore Italy, Patelmihirb, Patrick, Paul Ebermann, PaulGarner, Pedxing585,
Pemboid, Persian Poet Gal, Peter Campbell, Peter Karlsen, Petrb, Petskratt, Pgan002, Phact, PhantomS, Pharaoh of the Wizards, Phil Boswell, PhilKnight, Philip Trueman, Phoenix Hacker, Piano
non troppo, Picturesofmia, Pigsonthewing, Pinethicket, Pinkadelica, Pintopc, Piotrus, Pnm, Porqin, Possum, Postlewaight, Poulpy, Poweroid, Ppk01, Ppp, Prender101, Prenn, PrestonH,
Prestonmcconkie, Pretty Green, Prezbo, Proofreader, PseudoSudo, Psy guy, Publicly Visible, Putanginanyo, Pyrolord747, Pádraic MacUidhir, Qmt, Quebec99, QuiteUnusual, Qwanqwa,
Qwerty0, Qwyrxian, Qxz, RJaguar3, RUL3R, Radar scanner, RadioActive, Radu Gherasim, Raeky, Ragesoss, Rainbow sprinkle, RainbowOfLight, Raining girl, Rama, RandomP, Randomreturn,
Rannpháirtí anaithnid, Rasmus Faber, Rathfalguni, Raul654, Rav77, Raven in Orbit, Rawr, Razor 69, Razorflame, Rbellin, Rbrwr, Reaper Eternal, Recognizance, Red Slash, Red1 D Oon,
RedWolf, Redtroll, ReeceSpielman, Remember the dot, RememberSammyJankis, Reneeholle, Res2216firestar, Rettetast, Rex1637, RexNL, Rhondalorraine, Rhopkins8, Rich Farmbrough,
RichardF, RickK, Rjensen, Rjwilmsi, Rmccue, Roadrunner, Robert4668, RobertG, Robertvan1, Robomanx, RockMFR, Rompe, Ronhjones, Ronkronk, Ronny8, Ronz, RossPatterson, Rrburke,
Rrfayette, Ruch37, Rws591, Ryan Postlethwaite, Ryan Roos, RyanGerbil10, Ryguillian, Ryulong, S.K., S8333631, SDC, SGBailey, SNIyer12, SQL, ST47, Sabariganesh, Saebjorn, Sam Korn,
Samwb123, Sander Säde, Sango123, SasiSasi, Satori Son, Savidan, Sbrentegani, Scalkin, Scandum, Scartboy, SchuminWeb, Schweiwikist, Scohoust, Scottyhoohow, Sean William, Seaphoto,
Securityadvisor, Seedat, Septagram, Seraphim, Sesshomaru, Seth Ilys, Sh4rk4tt4ck, Shanimoshe, Shantavira, Sharon08tam, Shii, Shirik, Shot, Shotwell, Siebrand, Simetrical, SimonD, Sionus,
Siteshwar, Sjh, Sjjupadhyay, Sjmtlewy, Skeejay, Skierpage, Skizzik, Sky Attacker, SkyMachine, Sligocki, Sliker Hawk, Slovakia, SlowPhoton, Smalljim, Snakekiller1x95, Snarl, Solidsandie,
Someguy1221, Someone else, Sonjaaa, Sophus Bie, SpNeo, Spam kj, Sparky99456, Specs112, Speer320, Spitfire19, Splarka, SpuriousQ, Ssolbergj, Staeiou, Staticfree, Stbalbach, Stephan Leeds,
Stephenb, Steven Walling, Steven Weston, Steven Zhang, Stirling Newberry, Strait, Sue Anne, Suffusion of Yellow, Sugarbeartrio, SummerWithMorons, Sun Creator, Sundar, Sunkorg, Sunray,
Superm401, Supten, Surfingslovak, SusanLesch, Susokukan47, Susurrus, Swatje, SweetNeo85, Symane, Synthe, Syrthiss, T3chl0v3r, TMC, Ta bu shi da yu, Tangotango, Targaryen,
TarkanAttila, TarmoK, Tarquin, Tbhotch, Tbutzon, Tcncv, Technopat, Teles, Tellyaddict, Tempshill, TenOfAllTrades, Teravolt, Tfmb, Tgeairn, That Guy, From That Show!, ThatWikiGuy, The
Anome, The Evil IP address, The Illusive Man, The JPS, The Man in Question, The Rambling Man, The Random Editor, The Thing That Should Not Be, The Utahraptor, The monkeyhate, The
sock that should not be, The sunder king, The wub, TheDevilOnLine, TheNoise, TheRhani, Theblackplague, Theladysman123, Theraven, Theskitone, Thespian, Thingg, Thinktdub, Thomas For.,
Thrustinj, Thue, Thundercross16, Tide rolls, TimTomTom, Timbl, Timlane, Timmywimmy, Timrollpickering, Timwi, Tiptoety, Tiramisoo, Tobby72, Tobias Bergemann, Tobypctechie,
Tommarsh99, Tomos, Tony Sidaway, Tony1, Torgo, Tothwolf, Towel401, Tpbradbury, Trakesht, Travis99, Tregoweth, Trenchcoatjedi, Trialsanderrors, Troy 07, True Scaffold, Trusilver,
Tsmith189, Ttwol101, TuukkaH, Twang, Twinsday, TwoTwoHello, Twobells, Tyciol, Tyw7, UA1high, UBeR, UU, UberScienceNerd, Ukulele, Ulmanor, Ultimus, Uman, Uncle Dick, Uncle
Milty, Unreal7, Unyoyega, UpstateNYer, Uriah923, Useight, Usergreatpower, Utcursch, Uzma Gamal, VMS Mosaic, VanBurenen, Velella, Venera Seyranyan, Verne Equinox, Versageek,
Viajero, Vicoar, Villafanuk, Virii, Vishnava, Vladkornea, VolatileChemical, Vrenator, Vycanis, W3forum, WDGraham, Wacco, Waggers, Wakebrdkid, Wanderingstan, Wang ty87916, Wangi,
Wasssupman2000, Wavelength, Wayne Slam, Webmaven, Weevil, Wertydm, Weyes, Whazzit, Widefox, Wikibofh, Wikid77, Wikidudeman, Wikieditor06, Wikifun95, Wikimalta, Wikimancer,
Wikipelli, Wildman7856, William Avery, Willking1979, Willsey1997, Wimt, Windharp, Wireless Keyboard, Wizofaus, Wknight94, Woody, Woohookitty, Wrinehart, Wsxx, Wtmitchell,
Wwwwolf, XXBassmanXx, Xdenizen, Xezbeth, Xithen, Yacht, Yama, Yamla, YellowMonkey, Yemal, Yizhenwilliam, Yoelper, Yori, Ytrehgfd, Yvesnimmo, Z3ugmatic, Zacman2000, Zaf,
Zaq12wsx, Zealotgi, Zenohockey, Zhente, ZimZalaBim, Zondor, Zoney, Zundark, Zzuuzz, 覇 の 寸, 2593 anonymous edits
Uniform resource locator Source: http://en.wikipedia.org/w/index.php?oldid=542695736 Contributors: 16@r, 21655, 28421u2232nfenfcenc, 2A02:1205:5059:6440:D:0:D00:F500, 2D,
4twenty42o, 790, 90 Auto, 98E, ABF, Academic Challenger, Acdx, Adam Conover, AdamSmithee, Addihockey10, Aftershock.london, Aitias, Akbam1974, Alansohn, Alink.yu, Allstarecho,
Almkglor, Alphax, Alpokoy, Alrwaithi, Amalthea, Ambuj.Saxena, Anaxial, Anchaudhary, Andante1980, AndersRiggelsen, Andrea Parri, Andrus Kallastu, Anwar saadat, Aqaing, Archanamiya,
Armbrust, Arnon Chaffin, Avb, Avenue, BCP5023, BEmanuel, Badgernet, Bah23, Bart133, Basanthid09s, Bayerotik, Beanwad02, Beartato, Beechlatoya, Beetstra, Beland, Ben Tbh, Benawhite,
Bihco, Binary TSO, Bitelio, Bjankuloski06en, Bobo192, Bonadea, Bones255, Bongwarrior, Bovlb, Bozoplay, BrianOfRugby, Brianga, Bufalo70, Bunnyhop11, Burntsauce, Bxn1358, C3o,
CMacMillan, CTZMSC3, CWY2190, Cacycle, Callanecc, Carlos-alberto-teixeira, Carnildo, Catgut, Catskul, Cburnett, Cctoide, Cfbballsnail, Chealer, ChrisMorgan, Chrislk02, Cic, Cidesonline,
Clockwork Laser, Cmaster97, Cmsarticle, Coffee, CommonsDelinker, Computerjoe, Conversion script, Cooku Caca, Creol, Crusnik117, Cst17, D, DARTH SIDIOUS 2, Dali, Dantebell2316,
Dantheman531, DarkAudit, Darth Panda, Davidjamesgill, Davidkazuhiro, Davido321, Davidprior, Dbfirs, DeadEyeArrow, Decrease789, Delband, Demerzel, Demize, Demmy, Denny,
Dinnerbone, Dirkbb, DirkvdM, Discospinster, DocWatson42, Docu, Donner60, Doops, Dossantoscompositor, DoubleBlue, Dougledbetter, Download, DrFree, DraxusD, Dro Kulix, Dude1818,
Dustydowning, Dwayne, DylanW, Dʒɑn, E1st3in, Ed Brey, EdC, Edcolins, EddEdmondson, Eddy158, Edgar181, Edgarde, Edward321, Efriedman, Egil, Ehn, Elenseel, Eli the Bearded, Elkman,
Emre D., EncMstr, Enviroboy, Epbr123, Equendil, Etan Wexler, Ethanpet113, Etienne.navarro, Etm157, Evice, Evil saltine, Excelguides, Excirial, FF2010, FatalError, Fetchcomms, Feydey,
Ff1959, Fixer1234, Fkbreitl, Fmccown, Fragglet, Frecklefoot, Fred Gandt, Friendocity, FunPika, Furrykef, Fæ, Gadfium, Gaia Octavia Agrippa, Gail, Galoubet, Gardar Rurak, Gazpacho,
GeorgeMillo, Georgesawyer, Gfbares, Gfoley4, Giftlite, Gjp23, Gnowor, Goatmilker, Gogo Dodo, GrEeN1010, GraemeL, Graham87, Grawity, Greenguy1090, Grim Revenant, Ground Zero,
Gurklurk, Guðsþegn, Haakon, HalfShadow, Halidecyphon, Hannjeff, Happysailor, Harrisonlatour, Hblum01, Headbomb, Hmrox, Hogoworld, Holizz, Hopskotch93, HorsePunchKid, Hoslona,
Hqb, Hrvoje Simic, I dream of horses, Iamcreasy, Iancarter, Imandrewa, Imnotminkus, Imranhossainfuton, Imroy, InGearX, Incatrail60, Incnis Mrsi, Indon, Info.akhilesh, Insanity Incarnate,
Interiot, Ipsign, Iridescent, IvanLanin, Ixfd64, J.delanoy, JD554, JFG, JHunterJ, JTN, James086, Jameshfisher, Jauerback, Jay, Jay867, Jdongo, Jebus989, JeffClarkis, Jefflithe, Jeremy Visser,
Jerry, Jesse Viviano, Jgeer, Jigen III, Jim1138, Jimgawn, Jiodarseo, Joaquin, Joeblakesley, John Vandenberg, John254, JohnJBarton, Johnuniq, Jojhutton, Jookydfw, Joshuagay, Jovianeye,
Jvhertum, KFP, Kaarel, Kahuroa, Kanenas, Karada, Kbdank71, Kbrose, Khenpo.karma.namgyal, Kim.mason, King Lopez, Kingpin13, Kitty53, KnowledgeOfSelf, Kurl, Kusma, Kuyabribri,
Kvng, Kwekubo, L Kensington, LFaraone, LGReed, LOL, LRJones, Learn-Quraan-Online, Lee Carre, Liftarn, LonelyBeacon, Looxix, Lotje, Loyloy102, Luk, LukeTheSpook, Lupo, Lysdexia,
Lysy, MER-C, MTC, Maartenvdbent, Maelin, Magister Mathematicae, Magog the Ogre 2, Mahezone, Man9091961, Mandarax, Marc Mongenet, Marcika, Mark91, Markiyan, Martinkunev,
Martinp23, Materialscientist, Matime, Matěj Grabovský, Mediran, Metricopolus, Mgiganteus1, Michaelbraganza63, Michaelpb, Mild Bill Hiccup, Mindmatrix, Minghong, Mini-Geek, Minimac,
Mitaphane, Mjb, Mnayam, Mnudelman, Mogism, Monkbel, Monty845, Msandersen, MuZemike, Myanw, NERO&OLIVIA, Nachmore, Nakon, Natalie Erin, NawlinWiki, Ndenison, Nealmcb,
Neechalkaran, NeonMerlin, Nepruur, Neptune5000, Nestea Zen, NewEnglandYankee, Nialsh, Nickgillmusic, Niedelou, Nigelj, Njjklp, Nk, Noctibus, Nopetro, NotAnonymous0, Nsaa, Nsande01,
Nsda, Numbo3, Nurg, Octahedron80, Od Mishehu, Ohnoitsjamie, OwenBlacker, Pablo323, Pajero M, Pajz, Palica, PandaSaver, Parabolis, Pat Berry, Patrick, Paul 012, Paul-L, Phantomsteve,
Pharaoh of the Wizards, Philg88, Philip Trueman, Piano non troppo, Pifactorial, Podkayne, Pol098, Postoak, Prosanta das, Protonk, QmunkE, Queensy, Qwerty0, Qwyrxian, R.E. Freak,
RHaworth, RMFan1, RaccoonFox, Ral315, Rameshbabu.itian, Realchallange, Reaper Eternal, RenamedUser01302013, Repka, Repku, Requestion, Rettetast, Rexhammock, Rkmishraseo,
Robchurch, Robert P. O'Shea, Robin Whittleton, Robomaeyhem, Rocastelo, Ronebofh, Ronhjones, Rosepicardo, Ross Burgess, RossPatterson, RoyBoy, Rrburke, Rsrikanth05, Rssky123, RuineR,
Rwwww, Ryanrs, S Roper, SQL, ST47, Sakari55, SamB, Samvanbrussel, Sanborivali, Sango123, Sannse, Santoscompositor, Saric, Scgallafent, Schenbo, Schnolle, Scottcampbell195,
Scottsteffens, Seanbeal87, Seogetdriven, September Pearce, Sesu Prime, Severoon, Sf8193, Shadow1, Shafaki, Sharcho, Shrimpy93, Simetrical, SimonP, Sir Vicious, Sjoerd visscher, Snerfl,
Soc5555, Sonxcon1, Sophia, Spitzak, Spring1, SqueakBox, Ssd, StaticGull, Stelio, Storm Rider, Stw, Stypex, Suffusion of Yellow, SuperTycoon, Supten, Svick, Swapneel100, Swpb, Syndicate,
THEN WHO WAS PHONE?, Tarikash, TcomptonMA, Teddymac, Teles, Teratornis, Terrillja, Tetraedycal, The Anonymouse, The Land of Smeg, TheDJ, TheJames, TheNewPhobia,
Thetimesofearth, Thingg, Thomprod, Tide rolls, Timwi, Titodutta, Tizio, Tmaher, Tobias Bergemann, Tom Morris, Tom harrison, Tommy2010, Tommy78a, Tony1, Toussaint, Trusilver,
Twinsday, TyA, Tyw7, Uccacomputer, UkPaolo, Ultimarko, Uncle Dick, Universimmedia, Utcursch, Utonite, Vegaswikian, Versus22, Vicki Rosenzweig, Vid2vid, Vilcxjo, Viliusk, Vinitutpal,
Vladkornea, WR:ichibantel, Waggers, Wangi, West Brom 4ever, Whisky drinker, Wickethewok, WikHead, Wiki alf, Wikipelli, Wildb, William Avery, William Pietri, Williamborg,
Willking1979, Windharp, Woohookitty, Wot the jott, Wtmitchell, WulfTheSaxon, Wwillats, Wywin, Xboxsky, Xezbeth, Xhienne, Yankeu 14, Yussuf Mursal, Zahid Abdassabur, Zaiken,
Zenohockey, Zhangshuzhen, Zlazher, Zondor, ^demon, ТимофейЛееСуда, आशीष भटनागर, 朝 彦, 1180 anonymous edits
Markup language Source: http://en.wikipedia.org/w/index.php?oldid=541610213 Contributors: 16@r, 62.83.122.xxx, ARAJ, Abdull, Academic Challenger, Akshaylal, AlanUS, Alansohn,
AlecFTW, AlistairMcMillan, Alnc91, Alvestrand, Alyosha kzov, Andrewpmk, AndriesVanRenssen, Andy Dingley, Antandrus, Ap, Art LaPella, Avinashm, AzaToth, Benandorsqueaks,
Betterusername, BigFatBuddha, Blehfu, Bobblewik, Borislav, BradBeattie, Brockert, Burschik, Burt Harris, Butwhatdoiknow, Caesura, Ceoil, Chameleon, Chasingsol, Chininazu12, Chris Q,
Chris the speller, Cmdrjameson, Conny, Conversion script, Coolcaesar, Corpx, Cra1gthecrog, Cybercobra, DSatz, Damian Yerrick, Danakil, DanielVonEhren, David Gerard, David1217,
252
Article Sources and Contributors
Deepugn, Delirium, Dewritech, Doctormatt, Dreftymac, Drevicko, Drizzt2, DropDeadGorgias, Dweinberger, Eagleal, Egmontaz, Eloquence, Enric Naval, Eric Herboso, Error, Everyking,
Ewawer, Fernkes, Ferris37, Freeman firefox, Futurebird, GeorgeLouis, Gfoley4, GhostInTheMachine, Gogo Dodo, Green caterpillar, Grshiplett, HDarke, HarryAlffa, Harryboyles, Hede2000,
Hephaestos, Hicketyhicketyhack, Hirzel, Husond, Ike9898, IlliterateSage, Imran, Industrial research, IvanLanin, IvarTJ, J.delanoy, JIP, Jakob Voss, Jamespoky, Jay McClure, Jdforrester, Jeenuv,
Jengod, Johnnydc, JonHarder, Jondel, JosebaAbaitua, Jutiphan, Kandy4me, Khaled hosny, Kjmathew, KramarDanIkabu, Krawi, Kwaku, LMRuane, LaMona, Lamentation, Langec, Larry Sanger,
Laura S, Leafyplant, LeaveSleaves, Lee Daniel Crocker, Leibniz, Lentom, LeonardoGregianin, Libcub, LilHelpa, LittleBenW, Logan, Lololol79, Lotje, Lupin, M.n.summerfield, MER-C, MK8,
Madman2001, Magioladitis, Mananicasatkica, ManuelGR, Maolmhuire, Marbux, Marcopoloshow, Marebearx5, Martin Kozák, MartinHarper, Martorell, Mathias-S, Mathiastck, Matthewmayer,
Maury Markowitz, Mav, Mbell, Mentality, Mhkay, Mhking, Mike Segal, Mikelima, Minghong, Mr. Stradivarius, Mxn, Mysid, N0nr3s, Naaman Brown, Nanshu, Nbarth, Nealmcb, Neutrality,
Newmanbe, Nichlas, Notinasnaid, Nowa, NuclearWarfare, O'Dubhghaill, Oblivious, Patrick, Pavel Vozenilek, Pcap, Peak, Pedant, Perey, Petri Krohn, Podboyz, Pol098, Prime Entelechy,
Quadell, Quota, R'n'B, RLLauzon, Rajesh Bagri, Reinthal, RenniePet, Rjsims, Romanm, Rursus, Ryan Reich, S.K., SDC, Saric, SaturdayNightSpecial, Sburke, Schnolle, Sderose, SebRovera,
Shepard, Shervinafshar, Simeon H, SimonP, Smalljim, Squideshi, Stepherbean6, Steven Walling, TheTrollers, Theopolisme, Thesilverbail, Think777, Tide rolls, TimBray, Timo Honkasalo,
Tobias Bergemann, Tom Pippens, Topaz, Toussaint, Ulf Dunkel, Universalss, Unixxx, Uuor, Vegaswikian, Versus22, Vriullop, WHeimbigner, Wavelength, WereSpielChequers, Wiju,
Wikishotaro, Woohookitty, X7q, XP1, Xieqi200, YUL89YYZ, Yatin999, Yelcuervodijo, Yelyos, YojimboSan, Zeimusu, 朝 彦, 296 anonymous edits
Standard Generalized Markup Language Source: http://en.wikipedia.org/w/index.php?oldid=540688989 Contributors: 4th-otaku, Acdx, Adsims2001, Adys, Alexbrn, AlistairMcMillan,
Ambarish, AndrewWTaylor, Angelpeream, Ashdurbat, Asymmetric, BD2412, Beinsane, Ben-Zin, Betterworld, Blaxthos, BodyTag, Bomazi, Boris Barowski, Burschik, C.M.Sperberg-McQueen,
Chalst, Chealer, Chris the speller, Chris55, Chrisahn, Chrislk02, Chuuumus, Conversion script, Dbg0, Dcirovic, Deodar, Discospinster, Dmsar, Dreftymac, Dysprosia, Egil, Ehn, Elwikipedista,
FatalError, Ghettoblaster, GoingBatty, Graham87, Gurch, HappyDog, Howard McCay, Ike9898, JForget, John Vandenberg, Jordancpeterson, Kazvorpal, Keichwa, KeithTyler, Klingoncowboy4,
Klparrot, Kricxjo, Ktdreyer, Kutulu, Kvng, Lafeber, Lambiam, LeeHunter, Lfstevens, Lifefeed, Liftarn, Lockley, LucasVB, Magicbronson, Masgatotkaca, MattiasAndersson, Mecanismo,
Meeroslav, Mhazard9, Minghong, Modster, Mratzloff, Msreeharsha, Nanshu, Ninly, Nk, Norm mit, Nuno Tavares, Ohka-, Open Book, Optikos, Ott0, Paul Magnussen, Pentap101, Pfrishauf,
Przepla, Psychlohexane, Quota, Qutezuce, RedWolf, Rick Jelliffe, Ringbang, Rjgodoy, Rjwilmsi, Robert Hiller, Roo72, RossPatterson, Rtc, Rursus, SamB, Schnolle, Sideshowbarker, Skim,
Stephen Gilbert, SteveGoodey, Suwa, Svick, Tene, The Anome, Tmrtlght, Tomdo08, Toolnut, Traroth, TwoOneTwo, Typhoonhurricane, V&-L.E.E.T, Widefox, Wikivek, ZMughal, Zazpot, 138
anonymous edits
Document Type Definition Source: http://en.wikipedia.org/w/index.php?oldid=539348701 Contributors: Abdull, Ajcumming, Akmathes, Akula777, Alex.muller, Allens, Andy Dingley,
Aquilosion, ArnoLagrange, Avernet, BD2412, Bje2089, BlueScreen, Bobdc, C. A. Russell, Ceo, Cgs, Chininazu12, Cic, Cinderblock63, Clan-destine, Conversion script, DTDn00b, Damian
Yerrick, Davehi1, Decrease789, Detroit, Dmb000006, Dmmandil, Dulciana, Eob, Flyingbird, Fryed-peach, Gaius Cornelius, Gioto, GoingBatty, GrahamSmith, Haza-w, Hgkamath, Hightilidie,
Holizz, Hu12, Hymek, Hymyly, IIVQ, Igno2, Ivan Pozdeev, JakobVoss, Jan1nad, Jay, Jeenuv, Jmh, Jmlipton, Jmnbatista, Jogloran, Kadin2048, Kainaw, Karl Dickman, Kbdank71, Ke4roh,
Kingofthewave, Kjtobo, KnowledgeOfSelf, Kurykh, Kyng, Liftarn, LilHelpa, Looxix, Lpenz, Luna Santin, Luís Felipe Braga, Lvl, Lysdexia, MER-C, MRqtH2, Maximaximax, Minghong, Mjb,
Nicmila, NoNonsenseHumJock, Notheruser, Numbo3, OlEnglish, OlegMarchuk, PL290, Panyajit, Pdebonte, Piano non troppo, Pigsonthewing, Pkearney, Pojo, Pol098, QVanillaQ, Qfwfq,
Ramprasad.ap, Regenspaziergang, Rgoudie, Rhys.lewis, Rick Jelliffe, Rkinder, RuudVisser, Ryan Roos, Schnolle, Sciurinæ, Securiger, Shizhao, Sjc, Smyth, Srdjan Vesic, Stevage, Sumek, Taka,
Tarquin, Trivialist, Tungln, Verdy p, VictorAnyakin, Walk Up Trees, Whaa?, Winterst, WriterHound, Wyvyrn, Yurik, 171 anonymous edits
HTML Source: http://en.wikipedia.org/w/index.php?oldid=544629546 Contributors: -bilal92-, 007spyguy7, 0612, 07w109, 194.82.103.xxx, 195.186.148.xxx,
2001:18E8:2:109E:5DC3:2D33:4FA0:23D4, 213.3.148.xxx, 336, 7DaysForgotten, A brisson, A10brown, A3RO, ACBest, Aapo Laitinen, Aaron Brenneman, Abb615, Abc518, Abdull, Acq3,
Adambiswanger1, Addihockey10, Addshore, Adi necromancer, Ado, Adrian J. Hunter, Aervanath, Afterwriting, Ageekgal, Ahoerstemeier, Aitias, Ajsandbach, Aka042, Akira-otomo, Aksi great,
Alan Pascoe, Alansohn, AlecFTW, Alex earlier account, Alexfiles, Alexius08, Alexjohnc3, Alfio, Alfrin, AlistairMcMillan, Allmightyduck, Allstarecho, Alone363, Alpha 4615, AlphaBlogshow,
Alsandro, Amatulic, Amerias, Amire80, Amniarix, An7drew, Anand Kishore Jha, Andonic, Andrejj, Andres, Andrew Kurish, Andy, Andy Dingley, Angus Lepper, Animum, Anir1uph, Anirvan,
Anna Lincoln, Answerthis, Antique Rose, Anton Sergeev, Antonio Lopez, Aodonnel, Armstrong1113149, Arnon Chaffin, Arntuuri, Arronax50, Arthur3030, Ashenai, Ashutosh.ukey,
Asiansryummeh, Assisted Reputation, AstareGod, Ataru, AtheWeatherman, Attlas, Austriacus, Av2917, Avoided, Ayansen1988, BabuBhatt, Bachrach44, Bald Zebra, Bart v M, Bartledan,
BaseballByrd, Bazza 7, Bazzargh, Bdk, BeakerK44, Beano, Becritical, Beeshoney, Beland, Benbest, Bencherlite, Bender235, Bento00, Betax, Bike756, Binksternet, BioTube, Bitbit,
Blackdenimgumby, Blade Hirato, Blaise170, Blakeman909, Blanchardb, Blehfu, Bluemask, Bluexephos Sjin, Bmsshubham, Bobo192, Bogtha, Bomazi, Bonadea, Bongwarrior, BonsaiViking,
Booyabazooka, Bovineone, Boxing245, Braddunbar, Bradeos Graphon, Brat32, Breon, Brews ohare, Brianjd, Brianreavis, Briansince1988, Brion VIBBER, Brossow, Bubba73, Buidinhthiem,
Bullzeye, Bunnyhop11, Burket, Burns28, Burschik, Bushytails, Buzgun, Cadderly, Caknuck, Calabe1992, Calmer Waters, Caltas, Camw, Can't sleep, clown will eat me, CanadianLinuxUser,
Canterbury Tail, Canthusus, Cap'n Refsmmat, Capricorn42, Captain Superman, Captain panda, Carbon editor, CarbonUnit, Carewolf, Carineduwez, Cenarium, Cenet47, CesarB, Cfust,
Chaojoker, Charles Gaudette, CharlotteWebb, Chat de jutiapa guatemala horcones, Ched, Chesshead123, Chesspapa, Chicgeek, Chickenandpasta, Chiman9321, China Crisis, Chinneeb,
Chowbok, Chridd, Cic, Classicfilms, Cliffsblog, Closedmouth, Clovis Sangrail, Code E, Codetiger, Coffee, Cole1234567890, Cometstyles, Conrad.Irwin, Conversion script, Coolcaesar,
Cornellrockey, Costadelsponz, Costello, Courcelles, Cpiral, Cplot, Cq142, Crazycomputers, Crazyhead4, Crisskooper, Crissov, CrizCraig, CrookedAsterisk, Csdorman, CyberSkull, Cybercobra,
Cyde, D'oh!, D6, DARTH SIDIOUS 2, DKEdwards, DMBradbury, DVD R W, Dabomb45, Damicatz, Dammit, Dan100, Danakil, Daniel5127, DanielVonEhren, Darth Mike, Dasani,
Dave314159, Dave6, David Biddulph, David Gerard, David Levy, DavidL (usurped), DavidLeader, DavidLeeLambert, Daviecat, Dawn Bard, Dcdspace, DeadEyeArrow, Deagle AP,
Decrease789, Dekisugi, Demmy, Demonkoryu, Den fjättrade ankan, DennisWithem, Dethme0w, DexDor, Dfrg.msc, Dhavalhirdhav, Diannaa, DieBuche, Diegosolo, Dionyseus, Dionyziz,
Discospinster, Dispenser, Dixwerr, Djahmednawaz, Dmsdjing, DocSigma, DocWatson42, Dodiad, Donovans, Doug Patriarche, Drake2007, Dramatic, Drappel, Drc79, Dreftymac, Drestros
power, Dsolovay, Ducknish, Dumarest, Durrantm, Dylthaavatar, ENeville, EVula, Eagleal, Egmontaz, Ekphraster, ElDakio, Eliazar, Eliz81, Elizabeth Barnwell, Empty Buffer, EncMstr,
Enigmaman, Enochlau, Enrique00a, Epbr123, EpiQ SkiLL, Epicchamantha, Ergative rlt, Eric-Wester, Eric119, EricCanada75, Esanchez7587, Escape Orbit, EstebanF, Euchiasmus, Eurleif,
Everyking, Evlekis, Ewawer, Excirial, Extra999, Eyreland, Fab, Fabartus, Faceboyjim, Falcon8765, FallingGravity, Farosdaughter, Fastily, Favonian, Fayte, Feinoha, Fenring, Fert81, Fetofs,
Fgnievinski, Fieldday-sunday, Filceolaire, Flashesarenight, Flewis, Florihupf, Flrgf, Folic Acid, Follishere, FootholdTechnology, Forever Dusk, Formerly the IP-Address 24.22.227.53,
Frankdushantha, Frankenpuppy, Frap, Fred Bauder, Fredrik, FreplySpang, Frosted14, Frymaster, Fsminc, Funandtrvl, Furrykef, Fuzheado, Fyrael, GT5162, Gabrielhobro, Gaius Cornelius,
Galanothowns, Galoubet, Galwhaa, Gamekid276, Gary King, Gdo01, Geekosaurus, GeoffPurchase, GeorgeMoney, Gerhard Loeb, Gfonetobe, Ghewgill, Gianfranco, Giftlite, Glacialfox, Glane23,
Glen, Gmd588, GoShow, Goeagles4321, Gogo Dodo, Golgofrinchian, Goobergunch, GorillazFanAdam, Goystein, GraemeL, Grafen, GranterOfMercy, Gregoroq, Gsmgm, Gtachiki, Guanaco,
Guppy, Gurch, Guy Macon, Gwandoya, Gwernol, Gwguffey, Gyre, Gysenn, Gökhan, HDrake, Haakon, Hacker9001, Hadal, Haipa Doragon, Hamitr, Hanitirkey, Harkamal1001, HarlandQPitt,
HarmonicSphere, HarryAlffa, Haukurth, Herbee, Hervegirod, Hetar, Hetzer, Heycam, Hightilidie, Hirzel, Hiuhuhihiuh, Hogman500, Homo sapiens, Hoo man, Horatio, Hornyman121, Hostime,
Howcome, Hsivonen, Html, Htmlwiki, Hu, Huo Ma Ke, I already forgot, I call the big one bitey, Iamjaypatel, Ian Pitchford, Iancarter, Iball, IeditU4good, Ifinditfunny, Igoldste, Iitim4two, Ikh,
Illinoisavonlady, Impala2009, Incnis Mrsi, Inter, Interiot, Internoob, Intgr, Iridescent, Irishguy, IsaacGS, Islamicinfo, Island Monkey, Isoft isoft, Itchytoes, Ixfd64, Izno, J Di, J.delanoy, J2000ca,
JAKEhp55, JDP90, JDewint, JForget, JLaTondre, JNW, JPG-GR, JRS124c41, Jacob.jose, Jacosi, Jake11899, Jakesyl, James-Y2J-fan, Jamesamber, Jamie C, Jamila60, Jan1nad, Janadore,
Jasrocks, Jatkins, Jaxad0127, Jay, JayJayKay, Jcollumbell, Jdbener, JeLuF, Jeff G., Jeff3000, Jeffq, Jeffz1, Jeltz, Jennavecia, Jennica, Jens Meiert, Jerome Charles Potts, Jesant13, Jesse0986,
Jetrink, Jgr 94, Jgrahn, Jh51681, Jhone29, Jim1138, Jj137, Jmh, Jmundo, Jnelmark101, JodyB, Joeyman111, John254, Johnnybravo2009, Jollybengali, JonathanCross, Jonathanischoice, Jor,
Jordan Rothstein, Jorioux, Jorunn, Josh3736, Joshebosh, Joy, Joyous!, Jpatokal, Jrichardsing, Jscbiss, Jswarchinghimer, Jtneill, Jumbuck, Jusjih, Just James, Kablammo, Kakomu,
Kangaroopower, Karl Dickman, Karl gregory jones, Kate, KathrynLybarger, Katieh5584, Kbolino, Kcmartz, Kelson, Kennyluck, Kerttie, Kewp, Killerkur1, Killr833, King Arthur6687, King
Bob324, KingHippo777, Kingpin13, Kjoonlee, Klilidiplomus, Klingoncowboy4, KnowledgeOfSelf, Koavf, Kocio, Kongr43gpen, Konstable, Koyaanis Qatsi, Kozuch, KramarDanIkabu,
Krlozanov, Ksn, Kubigula, Kukini, Kurt Shaped Box, Kuru, Kuyabribri, Kvdveer, Kwiki, L5138, LAX, LLarson, LOL, Lakeishikawa, LamCarLL71, Lantay77, Laurusnobilis, Lawrence Cohen,
Lcarscad, Leafyplant, Lear's Fool, Leastminor, Ledgerbob, Lee Daniel Crocker, Leif, Lethe, Leujohn, Leuko, Lianmei, LibLord, Liberal Classic, Lightmouse, Lights, Lilgamer64, Lineplus,
Lipyn, Liquid Flash, LittleBenW, LittleOldMe, Llbbl, Llull, Lochsley, Logiphile, Lomn, Lordofnerds, Lordtopcat, Loren.wilton, Lotje, LovinHTML, Lowellian, Lowercase, Lradrama, LtEarth,
Lturbine, Lucy75, Lugia2453, Luk, LukeShu, Luna Santin, Lurker, Lysdexia, MC10, MER-C, MJ94, MOO, MZMcBride, Mabdul, Mac, MadMax45, Madda, Madhero88, Maebmij, Magic.Wiki,
Magioladitis, MainFrame, Majorly, Makandal14, Makeemlighter, Makemi, Mani1, Manishearth, Manjo mandruva, Marek69, Mark Arsten, Mark viking, Markus Kuhn, Markymarkmagic,
MartinRinehart, Martinvie, Master of Puppets, Materialscientist, Mattbr, Mattbrundage, Matthewp1998, MattieTK, Mattjs, Mattworld, Maxim, Maxiom, Maypigeon of Liberty, Mbc362,
Mboverload, McSly, Mean as custard, Mecanismo, MelanieBeth, MeltBanana, Mentifisto, Message From Xenu, Methnor, Metinisim, Mgearfan, Mholland, Mianbao, MicahElliott, Michael
Hardy, Michael Slone, Michaelbusch, Midnightcomm, Mig, Mike Rosoft, Mike Selinker, Mikeo, Mindmatrix, Minghong, Minkus, Minun, Mipadi, Mistress Selina Kyle, MithrandirAgain,
Miyagawa, Mjb, Mmj, Moeron, Mogism, Mompati Dikunwane, Moneysaver67, Monkle, Moocowisi, Moondyne, Morefight, MorgothX, MorrisRob, Mr.98, MrDolomite, Mrfencey, Mrholybrain,
Mrkjohnson, Mrnobody228, Mrxwindows, Ms2ger, Msreeharsha, Mutinus, Mvjs, MySchizoBuddy, Myanw, Mydogategodshat, Mysidia, Mzajac, N-Man, NSK, Nacimota, Nako16, Nakon,
Nasa-verve, Nasnema, Natalie Erin, Nathanswan, Nations114, NawlinWiki, NeantHumain, Neelchauhan, Neilc, NeoChaosX, Nepenthes, NerdyNSK, Nestea Zen, NetOracle, Netkinetic,
Neustradamus, NewEnglandYankee, Nezzadar, Niceguydave, Nifky?, NigelR, Nigelj, Nivix, Nixeagle, Nman252, Noctibus, Noldoaran, Norazizahhashim, NotinREALITY, Np123456, Nphase,
Nsaa, NuclearWarfare, Nut er, Nutiketaiel, O.Koslowski, Odinjobs, Ohnoitsjamie, Okome, Oli Filth, Omegatron, Omicronpersei8, OneCuteElmo, Onefreeinternet, Oneiros, Opgfss, Orphan Wiki,
OsoLeon, OspreyPL, Oswald07, OverlordQ, OwenBlacker, OwenX, Oxymoron83, P3Pp3r, PAK Man, PJTraill, POTUS270, Paine Ellsworth, Palfrey, PanagosTheOther, Pandamonia, Party,
PatriceNeff, Patrick, Patstuart, Paul August, Pavel Vozenilek, Pbb, Pedro, Penguinboyroy, Penubag, Petree69, Pgk, Phantomsteve, Philip Trueman, Philwiki, Piano non troppo, Pielover88888,
Pigsonthewing, Pikminlover, Pinethicket, Plasticup, Plugwash, Pluma, Pokemonblackds, Poldi, Pomadgw, Popadooodle7, Porterjoh, Possum, Postdlf, Potatoswatter, Pranayrocks23,
PranksterTurtle, Prapsnot, Prince-of-Life, Profoss, Prosenzweig, Protonk, Pseudomonas, Pudleek, Purple Sheep, Purplepickle10, Pursey, Pwt-wsu-ap, Pádraig Coogan, Qtoktok, Queux,
QuiTeVexat, QuiteUnusual, Qwertyus, R.e.b., RJaguar3, RP459, RainbowOfLight, Rajakhr, Ramesh Chandra, Rami R, Ramneek Sharma(MCT), Rand, Rangi42, Raven4x4x, Rcairnsjr, Reach
Out to the Truth, Recon62, Recurring dreams, RedHillian, RedWolf, Redfarmer, Rednblu, Redrose64, Redvers, Reisio, Remember the dot, RenamedUser01302013, RetiredWikipedian789,
Rettetast, RexNL, Rharding13, Rholton, Rich Farmbrough, Rich13, Richard cocks, Rick Block, Rick Jelliffe, RickBeton, Rima p.r, Ringling9, Rizwanazizshaikh, Rjwilmsi, RkOrton, Rl, Robert
Skyhawk, Robert Wellock, RobertG, Rogper, RomeEonBmbo, Romestar, Ronz, Rory096, RossPatterson, Rougieux, RoyBoy, Rrburke, Rror, Rsrikanth05, Rtc, Ruby.red.roses, Rufous,
RunOrDie, RuneScapez, Rursus, Ruslik0, RussiaRussia, Ruud Koot, Rwellington, Rwwww, Ryoutou, Ryulong, SH84, Sade, Safinaskar, Saga City, Saintrain, Sajidsa13, Sakurambo, Saleh0167,
253
Article Sources and Contributors
Salix alba, Sander Säde, Sango123, Saoshyant, Saqib, Sarmenhb, Sarregouset, SarvenCapadisli, Satchy, Satellizer, Scarian, Sceptre, SchfiftyThree, Schuy B., Sciurinæ, Scjessey, Scott Paeth,
ScriptingMaster, Sean Kelly, Seaphoto, Sen Mon, Sepsis13, SergeiRichard, Sesu Prime, SetiHitchHiker, Shadow1, ShadowRangerRIT, Shadowjams, Shalom Yechiel, Shanky.lonely, Shantavira,
SharkD, Sharon08tam, ShaunL, Shawnhath, Sheatrevor, Sheehan, Shenme, Shervinafshar, Shirik, Shirulashem, Shonda13, Shyluv, Sidasta, Simetrical, Simonkoldyk, Simplexplus, Sionus,
Sitegod, Sjpr73, Sjö, Skaarlaw, Skew-t, Skizzik, SkyWalker, Skysmith, Smalljim, Smitty, Smjg, Snareklutz, Snarius, Snowolfd4, Soc5555, Some jerk on the Internet, SpaceFlight89, Spainhour,
Sparkmonkey7, SparrowsWing, Speck-Made, SpeedyGonsales, Spherems, SpikeJones, Spitfire, Spitfire19, Spokestrip EMP, SpuriousQ, Squash444, Squirrel Boy, Sreeriz, Static17, Stephenb,
Studerby, StunitTeam, Suburbanslice, Subversive.sound, Sujgfjfgjhgjgj, Sumanthk, Sunroof, Supertouch, Svetovid, Swamilive, Swpb, Szhaider, TBloemink, TFunk, THEN WHO WAS
PHONE?, TNLNYC, Taare, Tael, Tamfang, Tangotango, Tannin, Tannkremen, Taroaldo, Tasc, Tassedethe, Tayyab mm, Tbc42, Tbg connor, Tbisonman123, Tedickey, Teehee123, Tempmj,
Terrx, TexMurphy, Texture, Tgeairn, Thaqtipkilla, Tharinduewe, Thatguyflint, Thatspartanguy, The Anome, The Mysterious El Willstro, The Rambling Man, The Random Editor, The Thing
That Should Not Be, The Transhumanist, The gergster, The undertow, TheDJ, TheDrakoman, TheGeekHead, TheKMan, TheRealFennShysa, Thecheesykid, Theone00, Theymos, Thingg, Think
outside the box, Think777, ThunderPeel2001, Tide rolls, Tim Mckee, Timberframe, Timbl, Timmothytheman, Timsabin, Titodutta, Tntc.tig, Tobias Bergemann, Todd Vierling, Tom-, TomasBat,
Tombomp, Tomchen1989, Tommy2010, Tommyqiscow, TomyDuby, Tonyseeker, Torc2, Toto Mommam, Toussaint, Tpbradbury, Traal, Traroth, Traxs7, Tregoweth, Trevorpittz, Trevyn,
Tribaal, Triona, Trusilver, Trustle, Tslocum, Tudorol, Tundra010, TwigsterX, Twp, Typochimp, Tyrol5, Tysto, Tyw7, UU, UberScienceNerd, Ucanlookitup, Uirauna, Ultramince, Unbreakable
comb, Uncle G, Unisubs, Unixguy, Unknown W. Brackets, Unyoyega, Urhixidur, Uriyan, Uxgeoff, V.v.vinaybabu, Vampic, Vanished user 342562, Vanished user 98wiejfno34tijsfoiwefjlok5y,
Vannhuthanh, Vbigdeli, Veinor, Velella, Versageek, Vianello, Vickey Xiong, Violetriga, Vipinhari, Virtual Loïc, Vivio Testarossa, Voidvector, Vonones, Vystrix Nexoth, Wackymacs, Waggers,
Wapcaplet, Waqaee, Ward3001, Wasabie, Wasala555, Waterret, Wavelength, Way2tutorial, Waywardhorizons, Wermlandsdata, West Coast Gordo, Weylinp, Whileupper, Whosyourjudas, Widr,
WikHead, Wiki alf, Wikidemon, WikipedianMarlith, Wikipelli, Wikiuser00008, Wiklinkwonder, WildElf, Wileyc427, Will052690, WillOakland, William Avery, Williamborg, Willking1979,
Wipsenade, Withoutmark, Wjejskenewr, Wknight94, Wolf grey, Wolfhoundfeet, WookieInHeat, Worden.lee, Worlddominater08, Wperdue, WriterHound, Wrs1864, Wtni, Wwmbes,
Wwwqwerty, X!, XU-engineer, Xaagkx, Xander756, Xela722, Xenophon777, Xerocs, Xhosan, Xieqi200, Xihix, Xiong Chiamiov, Xmonicleman, Xp54321, Xyzu, YUL89YYZ, Yaniv p, Yelling
Bird, Yellow & Blue Music, YggY, Yt95, Yulelee, ZacharyM001, Zachlipton, Zahid Abdassabur, Zaveri123, Zcorpan, Zedla, Zenohockey, ZeroOne, Zidonuke, Zondor, Zorgelo, Zotag, Zsinj,
Zundark, Zy26, Zzymyn, Μάριος Ζηντίλης, Александър, 2724 ,‫ פארוק‬anonymous edits
XHTML Source: http://en.wikipedia.org/w/index.php?oldid=543642584 Contributors: 194.230.234.xxx, 195.186.254.xxx, 2001:6B0:E:2018:0:0:0:207, AB-me, AVRS, Abdull, Adambro,
AdmiralFDG, Alerante, AlexanderWinston, Alexanderino, [email protected], AlistairMcMillan, Alksub, Alyssa3467, Anne van Kesteren, Anthony Yeung, Arancaytar, Arnon Chaffin, Attys,
Aude, Avb, Azure, B0at, Bdesham, BeakerK44, Belegur, Bender235, Beno1000, Betterusername, Bevo, Bitbit, BlaiseFEgan, Blazar, Bobdc, Branddobbe, Brendandonhue, Brettz9, Bromskloss,
Brycen, Bunnyhop11, Burschik, C. A. Russell, C5st4wr6ch, CQJ, Can't sleep, clown will eat me, CecilWard, CesarB, Cgs, Chamal N, Chameleon, Chelentano, Chocolatier, Chowbok, Chris the
speller, Clconway, Cleric K, Conversion script, Corypina, Cplot, Creol, CyberSkull, Cygri, D'oh!, DANik49, DStoykov, Dabomb87, DagMX, Dantheox, DarkPhoenix, Darklightning1,
DataWraith, David Biddulph, De1337, Deepugn, Delk, Demonkoryu, Denis Chmel, Detroit, Dfavro, Djlarz, Dorward, Dreftymac, Dwandelt, Dwo, EVula, Eclipsed Moon, Edfrommars, Edokter,
Edward, Edward Z. Yang, Elfguy, EliasAlucard, Enviroboy, Eric B. and Rakim, Evil Monkey, Falcon Kirtaran, FatalError, Feedmecereal, Figure, Forage, Fredrik, Fsiler, Furrykef, Fyyer, Gamol,
Garyp01, GeorgeMoney, Gokusandwich, GorillazFanAdam, Graham87, Gronky, Gus, Gwernol, HTML2011, Haakon, Harbingerkun, Hashar, Haza-w, Hervegirod, Hexene, Hightilidie, Hirzel,
Hm2k, Homo sapiens, Hsivonen, Husky, Hyad, I already forgot, Ian Spackman, Indefatigable, It writer, Itpastorn, Itsnotvalid, IvanLanin, Izno, J36miles, JMJimmy, JVz, Janadore, Jareha,
JegaPRIME, Jens Meiert, Jesin, Jesse Viviano, Jetrink, Jimj wpg, Jklin, John Vandenberg, Jonathan Hall, Jor, Joseph Solis in Australia, Josh Tumath, Joshie76, K1Bond007, Kainaw, Karekare0,
Karl Dickman, Kate, Khazar2, Kit Foxtrot, Klingoncowboy4, Koavf, Kocio, Kooo, KramarDanIkabu, LLarson, Larala, Leif, Lexlex, Lianmei, Lindsay-mclennan, LittleBenW, LittleDan,
Logixoul, Lordkazan, Lotje, Lou Sander, Luna Santin, Lysdexia, MC10, MER-C, Mabdul, Mac, Mac Davis, Magioladitis, Mahanga, Mambroseuk, Martinkunev, Masciare, Max Terry,
Mdbuk2008, Mdmcginn, Michael2, MichaelJanich, Mifter, MikeM2011, Mindmatrix, Minghong, Mistress Selina Kyle, Mjb, Mlk, Mmj, Mo-Al, Moeron, Monkle, Mrwojo, Ms2ger, Mswer,
MySchizoBuddy, Mzajac, Naddy, Nako16, Nanshu, Nate Silva, Nations114, NawlinWiki, NeoChaosX, Netoholic, Nigelj, Nihiltres, Nivix, Nizar grira, Nneonneo, Nonstandard, Nopetro, Nuno
Tavares, Ohnoitsjamie, Ohyoko, Oleg Alexandrov, Omegatron, Ominous Penguin, OrgasGirl, Ormaaj, OwenBlacker, Patel Kapil, Pbb, PeterSymonds, Peterf, Petree69, Peyre, Phantomsteve,
Philwiki, PhnomPencil, Plugwash, Pol098, Pt, Putra77, Pxma, Pádraig Coogan, QuantumEleven, Qwerty0, R'n'B, RTG, Raahulsingh, Rangi42, RayBirks, Rbstimers, Rbucci, Rdnk, Red Act,
Reisio, RekishiEJ, Repabil, RexNL, Richard Myers, Richcon, Richjkl, Ringbang, Ritz, Robert K S, SAE1962, SMcCandlish, Sadads, Sade, Sailor for life, Sam Korn, Sander Marechal, Saoshyant,
Saqib, Saxbryn, Scjessey, Secarrie, Securiger, Shlomital, Silk94117, Simetrical, Sketch-The-Fox, SlubGlub, Smyth, Sourcejedi, Spainhour, Speck-Made, SqueakBox, SteveSims, Studerby, Sulu
cool, Sunroof, Suwatest, Tabletop, TakuyaMurata, Taw, That Jason, The-mart, TheRaven, Themoron, ThereFOUR, Thomas Mills Hinkle, Thomjef, Todd Vierling, Tom-, Tommy2010, TommyG,
Torgo, Toussaint, Ttony21, Typhoon, Typhoonhurricane, UU, Ultramandk, Unixxx, Unknown W. Brackets, Uusitunnus, VegaDark, Versageek, Versus22, Visor, Vudicarus, Vystrix Nexoth,
W3bbo, Wapcaplet, Wasabie, Wavelength, Wdspann, Wiki alf, Wikibarista, Wikiwikiwifi, Wmahan, WojPob, X-Fi6, XP1, Xezbeth, Yakura, Yellowdesk, Yms, Yurik, Yuuki Mayuki,
Zinjixmaggir, Zro, Zundark, Zzuuzz, Ævar Arnfjörð Bjarmason, Ζζ, 端 く れ の 錬 金 術 師, 523 anonymous edits
XML Source: http://en.wikipedia.org/w/index.php?oldid=544184830 Contributors: .:Ajvol:., 207.172.11.xxx, 213.253.39.xxx, 24ten, 28421u2232nfenfcenc, AHMartin, AThing, Aadaam,
Actam, AdamCarden, Adeio, AdventurousSquirrel, Aeusoes1, Ahabr, Ahkond, Ahoerstemeier, Aitias, Ajcumming, Aklauss, Aksi great, Alan Liefting, Alansohn, Alexbrn, Alison,
AlistairMcMillan, Allkeyword, Amakuru, Amire80, AndersFeder, Andrisi, Andy Monakov, Angeltoribio, Ani td, Anish9807, Ankitasdeveloper, Anna Lincoln, Anon lynx, AnonMoos, Anti
stupidity, Anu-43, Aomarks, Apollo1758, Aselaruwan123, Asqueella, Asteiner, Asymmetric, Atanveer9, Axd, AzaToth, B4hand, BD2412, Barek, Barticus88, Bdesham, Beetstra, Belamp, Bernd
in Japan, BertSen, Bevo, Bgwhite, Bhadani, Biezl, BigFatBuddha, Bissinger, Bje2089, Blethering Scot, Blinklmc, Bluemoose, BlurTento, Bobdc, Bobianite, Boehm, Bonbayel, Bonethugnd,
Booles, BorgQueen, Borgdylan, Boseko, Brettz9, BrianCully, Brick Thrower, Brighterorange, Brion VIBBER, Bruce1ee, Bryan Derksen, Brz7, Bsadowski1, Bunnyhop11, Burschik,
Businessman332211, Bvajet, C.M.Sperberg-McQueen, CLD, CambridgeBayWeather, Cameltrader, Can't sleep, clown will eat me, CanadianLinuxUser, Caomhin, CapitalSasha, Carewolf,
CarlHewitt, Cbdorsett, Cels2, Centrx, Charivari, Cherkash, Chininazu12, ChongDae, Chowbok, Chris 73, Chris Roy, Chrislk02, Chrisnewell, ChristianGruen, ChristopheS, Chzz, Cipherynx,
Clayoquot, ClementSeveillac, CoSort2007, Coconut99 99, Cody5, Colonies Chris, Comesuntbob, Contraverse, Conversion script, CptAnonymous, Crosstowns, Cspan64, Cupid1889, CyberSkull,
Cybercobra, Cœur, D6, DARTH SIDIOUS 2, DKEdwards, DVdm, Dan100, DanConnolly, Daniel Olsen, Daniel.Cardenas, DanielVonEhren, DarkFalls, Darkfred, David spector, Davis685,
Dcattell, Dcoetzee, DePiep, DeadEyeArrow, Delcnsltmd, Deodar, Derek Ross, Derekread, Dicklyon, Dickpenn, DigitalEnthusiast, Dingbats, Dino72, Dionysia, Dkrms, Dlohcierekim,
Dlrohrer2003, Dolcecars, DominiqueHazaelMassieux, Don4of4, Donmay12, DopefishJustin, DoriSmith, DougBarry, DouglasHeld, Dpattison2007, Dpbsmith, Dpm64, Dr Headgear, Dr.
Zombieman, Dreftymac, Dthvt, Dullhunk, Dwheeler, EastTN, Ebruchez, Edcolins, Edokter, Edward, Edward Z. Yang, Efcavanaugh, Egandrews, Egil, Eisnel, ElBenevolente, Electron9, Elharo,
Elizarf, Ellmist, Elwikipedista, EngineerScotty, Eob, Eranb, Ericjs, Erik Zachte, Erikdw, Eritain, EternalFlare, Etu, Evaluist, Ewsers, F331491, Fang.zheng, Fantasticfears, FatalError, Feline
Hymnic, Ferdinand Pienaar, Figure, Fleminra, FloatingMind, Fnielsen, Folajimi, FootholdTechnology, Forage, Fraggle81, Fragglet, Fran Rogers, Francl, Frankweerasinghe, Frap, Freiddie, Freyr,
Frisket, Fsolda, Furrykef, Fvw, GTBacchus, Gaius Cornelius, Gc9580, Gdrori, Geniac, Gennaro Prota, GentlemanGhost, GeoffPurchase, Ghettoblaster, Giftlite, GioeleBarabucci, Gjlubbertsen,
Gjs238, Glass of water, Glenn, Goasklaura, Gogo Dodo, Golwengaud, GrEp, GraemeL, Graham, Graham87, Greg Murray, Ground Zero, Grumpycraig, Gudeldar, Guy Macon, Haakon, Hairy
Dude, Hannes Hirzel, Harold f, Hashar, Headbomb, Hervegirod, Hicketyhicketyhack, Highwayman65251, Hires an editor, Hirzel, Hogman500, Hohum, Hoo man, Howard McCay, Hu12,
Hurricane111, Hypertrek, Hyuri, IMSoP, Iamjaypatel, Ian Moody, IanBurrell, Iftikhar88hussaini, Ijmorlan, IlanaDavidi, Imars, Imjustmatthew, Int21h, Intgr, Iridescent, IrkBerkeley, Isilanes, Itai,
J.delanoy, JForget, JKing, JLaTondre, JPalonus, JRocketeer, Jackacon, Jackmileshunt, Jacobko, Jacobolus, Jah1138, JakobVoss, JamesBrownJr, Jan.Keromnes, Jandalhandler, Jao, Jargon64,
Jasper Deng, Jauerback, JavaWoman, Jaxad0127, Jaxsam1, Jay, Jeenuv, Jeff G., Jeff3000, Jehzlau, JeremySmyth, Jerome Charles Potts, Jesin, Jhannah, Jibjibjib, Jilplo Haggins, Jimthing,
Jmlipton, Joachim Wuttke, Joanjoc, John Vandenberg, JohnSmith777, JohnWhitlock, Johnmarkh, Johnwcowan, Joku, Jonabbey, Jonkerz, Jonnyamazing, Jor, Jpbowen, Jshadias, Jzhang2007,
Kai.Klesatschke, Kaldosh, Kamalakannanprogrammer, Kanags, Kapoing, Karderio, Karl Dickman, Katalaveno, Kbrose, Kc2idf, Keithgabryelski, Kenmccallum, Kensall, Kevinconroy,
Kgaughan, Kha0sK1d, KickAssClown, Kingius, Kjtobo, Kl4m, Klangenfurt, Klaws, Koavf, Kogmaw, Korval, Krauss, Ksaha.pune, Kubigula, KuduIO, Kwiki, Kx1186, LDiracDelta, Lambiam,
Larala, Lazynitwit, Leeannedy, Lianmei, Liao, Lifefeed, Liftarn, Ligulem, Ling.Nut, LittleDan, Loveenatayal, Lukys, Lumi71, Lycurgus, M.franceschet, M4gnum0n, MER-C, MK8, MaBoehm,
Madir, Magioladitis, Mah159, MainFrame, Mak Thorpe, Malleus Fatuorum, Manishtomar, Maoj-wsu-sp, Mark Renier, MarkSweep, Martijn faassen, Martin451, Martinp23, MartynDavies,
Mathmo, Matthäus Wander, Mauro Bieg, MaxEnt, Maximaximax, Maximus06, Mayfare, Mbbradford, Mbell, Mcintyem, Mcorazao, Mecanismo, Melab-1, Melon039, Meszigues, Mfbubt,
Mhkay, Michael Hardy, MichaelJanich, Miguelfms, MikeLynch, Minghong, Mion, Miss Dark, Mjb, Mjpieters, Mmichaelc, Mola8sses, Montgomery '39, Moosehadley, Mp, Mr. Shoeless, Mr.
Stradivarius, Mr.Z-man, MrJones, MrOllie, Mrjmcneil, Ms2ger, Mthibault, Mvulpe, Mwtoews, Mww113, Mxn, NO ACMLM,AND XKEPPER SUCK !, Nannus, Nanshu, Natasha2006,
Nations114, NawlinWiki, Neckro, Nemo bis, Netsnipe, NickGarvey, Nicmila, Nigelj, Nikkimaria, Nikosbik, Nile, Ninly, Niteowlneils, Nivaca, Nixeagle, Noldoaran, Nomediga, Norm mit, Nowa,
Nsh, Nwbeeson, Ocaasi, Octane, Ogmios, Ohnoitsjamie, Okyea, OliD, OsamaK, Oscar-ja, Osquar F, OverlordQ, Oxblood, Oxinabox, Oyster Flute, P3x984, PTSE, Patrick, Paul Foxworthy,
PaulXemdli, Pavel Vozenilek, Paxsimius, PeacefulPlanet3, Peashy, Pelle, Pengo, PeteVerdon, Peterl, Pgk, Philip Trueman, Phluid61, Phoenix-forgotten, Phyzome, Pianohacker, Pikiwyn,
Pinethicket, Pmberry, Pnm, Poccil, Porges, Pozcircuitboy, Prakash Nadkarni, Quarl, Quasipalm, Quiddity, Quilokos, R'n'B, Ramesses the Great, Rbonvall, Rbstimers, Rdmsoft, Red660, RedWolf,
Redherring, Reinthal, Remy B, RenniePet, Rich Farmbrough, RichMorin, Richalex2010, Rick Block, Rick Jelliffe, RickBeton, Risi, Ritvikbhatnagar1, Rivecoder, Rje, Rjstott, Rjwilmsi,
Rklawton, Robert K S, Robert Merkel, Robinjwest, Robomaeyhem, Rodney Boyd, Roger costello, Rory096, RoseParks, Rr2bwreain, Rror, Rvmolen, Ryanrs, Sam Hocevar, SamHathaway,
SandiCastle, Sandius, Saqib, Saucepan, Sbvb, Schnolle, Scjessey, Scott MacLean, Scottielad, ScottyBerg, Sderose, Seanhan, Seaphoto, Secret, Seidenstud, Semper discens, Sen Mon,
ShaneCavanaugh, Shanes, Shibboleth, Shii, Shinkolobwe, Shizhao, Shlomital, SickTwist, Signsofstatic, Simetrical, SivaKumar, Sj, Sjc, Sleepyhead81, Smyth, Sosinfo, Sound effx, Spankman,
Spe88, Spudstud, SqueakBox, Srflecha, Stefan.ciobaca, Stephen Gilbert, Steve R Barnes, Stevy76, StewartMH, Stf, Stijn Vermeeren, Stupiddestyredgasd, Stwalkerster, Superm401, Suruena,
Suwayya, Svetovid, Syangtar, Sydius, TPK, Tagith, Tags123, Taknik, Talktovalentine, Tassedethe, TastyPoutine, Technopilgrim, Teddyb, Terjen, Terrifictriffid, Terrycojones, Thadius856, The
Thing That Should Not Be, TheMightyOrb, Thierryc, Think777, Thnidu, Thumperward, Thunderhead, TimBray, TimR, Timc, Timur.shemsedinov, Tobias Bergemann, Todd Vierling, TommyG,
Tony1, ToonArmy, Topbanana, Toussaint, Tpbradbury, Trade2tradewell, Trankin, Traroth, Treekids, Trovatore, Trscavo, Tsunaminoai, Turnstep, TwoOneTwo, Twocs, Tympan,
Typhoonhurricane, Typochimp, Tyrol5, UkPaolo, Uncle Milty, Unforgettableid, Unixxx, Unknown W. Brackets, Vadmium, Vaganyik, Varlaam, Verdy p, Versageek, Vespristiano, Vigilius,
Violetriga, Vladkornea, Vojta, Volphy, Voxii, Vrenator, WSU-AW-AK, Walk Up Trees, Waskage, Wavelength, Wellithy, Wereon, Whale plane, Whkoh, Wickorama, Widefox, Wiki Leah, Wiki
alf, Wiki.Tango.Foxtrot, Wiki0709, Wikilibrarian, Winterst, Wmahan, WojPob, Woohookitty, Wrs1864, Wulfila, Ww, XJamRastafire, Xmltools, Xompanthy, Xpclient, Yaronf, Ygramul,
Yonkie, Zhaolei, Zoeb, Zoolium, Zootm, ZzzzBov, Олександр Кравчук, Тиверополник, 1397 anonymous edits
254
Article Sources and Contributors
HTML5 Source: http://en.wikipedia.org/w/index.php?oldid=543736158 Contributors: 12cool725, 1exec1, 2001:4898:0:FFF:0:5EFE:A78:CBB0, AWiersch, Abhik0904, Achinikh, Adagio67,
Adpete, Adrianwn, Agon Avdimetaj, Alex Chamberlain, Alex.muller, Alexbrn, Alexius08, Alexjohnc3, AmAnisa, Anbu121, Andrejbuday, Andres Agudelo, Andy Dingley, Angrytoast,
Ankitasdeveloper, Annevk, Annieh129, Anomalocaris, Anon1345, Anym, AoV2, Arjunpsd, Armando, Artichoker, Artw, Athaba, Aubray1741, Azuris, Bandito4u, Bangsanegara, Barkermn01,
Barry Fruitman, Bcxfu75k, Beland, Beleavali, Ben Ben, Bender235, Best Dog Ever, Bevo, Bhny, BiT, BillyPreset, Binksternet, Biruitorul, Bitbit, Blaisorblade, Bluewind25, Bngsudheer,
Bongwarrior, BradNeuberg, Brianski, Brijeshgosai, CRGreathouse, Canceo, Candace Gillhoolley, Canley, Captbalbo, Caspertheghost, Causa sui, Centrx, Cfust, Chealer, Chelentano, Chikiliver,
Chris the speller, Ciantic, Clairvoyant walrus, CloudNine, CodeCaster, Coffee, Cogiati, Colejohnson66, CommonsDelinker, Corn cheese, CortlandKlein, Crissov, Crysb, Curtmcd, CyberSkull,
Cybercobra, D'oh!, DARTH SIDIOUS 2, Danchr, Daniel.Cardenas, Darklilac, Darxus, Data2action, David Gerard, Davidhorman, Debloper, Debresser, Democraticmacguitarist, Demonkoryu,
Deon, Digisus, Doctor Nick, Dog786, Dogru144, DokReggar, Dolphin51, Domokato, Dr. Elwin Ransom, Dvdjns234, Ed Brey, Eggsyntax, Emurphy42, Erikdw, Eutelsat, Eville84, Extra999,
Eyewax, Famous anus, FatalError, Favonian, Fenring, Fijiwebdesign, Filemon, Fitoschido, FleetCommand, Flohsuchtliebe, Flying sheep, Foonarres, FreedomCultist, Fudoreaper, Gabriel2008,
Gaia Octavia Agrippa, Gallaecio, Gareth Aus, Gareth Griffith-Jones, Giftlite, Glenn, GoShow, GoingBatty, Gpvos, Graeme Bartlett, Grasshoppa, Grawity, Greedohun, GregU, GregorB, Grosshat,
Grshiplett, Gsnedders, Gyrobo, H3llbringer, Hairy Dude, Hankwang, Happy-melon, Harizotoh9, Hectigo, HelicopterLlama, HenryLi, Hexene, Hkdobrev, Hnetsec, Hondarox715, Hoo man,
Horrabin, Hsivonen, Html5, Html5cn, Html5cn org, Html5gallery, Hwost, Icedragz, Iliev, Indefatigable, Inputdata, It writer, Itpastorn, JHMM13, JHP, JJC1138, JLKrause, JLaTondre, JWilk,
Jackdrogba, Jahoe, Jamesrdf, Jarble, Jasper Deng, Jay, Jengelh, Jenniferreid2012, Jeremy Visser, Jerryobject, Jetrink, Jleedev, Johnadowell, Jonathantneal, Jonsteroo, Jorge.casar, Jrincayc, Julesd,
Kalki101, Kankachi1980Kan, KarlDubost, Kasrjoel, Kehtabp, KeithH, Keithjgrant, Kevindeedavis, Kingbean1, Kitsunegami, Koavf, Kocio, KohanX, Ktpenrose, Kuru, L Kensington, LLarson,
Lachlan Hunt, Le Sage, Leinad, Leonard glas, Leotohill, Locke Cole, Lopifalko, Luckyz, Lucy75, MC10, MC1302, MER-C, Mabdul, Macan55, Macromediax, Madsenfr, Maduskis, MainFrame,
Mange01, Manop, Marcos canbeiro, MartinRinehart, Matt Darby, MattCuts, Mcarrera, Mdagr8, Mdale, Meewam, Melnakeeb, Meow, Michael Devore, MichaelKohlhase, Mike Rosoft, Mikldt,
Mindmatrix, Mistress Selina Kyle, Mizusajt, Mmj, Mortense, Motherlover2012, MrX, Ms2ger, Nakakapagpabagabag, Nelziq, NerdyNSK, Neustradamus, NewEnglandYankee, Nick UA,
NickGarvey, Nickshanks, Nigelj, NikitaVasilev, Nil Einne, Nnemo, Nogburt, Nopetro, Norman.u.sy, Notetp, Noz92, Nsda, Nthep, Nunojpg, Nyssen, Ohnoitsjamie, Oliphaunt, Oneiros, Onorem,
Oppenheiter, Orange Suede Sofa, Oren Balaban, OzuYatamutsu, PatrickFisher, Paul Foxworthy, Pauldwaite, Perey, PeterEasthope, Peterdx, Phatom87, Philbayer, Philu, Philwiki, PhnomPencil,
Pingveno, Pnm, Pointillist, Ppntori, Primaryspace, Prohlep, Pwjb, Quatermass, R'n'B, RPaschotta, RW Marloe, Racklever, Rathigpe, Reisio, RekishiEJ, Reliablesource12345, Repku, Resistor,
Riki, Rodmoten, RoyBoy, RoySmith, Rubenreyes, Rubinkumar, Rugops, Runecats, Rursus, Rwxrwxrwx, Sabin4232, Sailee5, SamJohnston, Samdutton, Samuel.G.Mills, Saoshyant,
Saravanakumarc5, Scientus, Scottman1995, ScottyWZ, Sdesalas, Senator2029, Ser Amantio di Nicolao, Shepazu, Shubhee, Simetrical, SimonEast, Sligocki, SlipperyGun, Smaines,
Snakeskincowboy, Snookerman, Sogle, Songcycle, Sonicdrewdriver, SoopahMan, Spanglej, Spencerk, Spidermario, SqueakBox, Srinivasasha, Station1, Stemonitis, Stephen B Streater,
StevenDH, Subversive.sound, SudoGhost, Sugarfish, Svick, Swapnil raja, Takimata, TechGizmo, Tenebrae, Tentonbricks, Teotocopulos, The Anome, Thue, Thumperward, Thyako, TimothyJPitt,
Titomuerte, Tlaresch, Tms, Todd Vierling, Tomchen1989, TommmL, Tommy2010, TorayL, Tremolo, Turbohans, Ubernostrum, Ultimatewisdom, Unicomp21, Urashimataro, Uusijani, Vald,
Vdavid2, Vicsar, Victorgno, Vivekanandanpdy, Volox, Webmaren, Widefox, Wiikipedian, Wikipincompk, Willscrlt, Winterheat, Wxidea, Xyz98711, Yeepsi, Zcorpan, 537 anonymous edits
Document Object Model Source: http://en.wikipedia.org/w/index.php?oldid=543514636 Contributors: 31stCenturyMatt, 9258fahsflkh917fas, ANONYMOUS COWARD0xC0DE, Aapo
Laitinen, Ahmad.harthi, Ahoerstemeier, Ankles, Anreyes, Argv minus one, Artw, Asqueella, Ben-Zin, Benbludget, Bevo, Bjornars, Blade44, Blue520, BlueAmethyst, Borgx, Branko, Byassine,
CWenger, Calvin 1998, Casito, Catskul, Ceelorn, Cek, CesarB, Ceyockey, Charles Gaudette, Chealer, Chrisholland, Cliciu, CommonsDelinker, Conversion script, Cowtowncoder, Cybercobra,
DVD R W, Damian Yerrick, Daniel.Cardenas, David Shay, Decrease789, Deepugn, Denisarona, Dkatten, Dmh, DocWatson42, Dogcow, Dreftymac, DropDeadGorgias, Déjà Vu, Ed g2s,
Editfromwithout, Ehheh, ElTyrant, Elf, Enchanter, Enkrates, Extra999, Fmccown, Fred Bradstadt, Georgeryp, Gfritzsche, Grayfm, Groovinkim, Hannes Hirzel, Hapsiainen, Hariharan wiki,
Harris7, Harvestman, Hayk, Hdante, Heavensrevenge, Herbert1000, Heron, Hires an editor, Hirzel, Honza Záruba, Hoo man, Hopefully acceptable username, HybridBoy, Hydrargyrum, Hymek, I
already forgot, Ian Moody, IndianGeneralist, Isidore, Islander, Jahoe, Jay, Jediknightbob, Jeffz1, JimMorris, Jirka6, JohnManuel, JohnTechnologist, Johnuniq, Jparrai, Jrvosse, Juancnuno,
Jusdafax, JustSomeGuy, Jzhang2007, Keikomi, Kippson, Koavf, Krzysztow, Kurykh, La Pianista, LeonardoGregianin, Lethe, Lopifalko, M4gnum0n, MC10, Mabdul, Mac, Marc Mongenet,
Mark Renier, Markjoseph sc, Markpeak, MartinRinehart, Matdrodes, Mdd, Meetabu, Michael Allan, Miernik, Minghong, Mirror Vax, Misterblues, Mola8sses, MoreNet, Mortense, Mrdeckert,
MusiKk, Nanshu, Netdragon, Nigelj, NisseSthlm, Noldoaran, Nurg, Oussjarrouse, P0lyglut, Paranomia, Pergamonster, Piisamson, Plop, Pmg, Pne, Porco-esphino, Powdahound, Qutezuce,
Rannpháirtí anaithnid, Reinthal, Renku, RickBeton, Ruy Pugliesi, SJP, SMakabwe, Sae1962, Securiger, Sertion, Sgeo, Shackjohn, Shunpiker, Sleepyhead81, Sligocki, Snezzy, Softlord,
SouthLake, Spellcast, Stephenb, Stfg, Superm401, Suruena, Sven Manguard, Swapnil4007, Taka, Taz789, Tedickey, Telfordbuck, The Anome, The Rambling Man, TheBoothy, Thebes7,
Thumperward, Tjaccobson, Tjfulopp, Tobias Bergemann, Tobias Hoevekamp, Toddintr, Tom Morris, Toussaint, Traroth, Twelvethirteen, Via strass, Visitante22, WGH, Wasbeer, Who, Xyb,
Zacmoody, Zaxx81, 323 anonymous edits
Internet media type Source: http://en.wikipedia.org/w/index.php?oldid=544435435 Contributors: Abhinay.leo, Aschauer, Athaba, AugustinMa, BD2412, BasilSorbie, Baskaufs, Belamp,
Bittergourd72, Btx40, Buxh, C. A. Russell, CDV, CWY2190, Cigale, Cimorcus, Ckatz, Companioncube31, Damian Yerrick, Dreamtheater, Drttm, Ehn, Elyada, Enquire, Eve-and-adam, FaTony,
Frap, FrigidNinja, Fudoreaper, Gevetts, Gilanshop, GioeleBarabucci, Hawkeye7, Hello71, HonestIntelligence, Hymek, IceUnshattered, ImranC, JLaTondre, Jackson Peebles, Jantangring, Jax-wp,
Jeepday, Joeblakesley, Kak, Keith111, Kle0012, Kookiethebird, Landavia, Leolaursen, Luk, M gol, Materialscientist, Max Terry, Meand, Mjb, Mnot, Modest Genius, Nbarth, Neurovelho, Not
Sure, Ocolon, OlEnglish, PartTimeGnome, Pcuser42, Possan, R'n'B, Rainald62, Raise exception, Remember the dot, Rfl, RickBeton, Rogerd, Sbwoodside, Scorlosquet, Serpent's Choice,
Shamatt, Stephen g turner, Stevenmc, Superm401, SvartMan, Svick, Taniquetil, Tapir666, The Anome, The Earwig, ThoughSo, Tokek, Tonymec, Twelvepast, Typhoonhurricane, WimTaymans,
Wimt, Wolf5370, Wrs1864, Wtmitchell, ZacBowling, Zundark, ZzzzBov, 173 anonymous edits
JavaScript Source: http://en.wikipedia.org/w/index.php?oldid=544667443 Contributors: 12 Noon, 16@r, 1wolfblake, 2001:981:4101:1:3475:FCAC:85C0:46FB, 31stCenturyMatt, 80N, A bit
iffy, ABCD, ABF, ANGGUN, Aapo Laitinen, Aaroniba, Abc123456person, Abhishekitmbm, Abhkum, Abody97, Acostin, Adam Hauner, AdamTReineke, AdmN, Aeons, Afrobuddy,
AgentCDE, Ahda, Ahoerstemeier, Ahy1, Ajfweb, Aka042, Akronym, AlanUS, Alansohn, AlastairIrvine, Alisha.4m, AlistairMcMillan, Allens, Aman2008, Amaury, Amgc56, Amire80,
AmitDeshwar, Ancheta Wis, Andre Engels, Andreas S., Andrew Levine, AndrewHowse, Andrewrost3241981, Andy Dingley, AndyZ, Andytuba, Anfernyjohnsun, Ankles, Anna512, AnnaFrance,
Antimatter15, Antipastor, Antonio Lopez, Aoi, Apollo1758, AquaGeneral, Arctic Kangaroo, Ardonik, Arjayay, Artemis-Arethusa, Artw, Arvindn, Asqueella, Astrobloby, Avijitguharoy, Avoided,
AxelBoldt, Azylber, B0at, B1KWikis, BBL5660, BBilge, BP7865, Bacon and the Sandwich, Badman11, Bamkin, Barek, Beao, Belgarat, Ben-Zin, BenAveling, Bencherlite, Bender235,
Benjaminoakes, Bergie, BernhardBauer, Betax, Bevo, Bill the hairy troll, BinaryWeapon, Bionicseraph, BirdieGalyan, Blobglob, Blonkm, Bob Re-born, Bobcat hokie, Bobdc, Bogtha, Boing!
said Zebedee, Bonadea, Boomshadow, Boshomi, Bpeps, Brainyiscool, Bratsche, Brendan Eich, Brenhein, Brettz9, Brian Kendig, Brighterorange, Brilliant trees, Brion VIBBER, Bryan Derksen,
Butch566, Bwickery, CForrester, CO, CQJ, Caiguanhao, Caltas, Calvin 1998, CambridgeBayWeather, CanadianLinuxUser, CanisRufus, Canonical Rush, Cap'n Refsmmat, Capricorn42,
Carewolf, Carey Evans, CaseyPenk, Cash cab, Cat-five, CecilWard, Cenarium, Centrx, Chairboy, Chaojoker, Charles Gaudette, Charles Iliya Krempeaux, Charles.2345, CharlotteWebb,
Chazwatson, Chealer, Chester br, Choronzon111, Chris the speller, Chrisdolan, Chrisman247, Christian75, Chriswiki, Chuq, CiudadanoGlobal, Civilis, Cliciu, Closedmouth, Clsdennis2007,
Cmdrjameson, Coffee, ColinHelvensteijn, ColinJF, Collabi, Combustablejo, Corti, Cpu111, Crazycomputers, CreamPies, Cronium, Crystallina, Cslayden, Cst17, Csusbdt, Cwillm2, Cybercobra,
Cyfal, Cépey, D.brodale, DARTH SIDIOUS 2, DO'Neil, DTR, DVdm, Damian Yerrick, Damicatz, Danakil, Daniel.Cardenas, Daniel5Ko, Danielsig89, Dantheman531, Daonguyen95, Darkride,
Dasch, DaveK@BTC, Daveed84x, Daveydweeb, David Edgar, David Gerard, David Wahler, David Woodward, David1217, DavidCary, Davidiad, Davigoli, Dbabbitt, Dcoetzee, Delcnsltmd,
Delfuego, Demonking123, Demonkoryu, Den fjättrade ankan, Denbosch, DennisWithem, Deor, Derekleungtszhei, Desiblast, Dexterv, Dhtml, Dhtmlkitchen, Diannaa, Digita, Discospinster,
Dlexc, Dlrohrer2003, DocWatson42, Dodecagon12, Dogoteacher, Don4of4, DonToto, Donbert, Dragon Dave, Dreadstar, DreamGuy, Dreftymac, Drizzd, Drsquirlz, Dycedarg, Dysprosia, ESkog,
Eagleal, Echo95, Ed Brey, Ed g2s, EdC, EdJohnston, Edfrommars, Edgar181, Edknol, Edward Z. Yang, Ekspiulo, Elefectoborde, Eliashedberg, Eliot1785, Ellmist, Emperorbma, Engelec,
Enkauston, Ennajm, Ensign beedrill, Epochbb, Er Komandante, Erich gasboy, Erkcan, Eskimospy, EvanProdromou, Eventualentropy, Everyking, Ex-dude329.4, Excirial, Execvator, Explicit,
Extremecircuitz, Face, Faisal.akeel, Familyguy0108, FatalError, Fchoong, Felipe1982, Femmina, Ferdinandojfoo, Fetchcomms, Fistboy, Flager, Florencefc4eva, FootholdTechnology, Fraggle81,
Frap, Frau Holle, Frecklefoot, Fred Bradstadt, Fred Gandt, Fredrik, Func, Furrykef, Fwerdna, GGShinobi, GTBacchus, Gail, Galwhaa, Gamaliel, Garrycl, Gary King, Gaurav21r, Geary,
Geneb1955, Genhuan, Geoffrey, Georgeryp, Gerbrant, Gerweck, Ghettoblaster, Giftlite, GigAtomixxX, Glass Sword, Glen 3B, Gm4, Gogo Dodo, Goplat, Gorpik, Gracefool, Graeme Bartlett,
GraemeL, Graham87, Grayczyk, Greenie2600, Greenminz, Gregersrygg, GregorB, Griba2010, Grika, Groogle, GroovySandwich, Grunny, Guaka, Guitardemon666, Gunuag, Gurchzilla,
Gwernol, Gzabers, HDrake, Hairy Dude, Hannes Hirzel, Happysailor, Hbackman, Hblank, Hcobb, Hello71, Herorev, Hervegirod, Hex, Hgmichna, Hirzel, Hmains, Hongguo, Hoo man, Hosmich,
Hu, Hu12, HundoUno, Hydrargyrum, HyperCapitalist, I already forgot, I3enhamin, IRP, Iamjaypatel, Iamyourdoom61, Ian Bailey, Ida Shaw, Idiotfromia, Ieee8023, Igoldste, Illeoebnbbu,
Illicium, IlliterateSage, ImperatorExercitus, Inseeisyou, Insouciance, Intgr, InvertRect, Iridescent, Irish Souffle, Irrbloss, Itpastorn, ItsZippy, IvanLanin, J.delanoy, JFG, JForget, JVz, Jack Waugh,
JackyBrown, Jacobolus, Jagginess, Jake Nelson, Jake Wartenberg, James.abley, Jan1nad, Jarble, Jasper Deng, JavaKid, Javalenok, Javalikescript, Jay, Jec, JeepdaySock, Jeresig, Jerryobject,
Jesant13, Jesus Presley, Jfd34, Jim McKeeth, Jim1138, Jlerner, Jmartinsson, Jnigam33, Jobanjohn, Jodi.a.schneider, Joeytje50, Joffeloff, JohnCD, JokarMan, JonathanAquino, Joncnunn,
Jonhanson, Jor, Jpgordon, Jteplitz602, JuanIgnacioIglesias, Juliancolton, Jumbuck, Justie1220, JustinStolle, Jwadeo, Kengaroo, Kenny TM~, Kenyon, Kesac, KeybladeSephi, Khaled0147,
Kiensvay, Killab14, Kincc, King of Hearts, Kingpin13, Kinu, Kkm010, Klilidiplomus, KnowledgeOfSelf, Knutkj, Koavf, Kozuch, Kravietz, Krenair, Krinkle, Kroum, Kshtiz005, Kungming2, L
Kensington, LMANSH, Lacqui, Laesod, Lambyte, Lanxiazhi, Largoplazo, Lateg, LedgendGamer, Ledgerbob, LeeU, Lego614, Lemon octopus, Leotohill, Lesgles, Lethe, Lexprfuncall, Lhtown,
Lianmei, Linuxerist, LittleBenW, Liujiang, Looie496, Lucy75, Lukasblakk, Lukestanley, Lupin, M k amin, MER-C, MFNickster, MIT Trekkie, MVelliste, Mabdul, Macaldo, Machine Elf 1735,
Madhusudan N, Magioladitis, Magister Mathematicae, Mahewa, Maian, Malcolmxl5, Mangst, MarK, Marc-André Aßbrock, Marcoxa, MarekPro, Mariano.viola, Mark Renier, Marklbarrett,
Martarius, Martin.kopta, MartinRinehart, Martinhenz, MatheoDJ, Matifibrahim, Matijap, Matt.forestpath, Matthew Yeager, Maury Markowitz, Maximus Rex, Mazin07, Mbarone911, McDutchie,
McSly, Mcclurmc, Mckoss, Message From Xenu, Mfc, MichaelBillington, Microgoal, Midinastasurazz, Miernik, Mifter, Mikeblas, Mikehtw, Mikenolte, Mikething, Milefool, MilesAgain, Milly,
Mindmatrix, Minesweeper, Minghong, Miranda, Misericord, Mistress Selina Kyle, MithrandirAgain, MithunRT, Mjb, Mkweise, Mmick66, Mnemeson, Mnemonicof, Mob590, ModDJesus,
Moeron, Mohammad khallad, Monority, Moonyfruit, Morgansutherland, Mortense, Mouchoir le Souris, Mr. Wheely Guy, Mr.Clown, MrOllie, Mrt3366, Mrwigg1es, Ms2ger, Muntfish,
Muzzamo, Mxn, Mypallmall, Mütze, NYKevin, Nako16, NameIsRon, Nanshu, Nanud, Nashleyj, Nate Silva, Nate879, Nathan2055, Nczempin, Nealcardwell, Nearfar, Necromantiarian, Neilc,
Neilerdwien, Neilshermer, NeonMerlin, Neonmario, NerdyScienceDude, Nezticle, Niceguyedc, Nick8325, NickW557, Nifky?, Nigelj, Nivix, Nixeagle, Njuuton, Nk, Nlu, No Guru, Nol888,
OLENJONNE123, Obiwankenobi, Odaravlaac, Official Spokesman, Ohnoitsjamie, Oleg Alexandrov, Oli Filth, Oliphaunt, Oliver Pereira, Oneiros, Oobug, Optakeover, Opticyclic, OrangeDog,
Orderud, Oroso, Osoviejo, Oxymoron83, OzFred, Pacoup, Paercebal, Paradox7798, Patrick, Patrick Corcoran, Paul.irish, Paul1337, Peak, Pearll's sun, Peter L, Peter S., Phantombantam, Pharaoh
255
Article Sources and Contributors
of the Wizards, Phette23, PhilHibbs, Philcha, PhilipR, Piano non troppo, Piet Delport, Piotrus, Plest, PlusMinus, PointedEars, Poor Yorick, Prakshal, Presto8, Prince-of-Life, Prolog, Protonk,
Psalmstrist cheifprosperity, Psychcf, Psz, Pyrospirit, Qatter, Quale, Quamaretto, Quantum00, QueenCake, Quinxorin, Qutezuce, R'n'B, R3m0t, RG, RJaguar3, Radagast83, Ramesh Chandra,
RandomAct, RandomStringOfCharacters, Razorx, Rbirkby, Rbucci, Rdsmith4, Recnilgiarc, Recognizance, RedRollerskate, RedWolf, Reinthal, Reisio, RexNL, Rfl, Rgoodermote, Rgqld,
Rhobite, Rich Farmbrough, Rich Janis, Rick Block, Rickynails, Ringbang, Rizome, Rjwilmsi, Robbie098, Roberto Cruz, Robmv, Rohitjs, Ronhjones, Rostz, Rp, Rror, Rschen7754, Rsrikanth05,
Rufous, Rufustfirefly, Rursus, Ruud Koot, Rwalker, Ryan Postlethwaite, S-n-ushakov, S.M.Samee, SFC9394, SJP, ST47, Saken kun, Salarmehr, Sam Hocevar, Sam Korn, Samfosteriam,
Samliew, Samuell, Samwr1234, Sander Säde, Sango123, Saqib, Sayer55512, Sboy365, ScalarField, Scarpy, Sceeuk, Sciurinæ, Sclark23, Sealican, Seav, Selket, Shalom Yechiel, Shanel,
Shantirao, SharkD, Shenme, Shoecream, Shriram, Shuipzv3, Shwaza, Simoes, SineQ, Singhvivender, Sir Lewk, Sjforman, Skamecrazy123, Skizzik, SkyWalker, Slamb, Sleepyhead81, Sleventis,
Slippyd, SlowByte, Smyth, Snowolf, Snoyes, SomeStranger, Someguyonthestreet, Spalding, SparrowsWing, Spe88, SpeedyGonsales, Spellmaster, Spiel, Spitfire, SpuriousQ, StaticGull,
SteveSims, Steveholt, Steven Walling, Stickguy, StudioFortress, Stuffandthings, SubSeven, SudoGhost, Sundström, Super Rad!, Superm401, Superslacker87, Surfeited, Susan Davis, SusanLesch,
Sushiflinger, TFOWR, TOReilly, Tabledhote, Tabrez, TakuyaMurata, TarmoK, Tasc, Taw, Tbhotch, Technome, Tedickey, Template namespace initialisation script, Tgeairn, Thatguyflint, The
MoUsY spell-checker, The Nut, The Parting Glass, The Rambling Man, The Thing That Should Not Be, The Wild Falcon, The wub, TheColdestFusion, TheKMan, TheMuffinWalkers,
TheTechFan, Thefuzzballster, Thekaleb, Themasternerd, Theone256, Theopolisme, Thingg, Think outside the box, ThirdSide, Thron7, Thumperward, Tigerwolf753, Timwi, Titodutta, Tizio, To
Fight a Vandal, Tobias Bergemann, Todd Vierling, Toddcs, Tokek, Tom Jenkins, Tophu, Toussaint, Toyotabedzrock, Tpk5010, Trigger hurt, Troels Arvin, Troy.hester, Trustle, Tsemii,
Tumblingsky, Tuntable, Tyomitch, Typhoonhurricane, Tysto, UU, Udittmer, Ultramandk, Uncle G, Urbanus Secundus, Useight, Userask, Utcursch, VKokielov, Vasiliy Faronov, Velella,
Versageek, Vertium, Violetriga, Vishwanatharondekar, Vocaro, VoluntarySlave, Vossfeldt, Vriullop, W0ozy5ho0t3r, Wadsworth, Waldir, Waldred, Wapcaplet, Wasell, Waterfalls12,
Wavelength, Wayward, Website-andrew, Weirdo134, Weka, Wellithy, Wernher, Who, Why Not A Duck, Wickorama, Widr, WikiLaurent, Wikibob, Wikieat, Wikieditoroftoday, Winterst,
Wisdom89, Wzwz, XP1, Xedret, Xhienne, Xudifsd, Yamakiri, Yamakiri on Firefox, Yaron K., Yellowdesk, Ylandra, Ylbissop, Ysangkok, Yuki Konno, Yuval Madar, Zaak, Zakawer, ZakuSage,
Zigger, Zin, ZmiLa, Zoicon5, Zojj, Zootm, Zundark, Zven, Zvn, Zzuuzz, Σ, තඹරු විජේසේකර, 1722 anonymous edits
Cascading Style Sheets Source: http://en.wikipedia.org/w/index.php?oldid=543221682 Contributors: 100110100, 16@r, 195.186.253.xxx, 195.186.254.xxx,
2001:18E8:2:109E:5DC3:2D33:4FA0:23D4, 2001:18E8:2:1171:F4B6:F87F:F5F5:1693, 2602:304:CDD9:8900:ED91:FA19:65F3:5B9B, 2o345h, 4serendipity, A. B., AJR, Aapo Laitinen,
Aarchiba, Aaron Brenneman, Abrooks, AbsolutDan, Academic Challenger, Acasson, Adam1213, Adys, Ae-a, Aetheling, Ahoerstemeier, Ahunt, Airada, Ais523, Aitias, Akmalzhon, Alansohn,
Albatross2147, Aleahey, Alerante, Alex43223, AliaGemma, AlistairMcMillan, AliveFreeHappy, Altenmann, Althena, Amakuru, Amire80, Anbu121, Andre Engels, Andrejj, Andres,
Andresbuzzio, Andrevan, Andrew c, Andrewa, Andy Dingley, Andy1838, Andymatic, Angela, Anita13113, AnonGuy, Anonymous Dissident, Aojnews, Arcnova, Army1987, Artyom, Ataru,
Atif.t2, Attys, Avnit, Axelbaxel1, Axistive, Azazell0, B0at, BF, Barts1a, Bbpen, Bdesham, Becoming, Becritical, Ben Ward, Ben-Zin, Benbelly, Bender235, Benjaminoakes, Berrie Leigh,
Betterusername, Bevo, Bitbit, Blahbleh, Blanchardb, Bobo192, Bodnotbod, Boggie, Bogtha, Bonadea, Borgx, Brandon, Brettz9, Brownsteve, Bryan Derksen, Butch566, Buxtor, Byteful,
CERminator, CIreland, Can't sleep, clown will eat me, Canadian-Bacon, Captainbenno, Captmondo, Carewolf, CecilWard, CesarB, Charivari, Chensiyuan, ChrisCork, ChrisGualtieri,
Christopherlin, Circeus, ColinHelvensteijn, Computerjoe, Constillationsconstillations, Conversion script, Cplot, CrazyDreamer, Creature, Cssondss, CyberSkull, Czert, DTR, DVdm, Dainis,
Danhash, Daniel.Cardenas, Danopticon, Darkride, Darkwind, Darrien, Darth NormaN, DavidHN, Davidzuccaro, Daypick, Dbaron, DeadEyeArrow, Deenoe, Demm, DerHexer, Derek Ross,
Derekleungtszhei, Devbhagat, Dhanuthilaka, Diberri, Digita, Djh00ligan, Dodiad, Doom-chronicle, Dotjay, Dputig07, Dr.K., Dramatic, Dreaded Walrus, Dreftymac, Drew R. Smith, Dririan,
Dusti, Dweinberger, Dzhim, ENIAC, ESkog, Eagleal, Ed Poor, Edward, EktoGamat, Elfguy, Elyada, Emil Stenström, Energetic is [email protected], Enotia, Enric Naval, Entropy, Epbr123,
Eraserhead1, Estellevw, Eyesnore, [email protected], FatalError, Favonian, Feezo, Femto, Fi9, Fionagj, Fmsgirl2, Fnlayson, Folajimi, Formation, Forpublic, Fraggle81, Fred
Bradstadt, Fredrik, Furrykef, Fuzztrek, Gamera2, Garrettcollins, Gary King, Geekosaurus, Gennaro Prota, Gggh, Ghettoblaster, Gladiool, Glane23, Glen 3B, Godheval, Goodone121, Goog,
GorillazFanAdam, GraemeL, Graham87, Greg9885, GregorB, Grunt, Gtrmp, Guanaco, Gulliveig, Gurch, Guy Harris, Gwernol, Gwicke, Gyre, Haaninjo, Hadlock, HalJor, HaleakalAri,
Hamranhansenhansen, Hanberke, Hannes Hirzel, Happysidhu, Hari, HarryAlffa, Hello. I'm new here, but I'm sure I can help out., Hemidemisemiquaver, Henry W. Schmitt, Heymid, Hippi ippi,
Hirzel, Hmains, Hoary, Hoplon, Hughcharlesparker, Hydrargyrum, I already forgot, IRP, Iamjaypatel, Iancarter, Ilgiz, ImperfectlyInformed, Imroy, Indefatigable, Indiejade, Inputdata, Iprathik,
Islandboy99, It writer, IvanLanin, IvanM89, Ixfd64, J.delanoy, JSpung, Jack Merridew, Jack-A-Roe, Jacobolus, Jaderobbins, Jahoe, Jan1nad, Janadore, Jannetta, Jasper Deng, Jcranfordteague,
Jdevalk, Jeff G., Jeffz1, Jens Meiert, Jerryseinfeld, Jesant13, Jim Dabell, Jim1138, Jimthing, Jnc, Jnivekk, Jnorton7558, JoaoPinheiro, Joey836, John Vandenberg, Johnnybravo2009,
[email protected], Jonah22, Joseph Solis in Australia, Josephndenton, Joy, Jpers36, Jshadias, Jtrainor, Jwilkinson, KPH2293, KarlHofmann, Katecat, Kevin874, Kevindeedavis, Kevpatt,
Kgaughan, King Lopez, Kingpin13, Kiramonin, Kjoonlee, Klilidiplomus, KnowledgeOfSelf, Kodiak3000, Kompere, Kompromissis, Kotra, Krauss, Kubigula, Kuru, Kwamikagami, L
Kensington, LLarson, La Pianista, Lachlan Hunt, Lambda, Lastorset, Lee Begg, Lee Carre, Lenticel, LeoNomis, Lianmei, Libcub, Lifefeed, Lightmouse, LittleBenW, Longsight, Lord chiggins
monkey, Lotje, Loving2007, Lowellian, LtPowers, LucasVB, Luna Santin, Lutzmanfred, M1ss1ontomars2k4, M4gnum0n, MC10, MER-C, MFNickster, MIT Trekkie, Mabdul, Mac, Macinta,
Magioladitis, Magister Mathematicae, Mahmudmasri, Makecat, Makeyourself, Maniandram01, MarcMacé, MarlinsRule, Martarius, MartinRinehart, Match, Materialscientist, Matt.Ramos,
Mattbrundage, Mav, Maximaximax, Mbabb, Mboverload, Mcpatnaik, Meewam, Megabytephreak, Memiux, Menseung, Michael Hardy, MikeCapone, Mikeb2204, Mikerq, Millermedeiros,
Mindmatrix, Minesweeper, Minghong, Mintguy, Mirithing, Misza13, Moeron, Moondyne, Mortense, MountainHiker, Mrxwindows, Ms2ger, Mschlindwein, Mtmacdonald, Mudassar16,
Mvsrhollywood, Mx3, Mxn, MyOwnLittlWorld, Mzanime, Mzhao, NSK Nikolaos S. Karastathis, Najoj, Nako16, Nanshu, NantonosAedui, Natekoechley, Naught101, Neelam-user, Neshatian,
Netdragon, Nick, Nick1234554321, Nick1nildram, Nickshanks, Nigelj, Ninjagecko, No or yes, Noldoaran, Noodlenozzle, Nopetro, NuclearWarfare, Nurg, Nyltimes, ONEder Boy, Ohhllaaraven,
Ohnoitsjamie, Ohyoko, Oli Filth, Omegatron, Onco p53, Opop12345678, Orbst, OwenX, Oxymoron83, PKates, Palica, Pantoufle, Parasti, Patrick, Patstuart, Paul A, Pcap, Petri Krohn, PhS,
Pharaoh of the Wizards, Pharos, Philcha, Philip Trueman, Philwiki, Piano non troppo, Pierre-Mael Cretinon, Pigsonthewing, Pilaf, Pixelate, Plrk, Pmsyyz, Pne, Pnm, Pokemonblackds,
PolarYukon, Pplperson, Profoss, PseudoSudo, Pudleek, Qaddosh, Quasipalm, Quebec99, Quest for Truth, Quiddity, Qzykcc, R'n'B, R39525, Raelx, Ramesh Chandra, Rand, Rangi42, RaseaC,
Rballou, Rbrwr, Rbryanh, Rbucci, RedWolf, RedXII, Redvers, Reinthal, Reisio, RekishiEJ, Repabil, Retpyrc, Rfl, Rich Farmbrough, Richwales, Rick Block, Ricky, Rjwilmsi, Rklawton, Rl,
Robertbyrne, Robwbell, Rodhullandemu, Rohitjs, Root4(one), RossPatterson, RoyBoy, RoySmith, Roybb95, Rsrikanth05, Rssaddict, Rufous, Ryanrs, S.Örvarr.S, SESchreiber, SG, SHolte,
SMcCandlish, Saerdnaer, Sam Francis, Sam Hocevar, Sam Hughes, Sam Korn, Sam*, Samuel Grant, Samuella, Sanxiyn, Sceptre, Schmei, Schmiddy, Sct72, Seaphoto, Selch, Senator2029,
Sercotec, Shadowjams, Shagie, Sheridan, Shirik, Shwaza, SilasM, Simetrical, SimonP, Sintaku, SiobhanHansa, Skigamemaker, Skrim, SkyWalker, Sleepyhead81, SlimVirgin, Smaines,
Smartsmith, SmilesALot, Smurfy, Smyth, Snodnipper, Solascriptura, Sp0ngebong, Spalding, Spazquest, SpeedyGonsales, Spyforthemoon, Stalfur, Starnestommy, Staylor67, Stevo99, Sturobably,
Sunroof, Superbeecat, Superm401, Suruena, Sven Manguard, Sverdrup, Swapnil raja, T3gk, THEN WHO WAS PHONE?, TYelliot, Taimurkazmi, Taka, TakuyaMurata, Tantek, Tarikash,
Tarquin, Tassedethe, Tbuchber, Techauthor, Technobadger, Teh tennisman, Teknobo, Tero, TestPilot, Tgeairn, Thany, The Great Bard, The Rambling Man, The Thing That Should Not Be, The
editor1, The wub, TheKMan, TheRealFennShysa, TheSlyFox, Think777, Thoti, ThreeDee912, Thumperward, Timdorr, Tmcw, Tobias Bergemann, Todd Vierling, Toddcs, Tokek, Tom-,
Tomgally, Tommy2010, Torf, Touranaut, Toussaint, Tregoweth, Treybien, Trhaynes, Truetech, Tvarnoe, Tweek787, Two Bananas, Twsx, Typhoonhurricane, UU, Ucanlookitup, Ultra two,
Unkenmann, Unknown W. Brackets, Utcursch, Uzume, VSimonian, Vacio, Verdlanco, Versageek, Violetriga, ViperSnake151, Vishnava, Vishuthegreat, VistaMusa, Vonfraginoff, Voodoochilli,
Vorkronor, Voronwae, Vrenator, WLU, WOSlinker, Waldir, Wapcaplet, Waqaee, Warriorccc0, Wavelength, Webdinger, Webzero, Weyes, Whale plane, Widr, Wiki alf, WikiDao, WikiLaurent,
Wikiacc, Wikieditoroftoday, Wikiweezil, Will Beback, Will.law, Winston Chuen-Shih Yang, Wisergirl, Wranga, X-Fi6, Xenmorpha, Xetrov, Xompanthy, Xyzu, Yakura, Yurik, Zach4636,
Zearin, Zeerus, ZenerV, Zinjixmaggir, Zoicon5, Zondor, Zundark, Zurishaddai, Zzuuzz, Ævar Arnfjörð Bjarmason, 1156 anonymous edits
Application programming interface Source: http://en.wikipedia.org/w/index.php?oldid=544647566 Contributors: 213.121.101.xxx, 24.108.233.xxx, 24.93.53.xxx, 4483APK, 64.105.112.xxx,
90, AaronL, Aarsalankhalid, AbdulKhaaliq2, Adah, Addshore, Ae-a, Aeons, Aeternus, Ahunt, Ahzahraee, Airplaneman, Alan d, Alex43223, Altaf.attari86, Altaïr, Altenmann, Amanuse, Ancheta
Wis, Andre Engels, Andremi, Andres, Andrey86, Andy16666, Anteru, Apoltix, Arindra r, Arjayay, Arthur Davies Sikopo, Aruton, Ashamerie, Asydwaters, Atheken, Atreys, Aude, Auntof6,
Avk15gt, Awg1010, Bamyers99, Bdesham, Beano, Bearcat, Betterusername, Bevo, Bhat sudha, Bikingviking, Blackcats, Bobo192, Boing! said Zebedee, Bookiewookie, Borgx, Boyprose,
Brianski, Bryan Derksen, BryanG, Bryanmonroe, C5st4wr6ch, CYD, Calton, Calvin 1998, CanisRufus, Capricorn42, Chadsmith729, Chameleon, Chealer, Chicago god, Chiefcoolbreeze,
ClaudiaHetman, CloudNine, Colonoh, Consult.kirthi, Conversion script, Coolbloke94, Courcelles, Cybercobra, Cynical, DShantz, Damian Yerrick, Daniduc, Danja, Darklight, Davejohnsan,
Davemck, David Gerard, Davron, Dawidl, DeeKay64, Deepugn, Dennislees, Derek farn, Detnos, Didym, Diego Moya, Diomidis Spinellis, Dipskinny, Discospinster, Dmarquard, Download,
Dqpeck, Dr Marcus Hill, Dr.mmbuddekar, Dreadstar, Drewmeyers, Dschach, Dsnelling, Dylan620, EVula, EagleMongoose, Ebessman, Econterms, Ed Poor, Edcolins, Edinwiki, Edwardkerlin,
Efa, Egmontaz, Ehn, Elf, Ellmist, Eloquence, Enochlau, Enric Naval, Epbr123, Eric Agbozo, Espoo, Excirial, Farrwill, Fieldday-sunday, Fitch, Fraggle81, Frap, Freakimus, Frecklefoot,
FrummerThanThou, Funvill, Fæ, GRAHAMUK, Gak, GeoffPurchase, Giftlite, Graham87, Greensburger, Griznant, HUB, Hadal, Harryboyles, Hashar, HenkeB, Heraclius, Hfastedge, Hires an
editor, Hmains, Humu, Husond, InShaneee, Infinitycomeo, Itai, Ivan007, Ixfd64, Izno, J3st, JHunterJ, JLaTondre, JWSchmidt, Jakuzem, JamesMLane, Jarble, Jbolden1517, Jengod, Jerryobject,
Jesse V., Jidanni, Jitse Niesen, Jleedev, Jmclaury, JoeB34, John of Reading, John.n-irl, JohnBlackburne, JulesH, Julien, Julienj, K12u, Kbolino, Kernel Saunters, Kichik, Kickin' Da Speaker, Kim
Bruning, King of Hearts (old account 2), KnowledgeOfSelf, Kocio, Kurdo777, Landon1980, Lavers, Lee Daniel Crocker, Legoktm, Lekshmann, Leoholbel, Liempt, Limbo socrates, Liorma,
LizardJr8, Lockeownzj00, Looc4s, Lord Chamberlain, the Renowned, Loren.wilton, Loshsu, Lotje, Lupin, M5, Mac, Mange01, Manop, Martyn Lovell, Marudubshinki, Materialscientist,
Mattknox, Mav, Mbeychok, Meldraft, Mflore4d, Michael Hardy, Michael Hodgson, Michaelas10, Miguel, Mihai cartoaje, Miketwardos, Minghong, Minirogue, Miohtama, MoreThanMike,
Morg, Mountain, Mpbaumg, MrOllie, Mrh30, Mshivaram.ie22, Mwarf, Myc2001, Nanshu, Neelix, NewEnglandYankee, Nopetro, Notinasnaid, Nsda, Obradovic Goran, Ocean Shores, Ochado,
Ohspite, Old Guard, OlegMarchuk, Omniscientest, Oulrij, Oxymoron83, Pascal.Tesson, PaymentVision, Peak, Pearll's sun, Pengo, Pepe.agell, Percede, Pertolepe, Pgimeno, Philip Trueman,
Phuzion, Piano non troppo, Plamka, Poweroid, Prari, Pwforaker, Queenmomcat, Quinet, Quux, Qwertyus, Qx2020, Qxz, R'n'B, RJHall, Rackspacecloud, Raise exception, Randomalious,
RedWolf, Redlentil, Reemrevnivek, Renatko, Rich Farmbrough, RichMorin, Riluve, Rktur, Robert K S, Robneild, Rocastelo, Ronocdh, RoyBoy, Rs rams, Rudyray, Rwwww, SERIEZ, SMC,
SQGibbon, ST47, Sakhal, Salvatore Ingala, Sam Korn, Scohil, Scott Ritchie, Seaphoto, Sega381, Seth Nimbosa, Sfmontyo, Shaun9876, Shlomif, SimonTrew, SirSandGoblin, Sj, Skeejay,
Skysmith, Slady, Slurrymaster, Snippy the heavily-templated snail, SocialRadiusOly, Sodium, Soumyasch, Spencer, Spikey, SqueakBox, Sriharsh1234, Status, Stephenchou0722, SteveBaker,
Steven J. Anderson, Sun Creator, Suruena, Syvanen, Szajd, T-borg, Ta bu shi da yu, Tantrumizer, TastyPoutine, Tedickey, Teryx, Teutonic Tamer, The Anome, The Thing That Should Not Be,
TheSoundAndTheFury, TheresaWilson, Thiotimoline, Thisisborin9, Tide rolls, Tijuana Brass, Tony1, Torchiest, Tpbradbury, TrOlLLin1212, Transpar3nt, TrentonLipscomb, Troymccluresf,
Tseay11, Uriyan, Utype, Uzume, Varworld, Velella, Vikramtheone, Visvadinu, Vkorpor, Voidxor, WTRiker, WaltBusterkeys, Wapcaplet, Wavelength, Whatsnxt, Whitehorse212, Widr,
WikHead, Willy-os, Wjejskenewr, Wysprgr2005, Xqt, Yaris678, YordanGeorgiev, Yurik, Zachlipton, Zeno Gantner, Zero Thrust, Zhinz, ZimZalaBim, Zodon, 계정명뭘로하지, 835 anonymous
edits
256
Article Sources and Contributors
Scalable Vector Graphics Source: http://en.wikipedia.org/w/index.php?oldid=540688674 Contributors: *drew, 16@r, 1exec1, 217.98.151.xxx, 7, A:-)Brunuś, AThing, AVRS, Abce2, Ac44ck,
Acasson, Adodge, Aguzer, Ahoerstemeier, Aimonai, Akilaa, AlefZet, AlexPavlenko, Alexamies, Alexjohnc3, AlistairMcMillan, AlisteRrr, Allen3, Alonbl, AltiusBimm, Amelia Hunt, Anakar,
AndrejBenedik, AndrewProgrammer, Andros 1337, Ankit1 nagpal, Anna Lincoln, AnnaFrance, AnonMoos, Anwar saadat, Anárion, Arnero, Arthena, Artw, Ascorbic, Attilios, Aursani, Authr,
Axl, BBuchbinder, BPK, Bdesham, Bejnar, Beland, Ben-Zin, BenFrantzDale, BigDunc, BjKa, Bjankuloski06en, Bobo192, Boggie, Bomazi, Bondolo, Bookysmell, Booles, Bovlb, BradNeuberg,
Bruce89, Bryan Derksen, Buaidh, Bumpusjane, Bus stop, CRobClark, Calwiki, Cfailde, Charivari, Cheapie, Cherden, Chowbok, Chris Chittleborough, Chris55, ChrisRuvolo, Chrisspurgeon,
Christian75, Christopherlin, Chun-hian, Chuzhakin, CliffWalkinFool, Cmdrjameson, Colette27, Comrade42, Conan, Conrad.Irwin, Conversion script, Coolerfisch, Cornell92, CountingPine,
Crazytales, Crisco 1492, Cristan, Csprofrlm, Cwolfsheep, CyberSkull, Cybercobra, CyclePat, Cygnus78, Damian Yerrick, Dan East, Dancraggs, Dancter, Danhash, DanielPharos, Danja,
DarlArthurS, Darobin, Darxus, Dav-FL-IN-AZ-id, Davemcarlson, David Newton, David.daileyatsrudotedu, Davidhorman, Dbenbenn, Dendropithecus, DennisDaniels, Designer4u, Dgw, Diberri,
Dmccarty, DoSiDo, DopefishJustin, Dormous, Doug Bell, DrBob, Dragice, DreamGuy, Dreftymac, Drttm, Dwimsey, Eaowens, Ear1grey, Edokter, Edward, Edward Z. Yang, Edwardtbabinski,
Eep², Efitu, Elemeno, Eloquence, Enormator, Enquire, Ergosteur, Ericd, Ermishin, Estoy Aquí, Everlong, Evice, Fadookie, Falcon9x5, Feedmecereal, Fenring, Fetchcomms, Ffangs, Filll, Finell,
FirefoxRocks, Flcelloguy, FleetCommand, FliesenNavigator, Folajimi, Foxtrotsky, Fred Bradstadt, Froehle, FrostyBytes, Furrykef, Fziliani, GPHemsley, Gaius Cornelius, Gari22, Gary King,
Gdelfino, Ged UK, Gentgeen, GeorgeMoney, Georgeryp, Gerbrant, Ghettoblaster, Globbet, Glrx, Gmaxwell, GoingBatty, Goodeq71, Gracenotes, Graham87, Grahamstewart, Great Cthulhu,
Grego7, GregorB, Gudeldar, Guy Harris, Guyjohnston, Gyrobo, HAL(Old), HAl, HHaskell, HTMLCODER.exe, Haham hanuka, Hajhouse, Hamitr, Hashar, Hdante, Helix84, Henry W. Schmitt,
HereToHelp, Hervegirod, Heycam, Hgfernan, Hhielscher, Hlovdal, Homunq, Hooperbloob, HotXRock, Hsonesson, Hyad, Hydrargyrum, Hylobius, IE, IPAddressConflict, Iambus, Ian Pitchford,
Id1337x, Ida Shaw, IlliterateSage, Imc, In fact, IntrigueBlue, Ipankonin, Irve, Itsmine, Iuhkjhk87y678, J JMesserly, J.smith, JHunterJ, JLaTondre, JVz, Jackster, Jacobko, Jacobolus, Jahoe, Jakub
Onderka, Jarble, Jarekt, JasonSaulG, Jax-wp, Jeanhaney, Jeff schiller, Jeltz, Jgrahn, Jgtate, Jivecat, Jjzeidner, Jmarchn, John Broughton, John Vandenberg, Johncrowther, Joker1984, Joker2007,
Jonathan Watt, Jorunn, Joseph Solis in Australia, Josh Parris, Jwy, Kaare, Karam.Anthony.K, Katpatuka, Kbdank71, Kbolino, KelleyCook, Kenny sh, Kevinconroy, Kghose, KihOshk, Kiminger,
Kjkolb, Kjoonlee, Klingoncowboy4, Komencanto, Kosteltsev, Kpengboy, Kpjas, KrakatoaKatie, Kricxjo, Krischan111, Kriskhaira, Kuteni, Laofmoonster, Legoff.laurent, Leonard G., Lev
Matematik, Little Professor, LittleBenW, LittleDan, Llihrednu, Lotje, Lucideer, Lumarine, M0rphzone, M@RIX, Mabdul, Mac, Magioladitis, Maikel, Makyen, Mani664, MarcoAurelio,
MartinRinehart, Martty, Marudubshinki, Masgo, MathMartin, Mcorazao, Mcurtes, Mhinterseher, Miaow Miaow, Michael Hardy, MichaelBillington, Mikhail Ryazanov, Militaryace,
Millermedeiros, Minesweeper, Minghong, Miracleworker5263, Mitsukai, Mkidson, Mkouklis, Mktyscn, Modster, Monash4, Mongoletsi, Morn, Moxum, Mpbolger, MrJones, Ms2ger, Msgilligan,
Mumia-w-18, Mushin, Mxn, NaBUru38, Nae'blis, NantonosAedui, Narendra Sisodiya, Ndavidow, NeaNita, Nealmcb, Nemo bis, Netoholic, Newtown11, Nhandler, Nigelj, Nightkhaos, Nihiltres,
Nikai, Nimbupani, Nintendo Maniac 64, Nl74, Nobar, Noldoaran, Norm, Nsda, Obeattie, Objectivesea, Octane, Ohconfucius, Ojw, Oli Filth, Oliphaunt, Oliver Lineham, Olivier, Omegatron, One,
Optimiced, Orenadam, Owl order, Pamri, Panzi, Paranomia, Patrick, Pattersonc, Paulszym, Pdwiki314, Penfold, Pengo, Penubag, Petergjansen, Peterwhy, Pianohacker, Pigsonthewing, Pingveno,
Plop, Pnorcks, Polental, Popas11, Psdie, Quadratus, Quoth, Qutezuce, R8Rooy, RDBury, Random user 8384993, Rassisi, Rasvg, RedWolf, Reedbeta, Reinthal, Reisio, Rekabis, Remember the
dot, Remi de, Reub2000, RexNL, Rich Farmbrough, Richcon, Riki, Ripper234, Rjwilmsi, Rkehlor, Rob Russell, RobertHeadley, Roeeyaron, Rojomoke, Romiras, Rondack, Ronz, Ross Uber,
Rursus, Ruud Koot, Rwxrwxrwx, SF007, SKopp, Saintrain, Sakurambo, Sameboat, Samuella, Sandstein, Sane Traitor, Saxifrage, Scott MacLean, ScottHolden, Scoutersig, Seanqtx, Sebleblanc,
Securiger, Seniortrend, Seren-dipper, Sfacets, Shadowjams, Shepazu, Show007, Sjakkalle, Skierpage, Skoot, SkyMachine, SkyWalker, Slartidan, Slashme, Sleepyhead81, Sligocki, Smjg,
Smoothhenry, Sonjaaa, Soumyasch, Spankman, Speck-Made, Spinningspark, Spriteless, Squidonius, Ssd, Stephen B Streater, Stephenchou0722, Stepshep, Stevenj, Stevertigo, Stewartadcock,
Sthoby, Stuprniq, Suruena, Svick, SyntaxError55, Sysrpl, TMC1221, Ta bu shi da yu, Tagus, Tamariki, Tandrasz, Tatyana Popova, Tedwardo2, Tenbaset, Tene, Terjen, Testonly, The Wild
Falcon, TheDJ, TheGeoffMeister, TheKMan, TheWhiteMonkey, Thelennonorth, Thingg, ThomasHarte, Thorenn, Thrapper, Thumperward, Timeshifter, Timneu22, Tobias Bergemann, Tobin
Richard, Todd Vierling, Torx, Toussaint, Trapolator, Traroth, Tuntable, TyGuy5, Typhoonhurricane, UU, Urhixidur, Vanessaezekowitz, Vanished user 98wiejfno34tijsfoiwefjlok5y,
VictorAnyakin, Voidxor, Wanyxspe, Wenz, Wereon, West.andrew.g, Whatg, WikiAddict81, WikianJim, Wikinger, Willpeavy, Winterst, Wooptoo, Worldtraveller, X-Fi6, XJamRastafire, Xenni,
Xinconnu, Xionbox, Yamavu, Yarnover, Youandme, Youssefsan, Ysangkok, Yukoba, Zeh, Zeotronic, Zero0w, Zosoin, Zundark, Zuse, ZweiOhren, 図, 虞 海, 732 anonymous edits
Web browser Source: http://en.wikipedia.org/w/index.php?oldid=544055364 Contributors: (, .Wiki.pedian., 16@r, 1712km, 216.15.88.xxx, 28421u2232nfenfcenc,
2A02:2F01:1019:F002:0:0:BC1B:6ACC, 90 Auto, A-giau, ABF, ADeveria, AKMask, ARC Gritt, AceMyth, Adam Zivner, Adam78, Ade56facc, Ageekgal, Ahmad87, Ahoerstemeier, Airada,
Akerbeltz, Akhristov, Aksn1p3r, Alan Liefting, Alan Millar, Alansohn, Alarchdu, Aldie, Alecmconroy, Aleenf1, AlefZet, Aleksa Lukic, Alessgrimal, Alevine-eantflick, AlistairMcMillan,
Allstarecho, Altaïr, Althepal, AlumOxide, Amcfreely, Amg32009, Amog, An-chan, Anaxial, Andre Engels, Andres, Andrewferrier, Android79, Andy Marchbanks, Angr, Anna Lincoln,
Antandrus, Anthony, Anthony Ivanoff, Antonio Lopez, Anypodetos, Anárion, Apswartz, Aquilosion, Aranea Mortem, Arcade, ArchStanton69, ArglebargleIV, Arkuat, Arvindn, Asrekdal,
Astroview120mm, Atenea26, AugPi, Auroranorth, AussieLegend, Avoided, BadBoyMitch, Barek, Barneyboo, Beao, Beland, Ben-Zin, Benn08, Benregn, Bevo, Bgibbs2, BhuwanR,
Bibliomaniac15, BigHairRef, BigSmoke, BirgerH, Bjankuloski06en, Blehfu, Blindgazer, Blue master24, BlueJ774, Bob bobato, BobThePlatypus, Bobblehead, Bobo192, Bohemian Arcade,
Bomac, Bonadea, Boomshadow, Boydbutler, Bozo33, Branddobbe, Branko, Brian Pearson, BruceB, Bubba hotep, Burgundavia, CWY2190, Cabalamat, Cacophony, Camoka4, Can't sleep, clown
will eat me, CanadianLinuxUser, CanisRufus, CapitalSasha, Capricorn42, Captain panda, Carewolf, Carlj7, Carnildo, Carter, Caspertheghost, Celestianpower, Cerrigno, Charlesincharge, Chealer,
Chicarelli, Chihuahuahater411, Chininazu12, Chinneeb, Chris55, Christian List, Chuck Marean, Chuck SMITH, ClamDip, Clasqm, Classicfilms, ClaudineChionh, Cloud 9, Clueless,
CommonsDelinker, Conversion script, Copsi, Copysan, Crapizio, Crusadeonilliteracy, Cumuluscomputers, Curious1i, CyberSkull, Cyp, DARTH SIDIOUS 2, DamienRice, Daniel Hen,
Daniel.Cardenas, DaughterofSun, DaveTheRed, DavidLevinson, De Surinamer, DeTru711, Dead3y3, Deekomalley, Den fjättrade ankan, Denisarona, Dephnit45, Derekland, Diamondjack2798,
Digita, Digitalbyjess, Digitize, Discospinster, Dmickan, Dmsar, Doc glasgow, DocWatson42, Dowloadop, Dp76764, Dpsingh sac, DragonHawk, Dreamyshade, Drmies, DutchHoratius,
Dysprosia, Eddyspeeder, Edmarriner, Eeekster, Ehheh, Ellmist, Eloquence, Elvey, Emmette Hernandez Coleman, Emperorbma, Emx, Eowend, Epbr123, Ericd, Espoo, Etz Haim, EugeneZelenko,
Euryalus, Everyking, Evice, EvocativeIntrigue, Ewawer, Excirial, Explicit, Fabrictramp, Father Goose, Favonian, FedericoMP, Felipe Aira, Feydey, Ffaker, Fish and karate, Flarn2006, Fobenavi,
FocalPoint, Fosnez, Frap, Fred Gandt, Fredrik, FrstFrs, Galorr, Galoubet, Gareth Aus, Gazpacho, Georgia guy, Ghettoblaster, Ghhgjjf, Giftlite, Glane23, Glenn, Gliese849b, Gogo Dodo,
GoingBatty, GraemeL, Graham87, GreatWhiteNortherner, Greenrd, Grm wnr, Gsarwa, Gscshoyru, Gudeldar, Guliolopez, Guppy, HDCase, Hadal, Harp, Hbw, Hdk94, Headbomb,
HeikoEvermann, Helix84, Henrik Gammelgaard, Hhielscher, HonorTheKing, Hoshie, Htaccess, Hymek, Iamjp180, Ilhanli, Imjustmatthew, Inferno, Lord of Penguins, Infogaufire, Ipodfanz,
Irishguy, J. M., JFG, JMK, JOptionPane, JTBX, Jack No1, Jafeluv, Jahleeldaruis, Jahoe, Jake Wartenberg, Jasper Deng, Javance, JayKeaton, Jebethe, Jeltz, Jemappelleungarcon, Jerome2245,
Jerryobject, Jerzy, Jesant13, JezWalters, Jezzabr, Jhsounds, Jinxed, Jleedev, Jmb kz, JoanneB, Joblio, John Fader, JonHarder, Jondel, Jor, JordanITP, Jordy577, Joshua Gyamfi, Joy, Joyous!,
Jrtayloriv, Jschnur, Jtalledo, Jumpsports, Jusdafax, K2quill fairfax, Karen Johnson, Katieh5584, Kazikameuk, Ke4roh, KelleyCook, Kevyn, Kgfleischmann, Kingpin13, Kku, Klingoncowboy4,
KnowBuddy, KnowledgeOfSelf, Knutux, Kop, Kozuch, Kpjas, Krun, Kurowoofwoof111, Kuru, Kushalbiswas777, LGagnon, LaMenta3, Laurusnobilis, Lawnthoned, LeaveSleaves, Leuko,
Lexter konsebio007, LeyteWolfer, LinguistAtLarge, Linuxerist, LittleBenW, LittleDan, LittleMatchGirl, Livajo, Lonjers, Lotje, Louischengex 007, Lucyin, Lugia2453, Lumpbucket, Lysdexia,
Mabdul, Mac, Macwang, Magioladitis, Marcus Qwertyus, Mark Renier, Materialscientist, Matijap, MattieTK, Mattymcg, Mav, Meme xD, Mentaka, Metroryry, Metz2000, Michael Allan,
MichaelBillington, Michaeljacksonfan, Midgrid, Miernik, Mikebrand, MikesPlant, Minesweeper, Minghong, Miquonranger03, MistaXFrye, Moe Epsilon, Mokgand, Monaarora84, Mormegil,
Mortense, Motor, Mr. Bene, Mr. Lefty, Mr. Strong Bad, MrOllie, Mrschimpf, Mscwriter, Mspence835, Mulder416, Multifinder17, Mwarf, Mxn, Nakakapagpabagabag, Nanshu, Narsi90, Naudefj,
Nbarth, Ncmvocalist, Nergaal, Neurodivergent, Niceguyedc, Nick, NickBush24, Nickshanks, Nickst, Nietzsche 2, Nikai, Nikthestunned, Nintendo6110, Nixdorf, Noldoaran, Norm, Northstarweb,
Nurg, Nyeguy, Oberiko, Obiwankenobi, Ocaasi, Ohconfucius, Oicumayberight, Olmer, Oska, P. S. F. Freitas, P0lyglut, PLJ, PM800, POOTER PIPER PIZZA, Papeschr, Patrick, Pcb21, Pegship,
Persian Poet Gal, Peyre, Pgk, Philip Trueman, Piano non troppo, Pikiwyn, Pilaf, Pinethicket, Pjoef, Plutonics, Pmsyyz, Poor Yorick, PranksterTurtle, Precious Roy, Precision Y, Premchakkungal,
Primexx, Profoss, Public Menace, Puchiko, RSido, Rafaelluik, Randyoo, Ravensfan5252, RaviC, Rayis, RedRigel, Reedy, Reisio, Remember the dot, Repetition, Rhindle The Red, Richiekim,
Rick Block, Roadwarrior52, Ronhjones, Rootbeer, Roy.vanegas, Rror, Rubber cat, Rugby471, RyanGerbil10, SB3606, SBKT, ST47, Sae1962, Sakurina, Salmar, Samboy, Samelliot01, Sampo
Torgo, Sankalp.gautam, Sbmeirow, Schapel, Scodger4, Seajaywiki, Secretlondon, Seidenstud, Sevengen, Shalom Yechiel, Shenme, Siddsmat, Siliconglen, SilkTork, SimsimTee, Sincy55,
Sinkhead101, Skizzik, Skyclown, Skysmith, Sl, Smalljim, Smyth, Soerfm, Sonjaaa, SpaceFlight89, Sparthorse, SpecMode, Speck-Made, Spitfire19, Splang, Squash, SqueakBox, Squids and
Chips, Staeiou, StaticGull, Stephen Burnett, Stephenb, Stephenchou0722, Steve2011, SteveBaker, SteveSims, Steven Walling, Stickee, StopVandalsNow, Sumone10154, Superz3161981, Susfele,
Svick, Swatjester, TGilmour, Tannin, TastyPoutine, Tawker, TeddySoft, Tedickey, Terrycojones, Tgarsiel, That Guy, From That Show!, The Mysterious El Willstro, The Rambling Man, The
RedBurn, The Thing That Should Not Be, The Wild Falcon, The bellman, The sock that should not be, TheParanoidOne, TheRingess, TheTechFan, Theaveng, Thecheesykid, Thedollelama,
Theymos, Thine Antique Pen, Thorenn, Thumperward, Thurinym, Tide rolls, TimBentley, Tnxman307, Tobby72, Tom Jenkins, Tommy2010, Topleveldomainuser53, Towsonu2003, Tpbradbury,
Traroth, Trasande, Trav1085, Trialsanderrors, Twibright Clock, UU, Ukexpat, Unknown W. Brackets, UnknownFork, Unslaked, Untermenschen, Unyoyega, Userafw, UsernameQQ, Vaganyik,
Vancouverguy, Vary, Vbigdeli, Veinor, Versageek, Versus22, Vibhijain, Vishnava, WJetChao, WPjcm, WadeSimMiser, Waggers, Wallrunner51, Warren, Wavelength, Webbroser, Webera02,
Wesley, Wfpoulet, Whkoh, Widefox, Wiifolderfan, Wikada, WikiED, WikiLeon, Wikifun95, Wikiolap, Wikiwiki, Wikiwikifast, Willking1979, Wimt, Wknight94, Wm, Wnissen, WojPob,
Wolfehhgg, WorldlyWebster, Wtmitchell, WulfTheSaxon, Xdamr, Xiamcitizen, Xorx77, Yoctoinc, Yosri, Yukito-san, Zack, Zanimum, Zatorade, Ziiike, ZimZalaBim, Zollerriia, Zondor, Zoney,
Zotterdas, Zundark, Александър, 朝 彦, 1098 anonymous edits
Firefox Source: http://en.wikipedia.org/w/index.php?oldid=543850719 Contributors: %man of%s, (aeropagitica), *Mystic*, -Majestic-, 041744, 10014derek, 15turnsm, 16@r, 1nt2, 1wolfblake,
2003:41:6002:2:80:0:2:1, 2mcm, 3dwarehouse, 6020city, 7PusaAJ, 84.9.73.64:80, A purple wikiuser, A-giau, A18919, A1kmm, A1r, A9l8e7n, AHM, ARC Gritt, AThing, AVRS, AaThinker,
Aanhorn, Aaron J Nicoli, AaronB0413, Aavindraa, Ab irato, Abc123456person, Abedia, Abhkum, Abizern, Absconded Northerner, Abune, Acalamari, Accwxphp, Ace of Spades, Acer, Acid 1,
Adam Bishop, Adam Conover, AdamWeeden, Adamlock, Adamv88, Adaxl, Adilbee, Aditya Kabir, Adnan Suomi, Adraeus, Adriaan, Adrian.baker, Adyniz, Ae-a, Aebrahim, Aeon17x, Aeons,
Aero Flame, Aexus, Af648, Afmenez, AfroBrazilian, Agent Smith teh Uber Pr0, Aghochikyan, Ahess247, Ahk057, Ahmad Rady, Ahoerstemeier, Ahunt, Ahy1, Aj00200, Ajpri, Akamad,
Akashtaker001, Akerbeltz, Al Wiseman, AlP23, Alabama Man, AlanH, Alansohn, Albany NY, Albert Feller, Alby, Aldy, Aled D, Aleenf1, Alekk, Alerante, Alereon, Alex Weeks, Alex17
2007USA, AlexPlank, Alexcorn, Alexei-ALXM, Alexignatiou, Alexnye, Alexsh, Alexwhett, Algorithm, [email protected], Alian, Alicekey, Alinutza b, AlistairMcMillan, Allens, Almafeta,
AlmostReadytoFly, Alok94, Alorlious, Alperentunga, Alphachimp, Alphax, Alrymala, Alsh, Altaïr, Altermike, Althena, Althepal, Altonbr, AluminumPancake, Alwaystech, Alx 91, Alxsilva,
Am088, Amakuru, Ameliorate!, Amiga7777, Amits27, Amog, Amosfolarin, Amplitude101, Amygdala, Analoguedragon, Anarchopedia, Anas Salloum, Anchor TH, Andareed, AndersFeder,
Andlynx, Andres, Andrevan, Andrew Duffell, Andrewdunkcool, Andrewferrier, Andrewpmk, Andy, Andypham3000, Angeldeb82, Anirvan, Anish7, Anonymous Dissident, Anoopan,
AnotherSolipsist, Anouarattn, Antandrus, Anthony, Antrikshy, Anttipng, Antwon 3, Apeman888, Apox, Appfan33, Applecot, Apyule, Arathon, Arbitrarily00, Arbor to SJ, Arcade,
Arcticfreeze83, Arcturus4669, Ardonik, Ariel., Ariesk47, Arjun01, Armando12, Armchair info guy, Armin76, Arndbergmann, Arntuuri, Arrenlex, ArtKun, Arthena, Artichoker, Arunsingh16,
257
Article Sources and Contributors
Arvindn, Asbjornit, Asciimonster, Asenine, Ashishchandradev, Asqueella, Assassin4, Astroview120mm, Athelwulf, Atikronda, Attys, Aude, Auric, Austin Wellbelove, Austin512, Autumn Wind,
Avalyn, Avenged Eightfold, Avenue, Avicennasis, Avish2217, Avono, Avsa, Awewe, Awormus, AxG, Ayavaron, Aydcc, Aydcery00, Aydee, Ayman, Ayucat, Azmisov, BD2412, Babbage,
Baccyak4H, Baddog121390, Badmachine, Bailey7677, BaldPark, Balubino, Baojia, BartłomiejB, BaseballDetective, Bawolff, Baylink, Bbpen, Bdesham, Bdude, Beachy, Bearcat, Bebo2good1,
Beland, Ben Kenobi151, BenBen1234, BenFrantzDale, Benbread, Bender235, Benjamin22b, Benjaminoakes, Benji, Benlisquare, Benstown, Benthal, Bento00, Betatester wiki, Bevo, Big Brother
1984, BigIdiot66, Bigdaddyedward, Bigdumbdinosaur, Biggerbetterfastermore, Biker Biker, Biktora, Bility, Bilky asko, Billyea, Binbagbinbag, Bitdefuser, Blackcats, Blainster, Blanchardb,
Blankfaze, Blarrrgy, Bleedingshoes, BloodIce, BlueMint, Bluefoxicy, Bmecoli, Boarder8925, Bobblehead, Bobblewik, Bobbo, Bobi.1, Boblord, Bobo192, Bodnotbod, Boffy b, Boivie,
Bolshoibooze13, Bombenleger, Bonalaw, Boogster, Bpolhemus, BradBeattie, Brasetvik, BraxtonRiddle, Brent Butler, Brent01, Brian Hatfield, Brianpeiris, Brianski, Brim, Bryan Derksen,
Bsharkey, Btily, Bubba73, BuffaloChip97, Bumcheekcity, Bumm13, Bungle, Bush319, Buster79, Bwalko, Bwrs, Bxn1358, Bylouis, Bzbarsky, C. A. Russell, C.Logan, C0tungvi, CWY2190,
Cabin Tom, Cactusbin, Cafe Nervosa, Callum Ashton 97, Caltas, Cameron Scott, Can't sleep, clown will eat me, CanadianLinuxUser, Canageek, Canderson7, Cap'n Refsmmat, Capricorn42,
Captainrag, CaribDigita, CarlosTn1, Carlosguitar, Carlosp420, Caroig, Cartman0052007, CaseyPenk, Cassini83, Cbrown1023, Ccgrimm, Cdmarcus, CecilWard, Ceplm, CesarB, Ceyockey,
Cflm001, Cfplp, Cgand, Cgs, Cgtdk, Chaojoker, Charitwo, Charlie Da Tuna, Chase me ladies, I'm the Cavalry, Chaser, Chathurank, Chealer, Cheeseman93, Chensiyuan, ChiakiYoshino,
Chip123456, Chmod007, Chochem, Chocolateboy, Choptube, ChrRV, Chrelion, Chris Q, Chris Ssk, Chris53516, Chris83, ChrisDuben, ChrisWar666, Chrisblore, ChristTrekker, Christopher
Lamothe, Christopher.Markus.Garvey, Christopherlin, Chriswaterguy, Chuck Carroll, Chupon, Chuyeow, Ciaran H, Cic, Cinnamon colbert, Ciphergoth, Citem, Civil Engineer III, Cjcamilla,
Ck135667, Ckatz, Ckywht, Classicfilms, ClementSeveillac, Cliff smith, Clindhartsen, Cmdrjameson, Cncxbox, CoJaBo, CobraBK, Cobrag7, Cochonfou, Coconut-Freak, Codename Lisa,
Codenamepenryn, Cognitivelydissonant, Comets189, Commander, CommonsDelinker, Compfreak7, CompuHacker, ConCompS, Conscious, Contactar, ContinueWithCaution, Cookiecaper,
Cookiecow, Coolgamer, Coolhandscot, CoramN, Corporal clegg48, Corti, Cpu111, CrackDragon, CraigRNielsen, Crazy Fox, Crazycomputers, Crazytales, Creidieki, CrisisRed, Crispytd13,
CritterNYC, Crt, CrustyZuniga, Ctachme, Ctbolt, Ctrl-Alt-Dimension, Cupochicken, Curtissthompson, Custa3000, Cwolfsheep, CyberSkull, Cybercobra, Cyde, Cyktsui, Cynical, Cyrius,
Cyslim007, Czarkoff, Czeror, Czj, D-Notice, D6, DMTagatac, DNA300, DOSGuy, Da rulz07, Da-robster07, DaMaster11, DaProx, Daaavid, Dabomb87, Dan100, Dancraggs, Dangrossman,
Danhash, Daniel Hen, Daniel.Cardenas, DanielDPeterson, DanielNuyu, Danny sepley, Danster789, Dario D., Dark-storm-ninja-force, DarkJedi613, Darolu, Darran59, Darth NormaN,
Darthnader37, Darwindecks, Dav-FL-IN-AZ-id, DaveGorman, David Gerard, David H Braun (1964), David Latapie, DavidRF, Davidd, Davidhorman, Davidwr, Davipo, Daytonlowell, Db48x,
Dbabbitt, Dbachmann, Dbenbenn, Dbolton, Dbtfz, Dburghoff, Dclifton, Dcljr, De Katten, DeTru711, Dead Midgets, Dead Wrong, DeadEyeArrow, Deathawk, Deckiller, Decltype, Deeahbz,
Deetdeet, Defenseman Emeritus, Dejvid, Dekisugi, Delirium, DeltaFalcon, DeltaQuad, Deltabeignet, Denniss, Densock, Depottey, DerEikopf, Desplow, Dexmon12, Dgtb1994, Diaa
abdelmoneim, Diaboli, Diamondland, Diberri, Diblidabliduu, Diderot, Didimos, Diego Grez, Diego Moya, Digita, Digital-rockstar, DigitalisAkujin, Dima1, Discospinster, Dispenser, DizzyTech,
Djwhiting99, Dmcpeak2012, Doc aberdeen, DocWatson42, Doctor Foci Whom, Doctoradel, Doctorevil64, Doctormrhi, Domthedude001, Donatj, Doopokko, Doors5678, Doshindude,
Dotancohen, Double.reed, Doug52392, Dougjih, Dougweller, Doulos Christos, Download, Dr. F.C. Turner, DrMiller, DraQue Star, Dragonskin29, Dreamafter, Drogo Knotwise, Drongo,
Duncan3dc, Dustinto, Dwheeler, Dycedarg, DylanGaspick, Dysprosia, E-Magination, EEMIV, Earl CG, Eb.eric, Eballnik, Ecerutti, Echawkes, Eckstasy, Ecksteing, Ed g2s, Editor99999,
Edjackiel, Edlin2, Edward, Edward Z. Yang, Edward301, Edwards, Eequor, Ehsan Akhgari, Eje211, Ejosse1, Ekerazha, El Slameron, El T, El salvador, El0i, Elandy2009, Electricdisk,
Electricmoose, Electricnet, ElementFire, Eleven even, Elfguy, EliasAlucard, Ellmist, Elmindreda, Eloquence, Elvey, Emarsee, Emil Kastberg, Emmette Hernandez Coleman, Emperornutz,
Emurphy42, Emx, Enceladus, Ender8282, Endlessdan, Energybender, EngineerFromVega, Enigmasoldier, Enkrates, Enochlau, Enozkan, Enquire, Enterbestplotrooms, Enum, Eobanb, Epbr123,
Epeefleche, Ephilei, Episdn, Episodeiv, Epmatsw, Equendil, Eraserhead1, Ercferret18, Ercrt, Erdal Ronahi, Es uomikim, Esanchez7587, Escape Orbit, Espoo, Estel, Eurocave, EvanSeeds,
Evercat, Evice, Evil Monkey, EvilReborn, Evilgohan2, EvocativeIntrigue, Execvator, Exert, Exigentsky, Exteray, Eyesbomb, Ezbqzjwsd, F6F Freak, FF2010, Fadookie, Faisal.akeel, Faith healer,
Falcon8765, Falcon9x5, Fama Clamosa, Fantacular, Farry, FatalError, Favonian, Feedmecereal, Felisbino, Felixdakat, Ferix, Fernjerkle, Ferrari2345, Feydey, Fictional tool, Fidoda,
Fieldday-sunday, Figure, Fireaxe888, Fireball, Fish and karate, Fiskars007, Fito, Fjarlq, Flamdod, Flaming, Flamingspinach, Flarn2006, FlashCreations13, FlipmodePlaya, Flockmeal, Florentino
floro, FlowerOS, Fluteflute, Flyguy33, FlyingIsFun1217, FlyingPenguins, FlyingToaster, Fmkalf, Foolswisdom, Fortdj33, Foxsan48, Fragglet, Frak, Fran Rogers, Francis Ocoma, Frandsen,
Frankenpuppy, Frankyboy5, Franz-kafka, Frap, Frecklefoot, Fred Bradstadt, Fred Gandt, Fred J, Fredrik, Free Software Knight, Freedomlinux, Freestyle10evan, FrenchIsAwesome, Freyr,
Fritzophrenic, Frodet, Frood, Froth, Fruit.Smoothie, Fryn, Fsf02, Fsotrain09, Fubar Obfusco, Fuhghettaboutit, FunnyMan3595, Furrykef, Fuzzy Logic, Fvasconcellos, G.rudi, GHe, GOD
ACRONYM, GPHemsley, GRAHAMUK, GT5162, GTBacchus, GabbielSan, Gadget850, Gaius Cornelius, Galwhaa, Gamebouille, Gamingmaster21, Gang65, Ganon391, Gapple, Garas,
Garath531, Gareth Aus, Gargaj, Gary King, Gary Kirk, Gazab1, Gbog, Gdo01, Gelo71, Gen. von Klinkerhoffen, Genuinefafa, Geopgeop, GerardM, Gerbrant, Getgooglechrome, Giftlite, Giggy,
Gigitrix, GlassCobra, Glen, Glenn, Gnuwho, Goblin, Gobonobo, GoddersUK, Goel madhur, Goffrie, Gogo Dodo, Gogopenguin2, GoingBatty, GoldRenet, Gona.eu, Goodone121, Goodvac,
Google9999, Goosnarrggh, Gordo aragorn, Gowtham vmj, Gracefool, Gracenotes, GraemeL, Graham87, Grandmasterfc, Grandscribe, Grant74745, Grauw, Gravestone8, Grayshi, Green Tentacle,
Greenwavepi, GregNorc, Gregb, GregorB, Grick, Griffind, Gronky, Grungen, Gtech007, Guanaco, Gudeldar, Guest9999, Guitardemon666, Gunny01, Gurch, Gustavb, Gustavohw, Gutworth,
Guyjohnston, Gwernol, Gwoodbox, Gyrobo, Gz33, Gzornenplatz, H2g2bob, H3h, H4xx0r, HECTOR MONTSE, Hadi26, Hagoleshet, Haha169, Haham hanuka, Haipa Doragon, Hairchrm, Halo,
Halofan.3, Hamitr, Hanif248, Hansschmucker, Hao2lian, Happy5214, HappyCamper, Happysailor, Hapsiainen, Harambee, Harizotoh9, Harryboyles, Haseo9999, Hawaiian717, Hawky,
Hbdragon88, Hedgepigdaniel, Heinrich krebs, Helixblue, Hellcat fighter, Hello2112, Helpsloose, Henry Flower, Henry W. Schmitt, Herald Alberich, Herochild, Heroman1234, Hervegirod,
HexaChord, Hfguide, Hidro, Highergroundcreative, HighlyEvolved, Hildanknight, Himanis Das, Hintss, Hirak 99, Histirisis, Hitler233, Hitman012, Hlm Z., Hn, Hockeyfan94, Hockeystudly13,
Hoestmelankoli, Holothurion, Homo logos, Hoobastank234, Hoovernj, Horakch, HoserHead, Hoshie, HotWheels53, Hpfreak26, Hroðulf, Hsivonen, Hstarrunner621, Hu12, Hugnits, Hurmsf,
Husky, Husond, Hvn0413, Hylepo, Hylian92, HyperDrive, Hyperkraz, Hyperthermia, I Love Pi, I already forgot, I need a name, I.am.lost, I5bala, IAMTHEEGGMAN,
IAMTHEPEOPLESCHAMP, ILOVELOL32, IMSoP, Ia1998, Iamthebob, Ian Dunster, Ian Maxwell, Ian Moody, Ian13, Icairns, Icequeen89, IcycleMort, Ilhanli, Illegal Operation, Illythr,
Iluvgames, Ilya, Ilyanep, Imdabs, Immunity, Improv, InTeGeR13, Inasmada, Incarus, Indon, Infuriated-Z, Instantnood, InterwebUsr, InverseHypercube, Iofur Raknison, Irdepesca572, IrfanFaiz,
Iridescent, Iris lorain, Ironiridis, Isaac, Isilanes, Island Monkey, It Is Me Here, Italian Stallion47, Iuhkjhk87y678, Ivan, Ixfd64, Izaic3, Izanbardprince, Izbitzer, J, J Di, J JMesserly, J.delanoy,
J36miles, JCSantos, JDG, JForget, JHP, JJ Harrison, JLaTondre, JSpung, JYOuyang, Jaardon, Jacj, Jack Merridew, Jackdyson, Jackiiieee, Jacoplane, Jaecart1983, JaggedImage, Jakob Suckale,
James Foster, JamesMLane, JamesTeterenko, Jamesryanjcrjcr, Jammerpunk1089, Jangli, Jared Preston, Jatinag22, Javiercmh, Jay-Sebastos, JayC, Jayabharat, Jaycee55, JayhawkBrandon,
Jc86035, Jcarroll, Jclemens, Jdmx, Jeff G., Jeff schiller, Jeff02, Jeff3000, Jeffrey O. Gustafson, Jeltz, Jemappelleungarcon, Jengod, Jennavecia, Jennica, Jensgram, Jerebin, Jeremy Visser,
JeremyBicha, JeremyWJ, Jeremyb, Jerome Charles Potts, Jerryobject, Jesant13, Jesdisciple, Jesse Ruderman, JesseW, JetBlast, Jeysaba, Jez, Jezmck, Jfiling, Jhartmann, Jheald, Jhf, Jiang,
Jigs41793, Jj137, Jjj1987, Jjmontalbo, Jlocalled, Jm34harvey, Jm51, Jmcollier, Jmlk17, JoanneB, Joe Jarvis, Joe Schmedley, JoeBaldwin, JoeGermuska, JoeSmack, Joeblakesley, Joejava,
Joejoejo, Jogloran, John Nevard, John Reaves, John Vandenberg, JohnManuel, JohnOwens, JohnPrelate, Johndoe85839, Johndrinkwater, Johnfn, Johnleemk, Johntex, Jolly man, Jon513,
Jonathan.s.kt, Jonathunder, Jonik, Jonnyt, Jorcoga, Joseei.JM, Joseph Fleisher, Josephgrossberg, Josh Tumath, Josh the Nerd, Joshse28, Joshu2010, JoshuaKuo, Josiah Rowe, Jovianeye, Jpag87a,
Jprw, JrBr, Jredmond, Jrooksjr, Jruderman, Jsismetal, Jsteph, Jtalledo, Jtmichcock, JuWiki2, JuanC08, Juanzo, Jugander, Juhachi, Julesd, Julyo, Jumbuck, JuneGloom07, Junie dilitori, Junkcops,
JustWong, Justin W Smith, Justynb, Jw12321, Jwestbrook, Jwharmsby, Jwoodger, Jylenholm, Jørgen88, K1Bond007, KDesk, KFP, KLLvr283, KSweeley, KTC, Kafeithekeaton, Kai445,
Kallepersson, Kalmia, KamasamaK, KamuiShirou, Kankachi1980Kan, Kaobear, Kappin, Karan.dania, Karasuhebi, Kariteh, Karl Dickman, Karnesky, Katalaveno, Kathleen.wright5, KaySL,
Kaycubs, Kazvorpal, Kbrosnan, KeelNar, KelleyCook, Kelson Vibber, Kelvinsong, KenshinJr92, Kent Wang, Kermmerich, KerryMuso, Kev19, Kevin B12, Kevin Murray, KevinGarnerNC,
Kevmitch, Kgperry16, Khalid hassani, Khatores, Khchanel, Khindjal, Khlo, Kichik, Kiddu83, Kilz, King Curtis Gooden, King of Hearts (old account 1), King of Hearts (old account 2),
KingNerd, KingpinE7, Kinu, Kinzera, Kirkburn, Kirun, Kittybrewster, Kiwi128, Kizor, Kjinho213, Kjoonlee, Kjrreid, Kks krishna, Kl4m-AWB, Klarre, Klaser, Klenje, Klparrot, Kmaster,
Kmg90, KnowledgeOfSelf, Knzr, Koavf, Koblizek, Kocio, Kodster, Koman90, Kongen, Koopa93, Kozuch, KrakatoaKatie, KramarDanIkabu, Krawunsel, Ks0stm, Ksbriian, Kspiteri, Ktdreyer,
KuduIO, Kukini, Kungfuadam, Kungfujoe, Kungming2, Kuru, Kwekubo, Kwertii, KyleIDR, Kynereth, Kz26, Kzhr, L daruwala, L-Bit, L33tminion, LGagnon, LIJI32, La Pianista, La goutte de
pluie, Lantay77, Lateralus1587, Laurenceveale, Laurinmail, Lawpjc, Lawrencekhoo, Lazulilasher, Leafsfan67, Leahcim nai, Lee Pavelich, Lee Vonce, LeedsKing, Leinvisiblegarcon, Lena322,
Lenilucho, Lent1999, Leomyhero, Leonidas23, Leothar, Lester, Leszek Jańczuk, Lethargy, Lethe, Leujohn, Leuqarte, LiNan, Libcub, Lifefeed, Liftarn, Ligulem, Lilac Soul, Limulus,
Lindsays4568, Linfocito B, LinkTiger, LinuxDude, Linuxbeak, Linuxerist, Lippy13, Little Professor, LittleDan, LittleOldMe, Littleghostboo, Ljb999, Ljlego, Lkt1126, Lmatt, LobStoR,
Localzuk, Logan, Logical Cowboy, Lokpest, Loltowne, Lolzwhat, Lonaowna, LondonBVE, LondonBVE2, Looler, LordBleen, LordSarnoc, Loren.wilton, Lotje, LouCypher, Louis Waweru,
LouisWins, Lovepollution, Lowtops015, Ltbyers, Lucas Malor, Lucasita, LuciferMorgan, Luckrider7, Lucky13pjn, Lugia2453, Luigi30, Luisfege, Luizcarlos jr, Luk, Lukateake, Lumpy, Luna
Santin, Lupin, Lupinoid, Lushhhhhhhh, Lxowle, Lyml, M Nabil, M gol, M.Kris, M1ss1ontomars2k4, M3tal H3ad, MBK004, MBlume, MCBastos, ME86, MER-C, MFK, MIT Trekkie,
MMuzammils, Mabdul, Mac Davis, MacManX, Macaldo, Macho, Madcow 93, Magioladitis, Magister Mathematicae, MagneticFlux, Mahaexp, Mahanga, Maharris777, Mahmudmasri, Maian,
Makelelecba, Malhonen, Malkinann, Mamaferk, Man in Crowd, Man with one red shoe, Mangix, ManicParroT, Manning444, Manojkash, Manyleviel, MarSch, Marc-André Aßbrock,
MarcoAurelio, MarcoosPL, Marcus Qwertyus, Mardeg, Mardus, MarekMahut, Mark Yen, Mark85296341, MarkKB, MarkPilgrim, Marko75, Marno Rossouw, Marskell, Martani, Martarius,
Martin3141, Martinultima, Marudubshinki, Maser Fletcher, Mason45, Massic80, MastCell, Master Thief Garrett, MasterEagle, MasterOfHisOwnDomain, MasterOfTheXP, Materialscientist,
MathiasRav, Mathkidus, Matrixtom, Matt Britt, Matt Crypto, Matt Wood, Matt489, Mattbrundage, Matthew Woodcraft, Matthewmiller1234, Max Schwarz, Maxamegalon2000, Maxl,
Mboverload, McGeddon, McSly, Mdrine, Me at work, Medanat, Mediaright, Medvedev, Meetkaushal, Melancholie, Melnakeeb, Melsaran, Meno25, Mercy, Mernen, Messiisking, Mets501,
Metus m, Mgmei, Mgoodyear, Miblo, Michael Marineau, MichaelIvan, Michaelas10, Michaeldsuarez, Michaelkourlas, Midnightblaze, Midnighttonight, Mifter, Mihai, Mijobe, Mike J B, Mike
Payne, Mike Peel, Mike Rosoft, Mike Schwartz, Mike0769, Mike92591, MikeCapone, MikeLynch, Mikebrand, Mikehoffman, Milebrega, Millermk, Milnivri, Mimithebrain, Mindmatrix,
Minesweeper, Minghong, MiniEntente, Mintchocicecream, Mipadi, Mirgolth, Mirv, MistaXFrye, Mistress Selina Kyle, Mithridates, Miyagawa, Mjb, Mjolnir1984, Mjpieters, Mktsay123,
Mltinus, Mmj, Mmmready, Mmoll21m, Mms, Mo ainm, Mo0, Modest Genius, Mogism, Monaarora84, Monkeyman, Mononoke, MonstrousBone, Mooquackwooftweetmeow, Moreau36, Moriori,
Mormat, Moronicles, Morriswa, Mortense, Mortenwilhelm, Mountainfire, Mr MaRo, Mr. Brownstone, Mr. Lefty, Mr.Z-man, MrCalifornia, MrMoonshine, MrSomeone, MrWeeble, Mrseb,
Mrwojo, Ms2ger, Msikma, Mtctonyhkhk2010, Mtijn, Mtrolley, Mugunth Kumar, Mumia-w-18, Mushroom, Mvent2, Mwn3d, Mwtoews, Mxn, Mysekurity, Mysid, Mårten Berglund, N i grunze,
N.MacInnes, N0iz77, NAHID, NYKevin, Nabbia, Naconner, Naive cynic, Nakon, Nat82, Natalie Erin, Nathanrdotcom, Naurmacil, Navy Blue, NawlinWiki, Nclm, Ndyguy, NeF, Nectarflowed,
Negipedia, Neillithan, Neji56565onyoutube, Neo Deus ex machina, NeoVampTrunks, NeonMerlin, Neophyrigian, Nep, NerdyScienceDude, NetRolller 3D, Neutrality, Newmanbe, Newton2,
Niceguyedc, Nichalp, Nicholasink, Nickbakkegaard, Nickkinzer, Nicolas Love, Nicolas Perrault III, Nikai, Nikpapag, Nima1024, Nino JoJ, Nishkid64, Nitink garg, NittyG, Njuuton, Nl74,
Nlapierre, Nnemo, No Guru, Noian, Nokkosukko, Noldoaran, Noliver, Nonagonal Spider, Nonpareility, Nookls, Nooodles, Norm, Northgrove, Notalent, Notbyworks, Notthe9, Notwist,
Nowayjose 2007, NrDg, Nrbelex, Nsaa, Nssbm117, Ntsimp, NuclearWarfare, Nurg, Nux, Nyenyec, O, OSUKid7, OSX, OTSER, Oberiko, Obiwankenobi, Objectivesea, Octahedron80,
Octopus-Hands, Oddbodz, Odie5533, Offensiveandconfusing, Officer781, OhanaUnited, Ohconfucius, Old Marcus, Olleolleolle, Olrick, Omega21, Omegatron, Omphaloscope, Onco p53,
258
Article Sources and Contributors
Ondra.pelech, Onepoint618, Oni Ookami Alfador, Ontoraul, Oosh, Operating, Opt 05, Orbeaversfan14, Oreo masta, OriginalGamer, Ortizpiero, Oscarthecat, Oska, Oskilian, Ottermaton,
Otvaltak, Owen, OwenX, Owl order, Oxinabox, Ozzmosis, P. S. F. Freitas, PCJockey, PRRfan, PS2pcGAMER, PSimeon, PSzalapski, Pablomartinez, Pacificgilly1992, Pagrashtak, Pako,
Palacesblowlittle, Panarchy, Paper Luigi, Parabplus, Parlanced, Pastore Italy, Patcat88, Patman21, Pats1, Paul August, Paul Stansifer, Paul1337, Pavilion alex, Paxik, Pbryan, Pcuser42, PeaceNT,
Peaceduck, Pearle, Pedant17, Peng, PenguinTutor, Penjr, Penmachine, Penubag, Perardi, Perfecto, Perl, Persian knight shiraz, Peter Karlsen, Pgk, Pharaoh of the Wizards, Phenry, Phgao, Philcha,
Philip Trueman, Phnx2ashes, Phocks, Phoenix Hacker, Phoenix-forgotten, Photoguy439, Physicistjedi, Pidgeot, Pie Man 360, Pigsonthewing, Piguy, Pikestaff, Pile0nades, Pilotguy, Pince Nez,
Pinnerup, Piotrr, Plasticup, Platinum Lucario, Platonides, Playwrite, PleaseInsertGirder, Plugwash, Plutor, Pmlineditor, Pmsyyz, Pne, Podex, Poiuyt Man, Pol098, Poochy, Pooftaa,
Poooooooooooooooooop, PopUpPirate, Potatojunkie, Pradameinhoff, Prattmic, Praveenp, Praveentech, Pringo, Prius 2, ProhibitOnions, Prolog, Proxima Centauri, Psau, Psbsub, PseudoNym,
PseudoOne, Pslide, Psycho Kirby, Psz, Ptomes, Purple Paint, Pwjb, Pxma, Pyrospirit, Quazar987, QueenCake, Quest for Truth, Qviri, R00lz, R3m0t, RG4ever, RP9, RadRafe, RadicalBender,
Radon210, Raekwon, Raffaele Megabyte, Raghavkalra, RainbowOfLight, Rajkiran g, Ral315, Ramu50, Ran4, Random832, Randy Johnston, Rankun, Raoul-Duke, Raraoul, RattleMan, Rau J,
Raul654, Ravedave, RaviC, RayBirks, Raymond Hill, Raysonho, Rbarreira, Rbk, Rbrwr, Rcandelori, Rdmsoft, Rebroad, Redeeman, ReedLoden, Reffahs, Rehevkor, RehmT, Reisio, RekishiEJ,
Remember the dot, Remixz, Repku, Reptilian, ReshenKusaga, Restre419, Retodon8, Rettetast, Reub2000, RexNL, Rexmorgan, ReyBrujo, Rf.89, Rfc1394, Rfl, Rhobite, Rhyswynne, Rhyzzz,
Rich Farmbrough, Richardcavell, Rick Block, Rickyrab, RiddledEpitome, Rijans007, Rinaku, Rjwilmsi, RkOrton, Robbie7up, Robert H, Robert K S, RobertG, Robin Chen, Robin Mathew Rajan,
Robzz, Rocastelo, Rockysmile11, Rodran, Rodrigue, Roger6106, Roketjack, Rollins83, Romeu, Romney yw, Ronhjones, Ronincyberpunk, Rory096, Rose Garden, RoseParks, RossPatterson,
Rotring, Rowan Moore, Rprpr, Rpvt, Rrburke, Rsaxvc, Rsgranne, Rugby471, Rugops, Ruij999, Rumping, Runetrek, Runiteshark, Rurik, RushdimIDlike, Rushyo, Rwalker, Rwxrwxrwx, Ryan,
RyanEberhart, RyanGerbil10, RyanJones, Ryanquek95, Rybec, Ryulong, S9909483d, SDC, SF007, SFC9394, SJP, SMC, SPUI, ST47, Sade, Sagarsavla, Saibo, Sakuramatsuri, SallyForth123,
Sam Burke, Sam Hocevar, Sam Korn, Samboy, Sammy9990, Sampi, Samrolken, Samuella, Samuelsidler, SandyGeorgia, Santiago22, Saoshyant, SapientiaSativa, Sarah, SarekOfVulcan,
Sasquatch, Saturnine42, Sbluen, Scepia, Sceptre, Schapel, SchfiftyThree, Schissel, SchuminWeb, SciFi-er, Scientus, Scollk, Scott McNay, Sdfisher, Seaphoto, Sebmatau, Seifip, Seinman, Selket,
SeriousScholarship, Sesse, SeventhBase, Sfan00 IMG, Sfm 7, Shanes, Shark96z, Shastrix, Shay Guy, Shen, Shenme, Sherenk, Sheridan, Shinglor, Shinkolobwe, Shirishag75, Shirudo, Shizane,
Shlomi Hillel, Shnatsel, Shne, Shp0ng1e, Shreevatsa, Shuipzv3, Sigma 7, SigurdMagnusson, Sikon, Silas S. Brown, Silvergoat, Simetrical, Simongoldring, Sinistrum, Sionus, Sir Nicholas de
Mimsy-Porpington, Sir Paul, Sire22, Siv0r, Skalman, Skater 2015, Skeejay, SkerHawx, Skierpage, Skizzik, Skomorokh, Skorpionek, Skppy1225, SkyWalker, Skybon, Skyezx, Skyfaller,
Skysmith, Slakr, Slashme, Slgrandson, Sljaxon, Sloman, Sloppyjoes7, SlovakSoft, SmUX, Smachet, Smjg, Smokizzy, Sn0wflake, Snailwalker, Snesfm, Snipershot325, Snkcube, SoM, Some
Person, SomeKid, Sonicdrewdriver, Sonicology, Sonicsuns, Sonjaaa, Sonu27, Soobrickay, Soopersonic25, Sophus Bie, Sosaited, Soshial, Sp80, SpaceFlight89, Spaceman85,
Sparks2010andbeyond, Sparky the Seventh Chaos, Spartan-James, Spe88, SpeedyGonsales, Speer320, Spiffyxd, Spinboy, Spinoff, Spliffy, SpongeBrain, Spoon!, Spring12, SpuriousQ, Squash,
SqueakBox, Ssjgoku75x, Sswonk, St0rm, Stan Shebs, Starwiz, StaticGull, Stealth500, StealthFX9, Steel, Stefan2, Stellis, Stephen Poppitt, Stephenb, Stephenchou0722, Stevage, Steve03Mills,
Steve2011, SteveSims, Stevelam01, Steven1350, Stevenrasnick, Stevereg, Stevertigo, Stevesim89, Stevietheman, Stewacide, Sthoby, Stifle, Still raining here, Strait, Strom, Strongnc21, Styx630,
Substantiate, Sukigu, Sun Creator, Sunnyok, Super-Magician, SuperCoolAl, Superintendent Harry Organs, Superiority, Superjake2004, Superm401, Supersaiyan474, Surfingslovak, Surikatta,
Suruena, Susikala, Susurrus, Svetovid, Swivelgames, Sxcmcsxcual, Synthetik, Sysrpl, Szajci, Szzuk, T. Moitie, TFTD, THEN WHO WAS PHONE?, TPIRFanSteve, TRAiNER4, TRFA, Ta bu
shi da yu, Tacke, Taestell, Tagishsimon, Talltim123, Tamfang, Tangotango, Tannin, Tariqabjotu, Tarquin, TarzanASG, Tasc, Tashivana, Tawker, Taxman, Tbhotch, Team awesomeness,
Techman224, Techreader44, Ted87, Tedickey, Tedmund, Teewikit, Tehori, Tejas81, TenPoundHammer, Tene, TeoWS, Tergadare, Terryheath, Texture, Tgeorgescu, Tghe-retford, Thadk, That
Guy, From That Show!, Thatman112, The Anome, The Giant Puffin, The Inedible Bulk, The MP, The Oriffice, The Rogue Penguin, The Thing That Should Not Be, The Ultimate Koopa, The
Wurdalak, The undertow, The-G-Unit-Boss, The-Watermammal, TheGreenEditor, TheJJJunk, TheJosher, TheNewPhobia, ThePlaz, TheTallOne, TheTechFan, Thebogusman, Theekaoschild,
Thefrood, Thegrue, Theguyotc, Thelennonorth, Themcman1, Themindset, Themothpit, Theo148, Theonethird, Theprizefight, Theshibboleth, TheySure, Thinboy00P, Thinkdifferent33, Thinkpad,
ThomasK, Thonil, Thorenn, Thornstrom, Thorpe, Those words, Thue, Thumperward, Tiago Morbus Sá, Tide rolls, [email protected], Tigeryoshi, Tillwe, Tim Schulz, Tim4rd,
Timharwoodx, Timlee90, Timwi, Tinlv7, Titodutta, Titoxd, Tkmasta, Tobias Conradi, TobyDZ, Tobz1000, Tochicool, Toehead2001, Tokek, Tom Edwards, Tom Morris, Tomandlu, Tomasboij,
Tomchen1989, Tomer, Tommyjb, Topperfalkon, Tortel, Tosayit, Tothwolf, Tpbradbury, Tratanga, TrbleClef, TreasuryTag, TrekMaster, TrekkieTechie, Trevj, Trewyy, Triforce of Power,
Trilobite, Trisweb, Troyoda1990, True Tech Talk Time, Trueblue9999, Trusader, Tskuzzy, Tsunaminoai, Tuanese, Tulkas, Tuoppi gm, TurboForce, Tverbeek, Twipley, Twsl, Twsx, Txuspe,
Typhoonhurricane, U5K0, UBeR, Ubernostrum, Uepselon, Ugen64, Ultimogamer, Ultraexactzz, Ultras GE, Uncle G, Undisableable, Unforgettableid, Unimaginative Username, Universalcosmos,
Unixguy, Unixman83, Unknown W. Brackets, Untraceable2U, Uriber, Uris, Useight, Ute in DC, Uusitunnus, VJ Emsi, VPeric, Vanished 1850, Vanished user 5zariu3jisj0j4irj, Vanished user
9i39j3, Vanished user lkdfj39u3mfk4, Vanished895703, Vanka5, Varco, Vchimpanzee, VectorField, Veemonkamiya, Vegaswikian, Veinor, Veky, Versageek, Versus22, Vespristiano, Vi3vi3vi3,
Victor, Videogameplayer, VietAzn Duong, Vikreykja, Vinh1000, ViperSnake151, Vipsta, Virgofenix, Viridae, Visor, Voidxor, Voomoo, Vorondil, Vyse, WJetChao, WPjcm, WTF I just want to
create an account, Wackymacs, WacoJacko, Waisybabu, Waldo, Walter Görlitz, WalterGR, Wangxuan8331800, Warren, Watson, WaveRider, Wavelength, Wayward, We're mates, Webistrator,
Weeliljimmy, Wereon, WhatisFeelings?, Where, WhereAmI, WhisperToMe, White.matthew.09, Who, WhyBeNormal, Wickorama, Widefox, Wiikipedian, Wiki alf, Wiki13, WikiFlier,
WikiLeon, Wikiacc, Wikidrone, WikipedianMarlith, Wikipedical, Wikisux, Wikiuser0123, Will2k, Willlangford, Wilson Tam, Wimt, WindowsFan, Winjay, Winterwk, Winxptwker,
Wissenschaft, Wizardus13, Woddfellow2, Woodsstock, Woohookitty, Wootery, Worriedbeef, Wpuser0, Writtenonsand, Wrldwzrd89, WulfTheSaxon, Wwoods, Wwwwolf, Wyllium,
Wysprgr2005, Wyverald, Wyvernoid, X-Fi6, Xanthar, Xavier86, Xenan, Xeroxxx, Xiaq, Xiner, Xkoalax, Xompanthy, Xorx77, Xp54321, Xpaul0, Xvn, Xxhopingtearsxx, Xxsonyboy4lfexx,
Xyzu, Yahadreas, Yahoolian, Yamakiri, Yarnalgo, Yasht101, Yellowdesk, YesIAmAnIdiot, Yintan, YixinXan, Ymal31, Yo56, Yomama10124, Youremyjuliet, Ysangkok, Yulu, Yunshui, Yworo,
Z897623, ZStoler, Zacce, Zach Vega, Zach1852, ZakTek, Zaka1980, Zaltaire, Zamadatix, Zanimum, Zantastik, Zaphraud, Zarboki, Zarcadia, Zayani, ZeWrestler, Zealotgi, Zenohockey, Zepppep,
Zer0431, ZeroUm, ZimZalaBim, Zondor, Zr2d2, Zr40, Ztobor, Zundark, Zvn, Zweinstein, Zyqwux, ^demon, Ævar Arnfjörð Bjarmason, Δ, Милан Јелисавчић, Саша Стефановић, ‫ טוב‬,‫נו‬, と
あ る 白 い 猫, 3594 anonymous edits
Internet Explorer Source: http://en.wikipedia.org/w/index.php?oldid=544580030 Contributors: %man of%s, -Majestic-, 0612, 16@r, 195.186.148.xxx, 1998 sum mld, 1archie99, 1wolfblake,
A Raider Like Indiana, A Softer Answer, A hilton, A. Exeunt, A3RO, A3e6u9, AJenbo, AMK1211, ARC Gritt, AaThinker, Aanhorn, AbigailAbernathy, Abours, Abqwildcat, Acalamari, Ace of
Spades, Achim426, Acooley, Acornwithwings, Addression, Adolphus79, Aeæ, Agent Smith teh Uber Pr0, AgentPeppermint, Aghochikyan, Ahoerstemeier, Ahunt, Ais523, Akadruid, Akamad,
Akhristov, AlReece45, AladdinSE, Alan Millar, Alansohn, Alasdair, Alaz, Albany NY, Aleksengland, Alerante, Alex 0888, Alexey Izbyshev, Alexf, Algont, Aliendude5300, AlistairMcMillan,
Alphadesigner, Alsandro, Althepal, Alx 91, Am088, Amicon, AmosWolfe, Amosfolarin, Amux, AnOddName, Anarchopedia, Anas Salloum, Andres, Andrevan, Andrewdunkcool,
Andrewmc123, Andrzej P. Wozniak, Andy tek, Andyjsmith, Anetode, Angeldeb82, AniMate, Animum, Anog, Anonymax, Anonymous Dissident, Anphanax, Ans, Ansett, Antandrus, Antti29,
Anárion, Aoi, Aperson1234567, Aphswarrior, Apparition11, April Arcus, Aquapod11, Arbor to SJ, Arcade, Arcaynn, Ardonik, Arichnad, Ariesk47, Armour Hotdog, Aronmalkine, Arrenlex,
Arthas2007, Arthena, Artichoker, Artorius, Asenine, Asiaworldcity, Astrophizz, Astroview120mm, Atividia, Atomice, Auciker, Audriusa, Auroranorth, Austin W80, Aveilleux, AxelBoldt,
Axistive, Axl, B137, BWCNY, Badboycjr, Bahman15, Barts1a, Beachy, Bebo2good1, Beetstra, Beland, Ben Ben, Ben James Ben, Bender235, Benesch, Bevo, Bez slov, Bgibbs2, Bhowden,
Binbagbinbag, Blankfaze, Blehfu, Blowdart, BlueMint, Blufive, Bmicomp, Bo98, Bob A, Bob bobato, Bobblehead, Bobblewik, Bobo192, Bodnotbod, Bogudus, Bonadea, Bongwarrior,
Bookofjude, Borris83, Brent01, Brettadamsga, Brian Kendig, Brian Mitchell, Brianreading, Brion VIBBER, Brusquely, Btx40, Bubba73, Bulldog73, Bunnyhop11, Bush319, Busted.hg, C.Fred,
CWenger, CWii, Calasanmarko, CambridgeBayWeather, Cameron Scott, Camw, Can't sleep, clown will eat me, Canderson7, CanisRufus, Cantus, CaptainStack, Carbonite, Carioca, Caspian,
Cclloyd9785, Ceas webmaster, Cedars, Centenarian, CesarB, Cgkimpson, Chameleon, Charizzardd, CharlesC, CharlotteWebb, Charraze, Chase me ladies, I'm the Cavalry, Chealer,
Chemicalrubber, Chilkoot, Chmod007, Chosesmrt, Chris the speller, Chris83, Chrisjj3, Chrislk02, ChristTrekker, Christian List, Chulk90, Ciao 90, Cityscape4, Cjcamilla, Classicfilms, Clovis
Sangrail, Clyde Miller, Cmdrjameson, Cntras, Coconut-Freak, Coding for Christ, Coles0987, Colin Douglas Howell, Colinstu, Commander Keane, CommonsDelinker, Computer12345,
Conquerist, ConstantlyDrunkRussian, Conversion script, Cookiecaper, Coolgamer, Copana2002, Corporal clegg48, Cplot, CptCutLess, Cpuwhiz11, Crashie, Cronholm144, Csabo, Css, Cst17,
Curps, Cwolfsheep, CyberSkull, Cybercat, Cynical, Cynicism addict, Cyp, Czarkoff, DARTH SIDIOUS 2, DBigXray, DOSGuy, DStoykov, DVD R W, Dadesishyt, Daesotho, Damian Yerrick,
Dan100, Danger, Daniel Olsen, Daniel Pritchard, Daniel.Cardenas, Daniel15, DanielPharos, Danielklein, Darbao, DarkFalls, Daverocks, David Hochron, DavidCiani, Dbo789, Dcandeto,
DeVerm, DeadEyeArrow, DeathSeeker, Deathawk, Deeahbz, Deltabeignet, Den fjättrade ankan, Denisarona, Devrit, Dflock, Diaa abdelmoneim, Diagonalfish, Diberri, Diego Grez, Digita,
Dimo414, Ding1500, Dionyziz, Divod, Divokz, Djones96, Dkasak, DocWatson42, Dodoïste, Domdadomin8r, DoubleBlue, Douglas Ryan VanBenthuysen, Dowloadop, Dpv, Dragpyre,
Dreadstar, Dricherby, DropDeadGorgias, Dsav, Duncharris, Dwheeler, Dylan Lake, Dysprosia, ESkog, EVula, Eamelink, Eball, Ed g2s, EdGl, EddEdmondson, Edgarde, Editor1763, Edjackiel,
Edward, Ehfeng, El T, El jabon317, Elian, EliasAlucard, ElliotThomas, Ellmist, Elm-39, Eloquence, Eloy, Emmetmclaughlin, Emmette Hernandez Coleman, Endpoint, Enquire, Epbr123, Erdal
Ronahi, Ericd10, Errorlines, Errorx666, Esanchez7587, Escape Orbit, Esebi95, Espoo, EvanProdromou, Everyking, Evice, Evil Monkey, Evil saltine, Evolve75, EwokiWiki, Excirial, Exeunt,
ExtraDry, FF2010, Fan-1967, FatalError, Fennec, Fiach6383, Filzstift, Fireball, Fireframe, Firstpeak, Fischer.sebastian, FlamingFoo, Flarn2006, FlashFanatic, Flcelloguy, FleetCommand,
Fleetham, Flewis, Floquenbeam, Foodmonster6980, Formicula, Forteblast, Foxj, Foxonline, Fpbecker, Fran Rogers, Fran z, Frankey333, Frecklefoot, Fred Bradstadt, Fred Gandt, Fredrick day,
FreeRangeFrog, FreezeWarp, FreplySpang, Freyr, Frungi, FstrthnU, Fubar Obfusco, Fumon, Furrykef, Fusionmix, Futurix, Fæ, GTAjaxoxo, GVOLTT, GabrielF, Gadfium, Gail, Gaius Cornelius,
Galzigler, Gareth Owen, Garrepi, Gary Kirk, Gazimoff, Gazpacho, Gecko, Genius101, GentlemanGhost, Geopappal, George-sm11, Gerbrant, Getcrunk, Ghettoblaster, Givemeahammer, Glane23,
GlenPeterson, Globbet, Gnarip, GoddersUK, Godlydesires, Gogo Dodo, GoingBatty, Gona.eu, Goodnightmush, Google9999, Graham87, Gravestone8, Green caterpillar, Greg10101,
GreyWyvern, Groggy Dice, Gronky, Groundsy, Gsarwa, Gudeldar, Gunnar Guðvarðarson, Guppy, Gurch, Guyjohnston, Gyrobo, Haakon, Hadal, HaeB, Hajenso, Hamster2.0, Hankwang,
Hankyinmypocket, Happysailor, HarryAlffa, Hdt83, Helixblue, Helpsloose, Henry W. Schmitt, Herostratus, Hervegirod, Hew, Hextreme, Heycam, Hezzy, Hhielscher, Hiddekel, Highwind,
Higuys159, Hildanknight, Hintha, Hintss, Hirzel, Hjkfrgfv, Hmains, Hmrox, Honette, Horse0709, Hoshie, Howcheng, Htaccess, Huji, Humphreyyue, Husky, Hut 8.5, Hvn0413, Hydrogen Iodide,
Hyfzyz, Hymek, I need a name, IE, IECollection, IMSoP, Ian Dunster, Iantnm, Icairns, Icurious, Ida Shaw, Ikrshnan, Illegal Operation, Illyria05, Imafreakyourpagesbackwards, Imamoron, Imgif,
Indexcard88, Inflatablepriest, Interlude65, Intgr, Irdepesca572, Iridescent, Irishguy, Islander, IslaySolomon, Iuhkjhk87y678, Ivan sus77, J Di, J Milburn, J.delanoy, JGXenite, JHP, JLaTondre,
JSpung, JTHORNTON06, JYolkowski, Jack Phoenix, Jackarama, Jakek101, James-aingeal, Jamesday, Jamesinderbyshire, Jamieostrich, Jammerpunk1089, Janviermichelle, Jarble, Jareha,
Jarmar, Jaseemabid, Jasonreina, Jasper Deng, Jatkins, Jauerback, Jaunty mellifluous, Jaxboy32, Jay, Jbolden1517, Jchthys, Jdm64, Jebarson007, Jeepday, Jeff3000, Jeffdav, Jeh,
Jemappelleungarcon, Jeremy Visser, Jerryobject, Jerryseinfeld, Jerrysmp, Jesse Viviano, Jewlandpeople, Jiddisch, Jigs41793, JimPettis, Jimdunderfield, Jinhua, Jj0909jj, Jjbone1000, Jlbruno,
Jmh010, Jndrline, Jnw222, JoanneB, Joeblakesley, Joemaddalone, JoernWilms, Johnclow13, Johndoe245, Jonghyunchung, Jonjames1986, JorgePeixoto, Josh Tumath, Josh the Nerd, Joshery420,
Joshrulzz, Joshua Issac, Jpk, Jprg1966, Jredmond, Jschnur, Jtalledo, Juggernaut0102, Julianhall, Jun-Dai, Jusjih, KYPark, Kablammo, Kafeithekeaton, Kaihsu, KamikazeArchon, Karada,
Karam.Anthony.K, KarenViceroy, Katarighe, Katoh, Kaveh, Kbolino, Kbrose, Ke5crz, Keith2211, Kensav, Kesegich, Kevin B12, Keyser Söze, Khlo, Kilo-Lima, KiloByte, King of Hearts,
259
Article Sources and Contributors
Kingoftherings, Kingpin13, KingpinE7, Kinneyboy90, KittySaturn, Kjinho213, Kkm010, KnowledgeOfSelf, Knutux, Koavf, Konman72, Konrad West, Kozuch, Krenair, KrizzyB, Kungfu52,
Kungfuadam, Kuru, Kurykh, Kvdveer, Kwekubo, Kwertii, Kyle Barbour, Kypr8, L Kensington, L daruwala, LGagnon, Landonb123, Lbclark, Lbs6380, Lc 04, Lc66659, Lee Carre, Legend, Leif,
Letdorf, Lew92, Lewi9486, Lightmouse, Lights, Liliana-60, Limulus, Lindsay40k, Linfocito B, Linkfreak, Linnell, Linuxbeak, LittleDan, Locksmith999, Lofote, Lolezor, Lolligag9, Lonaowna,
LondonBVE2, Longhair, Lotje, Lousyd, Lowenna, LuK3, Luca Ghio, Luna Santin, MC10, MDCore, MER-C, MIT Trekkie, MMuzammils, MNPCMW, Mabdul, Mace, Mackensen, MagicFab,
Magioladitis, Magister Mathematicae, Mahanga, Mahdipur, Mais oui!, Makestuffupalot, Makron1n, Malleus Fatuorum, ManWithNoName, Mangla nsit, Manishearth, Manop, Marcus Qwertyus,
Mardus, Mark, Mark Grant, MarkGallagher, MarkSutton, Markydude, Martarius, Martian, MartinHagberg, Materialscientist, Mattcorpceo, Matthuxtable, Meckstroth.jm, Meeples, Megara,
MeghaABS, Melancholie, Member, Mentifisto, Meow, Mepolypse, Merlinsorca, Merlion444, Mernen, Messiisking, Metsfanmax, Michael Devore, MichaelBillington, MichealH, Mike Rosoft,
Mike1, MikeCapone, MikeRS, Mikebrand, Mikenolte, Mikeroodeus, Mild Bill Hiccup, Millisits, Mindmatrix, Minestrone Soup, Minghong, Minimac, Minna Sora no Shita, Mintchocicecream,
Misbeliever, Mistress Selina Kyle, Misza13, Miyagawa, Mjb, Mjohan7, Mjvaj123, Mkingston0, Modster, Molily, Monaarora84, Monkee13, Moondyne, Mooquackwooftweetmeow, Morphh,
Mortense, Mortus Est, Moshi1618, Mr Stephen, Mr. Billion, Mr. Lefty, Mr. XYZ, MrTibblesLikesCheese, Mrleewilliams, Ms2ger, Muhaidib, Mushroom, Mxn, Myanw, Mzajac, NYKevin,
Nanshu, Napsync, Naryathegreat, Natalie Erin, Nate1481, Nathanrdotcom, Naveenkumar14, Navy Blue, NawlinWiki, Necessary Evil, Neelix, NeilN, NellieBly, Neme112, Neo Samus, NeoJustin,
NetRolller 3D, Newton2, Newtronic, Nexus450, Nhellviktor, Nickcgardner, Nickshanks, Nicolas Love, Nikai, Nitya Dharma, Nivix, Nixdorf, Njan, Nokkosukko, Nono64, Nori ice, Norm,
Northgrove, Nrbelex, NuclearWarfare, O'Dea, Oakster, ObeyK1NGTaz, Obiwankenobi, Objectivesea, Obradovic Goran, Oc666, OckhamTheFox, Octopus-Hands, Oda Mari, Off!, Ojw, Oklonia,
Olberding, Omegatron, Omicronpersei8, Oolong, Operation Fedora, Optichan, Optimist on the run, Osfan1011, Ottawahitech, Oxymoron83, P. S. F. Freitas, P.Marlow, PDH, PPGMD,
Pak1standby, Palacesblowlittle, Parabplus, Paraphelion, Party, Patrick, PatrikN, Paul August, Paul1337, Pcb21, PeaceLoveHarmony, Peach freak, Penguin33513, Periglio, PeteOtaqui, Peter
Karlsen, Petri Krohn, Phantomsteve, Pharaoh of the Wizards, PhelperRF, Phil Bridger, Philip Trueman, PicklePower, Piet Delport, Pigsonthewing, Pikachu Bros., Pilaf, Pile0nades, Pious7,
Pipedreamergrey, Pistazienfresser, Playdagame6991, Plugwash, Pmsyyz, Pointillist, Pol098, Polarscribe, Potatojunkie, Pradameinhoff, Predark, PrivateRyan, Prolog, Propaniac, Psz, Pt, Ptomes,
Public Menace, Putasinparis, Pxma, Pythagoras1, Python eggs, Qst, Quebec99, QueenCake, Quota, Qxz, R'n'B, RE OBrien, Radon210, Rafaelluik, RainerBlome, Randall222, Randy Johnston,
Raptordrew, Raraoul, RattleMan, RaviC, Raznice, Razorx, Rbarreira, Rbrwr, Rdl381, Rdsmith4, Rdude, Rebroad, Reconsider the static, Red Act, Red Dalek, Red Slash, RedWolf, ReddShadoe,
Redekopmark, Redwolf24, Refdoc, Reisio, Remember the dot, Retired username, Revrory444, RexNL, Rhobile, Rhobite, Ricardocolombia, Rich Farmbrough, Rich1000, Richard0612, Richwil,
Rick Block, Rightfully in First Place, RingtailedFox, Riyehn, Rjstott, Rjwilmsi, Robbie7up, Robbiewolf, Robert Merkel, RobertMfromLI, Robertcathles, RockMFR, Rockymountains, Rodrigue,
Ronjohn, Ronz, Rosem12514, Rounakr94, Roux, Rror, Rsrikanth05, Rufus843, Ruij999, Run!, Runecats, RyanGerbil10, Ryulong, S.Örvarr.S, S3000, SF007, SITDESK, SMC, SMP0328.,
SNIyer12, ST47, SadPandaParty, Safety Cap, Sam Burke, Samuel Blanning, Samuell, Sandeepmdas, Sankalpdravid, Sarassam, Sarranduin, Sasquatch, Saucepan, Sauronjim, Sawgrass, Schapel,
Schmackity, SchmuckyTheCat, SciCorrector, ScorpO, Scott 110, Screenshotguy, Scrutchfield, Sean Whitton, Sebastian.Dietrich, Servant Saber, SeventyThree, Sevvie, Sexy rob, Sgeo, Shai-kun,
Shieber, Shindo9Hikaru, Shinhan, Shirulashem, Shizhao, Shnout, Shortgeek, Showtime2009, Shuipzv3, Siddhant, Sigma 7, Sime208, SimonEast, Simple Bob, Siradia, Sirtywell, Skew-t, Skezo,
Skidude9950, Skizzik, Sky Attacker, Skype israel, Sl, SlimVirgin, Slowbro, Smallman12q, Snesfm, Snkcube, Societebi, Socks 01, SolidEnterprises, Sonicdrewdriver, Sooperhotshiz,
Soopersonic25, Sotcr, Soumyasch, Soydevon, Spe88, Speed8ump, SpikeJones, Spiritia, Spoon!, Squash, SqueakBox, St0rm, Starkirby64, Steel, Stephan Leeds, Stephen Shaw, Stephenb,
Stephenchou0722, Stepho-wrs, Steppres, Steve2011, SteveSims, StevenT1, Stevenj, Stuart P. Bentley, StuartH, SufferWell1396, Sun Creator, Supa Z, Super-Magician, SuperHamster,
SuperLuigi31, Supercooljs2, Supersaiyanplough, Supuhstar, Suruena, Svick, Switchercat, Syndicate, Szajd, T3nsor, TAG.Odessa, TJ Spyke, TJDay, Ta bu shi da yu, TaintedMustard, Talltim123,
Tamiera, Tangotango, Tannin, Tapo, Tcrow777, Tdrawler, Teacurran, TedE, Tedbadami, Tedickey, Teehee123, Tempodivalse, TenOfAllTrades, TerrorKalle, Tfgbd, ThatWikiGuy, The Anome,
The Bread, The Fish, The Grand Rans, The High Fin Sperm Whale, The Thing That Should Not Be, The Tsar, The cartoon dude, TheNewPhobia, ThePCKid, Theda, Thelennonorth,
Themodernizer, TheoClarke, Theringmater, Thetechman4451, Thingg, Thiseye, ThomasK, Thorenn, Thorpe, Thuginfantry, Tiago Morbus Sá, Tide rolls, TidusBlade, Tigerhawkvok, TimGrin,
Timwi, Tlonca, Tlustulimu, Tmiddlebrooks4277, Toehead2001, Tom-, Tom2006, Tomfromny2005, Tommo23, Tony Fox, Toots5446, Tophtucker, Touisiau, Toussaint, Toytoy, Tracer9999,
Traveler100, Tredit, Tregoweth, Trekkie4christ, Trekky0623, Trevor GH5, Triona, TrueCoppa, Trusilver, TruthinQuest, Tuanese, Tubedogg, TurboForce, Tuxcantfly, Tvaughn05, Twsx, TyA,
Tyomitch, Typhoonchaser, Tyw7, UAhmad7, Ulric1313, Ultimus, Umapathy, Uncle G, UserGoogol, UsernamePLK, Vaganyik, Vague Rant, Vatech09, Vcelloho, Vegaswikian, Veinor,
Versus22, Viajero, ViperSnake151, Vir4030, Virus expert, Vitaly, Vlb50, Voidvector, Voidxor, VolatileChemical, W3bbo, WCityMike, WJetChao, WOSlinker, Waggers, Wan 97, Wanted,
Wapcaplet, Warren, Webhacker, WereSpielChequers, Wereon, Werewiki, Wes shaw, Wewerer, Wfaulk, WhatamIdoing, Where next Columbus?, WhisperToMe, Whitenoise125, Whomp,
WhyBeNormal, WiFiLeech, Widefox, Wiki alf, Wiki fanatic, WikiBone, WikiLaurent, WikiLeon, WikiPediaAid, WikiViolater, Wikiolap, Will2k, Wimt, Winnjewett, Wmplayer, Woahh itsjossy,
WojPob, WolfmanSF, Wombatcat, Woohookitty, Wvb20, Www06, X!, X201, XAVeRY, XP1, Xammer, Xaosflux, Xavier114fch, Xdvd, Xezbeth, Xionbox, Xizer, Xmm0, Xp54321, Xpclient,
Xt881m, YUL89YYZ, Yakudza, Yamamoto Ichiro, Yamla, YannickFran, Yeeshenhao, Yellowg, Yousifnet, Youssefsan, Z.E.R.O., Zama35, Zap Rowsdower, Zig973, Ziiike, ZimZalaBim,
Zinkmo, Zntrip, Zomgwtfpwn, Zvn, Zwikipenguin, Zyrath, Ævar Arnfjörð Bjarmason, පසිඳු කාවින්ද, 石, 2119 anonymous edits
Google Chrome Source: http://en.wikipedia.org/w/index.php?oldid=544633771 Contributors: -Majestic-, 0xFFFF, 123465421jhytwretpo98721654, 15turnsm, 16@r, 1typesetter, 1wolfblake,
2401:FA00:4:1004:B859:EECC:2F45:5DE7, 2620:0:1000:5B00:1AA9:5FF:FEB9:CB29, 30mag, 573W1E, 66seals, 777sms, 83d40m, 87Fan, A3e6u9, A9l8e7n, ACupOfCoffee, ARC Gritt,
ATR94, Aaditya 7, Aancsiid, Acalamari, Ace Mendiola, Adam P., Adyxtrodle, Aglaforge, Agondie, Ahunt, Aij, Airplaneman, Ajkochanowicz, Akashbc, AkiShinji, Akrabbim, Akral, Alanaar06,
Alansohn, Albafrost, Albatross2147, Aldaron, Alexey Izbyshev, Alexius08, AlistairMcMillan, Aljullu, Allmightyduck, Althena, Althepal, Altintx, Alvestrand, Alwaystech, Amadeust,
Amer-aln7l, AnOddName, Andrej Kvasnica, Andrejj, Andrew-916, Andz200zx, Angeldeb82, Ankitcktd, Anonymous Dissident, Anthony717, Arctic Kangaroo, Ariesk47, Arnos78, Artichoker,
Aruton, Askrp, Asqueella, Astatine211, At Large, Atakuzier, Atomickirko, Attack penguin, Atulsnischal, AviDrissman, Avish2217, Azertus, AzertyFab, Azhar feder, Badgernet, BaldPark, Barek,
BarroColorado, Baryn, Bdell555, Beao, Beefball, Behun, Belorn, Ben Ben, Ben Tillman, Benbest, Bencey, Bender235, Bevo, Bezfabrice, Bidgee, BilCat, Billy12354, Bios Element,
BipinWanchoo, Bitbit, Blackboxxx, Blaisorblade, BluejacketT, Bmusician, Bo5437, Bo98, Bobby122, Boci, Bohr999, Bolshoibooze13, Brclarke, Breakingspell, Brendan Madley, Brentjee, Brian
Crawford, Brianclark0, Brianrobles204, Brianski, BrightBlackHeaven, Bsender, Bthylafh, Buddykartz, Budyhead, BurnDownBabylon, Burton nerf, Bxj, Byeitical, C. A. Russell, CPMSmith,
CUSENZA Mario, CWenger, Cacerot13, Calcwatch15, Calliopejen1, Caltas, Camoka4, Cancerstick, Canley, Cansofpotatoes, Capricorn42, Capsoul, Carewolf, Causa sui, Celeritas, Centrx,
Chainz, Chameleon, ChangChienFu, Chaojoker, Charlax, CharlotteWebb, Chasingsol, Chealer, Cheong Kok Chun, Chihuong bk, Chillum, Chirags, Chocolation, ChrisHodgesUK, Chromana,
ChromeShark, Ciao 90, Cire1000, Ckatz, ClamDip, Clarkefreak, Closedmouth, Cloudream, Cnota, Codename Lisa, Colinstu, CommonsDelinker, Connormah, Conti, Convicious, Cool3,
CoolingGibbon, CountingPine, Cpu111, Crash Underride, Crispmuncher, Crumb, Ctrlfreak13, Cupstacker, CyberSkull, Cybercobra, Cyp, Cyrus XIII, Cyzor, Czarkoff, DARTH SIDIOUS 2, DC,
DCEdwards1966, DKBG, DMacks, DVdm, Daev, Dan Atkinson, Dancter, Daniel Hen, Daniel.Cardenas, DanielPharos, Danielt998, Daniwa, Dankegel, Danlaycock, Danlev, Danrah,
DarkBahamut15, Darkmag3, Darkquest21, Darth NormaN, DasBooch, David Hedlund, Davidryoung, Dawnseeker2000, Dayewalker, Dbachmann, Debashish, DeliciousMeatz, Delta Trine,
Denbosch, Denisarona, DerBorg, DerekMorr, Detroit, Dfeuer, Dgaubin, Diblidabliduu, Dieulot, Difference engine, DigiFluid, DigiPen92, Digita, Dima1, Discospinster, Dispenser, DmitryKo,
DocWatson42, Doctord123456789, Document Control, DomStapleton, Dongzebu, Dougweller, Dr. F.C. Turner, Dragonic2020, Dreemteem, Drivec, Drrll, Dsjbfkjdsfsdjf, DuckOil, Dylan27,
EEMIV, Eball, Ecmanaut, Eik Corell, Elassint, ElectroPro, ElfMage, Elfguy, Elwood00, Emperordarius, EnSYS, Endofskull, EngineerFromVega, Engmohammedelsaid, Enquire, Enviroboy,
Epeefleche, Episdn, Error -128, Esebi95, Estoy Aquí, Evan7788, Everlong, Evice, Excirial, Exeunt, Eyesnore, Eyreland, Ezzkmo, F, FSII, Faann, Faisal.akeel, Falcon8765, Falcorian, Family Guy
Guy, Fat Cookies, FatalError, Favonian, Fayedizard, Fitoschido, FleetCommand, Flewis, Fluttershy, Flyingidiot, Fotoshop, Fourthords, Fpbecker, FrYGuY, Frap, Fred Gandt, Free Software
Knight, FreezeWarp, Frmorrison, Fryn, Fumitol, GB fan, GMCarbon, Gary King, Gastaunda, Gbuch, Geitda, GeneralBelly, Geoff918, Georgevalkov, Getgooglechrome, Ghettoblaster, Giftlite,
Gkanai, Glacialfox, Gluonman, Gogo Dodo, GoingBatty, GoodSirJava, GoogleChrome92, Googlechromeapps, Gordon Ecker, Gorillazx1, Gppande, Gpvos, GrahamDo, Greenelfs, Greenrd,
GregorB, Gronky, Gsarwa, Gu1dry, Gulmammad, Guy Macon, Gyrobo, H14, H2d2, HSVclubsport, Haakon, Hach-que, HaeB, Hamamelis, HandThatFeeds, Harlem Baker Hughes, Harrym17,
Hateless, Heds, Heenan73, Heliumsingh5000, Heymid, Hiben1, Himanis Das, Hinrichgasteiz, Honette, HorseloverFat, Hoseaho100, Hotkeyspain, HouseGuest, Hpram99, Hugh Grest, HydroJohn,
Hza100, I5bala, ICaldwell, IEatSoxLikeAnimal, IGeMiNix, II MusLiM HyBRiD II, IRP, IWCaldwell, IamMisplaced, Ianholst, Ians18, Ida Shaw, Ike-bana, Iliank, Ilya, Imcdnzl, InTeGeR13,
Intelati, Ipigott, Ish ishwar, Itamarm10, ItsZippy, Itub, Iuhkjhk87y678, J. Andrew G., J.delanoy, J36miles, JBsupreme, JDavis680, JForget, JQF, JRHorse, Jack Merridew, Jack-o-lantern,
Jackhynes, Jacob bubble, JakandRatchet378, Jaksmata, JamesBWatson, JamesNZ, Jamjame, Jan Hofmann, Jarble, Jarosciak, Jasoneth, Javawizard, JayKeaton, Jaydenillman, Jb17kx, JediLofty,
Jelliuk, Jeroen, Jerryobject, Jesant13, Jetstreak150, Jeysaba, Jhf, Jhsounds, Jim1138, JimmyBanks6, JimmyX, Jimp, Jjeka, Jkabil, Jmh010, Joffeloff, John Bahrain, John of Reading, JohnHWiki,
Jojhutton, Jon Harald Søby, JonathanRidgway, JorgePeixoto, Joseph Fleisher, Josh Tumath, Josh the Nerd, Joshbow, Joshua Issac, JoshuaKuo, Jossi, Joyson Prabhu, Jrdnch, Jschnur, Jsharpminor,
Juancnuno, Juanmoore192, Juhachi, Julesd, Jusdafax, KDesk, KHAAAAAAAAAAN, Kaixin110, Kaiyzen, Kakurady, Kalamkaar, Kalathalan, Kamranm1000, Kangaroopower, Karan.102,
Kaseman519, KaySL, Kelvinsong, Kenny Strawn, Kevinagt7, Kflester, Khalid hassani, Khr0n0s, Kiddu83, King Rhyono, Kingbean1, Kingpin13, Kirov Airship, Kitsunegami, Kittybrewster,
Kjinho213, KnowledgeOfSelf, Koavf, Koman90, Kookiethebird, Kozuch, Kriegg552, Krukouski, Krystaleen, Kumioko (renamed), Kuykee, LOL, LULRage, Lachlan Hunt, Lasselm, Lbss09,
Legallyillegal, Leobons, Leoncyclist2012, Lester, Lilac Soul, Linfocito B, Lipothymia, Lkt1126, Llightex, Logan, Lol, Number 69!, Lonaowna, Lopifalko, Lordalpha1, Louis Waweru, Lsoares,
Lucideer, Lumidek, M gol, M.nelson, M4dRefluX, M5, MASLEGOMan, MBK004, MER-C, MK8, Mabdul, Mahmoud farahat, Makeemlighter, Malick78, Mamdu, MammonLord, Man 923 lka
67486, Man with one red shoe, Manop, Manos5, Manticore, Marcus Qwertyus, Mark Arsten, Marksaddy, Markustwofour, Marqueed, Marsianer, Marsilies, Martarius, MastCell, Matias.Reccius,
Matt Beard, Matt489, Mattbrundage, Maxviwe, Maxí, Mazidan, Mcmlxxxi, Md5man, Meaghan, Meco, Medessec, Megabluemotion, Megara, Melnakeeb, Menchi, Mephistopelus, MerlinYoda,
Merxistan, Metricopolus, Mgjnsn, Mhiji, MichaelIvan, Michaelzeng7, Mijhino, Mike Payne, Mike R, Mike Schwartz, Mikeloco14, Mikespedia, Mindmatrix, Minimac, Miquonranger03, Miraceti,
MistaXFrye, Mister Potato 47, Mistress Selina Kyle, Mmccann625, Mmj, Mmoayyed, Mmss5712, Moletrouser, Monaarora84, Mono, Mononomic, MoogleUK, MoreNet, Morena84k, Morhuhny,
Moroz1975, Mr White, MrOllie, Mrand, Mrutter, Mrzaius, Msundqvist, Mushroom, Mwg51355, Mxsk4, My Ubuntu, Mysidia, MysticMetal, Máirtín, N4m3, Nakedcellist, Nakon, Nascar1996,
Nathan2055, Navarr, Navy Blue, Neon white, NerdyNSK, NetRolller 3D, Netanel h, Netol, Neurochild, Nevermorestr, Nevistar, Nghtwlkr, Ngilliamdesmet, Nico357, Nigelj, Nightscream,
Nimits1, Ninja Harbinger, Ninly, Njshaieb, Njuuton, Nkrinsky, Nnemo, Noctibus, Noillirt, Nonagonal Spider, NorthernThunder, Northgrove, NorwegianBlue, Notjbg, Now wiki, Noz92,
Npx122sy, NuclearWarfare, Nyswimmer, O'Dea, OMGuyZ, Obiwankenobi, Oddbodz, Odie5533, Ohconfucius, Ohnoitsjamie, Okungnyo, Olaf Davis, Oldag07, Oldlaptop321, Omjeremy,
Onetwo1, Onivs, Orgcherry, Orion Fire - X, Orlydumitrescu, OsamaK, OspreyPL, Ossguy, OuroborosCobra, Owain, Owencm, P. S. F. Freitas, P.Marlow, PGWG, PJ Geest, Palacesblowlittle,
Papardilas, Patar knight, Patcat88, Pathoschild, Paulesspaulisk, Paulmco, PaulusDev, Pcwiz11, Pedro96, Peeperman, Peter Karlsen, Petiatil, Petter Strandmark, Phila1616, Philip Trueman,
Philwiki, Phunanon, Pierr0ur, PieterDeBruijn, Pietrodn, Pimentel28, Pipatron, Pjoef, Platonides, Playclever, Pmsyyz, Pne, Pol098, Politically incorrect teacher, Ppavanpatidar, Prodego, Proxy
User, Psantora, Pseudomonas, Puffin, Quadratic, Quasar2112, Queerudite, R'n'B, RA0808, RCTfansMal818, RG104, Rahuloof, Rapomon, Rav0, RayneVanDunem, Raysonho, Rbirkby, Red1530,
Redekopmark, Reedy, Refulgentis, RehmT, Reisio, RekishiEJ, Remixz, RenamedUser01302013, Reschke, ResearchRave, Rf.89, Rhe br, Rich Farmbrough, Rich257, Richard-VS-545, Rick7425,
260
Article Sources and Contributors
Riffic, Rijans007, RingtailedFox, RitKill, Rivazza, Rizwank, Rjwilmsi, Rob Jansen, RobGonda, Robertcathles, Robosmurf, Roches, RockLobster101, Rocketrod1960, Roguegeek, Rollins83,
RonaldSharp, Ronark, Ronhjones, Root Beers, Roshanjonah, Rothorpe, RoyBoy, Rprpr, Rror, Rulesdoc, Rumping, Runefrost, Rwalker, S.M. Navid Iqbal, S.sameermanas, S0me1, SD.pedia, SD5,
SF007, SHARD, Saddhiyama, Saeed.Veradi, Sahaskatta, Sailing to Byzantium, Salavat, Salix alba, SamJohnston, Samtatr, Samuelpauls, Sanao, Sandstein, Sapeli, Sbmeirow, Sc0ttkclark,
Schapel, Scientus, Scikidus, ScottSteiner, Sdornan, Sebs.sd, SeeTheInvisible, SergiySW, Servel333, Sfrahm, Shadowjams, ShatteredDreams, Sheen33, Shirishag75, Shirudo, Shogunu, Shuipzv3,
SidP, Sikon, Silvergoat, Silverturtle1, SimonThird, SirLamer, Sishizawa, SixthAtom, SkyMachine, Skype565, Skytreader, Slackwise, Slipstream, Slogsweep, Smallman12q, Smike, SmilingBoy,
Smurfy, Smyth, Snowolf, SoWhy, SocialRadiusOly, Socialmaven1, Some Say He's Dead, Some guy, Sonjaaa, Sotcr, Space-escalator, SpaceFlight89, Spazturtle, Spellcheck, Spitzl, Squater,
Staka, Steel, Stefan, Stefanrusek, Stenyak, Stepho-wrs, Sterremix, Steve2011, Steven Walling, Steven Wax, Stevenrasnick, Stifle, Str4nd, Strike Eagle, StuffOfInterest, Subver, SudoGhost,
Sugarbat, Sujith84, Super-Magician, SuperSpy00bob, Superm401, Susurrus, Svennispam, Syberiyxx, Synergy6, Syp, T, T3h 1337 b0y, THEN WHO WAS PHONE?, TOASTER867,
TPIRFanSteve, TZGreat, TakuyaMurata, Taltamir, TamerSaadeh, Tanath, TangLab, Tbhotch, Tech2010, Tedickey, TehFreezer, TenPoundHammer, Tenoversix, Tew3, The 888th Avatar, The
Anome, The Bushranger, The Evil IP address, The MAZZTer, The Seventh Taylor, The Thing That Should Not Be, TheAwesomeWrath, TheGreenEditor, TheTechFan, Thegamer 298, Theorize,
Theothercesarbrie, Thespam, Thetechexpert, Thljcl, Thorenn, Thornstrom, Thotypous, Thue, TiMike, TiQ, Tide rolls, Tigerhawkvok, Timurite, Tingrin87, Tobias Bergemann, TobyDZ, Tokek,
Tom Jenkins, Tomchen1989, Tomy9510, Topleveldomainuser53, Toussaint, Towel401, Tpbradbury, Tracer9999, TreoBoy680, Trewyy, Truenight, Ttong, Ttony21, Tuanese, Tuxcantfly, Tyrol5,
Tyronen, Tyw7, Tyz, UU, Ubardak, Ufopedia, Ukexpat, Unapiedra, Unionhawk, United153, Unixman83, Unregistered.coward, Uoosuow, UpstateNYer, Urhixidur, Urvabara, Uwater, Vaaht,
Vampire1212, Vanished User 0001, Vanished user fois8fhow3iqf9hsrlgkjw4tus, Vanished user x10, Vatech09, Vdavid2, Ve4cib, Vekou, Velkymx, Ver, Vesal, Vibin r, ViperSnake151, VittGam,
Vmcburney, Vocaro, Volcomkewl, Vprisivko, Vranak, Vusys, WODUP, WOSlinker, WPSamson, Waiman0, WalteregoWik, Wangw469, Wanna Know My Name? Later, Wap0x1, Waqas1987,
Warpandas, Wasbeer, Waterfalls12, Wavelength, Wayne Slam, Weaselsinc, WebDrake, Webclient101, Wechrome, Weezey, Weitzhandler, Wereon, WhatisFeelings?, WhisperToMe, Whpq,
WiFiLeech, Widefox, Widr, Wigunnara, Wiki4jeffy, Wiki5d, WikiLeon, Wikieditoroftoday, Wikien2009, Wilbal1087, William Avery, Willsmith342, Wilton gorske, Winchelsea, Wissel Wall,
Wleizero, Wonjoon0330, Woohookitty, Wraithdart, Writ Keeper, WriterHound, Wtaylor0435, Wyvernoid, XC Fan, XSG, XTSTech, Xabier Armendaritz, Xadith12, Xager, Xeworlebi, XinJeisan,
Xmm0, Xompanthy, Xp54321, Xpmedia123, Xpmedia97127, Xtbs7645x, Yakiv Gluck, Yankee0304, Yannismarou, Yarow12, Ye olde minr, Yellowdesk, Yhulkdsfdd, Yiosie2356, Yivo Snakis,
Yngvarr, Yonisyuumei, YoursBadDay, Zahd, Zaltaire, Zamadatix, Zap Rowsdower, Zaphraud, Zastrowm, Ziiike, Zjtopspeed, Zorak950, Zquinn3, Zr40, Zywxn, Zzuuzz, Δ, ‫ﺍﻗﺮﺃ‬, 계정명뭘로하지,
2096 anonymous edits
Opera (web browser) Source: http://en.wikipedia.org/w/index.php?oldid=543193532 Contributors: ++Martin++, 100110100, 130.94.122.xxx, 16@r, 217.5.88.xxx, 62.158.194.xxx,
62.253.64.xxx, 9ulk, A3r0, Aanhorn, Aborlan, Abu badali, Acsimonides, Adelfino, AdrianTM, AdultSwim, AdvancedGamer, Adyniz, Adys, Afed, Aghochikyan, Agnistus, Ahy1, Akerbeltz,
Alai, Alainr345, Alan Liefting, AlanH, Alerante, AlexTG, Alexragerage, Alexwcovington, Aliendude5300, Alinutza b, AlistairMcMillan, Allen4names, Alsandro, Anarchopedia, Andish182,
Andre Engels, Andrewpmk, Andybutkaj, Andylee Sato, Animum, Ankur, Anna Frodesiak, Antidrugue, Antonio Lopez, Antrikshy, Anárion, Aoi, Ap, AppleNick, Applesanity, Arcade, Ariesk47,
Arsenikk, Art LaPella, Arvindn, Asbjornu, Ashertg, Asplode, Astrowob, Atriel, Attilios, Audiosmurf, Augustuen, Avazelda13, Axl, Ayavaron, Ayush J, BGTopDon, Bachrach44, Balthazar,
Barefootguru, Bdude, Bdushaw, Bellham, Benjaminoakes, Bernardtse, Betty Logan, Bevo, Big Brain, Binary TSO, Biscuittin, Blonkm, Blue520, BlueMint, Bnitin, Bojan PLOJ, BorgQueen,
Borgx, Borkzorkorc, BowserMarkII, Brad101, Brainix, Bremen, BrokenSegue, Bryan Derksen, Bts, Byberg, CONFIQ, Caffolote, Calmer Waters, Cambrant, Canadian, CanisRufus, Capnez,
Carpetsmoker, Cate, Chaals, ChakatSandwalker, CharacterZero, Chealer, Chjb, Chochem, Chowbok, Chris83, ChristTrekker, Chriswaterguy, Chugger1992, Circeus, Cirt, Ckatz, Clarky13,
ClementSeveillac, Codemechanic, CommonsDelinker, Conti, Conversion script, CoolingGibbon, Copysan, Cortezz, Cosmic Latte, Cosmopolitan, Cosprings, Cralar, Crash331, Crogers1,
Crozewski, Crusadeonilliteracy, Csabo, Csant, Csdorman, Css, Cst17, Ctachme, Cws125, CyberShadow, CyberSkull, Cyberpear, Czarkoff, DJ Clayworth, DStoykov, Dabomb87, Dadu,
Dagroves, Damian Yerrick, Dan100, Daniel Hen, Daniel.Cardenas, Daniel15, Darc, Darkeagle7x, Darkwind, David Latapie, DavidMoore, Dbaron, Debresser, Decstop, Deeahbz, Deepdreamer,
Devvv, Digita, Dileepamadu, Dirk Amoeba, Discombobulator, DizzyTech, DjiXas, Dkakridas, Dmaftei, Dobie80, Dobz116, DocWatson42, Dogman15, Dolphin921, Donebythesecondlaw,
DrKiernan, Dramatic, Drdrew, Dreamertan, Dreftymac, Ds13, Dsergeant, Dukeofomnium, Dungodung, Dylan anglada, Dysprosia, EEPROM Eagle, ESkog, EVirtus, EagerToddler39, Ed g2s,
Ed.Markovich, Edwin.wei, El Paulio, El T, EliasAlucard, Ellmist, Eloquence, Elwood00, Emperorbma, Emperordarius, Endlessdan, Enum, Epbr123, Erkekjetter, Eszett, Evice, Evil Genius,
EwokiWiki, Excirial, Exeunt, Extransit, Eyreland, FatalError, FauxFaux, Feezo, Fennec, Fenring, Ferkelparade, Feydey, Finlay McWalter, Fitzhugh, Fixxif, FleetCommand, Fludgecow101,
Fluffy McNutter, Foolishgrunt, Fosnez, Frank0051, Frankyboy5, Frazzydee, Fred Bradstadt, Fred Gandt, Fredrik, Freeaqingme, Fruit.Smoothie, Frysalebald, Furrykef, Fusionlord, Gaara42,
Gaffgiff, GalaxiaGuy, Gargaj, Garlics82, GateKeeper, GeeNeeYes, Gesslein, GideonF, Giftlite, Giraffedata, Glenn, Gobonobo, Gogo Dodo, Gogogadgetgo, Golbez, GoldRenet, Goldom,
Gonchuki, Graham87, Grandmasterfc, GreatWhiteNortherner, GregorB, GroundedZero, Grstain, Grumpy444grumpy, Gurch, Gyrferret, HYC, Hadal, Hadrians, Hannes Hirzel, Hans soplopuco,
Hao2lian, Hapo, Hardman.ethan, Harris7, Harryboyles, Haskanik, Hatchetfish, Hbdragon88, Heart reaper, Heater123, HeinzzzderMannn, Helix84, Henry Flower, Herakleitoszefesu, Hildanknight,
Hillhead15, Holek, Hoo man, Hoovernj, HopeSeekr of xMule, Hoshie, HotXRock, Howzer, Htanna, I can haz ban?, IByte, IanM, Iball, Icairns, Ice Ardor, Icey, Ida Shaw, Ifrit, Ikrshnan, Ilyanep,
Imperi, Imz, Indyan, Irdepesca572, Iridescent, Ischart, Ishansharma001, Isnow, Iuhkjhk87y678, Izanbardprince, JOptionPane, Jabberwockgee, Janneok, Jarble, Jdlyall, Jeff schiller, Jeffthejiff,
JemeL, Jerome Charles Potts, Jerryobject, Jesant13, Jesse V., Jeword, Jhsounds, Jim Brannen, Jimfbleak, Jking, Jla net.de, Jleedev, Jnothman, JoanneB, John of Reading, Jojit fb, Jondel,
Jonwhite, Jor, Jorcoga, Jordan Gray, Jordo ex, JoshuSasori, Jowan2005, Jschitt, Jtalledo, Jthompson666, Jtkiefer, JustSomeGuy, K.lee, K1812, KAMiKAZOW, KDesk, Kaare, Kadoo,
Kafeithekeaton, Kalan, Karada, Karnesky, Karsonic, Katalaveno, Kathleen.wright5, KeithD, Kelson Vibber, Kesla, Khaled.khalil, Khalid hassani, Khlo, Kilo-Lima, KingNerd, Kingkiki217,
Kjinho213, Klingoncowboy4, Kmalek, KnowMeWiki, Ko, Koavf, Konklone, Kostisl, Kozuch, Krushia, KsprayDad, Kungming2, Kurtber, Kyleabaker, LGagnon, LOL, LachlanCl, Lampernist,
Landroni, Largon, Lars Washington, Lashiec, Lawrence Cohen, Ledow, Lee Daniel Crocker, Lewispb, Lexein, Lightmouse, Ligulem, Localzuk, Lockoom, Logixoul, Lordalpha1, Lotje, Lotu,
LouisC, Lovely Chris, Lowellian, LucasVB, Lucideer, Luis Dantas, Lwdjaymac, M1ss1ontomars2k4, M3tal H3ad, METAShift, MMuzammils, Mabdul, Magister Mathematicae, Mahsko,
Malfidus, Man with one red shoe, Maralia, Marasmusine, Marioandangel, Mark, Mark Foskey, Mark alec, Marknew, Martarius, Mary Edward, Matt Crypto, Matt G, MattTM, Mattbr,
Matthew0028, Maximaximax, Maximus Rex, McComBat, McSly, Mck1117, Mdwav, Mdwh, Meegs, Meek29, Melancholie, Meneth, MetaManFromTomorrow, Mets501, Mgillespie, Michael
Devore, Michael Hardy, MichaelBillington, Midoribe, Mig, Miguelandres, Mike1, Mikebrand, Mild Bill Hiccup, Millsdavid, Minesweeper, Minghong, MiniEntente, Mistress Selina Kyle,
Mnemo, Mo0, Molerat, Monz, Morenoodles, Morgankevinj huggle, Mortense, Motor, Mqe, Mr Stephen, Mrschimpf, Ms2ger, Mspraveen, Mx3, Mxn, Mygerardromance, N i grunze, NSK
Nikolaos S. Karastathis, Naelphin, NapoliRoma, Nathanl1192, Navstar, Neojub, Neutralaccounting, Nexia90210, Nickshanks, Nikai, Nilicule, Ninedotnine 9.9, Ninly, Njshaieb, Noir, Nonky,
Nono64, Nori ice, Northgrove, Notheruser, Numbnumb, Nurg, OSX, Obiwankenobi, Oblivious, Oboewan, Oceanm, Ocram, Of, Ojigiri, Ollie, Olv 26, Oore, Operafan2006, Optichan,
Oscarthecat, Osmanzubair658, Ozzmosis, Palacesblowlittle, Patrick, Paul1337, Paulcmnt, Paulymer5, Pb30, Pbryan, Pentap101, Pentasyllabic, Peter, PeterCooperJr, Pgr94, PhilHibbs,
Phoenix-forgotten, PhotoBox, Pierr0ur, Pinefresh, Platypus222, Playdagame6991, Playstationman, Pmsyyz, Pne, Pnm, Poketamonsta, Pol098, Pouyakhani, Pradameinhoff, Prasun92, Princess
Lirin, Ptomes, Puchiko, PuzzletChung, Quintucket, Quoth, R'n'B, RTG, RadioActive, Rafaelluik, Raghavsethi, Randolf Richardson, Random Hippopotamus, Randy Johnston, Raul654, RaviC,
Rchamberlain, RedWolf, RehmT, Reisio, Remember the dot, Repetition, ReyBrujo, Rich Farmbrough, Richmd, Rick Block, Rjo, Rjwilmsi, Robbe, Robert Xia, Robertvan1, Robodesign,
RockMFR, Rockinrimmer, Roger4911, Romis, Romney yw, Ronark, RossPatterson, Rotlink, Rst20xx, Rumping, RyanGerbil10, Ryanlim2002, SF007, SFC9394, SHARD, SJP, SMP, Saizo7,
Sajman12, SamJohnston, Samsara, Sandmandreams, SandyGeorgia, Saudiqbal, Schapel, Schrei, Schreiben, Scott Friend, Segin, Seifip, Seinman, Seloloving, Semenko, Senarclens, Sesshomaru,
Sgd, Shanes, Shinmawa, SidJ, Silvergoat, Silverlight, Simcaster, Skippy Electrochomp, Skybon, Slashis, Slimer Shady, Smitty, Snakeskincowboy, Snesfm, Snoyes, Softwaregeekland77777,
Someoneinmyheadbutit'snotme, Sotomura, SpaceFlight89, Spearhead, Species8473, Splintax, Spug, Squash, Squeal, Squids and Chips, Stamgastje, Stasdm, SteinbDJ, Stephenchou0722,
Steve2011, Stevenfruitsmaak, Stewartadcock, Suitcase, Szh, TBloemink, TJ Spyke, TMV943, Tabletop, Taestell, Tassedethe, TechNev16, TechPurism, Techboy20, Techtoucian, Tenorcnj,
Tesscass, The Anome, The Famous Movie Director, The freddinator, TheSeer, TheTechFan, Thealexweb, Thebeginning, Thebogusman, Theshibboleth, Thesoftbulletin82, ThomasK, Thorenn,
Thorpe, Thumperward, ThymeCypher, Timwi, Tkynerd, TomAn, TomAnd, Tony1, Toreau, Torez, Toussaint, Tpbradbury, Trailing, Treetey, TruYuri, Tuanese, Twalls, Twsx, Tyomitch,
Täst-test, Ufopedia, Ugen64, Ultras GE, Unbreakable MJ, UncleDouggie, Undeuxtroiskid, Unyoyega, Uzume, Vague Rant, VanHelsing.16, Vargklo, VegaDark, Vento, Verloren, Vetler,
Viniciuscubone, Vinsfan368, Visor, Vlatko.mk, WOFall, Waffle, Waldo, Wapcaplet, Weatherfield, Wereon, WhatisFeelings?, WhiteHatLurker, Whizkiddreloaded, WhizzWr, Whkoh,
Whysquared, WiFiLeech, Widefox, WikiLaurent, WikiLeon, WikiManiac64, Wikiacc, Wikien2009, Wikiolap, WikipedianMarlith, Winterst, Wirrad, WojPob, WolvenSpectre, Wondigoma,
Woohookitty, Wossi, XP1, XTSTech, Xantares, Xeno, YEvb0, Yacht, Yes.aravind, Ynhockey, Yonkie, Youssefsan, Ysangkok, Ysteino, Zabadab, ZaferXYZ, Zanimum, Zarachan, Zedatik,
Zeerus, ZemmerK, ZeroOne, Zerotonin, Ziiike, Zimak, Zinfam, Zollerriia, Zootm, ZorphDark, Zundark, Ævar Arnfjörð Bjarmason, Александър, Мурад 97, आशीष भटनागर, 1315 anonymous edits
Safari (web browser) Source: http://en.wikipedia.org/w/index.php?oldid=544194162 Contributors: *drew, 11schest, 16@r, 2620:0:100D:9:CABC:C8FF:FEEC:9BBD, 2pac 2007, 4lex, 87Fan,
A3e6u9, ADGTHFan, AJenbo, ASHTONZANECKI, AVRS, Aandyrox, Aanhorn, Aaog, Acps110, Aeon17x, Afwm1985, Ageha Winds, Agendum, Airhogs777, Ajcfreak, Ajfweb, Alan Liefting,
Albatross2147, Alegoo92, Alek2407, Alerante, AlistairMcMillan, AnOddName, Andrew456, Andy Dingley, Angus Lepper, Anonymous Dissident, ApnAEA, Applehockey87, Aquafire,
Araignee, Arestov, Armbrust, Asmeurer, At2000, Atlant, Atompowered, Auric, Austin512, Avalyn, Avazelda13, BD2412, Baccyak4H, Bailey7677, BaldPark, Balubino, Bamrocks01, Barneyboo,
Bbatsell, Bbpen, Bdash, Bdesham, Bean51, Beland, Bender235, Bigpeteb, Biker Biker, Binary TSO, BlueAzure, Bob the Wikipedian, Bodigami, BoomerAB, Brandon, Breakaa007, Brianreading,
Brion VIBBER, BrowserWARwarning, Bwrs, Calebrw, Calindan, Canley, Cantus, Capricorn42, CardinalDan, Caspcasp, Cayuga, CecilWard, Cgand, Chapiown, Charles Gaudette, Chase me
ladies, I'm the Cavalry, Chealer, Chiefboz, Chillyhot8, Chirsaud, Chmod007, Chochopk, Chris Murphy, Chris Ssk, Chrisgeleven, ChristopheS, CieloEstrellado, Classicfilms, Cleared as filed,
Cmdrjameson, Cochonfou, Codename Lisa, Colfer2, ColinHelvensteijn, Companioncube31, Cookiedino, Corbin Benton Davenport, Cowabanga, Cowplopmorris, Crazycomputers, Csaag,
Css2002, Ctachme, Cuvtixo, CyberSkull, Cynical, Czarkoff, Czei, D-Notice, DMacks, Daev, Daniel Hen, Daniel Pritchard, Daniel.Cardenas, DanielTBumbarger, Danpoulton, Dany20mh,
Darijoe, David Gerard, DavidLevinson, Davidfstr, Davnor, Dddstone, Deeahbz, Derelk, Digita, Diogenes00, DirectEdge, Dlrohrer2003, Dmlandfair, DocParnassus, DocWatson42, Don Cuan,
Dragonilm, Dreaded Walrus, Drrll, Drygnfyre, Dual64bit, Dwig365, Dysprosia, EVula, Ebradford, Ec5618, Ed g2s, EdJohnston, Edcolins, EdoDodo, Elecbullet, Electriccatfish2, Elenseel,
EliasAlucard, Ellmist, Eloquence, Elvey, Emre D., Eraserhead1, Errorlines, Esebi95, Ethan.hardman, Eugene-elgato, Evice, Evil Eccentric, Excirial, Exploreboy, Extra999, F3der1co-,
FRANKBISTORY, Fairlie2, Fakhredinblog, Falcon9x5, Fang Aili, FatalError, Feezle, Fenevad, Finemann, Fireball1244, Fluttershy, Forlornturtle, Fpbecker, Franquomètre, Fred Bradstadt, Fred
Gandt, Frogger3140, Fryed-peach, Furrybeagle, GCL, Gareth Aus, Garlikguy2, Gaul, Gaurav, Gcm, Geek45, GeorgeC, Georgeryp, Glassman, Glenn W, Gobonobo, Gogo Dodo, GoldRenet,
Golem, Gonzalo M. Garcia, Google9999, Gpia7r, Grahamperrin, Grahamstewart, Greenrd, Greg440, GregorB, Ground Zero, GroundedZero, Grstain, Gsarwa, Gudeldar, Guesty-Persony-Thingy,
Guy Harris, Gyrferret, Hawaiian717, Hawky, Head, Hellisp, Hephaestos, Heroman1234, Hgrosser, Holden15, Horserice, Hoshie, Hp notebook, Hu12, Huangcjz, Hydrargyrum, Hyper neo, I
already forgot, IGAT, Ian Pitchford, Ice Ardor, Igoldste, Iliank, Illegal Operation, Ilse@, Indigo, Infused, Irishguy, Ish ishwar, Iuhkjhk87y678, J.delanoy, J36miles, JSquish, Jacono, Jak123,
Jay59, Jdlowery, Jemappelleungarcon, JeremyA, Jerome Charles Potts, Jesant13, Jhaygood86, Jimthing, Jinhua, Jls1225, Jmcollier, JodyB, John John 216, John Smith 104668, JohnHWiki,
261
Article Sources and Contributors
Johndburger, JohnnyB256, JohnnyBGood, Jojhutton, Jonik, JorgePeixoto, Josh the Nerd, Jpk, Jtdunlop, Judge Trudy, Julianhall, JustSomeGuy, KAMiKAZOW, KAtremer, KDesk, KPWM
Spotter, KUsam, Kafeithekeaton, Keilana, KelleyCook, Keyser Söze, Kimberlyg, Kirjapan, Kirkburn, Kjinho213, Kkm010, Klausness, KnowledgeOfSelf, Koavf, Kohlmalo, Koyaanis Qatsi,
Kozuch, Krishnaprasaths, Kulikovsky, Kushal one, Kylerupertlaws, L337p4wn, LGagnon, LLarson, Lakeyboy, Lancehyde, Larry V, Lawrence Cohen, Lcaa9, Legion fi, Lent1999, Letdorf,
Lhasapso, LiDaobing, Limballanwe, Linus M., LittleDan, Liudant, Ljosi, LordBleen, Lsommer, Lucky499, Luckyz, Lulu of the Lotus-Eaters, Luna Santin, Lupin, M1ss1ontomars2k4,
MMuzammils, MSTCrow, Mabdul, MacManX, MacedonianBoy, MacintoshWriter, MadnessInside, Mahanga, Mahdad2548, Manurguez, Manusnake, Marceki111, Marcus Qwertyus, Mardus,
Mark Arsten, MarsRover, Martarius, MartinRobinson, Matariel, Mattbrundage, MatthewWaller, Matthewmiller1234, Mattjs, Max Schwarz, Maxim, Maxistheman, Mb1000, Medessec, Meelash,
Megamanfan3, Melancholie, Melnakeeb, Meow, Meph666, Metagraph, MichaelBillington, Mikebrand, Mikeloco14, Milaniliev, Minghong, Mipadi, Mistress Selina Kyle, Miyagawa,
Momodamonkey, Morhippo, Mortense, Mr. Stradivarius, MrBeauGiles, Mrcomputerman7, Mrmaroon25, Mrschimpf, Multifinder17, Mushroom, Mvjs, Mydoctor93, N i grunze, NJA,
Nanochrome, Nate Silva, Nathan8225, NeoThermic, NerdyScienceDude, Nertzy, Nescio, Netghytu, Nevalicori, Nickshanks, Niels Leenheer, Nihiltres, Nikai, Nlu, Nnemo, Nori ice, Northgrove,
Nsayer, Obiwankenobi, Ocifersven, Ohnoitsjamie, Omegatron, Onceuponawiki, Padinc, Patrick-br, Paul.irish, Paul1337, Pcap, Perardi, PhnomPencil, Photographerguy, Phuzion, Physicistjedi,
Pierr0ur, PieterDeBruijn, Plankhead, Platte Daddy, Playdagame6991, Plop, Pnm, Pokettrokett, Pradameinhoff, Pretzels, Princess Lirin, Pro MacBook, ProhibitOnions, Prowikipedians, Prudhvi
Porandla, Psantora, Ptomes, Pyro3d, Quadell, QuartierLatin1968, R000t, RadRafe, Raidon Kane, Reaper Eternal, Rebroad, Reconsider the static, RedWolf, Redaktor, Remember the dot, Renku,
Reschke, ResolvedElement, Retropunk, ReyBrujo, Rhobite, Richiekim, Riley Huntley, Rising*From*Ashes, Robby.is.on, Roketjack, Rolando, RoyBoy, Rpg738, Rumping, Runtime, Rveedubs,
RyanGerbil10, SF007, SJP, SamEtches, Schapel, SchnitzelMannGreek, Schwarzbichler, Scott Bywater, Scottman1995, Sdfisher, Seav, Sebesta, Sen amitava, Sensiblekid, Serein (renamed
because of SUL), Sfan00 IMG, ShaneCavanaugh, Shaul1, Sherkhon, Shoessss, Shornby, Sideburns Sam, Silensor, Simon Shek, Sixtrojans, Skezo, Skiliftlover, Skyfaller, Sonicblue4,
Sonicdrewdriver, Soopersonic25, Soumyasch, Squash, Squids and Chips, Ssfreitas, Starionwolf, Steffen Felbinger, Stephenchou0722, Steve Smith, Steve2011, Stevenrasnick, SuperDutchGuy,
Swaq, Szayat, TCPWIKI, TDS, TakuyaMurata, Tedickey, Teehee123, Tgrignon, The Lemon-Melon Schism, TheDJ, ThePlagueBringer, TheTechFan, TheWeakWilled, Thirdgen, Thomas
Gilling, Thorenn, Tiago Morbus Sá, Tigernike1, TimMagic, Timo Baumann, Toehead2001, Tokek, TorontoLRT, Toussaint, Tracer9999, TravisAF, TrevorLSciAct, Tuanese, Twsx, UJ, UU,
Uberbandgeek, Ufopedia, Ugen64, Ultimus, Untitledmind72, Username33333, Vatech09, Vincent Pun, Vipinhari, Voidvector, WOFall, Wackymacs, Warren, Wavelength, Wcquidditch,
WhatisFeelings?, Whitebox, Widefox, Wiki3857, Wikien2009, Wiknerd, Willdude 132, William Ortiz, Wishinoo, Wizmo, Woohookitty, Wormald, Wraithdart, Wrldwzrd89, Xcore7, Xpclient,
Yarnalgo, Yeeshenhao, Yellowdesk, Yetisyny, Yulu, Yworo, Zach Vega, Zackaback, Zealotgi, Zhuman, Zollerriia, Ævar Arnfjörð Bjarmason, ΘΕΟΔΩΡΟΣ, आशीष भटनागर, 895 anonymous edits
Internet Engineering Task Force Source: http://en.wikipedia.org/w/index.php?oldid=542364524 Contributors: Abhayakara, Adzinok, Akradecki, Aldnonymous, Alvestrand, Am088,
Andrewpayneaqa, AnnaFrance, Aperson1234567, Athletic ro, Bazza 7, Behind The Wall Of Sleep, Behnam, Bender235, Bkkbrad, Blobglob, Borgx, BuffStuffer, Cbl62, Charlierichmond,
Chealer, Chester Markel, Cjkporter, CodeCaster, Conversion script, Coolcaesar, Coopkev2, Css, Cybercobra, Darguz Parsilvan, E Wing, FocalPoint, FrenchIsAwesome, Funandtrvl, Gamliel
Fishkin, Ghettoblaster, Glenn, Graham87, Gregbard, Guanxi, HJ Mitchell, Hardaker, Hatster301, Howcheng, Icairns, Jarble, Jeffreyschiller, Jlenthe, Jnc, JonHarder, Joseph Solis in Australia,
Jovianeye, Jrp, Jules.lt, Khazar2, Knuckles, Koavf, Krauss, LA2, Lentower, Liftarn, Livingthingdan, Looxix, Lotje, Luksuh, Magioladitis, Magnus.de, Matthewdingley, Mindmatrix,
Miracleworker5263, Ninly, Noldoaran, Now3d, Olrick, P199, Paolopal, Paul, Paul Foxworthy, Paulehoffman, Philosopher, Pigdog234, Polimerek, Reallycoolguy, Rich Farmbrough, Rjwilmsi,
Rob evans, RobLa, Spearhead, Stephen Gilbert, Sunray, Suruena, SusanLesch, The Anome, Tim!, Tonyhansen, Tothwolf, TruthPraiser, Ummit, Uncle G, Vrenator, W163, Wavelength, Wayne
Slam, Wikiborg, Y(J)S, Yakovsh, Zearin, Zigger, 93 anonymous edits
International Organization for Standardization Source: http://en.wikipedia.org/w/index.php?oldid=543497914 Contributors: -Majestic-, 137.112.129.xxx, 16@r, 1exec1,
2001:4930:123:0:6108:2845:23D6:C6AD, A-giau, A. B., Aaker, Abdull, Adamlaskey, Addshore, Adoniscik, Aeusoes1, Ahoerstemeier, Ahunt, Akamad, Alex1011, Alexbrn, AllenZh, Altermike,
Anastasios, Ancheta Wis, Andattaca2010, Andycjp, Anjadrame, AnonyPussycat, Ansiansiansi, Ashishbhatnagar72, Autoterm, Azalia1225, BasicBaer, Bazzer palm, Bcordes, Before My Ken,
Bierstube Katzen Keller, Billdakelski, Binarygal, Binksternet, BlaF, Blah0401, Bobo192, Bovlb, Brion VIBBER, C0N6R355, CALR, Camyoung54, Capricorn42, CaribDigita, Charivari,
Chinasaur, Cobi, Conversion script, Coolcaesar, Cprompt, Crazeman, Culverden, Cwass, Cybercobra, DHN, Danieldavidturner76, Danio, Bibliophylax, Dasani, David Gerard, Davidiad,
DeadEyeArrow, Delicious carbuncle, Delirium, Denelson83, Denihilonihil, Denisarona, Derek farn, Discospinster, Doseduk, DropDeadGorgias, Dspakman, Długosz, EEMIV, Eclecticology,
Editor Lara, Egil, Environ1561, Erkan Yilmaz, EstonianMan, Evlekis, Ewlyahoocom, Exor674, Finell, Frecklefoot, Frungi, Furrybarry, G7046072, Gary King, George Ponderevo, Ghakko,
Gingekerr, Glenn, Graham87, Gumruch, Guthardt, Guy Peters, HAl, Haeinous, Haemo, Harish431, Hayden120, Heron, Hervegirod, Hgrosser, Hohum, IRbaboon, ISAN-IA, Icairns, Ichwan
Palongengi, IndianCow, International Electrotechnical Commission, Irdepesca572, Isoindia, IstvanWolf, J.delanoy, JackLumber, Jacobolus, Jagged, Jbinder, Jeni, Jerry, Jflapointe, Jimp,
Joeblakesley, John FitzGerald, John Larmouth, JohnCD, Jon Awbrey, JorgeGG, Joseph Solis in Australia, Jpatokal, Jrats, Jusjih, Justme89, Justwatchme, Jza84, K-car, KDesk, KTC, Keichwa,
Kemmabrant, Kit.macallister, Knuckles, Koavf, Kozuch, Kpufferfish, Kslall8765, Kusma, Kwamikagami, Kwekubo, L.tak, Law, Lazulilasher, LeadSongDog, Levic69, Liftarn, Lindum, Lmatt,
Lockesdonkey, Looxix, LouI, Lquilter, LuisMMCortez, Luxdormiens, MBisanz, MK, MZMcBride, Mac, Mackan, Magioladitis, Maikel, Malepheasant, Manop, Martarius, Mato, Mattgirling,
Maximaximax, Mbimmler, Mclay1, MiG, Mild Bill Hiccup, Mindgames11, Minghong, Mitch Ames, Mjb, Mkoval, Mleinart, Modulatum, MonstaPro, Mr. Billion, MuZemike, Mulligatawny,
Mutoso, Nasa-verve, Newbiepedian, Nick knowles, Nixdorf, Notheruser, Ntizoglou, Ohconfucius, Olexandr Kravchuk, Olivier, Olrick, Omnipaedista, Outback the koala, P. S. F. Freitas, Patrick,
PaulHanson, Peter Horn, Piledhigheranddeeper, Plasticlax, Plasticup, Pol098, Puckly, PuzzletChung, Qwanqwa, R'n'B, R4f, RP9, RW Marloe, Ranveig, Rashev, RayGates, Revelian, Rick Jelliffe,
Rjwilmsi, Rlsheehan, Rp8083, Rukaribe, Ruud Koot, SGBailey, SHCarter, Samuelled, Scepia, Seahorseruler, Sega381, Seidenstud, Shmilyshy, Shoujun, Sietse Snel, Silica-gel, Slathering,
Snoopy99, SomeHuman, Spearhead, Stephan Leeds, Stepho-wrs, Sterling.M.Archer, Stovetopcookies, Strait, Subversive, Suruena, SuzanneIAM, Sv1xv, Svick, TYelliot, Tedickey, The Anome,
The Aviv, Thecurran, Theifynia, Thylacoleo, Tide rolls, Timothy Cooper, Tinton5, Tobias Conradi, TreasuryTag, Truthanado, Ujjwal210, UnitedStatesian, Unmerklich, Vargklo, Verbose,
VincentV, Vuong Ngan Ha, Wereon, Whkoh, Whoisjohngalt, Widr, Winklerteen, WirelessMike, Writtenright, WurmWoode, Yamamoto Ichiro, Yaronf, Yk Yk Yk, Yworo, ZooFari, Zorro CX,
Zundark, පසිඳු කාවින්ද, と あ る 白 い 猫, 448 anonymous edits
World Wide Web Consortium Source: http://en.wikipedia.org/w/index.php?oldid=543582452 Contributors: 100arab.saurabh, 16@r, 195.186.254.xxx,
2601:0:9080:1C:F448:61B3:3CCA:2DD, 65.197.2.xxx, A.M., ARIENGGO, Adimovk5, Aeons, Ahunt, Alba, Alibabs, Almit39, Alphachimp, Amerdeni, Ancheta Wis, Andrewman327, AndriuZ,
Andy Dingley, Ansell, Anwar saadat, Argon233, Arite, ArnoLagrange, Avono, Azbondgirl, B9 hummingbird hovering, Baojie, BarretB, Bdesham, BetweenMyths, Beware podpeople, Bmusician,
Bonadea, Bunnyhop11, CambridgeBayWeather, Carlj7, CesarB, Chealer, Christian List, Chronorick, Cic, ClementSeveillac, CommonsDelinker, Comrade42, Conversion script, Cplot,
Cybercobra, D'oh!, DDima, DEng, David.Monniaux, Daviddec, Delirium, Den fjättrade ankan, Dennylin93, Diberri, DirkvdM, Dka1, Dmccreary, Dmyersturnbull, DocWatson42,
DominiqueHazaelMassieux, Donatus, Duncan.france, ESkog, Edivorce, El C, ElKevbo, Emufarmers, Enkrates, Epbr123, Everton1984, Evice, Execvator, Favonian, Frequencydip,
GRIFFnDOOR, Gail, Galoubet, Georgia guy, Gewild, Ghettoblaster, Gidonb, Giftlite, Goatcheese3, Gobonobo, Golbez, Goswamir14, Graham87, Greenshed, Gregorio, Hanteng, Harvester,
Helix84, Hu, Hugoh, I already forgot, Icairns, Infosocialist, Itpastorn, IvanLanin, JF Manning, JRWoodwardMSW, Jack Merridew, Jacroe, Jatkins, Javawizard, Jcravens42, Jesmania,
Jodi.a.schneider, Joe2008, Jonik, Jonkerz, Josh Tumath, Josh3736, Joshi1983, Jskhuman, Kanonkas, KarlDubost, Kathar, Khalid hassani, Kingturtle, Krauss, Larry Sanger, Larry V, Leahcim nai,
Lee Daniel Crocker, Legoktm, Leranedo, LiDaobing, Liam987, Lightmouse, Lijnema, Linuxerist, Lisbk, LittleDan, Lotje, LuLxFakie, Luckas Blade, Lugia2453, MITalum, MZMcBride, Mabdul,
Mac, Manop, Marek69, Masonbarge, Meaghan, Melmelmarms, Meno25, MiNombreDeGuerra, Miaow Miaow, Michael Hardy, Milant, Ministry of Truth, Mjb, Monkle, Moondyne, Mpidge,
Mr.Z-man, Ms2ger, Msiderwicz, Mxn, Mzajac, NO ACMLM,AND XKEPPER SUCK !, Nakon, Nanshu, NantonosAedui, Nickscoco, Night Gyr, Ohconfucius, Oicumayberight, Old Guard,
Oneiros, Pao662, Paolo Baggia, Patchouli, Paxsimius, Pearle, Pedant17, Persian Poet Gal, Peter Winnberg, Philwiki, Phoenix-forgotten, Pigsonthewing, Pxma, Qwyrxian, Qxz, Radiojoe329,
Rajesh.kk99, Ramesh Chandra, Raznice, Rchamberlain, Renku, Rojypala, S.Örvarr.S, Safepage, Scottkeir, Seanho, Sebesta, Simeon, Simetrical, Sjh, Skraz, Sleepinginisgivingin, Sleepyhead81,
Smyth, Spainhour, Squash, Suruena, TNLNYC, TarzanASG, Technopat, The Anome, The Thing That Should Not Be, TheRaven7, Tiddly Tom, Tompagenet, Toniher, Toussaint, Tregoweth,
Triwbe, Ttwaring, Twinzor, UkPaolo, Vbigdeli, Wayfarer, Wedesoft, Wegates, Whaa?, Wikiacc, Wolfhoundfeet, WulfTheSaxon, Yacht, Yondonjamts, Youngdesigner, ZabMilenko, Zearin,
Zhouxiaohu, Zorblek, 296 anonymous edits
262
Image Sources, Licenses and Contributors
Image Sources, Licenses and Contributors
File:Ted Nelson cropped.jpg Source: http://en.wikipedia.org/w/index.php?title=File:Ted_Nelson_cropped.jpg License: Creative Commons Attribution-Sharealike 3.0 Contributors: Dgies
Image:HypertextEditingSystemConsoleBrownUniv1969.jpg Source: http://en.wikipedia.org/w/index.php?title=File:HypertextEditingSystemConsoleBrownUniv1969.jpg License: Creative
Commons Attribution 2.0 Contributors: Bapho, Dancter, Grlloyd, Grm wnr, Infrogmation, Pmsyyz, 1 anonymous edits
File:Internet1.jpg Source: http://en.wikipedia.org/w/index.php?title=File:Internet1.jpg License: Creative Commons Attribution-Share Alike Contributors: Rock1997
File:Tim Berners-Lee CP 2.jpg Source: http://en.wikipedia.org/w/index.php?title=File:Tim_Berners-Lee_CP_2.jpg License: Creative Commons Attribution 2.0 Contributors: Silvio Tanaka
File:Http request telnet ubuntu.png Source: http://en.wikipedia.org/w/index.php?title=File:Http_request_telnet_ubuntu.png License: Public Domain Contributors: TheJosh
File:WWW logo by Robert Cailliau.svg Source: http://en.wikipedia.org/w/index.php?title=File:WWW_logo_by_Robert_Cailliau.svg License: Public Domain Contributors: Hell Pé (PNG
version); Bibi Saint-Pol (SVG version)
File:Internet map 1024.jpg Source: http://en.wikipedia.org/w/index.php?title=File:Internet_map_1024.jpg License: Creative Commons Attribution 2.5 Contributors: Barrett Lyon The Opte
Project
file:Crystal Clear app browser.png Source: http://en.wikipedia.org/w/index.php?title=File:Crystal_Clear_app_browser.png License: GNU Lesser General Public License Contributors:
Everaldo Coelho and YellowIcon
File:First Web Server.jpg Source: http://en.wikipedia.org/w/index.php?title=File:First_Web_Server.jpg License: GNU Free Documentation License Contributors: User:Coolcaesar at
en.wikipedia
File:Cern datacenter.jpg Source: http://en.wikipedia.org/w/index.php?title=File:Cern_datacenter.jpg License: Creative Commons Attribution-Sharealike 3.0,2.5,2.0,1.0 Contributors:
Hugovanmeijeren
File:Cailliau Abramatic Berners-Lee 10 years WWW consortium.png Source:
http://en.wikipedia.org/w/index.php?title=File:Cailliau_Abramatic_Berners-Lee_10_years_WWW_consortium.png License: Creative Commons Attribution-Sharealike 2.5 Contributors: Robert
Cailliau
File:WorldWideWebAroundWikipedia.png Source: http://en.wikipedia.org/w/index.php?title=File:WorldWideWebAroundWikipedia.png License: GNU Free Documentation License
Contributors: User:Chris 73
File:URI Euler Diagram no lone URIs.svg Source: http://en.wikipedia.org/w/index.php?title=File:URI_Euler_Diagram_no_lone_URIs.svg License: GNU Free Documentation License
Contributors: David Torres original author derivative work: Qwerty0 (talk)
File:RecipeBook XML Example.png Source: http://en.wikipedia.org/w/index.php?title=File:RecipeBook_XML_Example.png License: Public Domain Contributors: Avinash Meetoo
File:SGML.svg Source: http://en.wikipedia.org/w/index.php?title=File:SGML.svg License: Creative Commons Attribution-Sharealike 2.5 Contributors: Dreftymac
File:OED-LEXX-Bungler.jpg Source: http://en.wikipedia.org/w/index.php?title=File:OED-LEXX-Bungler.jpg License: GNU Free Documentation License Contributors: Andrew pmk,
Helix84, Mfc, WikipediaMaster, 5 anonymous edits
File:Old HTML Logo.svg Source: http://en.wikipedia.org/w/index.php?title=File:Old_HTML_Logo.svg License: Public Domain Contributors: Lochsley
File:Tim Berners-Lee April 2009.jpg Source: http://en.wikipedia.org/w/index.php?title=File:Tim_Berners-Lee_April_2009.jpg License: Creative Commons Attribution 2.0 Contributors:
Enrique Dans from Madrid, Spain
File:HTML5-logo.svg Source: http://en.wikipedia.org/w/index.php?title=File:HTML5-logo.svg License: Creative Commons Attribution 3.0 Contributors: W3C
Image:XHTML.svg Source: http://en.wikipedia.org/w/index.php?title=File:XHTML.svg License: Creative Commons Attribution-Sharealike 2.5 Contributors: en:User:Dreftymac
Image:Wikipedia main page XHTML source.png Source: http://en.wikipedia.org/w/index.php?title=File:Wikipedia_main_page_XHTML_source.png License: GNU General Public License
Contributors: Original uploader was Klingoncowboy4 at en.wikipedia. Later version(s) were uploaded by Platypus222 at en.wikipedia.
File:XML.svg Source: http://en.wikipedia.org/w/index.php?title=File:XML.svg License: Creative Commons Attribution-Sharealike 2.5 Contributors: en:User:Dreftymac
File:HTML5-APIs-and-related-technologies-by-Sergey-Mavrody.png Source: http://en.wikipedia.org/w/index.php?title=File:HTML5-APIs-and-related-technologies-by-Sergey-Mavrody.png
License: Creative Commons Attribution-Sharealike 3.0 Contributors: Jarry1250, Mercury999, Morgankevinj, Torsch, 1 anonymous edits
File:JKDOM.SVG Source: http://en.wikipedia.org/w/index.php?title=File:JKDOM.SVG License: Creative Commons Attribution-Sharealike 3.0 Contributors: John M. Kennedy T.
file:Wikibooks-logo-en-noslogan.svg Source: http://en.wikipedia.org/w/index.php?title=File:Wikibooks-logo-en-noslogan.svg License: logo Contributors: User:Bastique, User:Ramac et al.
File:Javascript icon.svg Source: http://en.wikipedia.org/w/index.php?title=File:Javascript_icon.svg License: GNU Lesser General Public License Contributors: Lupo
File:Håkon Wium Lie.jpg Source: http://en.wikipedia.org/w/index.php?title=File:Håkon_Wium_Lie.jpg License: Creative Commons Attribution-Sharealike 2.0 Contributors: Franco Folini
from San Francisco, USA
Image:Bitmap VS SVG.svg Source: http://en.wikipedia.org/w/index.php?title=File:Bitmap_VS_SVG.svg License: Creative Commons Attribution-Sharealike 2.5 Contributors: Yug,
modifications by 3247
File:Usage share of web browsers (Source StatCounter).svg Source: http://en.wikipedia.org/w/index.php?title=File:Usage_share_of_web_browsers_(Source_StatCounter).svg License:
Creative Commons Attribution 3.0 Contributors: User:Daniel.Cardenas, User:Litehacker
File:Marc Andreessen.jpg Source: http://en.wikipedia.org/w/index.php?title=File:Marc_Andreessen.jpg License: Creative Commons Attribution 2.0 Contributors: Brian Solis
File:WorldWideWeb FSF GNU.png Source: http://en.wikipedia.org/w/index.php?title=File:WorldWideWeb_FSF_GNU.png License: unknown Contributors: Gürkan Sengün
File:LG Smart TV web browser.jpg Source: http://en.wikipedia.org/w/index.php?title=File:LG_Smart_TV_web_browser.jpg License: Public Domain Contributors: AussieLegend
File:Mozilla Firefox 3.5 logo 256.png Source: http://en.wikipedia.org/w/index.php?title=File:Mozilla_Firefox_3.5_logo_256.png License: Trademarked Contributors: Mozilla Foundation
File:Mozilla-wordmark.png Source: http://en.wikipedia.org/w/index.php?title=File:Mozilla-wordmark.png License: Creative Commons Attribution-Sharealike 3.0 Contributors: Kilom691,
Michael Barera, Trewyy, Túrelio, 1 anonymous edits
File:Firefox 19 on Windows.png Source: http://en.wikipedia.org/w/index.php?title=File:Firefox_19_on_Windows.png License: Creative Commons Attribution-Sharealike 3.0 Contributors:
Firefox: Mozilla Foundation (and your collaborators)
File:Phoenix 0.1.png Source: http://en.wikipedia.org/w/index.php?title=File:Phoenix_0.1.png License: unknown Contributors: User:Fsf02
File:Acid3 Mozilla Firefox test.png Source: http://en.wikipedia.org/w/index.php?title=File:Acid3_Mozilla_Firefox_test.png License: Creative Commons Attribution-Sharealike 3.0
Contributors: User:Moisés P. Parra O.
File:Current Firefox in Windows 7.png Source: http://en.wikipedia.org/w/index.php?title=File:Current_Firefox_in_Windows_7.png License: unknown Contributors: Codename Lisa,
Hindustanilanguage, Incarus, Mardus, Ralgis
File:Firefox 18 on Ubuntu 12.10 showing Wikipedia.png Source: http://en.wikipedia.org/w/index.php?title=File:Firefox_18_on_Ubuntu_12.10_showing_Wikipedia.png License: unknown
Contributors: Codename Lisa
File:OS X Firefox 19.0.2.png Source: http://en.wikipedia.org/w/index.php?title=File:OS_X_Firefox_19.0.2.png License: unknown Contributors: Mozilla Corporation
File:Firefox for Android 14.0.png Source: http://en.wikipedia.org/w/index.php?title=File:Firefox_for_Android_14.0.png License: unknown Contributors: Android Developers / Mozilla
Foundation
File:Iceweasel-icon.svg Source: http://en.wikipedia.org/w/index.php?title=File:Iceweasel-icon.svg License: GNU General Public License Contributors: Ricardo Fernandez Fuentes, copyright
2006-2007
File:Deer park globe.svg Source: http://en.wikipedia.org/w/index.php?title=File:Deer_park_globe.svg License: Creative Commons Attribution-Share Alike Contributors: SVG: Darolu Original
PNG: Tene which was ostensibly taken from the Mozilla CVS.
File:Mozilla Phoenix Logo.png Source: http://en.wikipedia.org/w/index.php?title=File:Mozilla_Phoenix_Logo.png License: unknown Contributors: Mozilla
File:Mozilla_Firefox_3.5_logo_256.png Source: http://en.wikipedia.org/w/index.php?title=File:Mozilla_Firefox_3.5_logo_256.png License: Trademarked Contributors: Mozilla Foundation
File:Mozilla Aurora icon.png Source: http://en.wikipedia.org/w/index.php?title=File:Mozilla_Aurora_icon.png License: unknown Contributors: Mozilla
File:Mozilla Nightly icon 2011.png Source: http://en.wikipedia.org/w/index.php?title=File:Mozilla_Nightly_icon_2011.png License: unknown Contributors: Mozilla
File:Minefield-icon.png Source: http://en.wikipedia.org/w/index.php?title=File:Minefield-icon.png License: unknown Contributors: Mozilla
263
Image Sources, Licenses and Contributors
File:Web_browser_by_country.svg Source: http://en.wikipedia.org/w/index.php?title=File:Web_browser_by_country.svg License: Creative Commons Attribution-Sharealike 3.0
Contributors: User:Free ottoman
File:Firefox.svg Source: http://en.wikipedia.org/w/index.php?title=File:Firefox.svg License: Public Domain Contributors: Yarnalgo (talk)
File:Browser Marketshares—November 2012—Firefox.svg Source: http://en.wikipedia.org/w/index.php?title=File:Browser_Marketshares—November_2012—Firefox.svg License: Creative
Commons Zero Contributors: User:Kelvinsong
File:Firefox connection failure on Park and Ride bus Cambridge.jpg Source:
http://en.wikipedia.org/w/index.php?title=File:Firefox_connection_failure_on_Park_and_Ride_bus_Cambridge.jpg License: Public Domain Contributors: Closeapple, Silas S. Brown
File:Internet Explorer 9 icon.png Source: http://en.wikipedia.org/w/index.php?title=File:Internet_Explorer_9_icon.png License: unknown Contributors: A:-)Brunuś, Ankit Maity, AppliArt,
Ariesk47, Codename Lisa, Deadly Coordinates, FleetCommand, Koman90, Mahahahaneapneap, Melesse, Mono, Orange-kun, Pmsyyz, Tbhotch, Traveler100, 1 anonymous edits
File:Internet Explorer 10 on Windows 7.png Source: http://en.wikipedia.org/w/index.php?title=File:Internet_Explorer_10_on_Windows_7.png License: Creative Commons
Attribution-Sharealike 3.0 Contributors: User:Parabplus
Image:Internet Explorer 10 icon.svg Source: http://en.wikipedia.org/w/index.php?title=File:Internet_Explorer_10_icon.svg License: unknown Contributors: Cclloyd9785, Codename Lisa,
Tbhotch, X201
File:IE10 ModernUI.png Source: http://en.wikipedia.org/w/index.php?title=File:IE10_ModernUI.png License: Public Domain Contributors: Internet Explorer 10: Microsoft Wikipedia:
Wikimedia Foundation File:Protein fold.png: DrKjaergaard of Wikimedia Commons File:Sandy Oct 29 2012 1815Z.jpg: NASA, MODIS/ LANCE, HDF File Data processed by Supportstorm
File:Graham Waterhouse.jpg: Gerda Arendt of Wikimedia Commons File:Plante Mask.jpg: Horge of Wikimedia Commons
File:Internet Explorer 1.0.png Source: http://en.wikipedia.org/w/index.php?title=File:Internet_Explorer_1.0.png License: unknown Contributors: Althepal, Bkell, Courcelles, Dcoetzee, FSII,
Fourthords, Icyboy91, Joining a hencing, Mechamind90, Phatom87, Rhapsody Scarlet, Sfan00 IMG, Themodernizer, Tyomitch, 3 anonymous edits
File:IE10 Wikipedia.png Source: http://en.wikipedia.org/w/index.php?title=File:IE10_Wikipedia.png License: Trademarked Contributors: User:XTSTech
File:IExplore.svg Source: http://en.wikipedia.org/w/index.php?title=File:IExplore.svg License: GNU Free Documentation License Contributors: en:User:Soumyasch
File:Web browser usage on Wikimedia.png Source: http://en.wikipedia.org/w/index.php?title=File:Web_browser_usage_on_Wikimedia.png License: Creative Commons
Attribution-Sharealike 3.0 Contributors: A3e6u9
File:Internet-explorer-usage-data.svg Source: http://en.wikipedia.org/w/index.php?title=File:Internet-explorer-usage-data.svg License: Public Domain Contributors: Original uploader was El
T at en.wikipedia Later versions were uploaded by Henrikb4, Schapel at en.wikipedia.
File:Decrease2.svg Source: http://en.wikipedia.org/w/index.php?title=File:Decrease2.svg License: Public Domain Contributors: Sarang
File:Increase2.svg Source: http://en.wikipedia.org/w/index.php?title=File:Increase2.svg License: Public Domain Contributors: Sarang
File:IE6ubuntu.png Source: http://en.wikipedia.org/w/index.php?title=File:IE6ubuntu.png License: GNU General Public License Contributors: Astroview120mm, Bsayusd, Carlosguitar,
ESkog, Kahlil88, Remember the dot, SteveSims, WOSlinker, 1 anonymous edits
File:Google Chrome icon (2011).svg Source: http://en.wikipedia.org/w/index.php?title=File:Google_Chrome_icon_(2011).svg License: Trademarked Contributors: C3F2k, Cloudbound,
Dynamicwork, Fastily, FleetCommand
File:Google Chrome screenshot.png Source: http://en.wikipedia.org/w/index.php?title=File:Google_Chrome_screenshot.png License: GNU General Public License Contributors:
User:Greenelfs
File:File-Chromium-Linux-Alpha.png Source: http://en.wikipedia.org/w/index.php?title=File:File-Chromium-Linux-Alpha.png License: unknown Contributors: Rugby471.Program ©
2006-2009 The Chromium Authors.
File:Acid3-Chrome4Dev.PNG Source: http://en.wikipedia.org/w/index.php?title=File:Acid3-Chrome4Dev.PNG License: unknown Contributors: 7H4 6U713RR3Z, Koman90, TheTechFan,
Totalaero
file:Google Chrome icon (2011).svg Source: http://en.wikipedia.org/w/index.php?title=File:Google_Chrome_icon_(2011).svg License: Trademarked Contributors: C3F2k, Cloudbound,
Dynamicwork, Fastily, FleetCommand
File:Opera O.svg Source: http://en.wikipedia.org/w/index.php?title=File:Opera_O.svg License: Trademarked Contributors: Opera Software ASA
File:Opera back mouse gesture.svg Source: http://en.wikipedia.org/w/index.php?title=File:Opera_back_mouse_gesture.svg License: Public Domain Contributors: Remember the dot, Sarang
File:Opera forward mouse gesture.svg Source: http://en.wikipedia.org/w/index.php?title=File:Opera_forward_mouse_gesture.svg License: Public Domain Contributors: Remember the dot,
Sarang
File:Opera new tab mouse gesture.svg Source: http://en.wikipedia.org/w/index.php?title=File:Opera_new_tab_mouse_gesture.svg License: Public Domain Contributors: Remember the dot,
Sarang
File:Nokia5800 Opera Mobile 10 1 Beta.JPG Source: http://en.wikipedia.org/w/index.php?title=File:Nokia5800_Opera_Mobile_10_1_Beta.JPG License: Public domain Contributors:
Antrikshy at en.wikipedia
File:Opera mini.png Source: http://en.wikipedia.org/w/index.php?title=File:Opera_mini.png License: GNU General Public License Contributors: Boris23, KKPCW, Serdelll, 2 anonymous
edits
File:DSOnWhite.jpg Source: http://en.wikipedia.org/w/index.php?title=File:DSOnWhite.jpg License: Creative Commons Attribution-ShareAlike 3.0 Unported Contributors: Consumed
Crustacean
File:Wii Wiimotew.jpg Source: http://en.wikipedia.org/w/index.php?title=File:Wii_Wiimotew.jpg License: GNU Free Documentation License Contributors: Jecowa
File:Safari Reader.png Source: http://en.wikipedia.org/w/index.php?title=File:Safari_Reader.png License: Creative Commons Attribution-Sharealike 3.0 Contributors: User:SuperDutchGuy
Image:ISO english logo.svg Source: http://en.wikipedia.org/w/index.php?title=File:ISO_english_logo.svg License: Public Domain Contributors: International Organization for Standardization
Image:ISO Members.svg Source: http://en.wikipedia.org/w/index.php?title=File:ISO_Members.svg License: Public Domain Contributors: Ichwan Palongengi
File:Memory plaque of founding ISA in Prague cropped.jpg Source: http://en.wikipedia.org/w/index.php?title=File:Memory_plaque_of_founding_ISA_in_Prague_cropped.jpg License:
GNU Free Documentation License Contributors: Luděk Kovář – [email protected]
Image:W3C_Icon.svg Source: http://en.wikipedia.org/w/index.php?title=File:W3C_Icon.svg License: Trademarked Contributors: Adrignola, Cy21, Fleshgrinder, Palosirkka, Sven,
WikipediaMaster
264
License
License
Creative Commons Attribution-Share Alike 3.0 Unported
//creativecommons.org/licenses/by-sa/3.0/
265
A Basic HTML Primer
by
Chuck Easttom
HTML or Hyper Text Markup Language is a relatively simple markup language that
web browsers can use to display web pages. You can write HTML code in any text
editor, I personally use Windows Notepad. Just when you save the file remember to
save it as a .htm or .html file. The browser recognizes files with the .htm and .html
extensions and will look in them for valid HTML code. HTML has had a long history
and has gone through a number of revisions. Each successive revision adds more
functionality to HTML and with the current version(as of this writing) of HTML
(Version 4.0), HTML is a very powerful language that can take some time to learn.
Fortunately most work on web pages can be done with just the essentials of HTML and
that is what this chapter will teach you.
The first question is how do we get the web browser to know that our document has
HTML codes for it to read? HTML code is composed of tags that let the browser know
what is to be done with certain text. At the beginning of your document you place the
command <HTML> and at the end you put </HTML> and the web browser will know
that the codes in between are supposed to be HTML.
<HTML>
put HTML code here
</HTML>
You have to admit that this is pretty simple. But this web page won't do much of
anything at all. So how about we do the obligatory 'Hello World' sample that every
1
HTML Primer by Chuck Easttom
programming book starts off with. It will show you how to do text and some basic
HTML.
<HTML>
1
2
HTML Primer by Chuck Easttom
<HEAD>
<TITLE>My First HTML Page</TITLE>
</HEAD>
<BODY>
<P><CENTER>
<B><FONT SIZE="+2">Hello World</FONT></B>
</CENTER>
</BODY>
</HTML>
Believe it or not this little snippet shows you most of what you need to know about
HTML. To begin with, note that everything is contained between the <HTML> and
</HTML> tags. These two commands define the beginning and the end of the HTML
document. The web browser will ignore any items outside these commands. Next we
have a section that is contained between the <HEAD> and </HEAD> commands. This is
the header portion of your HTML document. The <TITLE> and </TITLE> commands
contain the title that will actually appear in the title bar of your browser. Now a lot more
can be done in the HEAD section, but that will be addressed as we work our way through
this book.
Then we have the <BODY> </BODY> commands. As you might have guessed this is
the body of your HTML document. This is where most of your web pages code is going
to go). Now inside the body section we have some text and some additional text that will
define how the text will appear in the browser. The <P> command defines the beginning
3
HTML Primer by Chuck Easttom
2
4
HTML Prime
and the end of a paragraph. The <B> and </B> commands tell the browser to make
whatever text is between them bold. The <FONT SIZE="+2" tells the browser how big
the text should be (there are a variety of methods for doing this, as we shall see.). The
</FONT> command ends the font section of the HTML code.
By now I trust you have noticed a pattern. All the commands have an opening
command and a closing command. Well this is true for all but a very few HTML
commands. Just remember this rule, you close the commands in opposite order of how
you opened them. Notice in the above sample code I opened the commands before the
text like this: P><CENTER> <B><FONT SIZE="+2">, and then closed them like this:
</FONT></B></CENTER></P>. This is important to remember. You can think of this
as 'backing out‟ of your commands.
Images and hyperlinks
What we have so far gives you a very simple web page that displays one phrase in
bold text. Admittedly, this is not very impressive, but if you understand the concepts
involved with using these HTML commands then you conceptually understand HTML.
Now lets expand your knowledge of HTML. Usually web pages contain more than
simply a title and some text. Other items you might put in a web page would include
images and links to other web pages. Placing an image on an HTML document is
rather simple:
<IMG SRC="imagepath\imagename" WIDTH=52 HEIGHT=88 ALIGN=bottom>
You simply provide the path to the image and the name of the image, including its file
extension (such as .gif, .bmp, .jpg, etc.). The other properties in this command allow you
to alter the placement and size of the image. You can alter its width and height as well as
5
HTML Primer by Chuck Easttom
3
6
HTML Prime
its alignment.
You will also note that when you first place an image on an HTML page it has a
border around it. You can get rid of this by adding „border = 0‟ into the tag, as in this
example:
<IMG SRC=”somepic.gif” BORDER =0>
Putting a hyperlink to another website or to an email address is just as simple:
<A HREF="http://www.wordware.com">
This link will connect to the URL (Uniform Resource Locator) contained inside the
quotation marks. In order to use this methodology to create an email link simply use this:
<A HREF="mailto:[email protected]">
You simply have to change the 'http://' portion to "mailto:” Notice that all three of the
preceding methods have one thing in common. They do not close the command in the
typical manner that other HTML commands are closed. Now lets examine the source
code for a simple but complete HTML document:
<HTML>
<HEAD>
<TITLE>Test HTML
Page</TITLE> </HEAD>
<BODY
BGCOLOR="blue"> <P>
<CENTER><B><FONT SIZE="+2">My First Web Page </FONT></B></CENTER>
<P>I am learning HTML !. I <B><I>LOVE</I></B> HTML!
<P><CENTER><IMG SRC="java.gif" ></CENTER>
7
HTML Primer by Chuck Easttom
4
8
HTML Prime
<P>
<P><CENTER>You can email me at</CENTER>
<P>
<CENTER><A HREF="mailto:[email protected]">Email
ME</A> </CENTER><
<P><CENTER>Or go to my Web Site </CENTER>
<P><CENTER><A HREF="http://www.chuckeasttom.com">Chuck Easttom‟s
World</A></CENTER>
</BODY>
</HTML>
First a few clarifications. You should note at the beginning a new command;
<BODY BGCOLOR="blue">
You can change the background color of your page using this command and any standard
color. You can also set a background image for your HTML document with a similar
command:
<BODY background="mypicture.gif">
Colors and Backgrounds
Lets examine a few other simple items we can add to our HTML documents. The first
is altering text color. You can set the default text color for the entire document and you
can alter the color of specific text. You alter the default text color for the entire
9
HTML Primer by Chuck Easttom
5
10
HTML Prime
document using a technique very similar to the one used to alter the background color of
the document:
<BODY TEXT="blue">
This text simply tells the browser that unless otherwise specified, all text in this
document should be blue. In addition to changing the default color of all text in a
document you may wish to simply change the color of a specific section of text. This is
fairly easy to do as well. Instead of using the BODY TEXT command we use the FONT
command:
<FONT COLOR="red">This is red text</FONT> This,
like the other color commands, can be used with any standard color.
There are a wide variety of tags you can use to alter the appearance and behavior of texts
and images. Just a few others for you to consider would be the <BLINK></BLINK> tag
which, as the name implies, causes the text to blink (this is only supported by Netscape
and will not work in Internet Explorer). Another example is the <STRIKE></STRIKE>
causes the text to appear with a line through it, a strike through. The tags we have
covered so far are enough to allow you to accomplish what you need in HTML.
Tables
The next HTML command we are going to examine is the table. You frequently see
tables on web pages and they are a very good way to organize data on your web page.
First I will show you how to create a table with a border:
<TABLE BORDER=1>
<TR>
<TD>
11
HTML Primer by Chuck Easttom
6
12
HTML Prime
<P>This
<P>Is a
<TR>
<TD>
<P>Table
<TD>
<P>With a border
</TABLE>
By now you should be able to recognize that the <TABLE> and </TABLE> tags
actually contain the table. Each <TR> tag designates another row in the table. The
<TD></TD> create a cell within that row(TD refers to Table Data). Using those three
tags you can create a table with any number of rows or columns you wish. If you will
notice the first line of this code the BORDER property is set to 1. This means the border
has a width and is therefore visible.
In some instances you may not want the border to show. Tables can be used simply
to hold images and text in relative positions. In cases such as this you may not wish the
border to show. Below is an example of a table whose boarders will not show.
<P><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>
<TR>
<TD>
<P>This
<TD>
<P>is a
13
HTML Primer by Chuck Easttom
7
14
HTML Prime
<TR>
<TD>
<P>Table
<TD>
<P>With no borders or padding
</TABLE>
Notice that the BORDER, CELLPADDING, and CELLSPACING are all set to 0.
This causes the table itself to not be displayed. However the contents of the table will
display. You should also notice that in both examples I have placed text in each cell.
Image 1-3 shows the same web page as you saw in image 1-2 with the addition of two
tables. One with a border and one without.
Lists
It is common to present data in lists. With HTML you have access to a variety of types
of lists. The first we will discuss is the unordered list.
<UL>
<LI> First Item
<LI> Second Item
</UL>
The <UL> and </UL> tags define the code the lies between them as being part of an
unordered list. The <LI> tags identify list items. An unordered list item will simply
appear as a bullet
15
HTML Primer by Chuck Easttom
8
16
HTML Prime
An ordered list is not much different. The <LI> list item stays the same. But the <UL>
is going to change somewhat.
<OL type = I>
<LI> First Item
<LI> Second
Item </OL>
Here is a table containing all the types of ordered lists and how they appear in your
browser.
Type = I
Type = I
Type = 1
I.
First Item
II.
Second Item
i.
First Item
ii.
Second Item
1. First Item
2. Second Item
Type = a
a. First Item
b. Second Item
Type = A
A. Second Item
B. Second Item
Marquee
A very fascinating item you can add to your web page is the marquee. A scrolling
marquee takes a message or an image and scrolls it across the screen. The basic format is
this.
17
HTML Primer by Chuck Easttom
9
18
HTML Prime
<MARQUEE LOOP = INFINITE> Hey this is really cool </MARQUEE>
Now in addition to text you can also place an image in the marquee that you can scroll
across the screen.
<MARQUEE LOOP = INFINITE> <IMG SRC = “mypic.gif”></MARQUEE>
You can also change the direction the marquee moves in. The direction tag will tell the
marquee which direction to scroll too, not from.
<MARQEE LOOP = INFINITE DIRECTION = RIGHT>Hey this is a cool marquee
</MARQUEE>
You can choose from the following directions: Left, Right, Up, and Down. Marquees
provide an interesting and relatively easy way to display very eye catching information
on your web page.
19
HTML Primer by Chuck Easttom
10
20
HTML Primer
HTML Beginner's Guide
htmldog.com
This HTML Beginner's Guide assumes that you have no previous
knowledge of HTML or CSS.
It should be quite easy to follow if you work through each step, which are all
brought together at the end, before moving on to the CSS Beginner's Guide.
The thing to keep in mind is that HTML and CSS are all about separating the
content (HTML) and the presentation (CSS). HTML is nothing more than
fancy structured content and the formatting of that content will come later
when we tackle CSS.
If you have looked at other HTML tutorials, you may find that they mention
certain things that HTML Dog does not. This is because many methods are
obsolete, non-standard or just plain bad practice. Getting into the frame of
mind of doing things the RIGHT way from the start will turn in to much better
results in the end.
Getting Started
Most of the stuff on the web is no different than the stuff on your computer it's just a whole load of files sorted into a whole load of directories.
HTML files are nothing more than simple text files, so to start writing in
HTML, you need nothing more than a simple text editor. Notepad is a
common example (on Windows this is usually found under the Programs >
Accessories menu).
Type this in to your text editor:
This is my first web page
Now create a folder called 'html' and save the file as 'myfirstpage.html' (it is
important that the extension '.html' be specified - some text editors, such as
Notepad, will automatically save it as '.txt' otherwise).
To look at HTML files, they don't even need to be on the web. Open Internet
Explorer, or any other web browser and in the address bar, where you
usually type web addresses, type in the location of the file you just saved
(for example, 'c:\html\myfirstpage.html') and hit return.
Pow. There it is. Your first web page. How exciting. And all it took was a few
typed words.
Note
We've said here to use a basic text-editor, such as Notepad, but you
may be tempted to use a dedicated software program such as
Macromedia Dreamweaver or Microsoft Frontpage.
You should be very careful when using these programs, especially if
you are a beginner as they often throw in unnecessary or nonstandard code.
If you're serious about learning HTML, you should read through a
tutorial such as this first, so that you at least have a basic
understanding of what is going on.
Software programs such as these will never give you the same control
over a web page as coding by hand.
Tags, Attributes and Elements
Although the basics of HTML are plain text, we need a bit more to make it a
valid HTML document.
Tags
The basic structure of an HTML document includes tags, which surround
content and apply meaning to it.
Change your document so that it looks like this:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<body>
This is my first web page
</body>
</html>
Now save the document again, go back to the web browser and select
'refresh' (which will reload the page).
The appearance of the page will not have changed at all, but the purpose of
HTML is to apply meaning, not presentation, and this example has now
defined some fundamental elements of a web page.
The first line on the top that starts <!DOCTYPE... is to let the browser know
that you know what the hell you're doing. You may think that you don't
actually know what you're doing yet, but it's important to stick this in. If you
don't, browsers will switch into 'quirks mode' and act in a very peculiar way.
Don't worry about this just yet, you can learn more about 'document types'
in the HTML Advanced Guide if you really want to. For the moment, just
remember to shove this line at the top of your web pages and you're
laughin'.
To get back to the point, <html> is the opening tag that kicks things off
and tells the browser that everything between that and the </html> closing
tag is an HTML document. The stuff between <body> and </body> is the
main content of the document that will appear in the browser window.
Closing tags
The </body> and </html> close their respective tags. ALL HTML tags should
be closed. Although older versions of HTML lazily allowed some tags not to be
closed, latest standards require all tags to be closed. This is a good habit to
get into anyway.
Not all tags have closing tags like this (<html></html>) some tags, which do
not wrap around content will close themselves. The line-break tag for
example, looks like this : <br />. We will come across these examples later.
All you need to remember is that all tags must be closed and most (those
with content between them) are in the format of opening tag - content closing tag.
Attributes
Tags can also have attributes, which are extra bits of information. Attributes
appear inside the opening tag and their value is always inside quotation
marks. They look something like <tag attribute="value">Margarine</tag>.
We will come across tags with attributes later.
Elements
Tags tend not to do much more than mark the beginning and end of an
element. Elements are the bits that make up web pages. You would say, for
example, that everything that is in-between and includes the <body> and
</body> tags is the body element. As another example, whereas '<title>'
and '</title>' are tags, '<title>Rumple Stiltskin</title>' is a title
element.
Page Titles
All HTML pages should have a page title. To add a title to your page, change
your code so that it looks like this:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>My first web page</title>
</head>
<body>
This is my first web page
</body>
</html>
We have added two new elements here, that start with the head tag and the
title tag (and see how both of these close).
The head element (that which starts with the <head> opening tag and ends
with the </head> tag) appears before the body element (starting with <body>
and ending with </body>) and contains information that will load before the
body information. The information in the head element does not appear in
the browser window. We will see later on that other elements can appear
inside the head element, but the most important of them is the title
element.
If you look at this document in the browser (save and refresh as before), you
will see that 'My first web page' will appear on the title bar of the window
(not the actual canvas area). The text that you put in between the title tags
has become the title of the document (surprise!). If you were to add this
page to your 'favorites', you would see that the title is also used there.
Paragraphs
Now that you have the basic structure of an HTML document, you can mess
about with the content a bit.
Go back to notepad and add another line to your page:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>My first web page</title>
</head>
<body>This is my first web page How exciting</body>
</html>
Look at the document in your browser.
You might have expected your document to appear as you typed it, on two
lines, but instead you should see something like:
This is my first web page How exciting.
This is because web browsers don't usually take any notice of what line your
code is on. It also doesn't take any notice of spaces (you would get the same
result if you typed 'This is my first web page
How exciting').
If you want text to appear on different lines, you need to explicitly state that.
Change your two lines of content so that they look like this:
<p>This is my first web page</p>
<p>How exciting</p>
The p tag is for 'paragraph'.
Look at the results of this. The two lines will now appear on two lines.
The HTML content should be seen just like a book - with paragraphs where
appropriate.
Emphasis
You can emphasise text in a paragraph using em and strong. These are two
ways of doing pretty much the same thing, although traditionally, browsers
display em in italics and strong in bold.
<p>Yes, that <em>is</em> what I said. How <strong>very</strong>
exciting.</p>
Line breaks
The line-break tag can also be used to separate lines like this:
This is my first web page<br />
How exciting
However, this method is over-used and shouldn't be used if two blocks of
text are intended to be separate from one another.
(Because nothing appears between the line-break tag, there is no closing tag
and it closes itself with a '/' after the 'br').
Headings
The p tag is just the start of text formatting.
If you have documents with genuine headings, then there are HTML tags
specifically designed just for them.
They are h1, h2, h3, h4, h5 and h6, h1 being the almighty emperor of
headings and h6 being the lowest pleb.
Change your code to the following:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>My first web page</title>
</head>
<body>
<h1>My first web page</h1>
<h2>What this is</h2>
<p>A simple page put together using HTML</p>
<h2>Why this is</h2>
<p>To learn HTML</p>
</body>
</html>
Note that the h1 tag is only used once - it is supposed to be the main
heading of the page and shouldn't be used multiple times.
h2 to h6 however, can be used as often as is desired, but they should always
be used in order, as they were intended. For example, an h4 should be a
sub-heading of an h3, which should be a sub-heading of an h2.
Lists
There are three types of list; unordered lists, ordered lists and definition
lists. We will look at the first two here, and definition lists in the HTML
Intermediate Guide.
Unordered lists and ordered lists work the same way, except that the former
is used for non-sequential lists with list items usually preceded by bullets and
the latter is for sequential lists, which are normally represented by
incremental numbers.
The ul tag is used to define unordered lists and the ol tag is used to define
ordered lists. Inside the lists, the li tag is used to define each list item.
Change your code to the following:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>My first web page</title>
</head>
<body>
<h1>My first web page</h1>
<h2>What this is</h2>
<p>A simple page put together using HTML</p>
<h2>Why this is</h2>
<ul>
<li>To learn HTML</li>
<li>To show off</li>
<li>Because I've fallen in love with my computer and want to
give her some HTML loving.</li>
</ul>
</body>
</html>
If you look at this in your browser, you will see a bulleted list. Simply change
the ul tags to ol and you will see that the list will become numbered.
Lists can also be included in lists to form a structured hierarchy of items.
Replace the above list code with the following:
<ul>
<li>To learn HTML</li>
<li>To show off
<ol>
<li>To my boss</li>
<li>To my friends</li>
<li>To my cat</li>
<li>To the little talking duck in my brain</li>
</ol>
</li>
<li>Because I've fallen in love with my computer and want to
give her some HTML loving.</li>
</ul>
Ay vwah lah. A list within a list. And you could put another list within that.
And another within that. And so on and so forth.
Links
So far you've been making a stand-alone web page, which is all very well and
nice, but what makes the internet so special is that it all links together.
The 'H' and 'T' in 'HTML' stand for 'hypertext', which basically means a
system of linked text.
An anchor tag (a) is used to define a link, but you also need to add
something to the anchor tag - the destination of the link.
Add this to your document:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>My first web page</title>
</head>
<body>
<h1>My first web page</h1>
<h2>What this is</h2>
<p>A simple page put together using HTML</p>
<h2>Why this is</h2>
<p>To learn HTML</p>
<h2>Where to find the tutorial</h2>
<p><a href="http://www.htmldog.com">HTML Dog</a></p>
</body>
</html>
The destination of the link is defined in the href attribute of the tag. The link
can be absolute, such as 'http://www.htmldog.com', or it can be relative to
the current page.
So if, for example, you had another file called 'flyingmoss.html' then the line
of code would simply be <a href="flyingmoss.html">The miracle of
moss in flight</a> or something like this.
A link does not have to link to another HTML file, it can link to any file
anywhere on the web.
A link can also send a user to another part of the same page they are on.
You can add an id attribute to just about any tag, for example <h2
id="moss">Moss</h2>, and then link to it by using something like this: <a
href="#moss">Go to moss</a>. Selecting this link will scroll the page
straight to the element with that id.
Note
The a tag allows you to open the link in a newly spawned window,
rather than replacing the web page the user is on, which at first
thought may sound like a good idea as it doesn't take the user away
from your site.
There are a number of reasons why you shouldn't do this however.
From a usability point of view, this method breaks navigation. The
most commonly used navigation tool on a browser is the 'back'
button. Opening a new window disables this function.
On a wider, more general usability point, users do not want new
windows to be popping up all over the place. If they want to open a
link in a new window then they can choose to do so themselves.
Images
Things might seem a little bland and boring with all of this text formatting. Of
course, the web is not just about text, it is multi-media and the most
common form of media is the image.
The img tag is used to put an image in an HTML document and it looks like
this:
<img src="http://www.htmldog.com/images/logo.gif" width="157"
height="70" alt="HTML Dog logo" />
The src attribute tells the browser where to find the image. Like the a tag,
this can be absolute, as the above example demonstrates, but is usually
relative. For example, if you create your own image and save it as
'alienpie.jpg' in a directory called 'images' then the code would be
<img src="images/alienpie.jpg"...
The width and height attributes are necessary because if they are excluded,
the browser will tend to calculate the size as the image loads, instead of
when the page loads, which means that the layout of the document may
jump around while the page is loading.
The alt attribute is the alternative description. This is used for people
who cannot or choose not to view images. This is a requirement in the
latest versions of HTML.
Note that, like the br tag, because the img tag does not have a closing tag, it
closes itself, ending with '/>'
Note
The construction of images for the web is a little outside of the remit of
this website, but it is worth noting a few things...
The most commonly used file formats used for images are GIFs and
JPEGs. They are both compressed formats, and have very different
uses.
GIFs can have no more than 256 colours, but they maintain the
colours of the original image. The lower the number of colors you have
in the image, the lower the file size will be.
GIFS SHOULD BE USED FOR IMAGES WITH SOLID COLOURS.
JPEGs on the other hand use a mathematical algorithm to compress
the image and will distort the original slightly. The lower the
compression, the higher the file size, but the clearer the image.
JPEGS SHOULD BE USED FOR IMAGES SUCH AS PHOTOGRAPHS.
Images are perhaps the largest files a new web designer will be
handling. It is a common mistake to be oblivious to the file size of
images, which can be extremely large. Web pages should download as
quickly as possible, and if you keep in mind that most people use
modems that download at less than 7Kb a second (realistically it is
less than 5Kb), you can see how a large file will greatly slow down the
download time of a full page.
You need to strike a balance between image quality and image size.
Most modern image manipulation programs allow you to compress
images and the best way to figure out what is best suited for yourself
is trial and error.
Tables
Across the worldwide web, HTML tables are used and abused to layout
pages. We will come across how to layout a page without tables, in the CSS
Advanced Guide. The correct use for tables is to do exactly what you would
expect a table to do - to layout tabular data.
There are a number of tags used in tables, and to fully get to grips with how
they work is probably the most difficult area of this HTML Beginners Guide.
Copy the following code into the body of your document and then we will go
through what each tag is doing:
<table>
<tr>
<td>Row
<td>Row
<td>Row
</tr>
<tr>
<td>Row
<td>Row
<td>Row
</tr>
<tr>
<td>Row
<td>Row
<td>Row
</tr>
<tr>
<td>Row
<td>Row
<td>Row
</tr>
</table>
1, cell 1</td>
1, cell 2</td>
1, cell 3</td>
2, cell 1</td>
2, cell 2</td>
2, cell 3</td>
3, cell 1</td>
3, cell 2</td>
3, cell 3</td>
4, cell 1</td>
4, cell 2</td>
4, cell 3</td>
The table element defines the table.
The tr element defines a table row.
The td element defines a data cell. These must be enclosed in tr tags, as
shown above.
If you imagine a 3x4 table, which is 12 cells, there should be four tr
elements to define the rows and three td elements within each of the rows,
making a total of 12 td elements.
DANA’S TABLE WITH ADDITIONAL ATTRIBUTES
<table width="800" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">&nbsp;</td>
<td valign="top">&nbsp;</td>
</tr>
<tr>
<td valign="top">&nbsp;</td>
<td valign="top">&nbsp;</td>
</tr>
</table>
Forms
Forms can be used to send data across the web and are often used as
contact forms to convert information inputted by a user into an email, such
as the one used on this website.
On their own, forms are useless. They need to be hooked up to a program
that will process the data inputted by the user. These take all manner of
guises and are outside of the remit of this website. If you use an internet
service provider to host your HTML, they will be able to help you with this
and will probably have clear and simple instructions on how, for example, to
make a form-to-email form work.
The tags used in the actual HTML of forms are form, input, textarea,
select and option.
form defines the form and within this tag, there is one required action
attribute which tells the form where its contents will be sent to when it is
submitted.
The optional method attribute tells the form how the data in it is going to be
sent and it can have the value get (which is default) or post. This is
commonly used, and often set to post which hides the information (get
latches the information onto the URL).
So a form element will look something like this:
<form action="processingscript.php" method="post">
</form>
The input tag is the daddy of the form world. It can take ten forms, outlined
below:
_ <input type="text" /> is a standard textbox. This can also have a
value attribute, which sets the text in the textbox.
_ <input type="password" /> is the same as the textbox, but will display
asterisks instead of the actual characters that the user types.
_ <input type="checkbox" /> is a checkbox, which can be toggled on and
off by the user. This can also have a checked attribute, which would be
used in the format <input type="checkbox" checked="checked" />.
_ <input type="radio" /> is similar to a checkbox, but the user can only
select one radio button in a group. This can also have a checked
attribute, used in the same way as the checkbox.
_ <input type="file" /> is an area that shows the files on your computer,
like you see when you open or save a document in most programs.
_ <input type="submit" /> is a button that when selected will submit the
form. You can control the text that appears on the submit button (as you
can with button and reset types - see below) with the value attribute, for
example <input type="submit" value="Ooo. Look. Text on a
button. Wow" />.
_ <input type="image" /> is an image that when selected will submit the
form. This also requires a src attribute, like the img tag.
_ <input type="button" /> is a button that will not do anything without
extra code added.
_ <input type="reset" /> is a button that when selected will reset the
form fields.
_ <input type="hidden" /> is a field that will not be displayed and is used
to pass information such as the page name that the user is on or the email
address that the form should be posted to.
Note that the input tag closes itself with a '/>' at the end.
A textarea is, basically, a large textbox. It requires a rows and cols
attribute and is used like this:
<textarea rows="5" cols="20">A big load of text here</textarea>
The select tag works with the option tag to make drop-down select
boxes.
They work like this:
<select>
<option value="first option">Option 1</option>
<option value="second option">Option 2</option>
<option value="third option">Option 3</option>
</select>
When the form is submitted, the value of the selected option will be sent.
Similar to the checked attribute of checkboxes and radio buttons, an option
tag can also have a selected attribute, which would be used in the format
<option value="mouse" selected="selected">Rodent</option>.
All of the tags mentioned above will look very nice presented on the page,
but if you hook up your form to a form-handling program, they will all be
ignored. This is because the form fields need names. So to all of the fields,
the attribute name needs to be added, for example <input type="text"
name="talkingsponge" />
A form might look like the one below. (Note: this form will not work unless
there is a 'contactus.php' file, which is stated in the action attribute of the
form tag, to handle the submitted date)
<form action="contactus.php" method="post">
<p>Name:</p>
<p><input type="text" name="name" value="Your name" /></p>
<p>Comments: </p><p><textarea name="comments" rows="5"
cols="20">Your comments</textarea></p>
<p>Are you:</p>
<p><input type="radio" name="areyou" value="male" /> Male</p>
<p><input type="radio" name="areyou" value="female" /> Female</p>
<p><input type="submit" /></p>
<p><input type="reset" /></p></form>
There is a whole other level of complexity you can delve into in the HTML
Advanced Guide if you are so inclined.
Putting It All Together
The following code incorporates all of the methods that have been explained
in the previous pages:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>My first web page</title>
<!-- By the way, this is a comment -->
</head>
<body>
<h1>My first web page</h1>
<h2>What this is</h2>
<p>A simple page put together using HTML. <strong>A simple page
put together using HTML.</strong> A simple page put together
using HTML. A simple page put together using HTML. A simple page
put together using HTML. A simple page put together using HTML. A
simple page put together using HTML. A simple page put together
using HTML. A simple page put together using HTML.</p>
<h2>Why this is</h2>
<ul>
<li>To learn HTML</li>
<li>
To show off
<ol>
<li>To my boss</li>
<li>To my friends</li>
<li>To my cat</li>
<li>To the little talking duck in my brain</li>
</ol>
</li>
<li>Because I've fallen in love with my computer and
want to give her some HTML loving.</li>
</ul>
<h2>Where to find the tutorial</h2>
<p><a href="http://www.htmldog.com"><img
src="http://www.htmldog.com/images/logo.gif" width="157"
height="70" alt="HTML Dog logo" /></a></p>
<h3>Some random table</h3>
<table>
<tr>
<td>Row 1, cell 1</td>
<td>Row 1, cell 2</td>
<td>Row 1, cell 3</td>
</tr>
<tr>
<td>Row 2, cell 1</td>
<td>Row 2, cell 2</td>
<td>Row 2, cell 3</td>
</tr>
<tr>
<td>Row 3, cell 1</td>
<td>Row 3, cell 2</td>
<td>Row 3, cell 3</td>
</tr>
<tr>
<td>Row 4, cell 1</td>
<td>Row 4, cell 2</td>
<td>Row 4, cell 3</td>
</tr>
</table>
<h3>Some random form</h3>
<p><strong>Note:</strong> It looks the part, but won't do a
thing</p>
<form action="somescript.php" method="post">
<p>Name:</p>
<p><input type="text" name="name" value="Your name" /></p>
<p>Comments: </p>
<p><textarea rows="10" cols="20" name="comments">Your
comments</textarea></p>
<p>Are you:</p><p><input type="radio" name="areyou" value="male"
/> Male</p>
<p><input type="radio" name="areyou" value="female" /> Female</p>
<p><input type="submit" /></p>
<p><input type="reset" /></p>
</form>
</body>
</html>
There you have it. Save the file and play around with it - this is the best way
to understand how everything works. Go on. Tinker.
When you're happy, you can move on to the CSS Beginner's Guide.
OPTIMIZING IMAGES
NOTE: On the web, images will always be viewed 72 DPI. It is important to
think of image size as purely in terms of pixel dimensions. Keep it in mind
that many users’ computer screens are still set to 800 x 600 pixels, size your
design and images in relation to that scale.
1. Resize the image:
Open the image in Photoshop
Under Image, click Image Size
Make size adjustments under Pixel Dimensions
2. Optimize the image
Under File, Click Save for Web
Click Optimized tab
Choose between JPEG or GIF
JPEG – use for a photographic image.
GIF – use for color graphic (think comics)
Adjust Quality to lowest point without compromising image quality.
Hit Save
KEEP IN MIND: IMAGES ARE COSTLY TO YOUR WEBSITE IN TERMS OF
FILE SIZE/DOWNLOAD TIME. THE LARGER THE FILE, THE LONGER TO LOAD,
THE LESS PATIENT THE END USER!
ORGANIZING FILES
As soon as you start to work on your images, you should save them in a
General Site folder, and within that site folder, inside an image folder. When
creating a website it is imperative that you are organized. Below is a typical
“Site”. A Site folder, this one called ‘Summer’, holds one image folder and a
number of HTML files. These HTML files will link to one another and link to
images in the images folder. If the files get moved out of the site folder or
images folder, your links will break and your site will not work right.
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
(version 5.0)
This tutorial is designed to teach you some the basics of HyperText Markup Language (HTML),
with an emphasis on transforming a word-processing document into a simple Web page.
You can get the most recent version of this tutorial from the CAT website:
http://cat.xula.edu/tutorials/
Contents
This tutorial will guide you through the following steps:
1.
2.
3.
4.
5.
6.
7.
Retrieving the necessary materials from the Web
Copying text from a word-processing document and pasting it into an HTML template
Marking block elements and validating your work
Marking inline elements and validating your work
Using Netscape Composer
Using Word's "Save as HTML" feature.
Uploading your files to the Web server
Prerequisites
This tutorial assumes a level of competency with basic computing tasks and concepts. You should
understand the following terms:
v
v
v
v
v
Files
Folders
File hierarchy
The desktop
The Finder (Mac only)
Conventions
Actions that you need to perform are bulleted, like this:
•
Open the file.
Menu commands look like this: File > Open. This means choose the Open option from the File
menu. Sometimes, for the sake of brevity, common menu items may be referred to simply as
Save or Open. The same style is used for other user interface elements, such as key you're
supposed to press and buttons you're supposed to click, i.e. "Click the OK button."
HTML code and URLs look like this:
<BODY BGCOLOR="white">
Names of files and folders, as well as text that you are supposed to type, are rendered in italics.
1
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
Before You Begin
•
Look over the "Hypertext Markup Procedure" and "30-Odd Safe HTML Elements" quick
reference sheets. Re-examine the handouts on "Anatomy of a Web Page" and the
"Container Model."
•
Read the following information about filename extensions.
About Filename Extensions
Some operating systems use filename extensions to identify different types of files. For example,
a file named document.htm or document.html is marked as a Web page. A file named
document.gif is marked as a particular type of image file, while document.jpg indicates an image
file of another format. A Microsoft Word document might be named document.doc, whereas a
plain text file would most likely be named something like document.txt.
Web servers, which may run on a number of different operating systems, use filename extensions
to identify file types.
The Microsoft Disk Operating System (MS-DOS) uses filename extensions. Windows uses them
too, since it is built "on top of" MS-DOS. Windows is often configured to hide filename
extensions, so that you may no t be aware of them. (But see below for the remedy.)
The Mac OS doesn't use filename extensions. A very different system is employed to identify
different file types, so that a file named document could be almost anything -- text, graphics,
audio, video, whatever. Mac users who want to publish on the Web or share files with Windows
users need to be aware of filename extensions and start using them correctly.
Examples of Common Filename Extension Problems
v You find a file named document.html.txt. Which is it — plain text or hypertext?
v You create a web page that is supposed to display an image. The image file is named
picture.jpg but you mistakenly set the SRC attribute of the IMG tag to point to picture.gif.
The image does not appear.
v You're a Windows user. A Mac user sends you e-mail with a Word document attached. It
is named Final Report. You can't open it. Because Final Report has no filename
extension, the Windows operating system can't identify it as a Word file. If the Mac user
had named the file Final Report.doc, this would not have occurred. Also note that it's
good practice to avoid spaces and case variations in filenames if you plan to share them
over the Web, so an even better name would be final_report.doc, final-report.doc or
finalreport.doc.
Windows Only: Configure Your System
Follow these instructions to make Windows display filename extensions at all times. This is
highly recommended for aspiring Web authors, because it reduces opportunities for confusion.
•
•
•
•
WinXP: From the Start menu, choose Control Panel, then double-click on Folder
Options. (In older versions of Windows, Open any folder or drive. From the View menu,
choose Options or Folder Options.)
A dialog box should appear. Click the View tab.
Look for an option that says "Hide file extensions for known file types" or "Hide MS-DOS
file extensions for file types that are registered." Make sure this item is not checked.
Click the button marked OK.
2
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
1. Retrieve Materials
First you must create a folder to hold your files.
•
Create a new folder on the desktop and name it tutorial.
Windows users: You can do this quite simply by clicking on the desktop with your right
mouse button and choosing New > Folder from the pop-up menu. Then, without
pausing to draw breath, type the word tutorial. Press the Enter key and you're done.
Mac users: You can do this quite simply by clicking on the desktop while pressing the
Control key; choose New Folder from the pop-up menu. Then, without pausing to
think, type the word tutorial. Press the Return key and you're done.
Next, you must retrieve the necessary materials from the Web.
•
Start Netscape, and point the browser to this URL:
http://cat.xula.edu/tutorials/html/
•
Find the section of the page under the heading Tutorial Materials.
•
Follow the link to All_About_Mustard.doc which is a Microsoft Word Document.
•
Save this file in the tutorial folder you created earlier. (You'll be prompted by Netscape.)
•
Follow the link to template.txt which is a plain text file.
The contents of the file will be displayed in the browser window. It should look like this:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<HEAD>
<TITLE>Untitled</TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>
This should look familiar to you. You'll use this raw code as a template for your first Web page.
The best way to save this file to disk is simply to copy and paste:
•
Choose Edit > Select All to select all the text.
•
Choose Edit > Copy to copy the selecte d text.
•
Launch a text editor.
Windows users: Use Notepad. From the Windows Start menu, choose Run… and
enter notepad.
Mac users: Use SimpleText. This application can usually be found on the hard drive, in
the Applications folder.
•
In your text editor, select Edit > Paste. The text you copied from your browser should
appear in the window of the text editor.
•
Save this file. Name it template.txt and make sure that you are saving it in your tutorial
folder.
•
Close your text editor and return to Netscape.
You should now have a Word document and a plain text file in your tutorial folder — all the
materials you need to complete this tutorial.
3
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
2. From Word Processor to Web Page
Often your Web pages will begin their digital life as word processing documents. In order to
"mark up" such a document with HTML, you must first get it into a plain text format.
One way to do this is by saving the document as a "text only" file. A simpler way is to copy the
text from the word processing program and paste it into a text editor, much as you did with the
template.txt file. Here's how:
•
Open the file named All_About_Mustard.doc which you saved to your tutorial folder.
(Double-clicking the file's icon should launch Microsoft Word. If not, you will have to
start Word yourself and open the file from Word.)
•
Take a moment to look over the document and familiarize yourself with its contents and
general structure. A copy of this document is attached to the end of this tutorial; you may
find it more convenient to refer to the printed copy as you proceed.
•
Choose Edit > Select All to select all the text.
•
Choose Edit > Copy to copy the selected text.
•
Open the template.txt file which you saved in your tutorial folder. (Double-clicking the
file's icon should launch your text editor. If not, you will have to start your text editor
yourself and open the file within that application.)
•
Click between the opening and closing BODY tags.
•
Choose Edit > Paste. The text you copied from Word should appear in the window of the
text editor. Note that all the special formatting has been stripped away. All that remains
is plain text and line breaks (carriage returns).
o
Windows users: You may need to choose Edit > Word Wrap to see all the text.
4
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
Your document should now look something like this:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<HEAD>
<TITLE>Untitled</TITLE>
</HEAD>
<BODY>
All About Mustard
An Abbreviated History of Mustard
The Greeks used mustard as a condiment and a drug but it was the Romans who first
made real culinary use of it by grinding the seeds and mixing the flour with
wine, vinegar, oil and honey. When they moved into Gaul they took mustard plants
with them and it was in the rich wine growing region of Burgundy that mustard
flourished.
It is reputed that at a festival in 1336 attended by the Duke of Burgundy and his
cousin King Philip the Fair, no less than 70 gallons of mustard were eaten.
Reports do not say how pickled the guests were.
Pope John XX11 of Avignon loved mustard so much that he created the post of
"Mustard Maker to the Pope," a job he gave to an idle nephew who lived near
Dijon. Dijon soon became the mustard centre of the world and in fact so
important was it that in 1634 a law was passed to grant the men of the town the
exclusive right to make mustard.
1777 saw the start of mustard making as we know it today as it was in this year
that Messieurs Grey and Poupon founded their company. They used Grey's recipe
and Poupon's money! We still owe a lot to this redoubtable duo as in 1850 their
company invented a steam operated grinding machine so ending the era of laborious
and back-breaking hand grinding.
And as Jesus said in the Gospel of Thomas:
[The Kingdom of Heaven] is like a mustard seed. It is the smallest of all seeds;
but when it falls on tilled soil, it produces a great plant and becomes a shelter
for birds of the air.
A Mustard Recipe
Ingredients
4 Tablespoons Dry mustard powder
1 Tablespoon White Wine Vinegar
2 Tablespoons Flat beer
1 Clove Garlic
1 Teaspoon Sugar
1/2 Teaspoon Salt
1/4 Teaspoon Turmeric
1 Tablespoon Olive oil -- optional
Preparation
1.
Whisk together dry mustard, vinegar and beer.
2.
Use a garlic press or large pair pliers to squeeze the juice from the
clove of garlic into the mixture.
3.
Stir in sugar, salt and turmeric.
4.
To make mustard smoother and less hot, add olive oil to taste.
Mustard Links
§
Européenne de Condiments
http://www.moutarde.com/
A mustard company's website
§
Mustard Gas
http://www.spartacus.schoolnet.co.uk/FWWmustard.htm
A description of mustard gas
§
Mount Horeb Mustard Museum
http://www.mustardweb.com/
The world's largest collection of prepared mustards
</BODY>
</HTML>
5
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
Now you need to save a copy of this file, w ithout overwriting our original template. You also need
to designate the new copy as a hypertext file, rather than a plain text file.
•
Choose File > Save As…
•
Name the file mustard.html and click the Save button, making sure to save the file in
your tutorial folder.
Congratulations! You've just created a Web page. It's incomplete, to be sure, but take a moment
to see how it looks in your Web browser:
•
Return to Netscape.
•
Choose File > Open Page. (Mac users should choose File > Open > Page in Navigator.)
•
A dialog box should appear. Navigate to your tutorial folder. (Windows users will need
to click the Choose File button.)
•
Choose the mustard.html file, and click the Open button.
Your Web page should now be displayed in the browser. Note how all the text is run together. All
the extra whitespace and line breaks are ignored by the browser.
Here's what you've accomplished so far: by using the template file, you saved yourself the chore of
typing out the basic "shell" of the Web page. The template establishes the global structure of the
document, including version information and the HEAD and BODY.
You've pasted raw text into the BODY of the document. However, you have not yet marked up any
of the text, and so the text has no logical structure.
2.1
Titling Your Document
Before marking up your text, you need to give the HTML document a title.
•
Return to your text editor. The mustard.html file should still be open. (If not, you will
need to open it within your text editor.)
•
Find the TITLE tags, in the HEAD of the document.
•
Delete the word Untitled from between the TITLE tags.
•
Type a new title, such as Sample Web Page About Mustard .
The title element should now look something like this:
<TITLE>Your Title Here</TITLE>
•
Save your file.
6
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
3. Marking Block Elements
Now you will designate the basic structure of the text. Each chunk of text must be designated as
belonging to a block element such as a heading or a paragraph.
In order to designate an element, you must surround the chunk of text with the appropriate tags.
An opening tag, such as <P>, marks the beginning of the element. A closing tag, such as </P>
(note the forward slash) marks the end of the element.
•
Mark the first heading. That's the line which reads "All About Mustard." Since it's the
heading for the whole page, mark it as a first-level heading, like so:
<H1>All About Mustard</H1>
Note: That's a number one (1) after the H, not a lowercase letter L !
•
Choose File > Save to save your work.
That's all there is to it. This is what's meant by marking an element.
Now check your work:
•
Return to Netscape.
•
The mustard.html page should still be displayed, but the browser is showing the old
version. To display the changes you just made, click the Reload button.
The browser should reload the page. It is, in essence, re-reading the file from the disk and getting
the new version you just saved. You should observe a very noticeable change in the page's
appearance.
Now you must continue to mark up the rest of the text. This procedure requires you to exercise
some judgment. The following instructions do not tell you exactly what to type. Rather, you will
be instructed to "mark all the paragraphs," for example. It is up to you to decide what constitutes
a paragraph, and to figure out which tag to use. Refer to the printed Word document and other
materials as you need them. You should save your work often, and check your work in the
browser often.
Hint: For cleaner, easier-to-read markup, insert carriage returns liberally, whenever you
need them. Remember that they will not be visible in the browser.
•
Return to your text editor. The mustard.html file should still be open. (If not, you will
need to open it within your text editor.)
•
Mark all the headings. Remember that headings range from H1 (most important) to H6
(least important). You've already marked a first-level heading, so mark up some secondand third-level ones.
Hint: There are three second-level headings and two third-level headings in the
document.
For example, the second heading should be marked to look like this:
<H2>An Abbreviated History of Mustard</H2>
7
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
•
Mark all the paragraphs with P tags.
Hint: There are six paragraphs total, and they're all in the first section of the document.
The extended quotation is a paragraph.
For example, a marked paragraph should look like this:
<P>
It is reputed that at a festival in 1336 attended by the Duke of Burgundy
and his cousin King Philip the Fair, no less than 70 gallons of mustard were
eaten. Reports do not say how pickled the guests were.
</P>
•
Mark the extended quo tation with BLOCKQUOTE tags.
Hint: The BLOCKQUOTE tags should surround the P tags.
<BLOCKQUOTE>
<P>
[The Kingdom of Heaven] is like a mustard seed. It is the smallest of all
seeds; but when it falls on tilled soil, it produces a great plant and
becomes a shelter for birds of the air.
</P>
</BLOCKQUOTE>
•
Mark the ordered list (the one that is numbered) with OL tags.
Hint: You are marking the whole list here, not the individual items in the list.
<OL>
1. Whisk together dry mustard, vinegar and beer.
2. Use a garlic press or large pair pliers to squeeze the juice from the
clove of garlic into the mixture.
3. Stir in sugar, salt and turmeric.
4. To make mustard smoother and less hot, add olive oil to taste.
</OL>
•
Mark the unordered list (the bulleted list of links) with UL tags.
<UL>
* Européenne de Condiments
http://www.moutarde.com/
A mustard company's website
* Mustard Gas
http://www.spartacus.schoolnet.co.uk/FWWmustard.htm
A description of mustard gas
* Mount Horeb Mustard Museum
http://www.mustardweb.com/
The world's largest collection of prepared mustards
</UL>
•
Mark the individual list items in both lists with LI tags. Don't forget to mark up both the
Preparation list and the Mustard Links list.
Hint: There are only three items (not nine) in the list of links.
<LI>
Européenne de Condiments
http://www.moutarde.com/
A mustard company's website
</LI>
•
Add a horizontal rule at the end of the page with the HR tag.
Hint: The tag still needs to be in the BODY of the document. Also, remember that this is
an empty content tag, so there is no closing tag.
8
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
•
Add some information about how to contact the author of the page after the HR tag. Type
something like: This page is maintained by Bart Everson [[email protected]].
Substitute your own name and e-mail address for mine.
•
Mark the line you just typed with ADDRESS tags.
Every chunk of text should now be enclosed in one HTML tag or another.
•
Choose File > Save to save your work.
•
Return to Netscape and reload the page to check your work.
You should notice some problems. The ordered list may have duplicate numbers, and the list of
links may have a § or * symbol after each bullet. These are artifacts of the conversion from Word
to HTML. Also, the list of ingredients is still a jumbled mess. The list of links is also messy.
Fix these problems as follows:
•
Return to your text editor.
•
Delete the numbers in the ordered list. They don't need to be explicitly stated.
•
Delete the § or * symbols from the list of links. They are also redundant.
What about the list of ingredients? You could mark it as an unordered list, but then it would be
bulleted. Besides, you already have one unordered list on the page. Therefore you will mark this
as preformatted text.
•
Mark the list of ingredients with the PRE tag.
•
Choose File > Save to save your work.
•
Return to Netscape and reload the page to check your work.
The problems should be fixed, except for the list of links. You will fix that problem in section 4
below.
3.1
Setting the Background Color
It would be nice to make the background of the page yellow — sort of a visual joke. You will do
this by customizing the BODY tag with an attribute.
•
Return to your text editor. The mustard.html file should still be open.
•
Expand the opening BODY tag to include the BGCOLOR (background color) attribute, and
set the value to yellow.
Hint: This would be a good time to review attribute syntax.
The opening BODY tag should look exactly like this:
<BODY BGCOLOR="yellow">
•
Choose File > Save to save your work.
•
Return to Netscape and reload the page to check your work.
If you find the results too garish for your tastes, you can change the BGCOLOR value to lightyellow
instead.
3.2
Validating Your Work
Before you proceed, it's a good idea to validate your HTML and make sure you're on track so far.
•
Point your browser to this URL:
9
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
http://validator.w3.org/
This is the W3C's HTML validation service. It allows you to enter a URL for any page that's on the
Web and check the validity of its HTML.
•
Since your Web page is not on the Web (yet), follow the "upload files" link toward the
bottom of the page.
This will take you to a page which allows you to check the validity of files from your hard drive.
•
Click the Browse button.
•
Navigate to your tutorial folder, select the mustard.html file, and c lick the Open button.
•
Click the Validate this document button.
If you're lucky, you'll get a "No errors found!" message. If not, examine the results to see if you
can pinpoint your mistake. Once you've corrected your errors, try to validate your document
again. Don't move on to the next section until you succeed.
10
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
4. Marking Inline Elements
Now you will continue to designate the structure of the text, but at the inline- or text-level, rather
than the block-level.
•
Return to your text editor. The mustard.html file should still be open.
•
Mark the phrase 70 gallons as emphasized with the EM or STRONG tags.
•
Mark the phrase Gospel of Thomas as a citation with the CITE tags.
•
Put line breaks in the list of links using the BR tag.
Hint: The tag should go between the name of the site and its URL. Put another one
between the URL and the brief description. Also, remember that this is an empty
content tag, so there is no closing tag.
•
Choose File > Save to save your work.
•
Return to Netscape and reload the page to check y our work.
Observe the results of the changes you just made. Your Web page should now resemble the Word
document with which you began.
4.1
Designating Links
It would be nice if the listed websites were clickable links. In this section, you will make them into
links by marking them as anchors. Then you'll point the anchors to the appropriate URLs.
•
Return to your text editor. The mustard.html file should still be open.
•
Mark the name of each site as an anchor with the A element.
Example:
<A>Mount Horeb Mustard Museum</A>
•
Each anchor tag must be expanded to include the HREF (hyper-reference) attribute.
<A HREF=" ">Mount Horeb Mustard Museum</A>
•
Each hyper-reference must be set to a URL. In other words, the URL is what goes
between the quotation marks.
Hint: Rather than type each URL by hand, simply cut and paste.
<A HREF="http://www.mustardweb.com">Mt Horeb Museum</A>
•
Choose File > Save to save your work.
•
Return to Netscape and reload the page to check your work.
•
It's good practice to follow your links and make sure they work.
You should observe some peculiar spacing in your list of links. That's because your now have two
BR (line break) tags between each site name and its description. You can fix this quickly:
4.2
•
Return to your text editor, and delete the extra BR tags from the list of links.
•
Choose File > Save , then return to Netscape and reload the page.
Validate Your Work
Validate the changes you made following the same instructions as in section 3.2 above.
11
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
5. Using Netscape Composer
If you did the browser tutorial for "Introduction to the Web," you should recall that Netscape is
actually a suite of programs. It's not just a Web client (or browser), it's also an e-mail client and a
news client.
In addition, the Netscape suite includes an HTML authoring tool, called Composer. In this
section, you'll use Composer to accomplish some of the same tasks that you did with a text editor.
Hopefully you'll find that your new knowledge of HTML helps you to understand the process.
5.1
Some Thoughts About Composer
Netscape Composer is just one of many software tools that will write HTML for you. These tools
take some of the drudgery out of the process of creating Web pages. However, they are not all
created equal.
Composer has a few advantages: It's free, and you probably already have it. It is also fairly easy to
use.
Composer also has numerous limits. Although you can use Composer to do just about everything
we've discussed in this seminar, it's incapable of almost everything discussed in the "Advanced
HTML" seminar. For example, Composer cannot handle forms or frames. If you ever wish to use
style sheets, you will also find Composer inadequate.
In the final analysis, I can't recommend Composer. There are simply too many other, better tools
out there, such as Allaire's HomeSite and BBEdit by BareBones Software. We hope to offer
workshops on these tools soon.
But the choice of tool is up to you. If Composer meets your needs, use it. And hopefully the
following tutorial will give you a sense of what such a tool can do for you.
One other note: Many of the features of Composer are not HTML 4.0 compliant. This tutorial
ignores those features, and concentrates on the things Composer does best.
5.2
Getting Started
First you need to start Composer.
•
In Netscape, choose Communicator > Composer.
A blank page should appear. At first you might think it looks a lot like Netscape Navigator, but
take a closer look. The illustrations below show the toolbars for both Navigator and Composer, as
they appear in Windows 95:
Remember, Navigator is a browser, with which you view Web pages. Composer is an authoring
application, with which you create Web pages.
12
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
Next, you must recopy the raw text of the Word document.
•
Return to Microsoft Word.
•
Open the file named All_About_Mustard.doc, if it is not already open.
Funny thing about Composer — if you just paste the text in as you did before, it would interpret
each carriage return as a single line break. But Composer interprets double carriage returns as
indicative of paragraphs. So…
•
Before each full paragraph, insert an extra carriage return with the Enter key (Windows)
or the Return key (Mac).
•
Choose Edit > Select All to select all the text.
•
Choose Edit > Copy to copy the selected text.
•
Return to Composer.
•
Choose Edit > Paste to paste the copied text.
•
Choose File > Save and save your file as mustard_composer.html. Make sure to save it
in your tutorial folder.
As you save the page, Composer will prompt you for a page title. It's asking what you want to put
between the TITLE tags.
Mac users: If Composer does not prompt you, choose Format > Page Title .
•
5.3
Enter an appropriate title, such as " Sample Web Page Using Composer," then click OK.
Designating Elements
Now you will designate the elements of the document, much as you did with your text editor. The
difference is that you will use Composer's graphical user interface instead of typing HTML
manually. You tell Composer what to do, and Composer writes the HTML for you.
•
Click in the first heading. That's the line whic h reads "All About Mustard."
•
Since this is the heading for the whole page, mark it as a first-level heading, by choosing
Format > Heading > 1. Or you can use the pop -up menu on the toolbar.
That's all there is to it. That's how you designate an element in Composer.
•
Designate all the headings in the same fashion. Remember that there are six levels of
headings, with 1 being most important and 6 being least important.
•
Designate the extended quotation by choosing Format > Paragraph > Block Quote.
This optio n does not appear in the pop-up menu on the toolbar. It also does not appear
in the Mac version of this program! Mac users should follow the following circuitous
route:
•
o
Choose Format > Character Info.
o
A dialog box should appear. Click the tab marked Paragraph.
o
Using the "Additional Style" pop-up menu, choose Block Quote.
o
Click the button marked OK.
Designate the unordered lists (lists that are not numbered) by choosing Format > List >
Bulletted [sic for Windows version!]. Or you can just click the bulleted list button on the
toolbar.
o
You may wish to delete any extra characters that appear in the list of links, just as
you did in the previous section.
13
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
o
By default, Composer makes each line in the list a bulleted item. But you don't
want the URLs and descriptions to be separate items.
§
To correct this, click at the beginning of each URL.
§
Press your backspace (Windows) or delete (Mac) button until the URL
appears on the same line as the site name.
§
Insert a line break by choosing Insert > New Line Break or by pressing
Shift + Enter (Windows) or Shift + Return (Mac).
•
Designate the ordered list (the one that is numbered) by choosing Format > List >
Numbered. Or you can just click the numbered list button on the toolbar. You will notice
number signs appear before each list item.
•
Add a horizontal rule at the end of the page.
o
This is a little tricky. Click at the end of the page and your blinking text-insertion
cursor should appear at the end of the last line of text, which you marked as a list
item.
o
Press Enter or Return to start a new line. However, since you're in a list, the
next line will be designated as a list also. You need to "escape" the list.
o
Click the bulleted list button in the toolbar to escape from the list.
o
Click the H. Line button in the toolbar to insert a horizontal rule. Or choose
Insert > Horizontal Line.
•
Press Enter or Return to start a new line.
•
Add some information about how to contact the author of the page after the horizontal
rule. Just type something like: This page is maintained by Bart Everson
[[email protected]]. Substitute your own name and e-mail address for mine.
•
Designate the line you just typed as an address by choosing Format > Paragraph >
Address. Or you can use the pop-up menu on the toolbar.
•
Select the e-mail address you just typed.
•
Designate this selection as a link by choosing Insert > Link… or by clicking the Link
button in the toolbar.
•
•
o
A dialog box should appear. In the field, enter mailto:[email protected].
Substitute your own e-mail address for mine.
o
Click OK.
Make the URLs in the list of links into actual links:
o
Select the URL.
o
Choose Edit > Copy.
o
Designate this selection as a link by choosing Insert > Link… or by clicking the
Link button in the toolbar.
o
A dialog box should appear. Paste the URL you just copie d into the field. Since
you can't access the Edit menu, you will have to use the keyboard shortcut, which
is Ctrl+V for Windows and Command+V for Macintosh. (The command key is
sometimes called the Apple key and is next to the spacebar.)
o
Click OK.
Select the phrase 70 gallons in the second paragraph.
14
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
o
•
•
5.4
Designate this selection as a bold or italic by choosing Format > Style > Bold or
Format > Style > Italic. You may also click the appropriate button in the toolbar.
Notice the lack of an emphasis or strong emphasis option.
Choose Format > Page Colors and Properties (Windows) or Format > Page
Properties (Mac).
o
A dialog box should appear. Click the option marked Use Custom Colors.
o
From the pop-up menu (marked Color schemes in Windows) choose Black on
Lt. Yellow.
Choose File > Save to save your work.
Checking Your Work
Now it's time to check this page and see what it actually looks like in a browser like Netscape
Navigator. Remember, you're using Composer, which is not a browser! Things will look a little
bit different in "authoring" mode.
•
To load the page into Navigator, choose File > Browse Page or click the preview button
in the toolbar.
Things should look a little different now. You may also notice some problems. The ordered list
may have duplicate numbers, for example. Note that the HTML-generated numbers only showed
up as number signs (#) in Composer.
You may fix this problems as follows:
•
Return to Composer. An easy way to do this is to choose File > Edit Page.
•
Delete the numbers in the ordered list. They don't need to be explicitly stated.
•
Delete the § symbols from the list of links. They are also redundant.
•
Choose File > Save to save your work.
•
Load the page into Navigator by choosing File > Browse Page or clicking the preview
button in the toolbar.
The problem should be fixed.
Take a moment to examine the source code and see what Composer has done on your behalf:
5.5
•
Choose View > Page Source.
•
Examine the HTML code.
•
When you're done, close this window.
Validating Your Work
Try to validate mustard_compo ser.html as described in section 3.2 above. The results should tell
you something very important about using Composer.
15
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
6. Using Microsoft Word's "Save as Web Page" Feature
As you saw above, Composer can make things easier, but there is a price that you must pay for
this convenience. Now you'll look at an even easier feature available directly in Microsoft Word.
•
Return to Microsoft Word.
•
Open the file named All_About_Mustard.doc, if it is not already open.
•
Choose File > Save as Web Page .
Note: This feature is only available in some versions of Word. In previous versions it
was labeled Save as HTML. In even older versions, it simply does not exist.
•
Name this file mustard_word.html.
•
Click the button marked OK.
Now take a look at the Web page you just created in Netscape Navigator.
•
Return to Netscape.
•
Choose File > Open Page. (Mac users should choose File > Open > Page in Navigator.)
•
A dialog box should appear. Navigate to your tutorial folder. (Windows users will need
to click the Choose File button.)
•
Choose the mustard_word.html file, and click the Open button.
The Word-generated Web page should now be displayed in the browser. Wow! That was quick
and easy. But if you take some time to look over the page, you may discover that it's not all that
great.
Take a moment to examine the source code and see what Word hath wrought:
•
Choose View > Page Source.
•
Examine the HTML code.
•
When you're done, close this window.
It may amuse you to know that some Web authoring packages actually offer a feature called Clean
Up Microsoft Word HTML.
It's also instructive to compare the sizes of the files you've created so far.
•
Open your tutorial folder.
o
Windows users: Choose View > Details.
o
Mac users: Choose View > as List.
•
You may need to expand the window to see everything.
•
Click on the tab marked Size to sort the files by size.
•
Compare the file sizes. Remember that when it comes to Web pages, small is beautiful!
You can try to validate mustard_word.html if you wish, but the results will be the same as with
the page generated through Composer.
16
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
7. Uploading Your Files
The next step is to put these files on the Web. To do this, they must be uploaded from your
desktop computer to one of the Xavier Web servers.
The server designated for personal pages is named xavier.xula.edu. Your home directory is on
this server. It was created with your Xavier e -mail account.
Remember that "directory" is just another term for "folder."
In order to access your home directory, you will need to know your username and passwo rd. (If
you've never done this before, your password is probably still the default password that was
issued when your account was first created: xavier1 . You should change it as soon as possible.)
In this section, you will learn how to use another piece of software to upload files to the Xavier
server through a procedure known as File Transfer Protocol or FTP. This piece of software is an
FTP client.
To use any FTP client, you must have an active connection to the Internet.
•
Windows users should use WS_FTP (see section 7.1 below)
•
Mac users should use Fetch (see section 7.2 below)
17
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
7.1
Using WS_FTP (Windows Only)
Note: If you don’t have WS_FTP LE, download it for free from FTPplanet.com.
Connecting to the Xavier Web Server
•
Start WS_FTP on your computer. A dialogue box similar to the one below should appear
(if not, click Connect in the lower left hand corner).
•
Fill in the information as shown, substituting your own username in the User ID field.
The proper host name is webusers.xula.edu. Type in your regular Xavier e -mail
password (which will appear as ******) in the Password field.
•
If you are working on your own personal computer, you may also assign a Profile Name
and check the Save Password box, then click Save. This will allow you to make a
shortcut to your account in the future and not have to enter your password every time you
connect. Don't do this if you are at a shared computer!
•
When you're done, click OK.
After you complete the above step, the program should connect to the Xavier Web server, and if
you have the 'bells and whistles', you'll hear a sound effect of a train coming through. This is not
meant to frighten you. It's supposed to be a good thing.
18
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
You should now see something like this:
Take a moment to contemplate this marvel of the modern age. Notice that there are two windows.
The window on the left shows the local system; the window on the right shows the remote system.
The local system is the machine on your desktop, r ight in front of you. The remote system is
somewhere else — probably in a building somewhere else on campus, though theoretically it could
be anywhere from a couple yards to half a world away. In this case, the remote system is the
Xavier Web server.
You will use WS_FTP to transfer files from your local system to the remote system.
Notice the two arrow buttons between the two windows. They may look innocuous, but they're
the heart of this program. The arrow which points from left to right is used to copy local files to
the remote system. This is called as uploading. The arrow which points from right to left is used
to copy remote files to the local system. This is called as downloading.
Creating a New Directory
•
Click the MkDir (pronounced 'make deer' and meaning 'make directory') button to the
right of the Remote System window.
•
A dialog box should appear asking you to "Enter new remote folder name." Fill in the
field with myhtmltutorial.
•
Click OK.
•
In the Remote System window, you should now see a folder named myhtmltutorial.
Double-click on myhtmltutorial to open it.
19
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
Uploading Your Files
First you will select your files on the local system, then you will upload them to the remote
system.
•
In the Local System window (left-hand side), navigate to the place where your files are
located. Navigation can be a little tricky in this program! Here are some tips:
o
Double-click to open a folder.
o
Double-click the green arrow to move up a level in the file hierarchy.
o
To get to the desktop, navigate to the WINDOWS folder and open the DESKTOP
folder.
o
Remember that your files are in the tutorial folder on the desktop. When you fin
the tutorial folder, double-click to open it.
When at last you find your files, you must select them.
•
Hold down the shift key while you the files you wish to upload. Select all the HTML files
you created. Don't forget to select mustard.jpg as well.
When all your files are selected, you may upload them to the server.
•
Click the right arrow button in the center of the window.
•
If a dialog box appears asking if you wish to upload the files, click Yes.
WS_FTP will begin uploading. When done, the myhtmltutorial folder in the Remote System
window should contain the files you selected for transfer.
•
Check to make sure this is the case.
•
Proceed to section 7.3 below.
20
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
7.2
Using Fetch (Mac Only)
Connecting to the Xavier Web Server
•
Start Fetch on your Mac.
•
A dialog box similar to the one below should appear (if not, choose File > New
Connection from the menu bar).
•
Fill in the information as shown, substituting your own username in the User ID field.
The proper host name is webusers.xula.edu. Type in your regular Xavier e -mail
password (which will appear as ******) in the Password field.
•
When you're done, click OK.
You should now be seeing a listing of your home directory on xavier.xula.edu.
Time for a little terminology. Let's talk about the local system and the remote system.
The local system is the machine on your desktop, right in front of you. The remote system is the
machine you just connected to, and it's somewhere else — probably in another building on
campus, though theoretically it could be anywhere from a couple yards to half a world away.
Creating a New Directory
•
In the menu bar, choose Directories > Create New Directory.
•
Fill in the field with myhtmltutorial.
•
Click OK.
You should now see a directory named myhtmltutorial. You may need to scroll down to see it.
•
Double-click on myhtmltutorial to open it.
Uploading Your Files
First you will select your files on the local system, then you will upload them to the remote
system.
•
In the menu bar, choose Remote > Put Folders and Files.
•
In the dialog box that follows, navigate to the contents of your tutorial folder.
21
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
•
Select and Add each file you wish to upload. Select all the HTML files you created. Don't
forget to select mustard.jpg as well.
•
When you are finished, click Done.
•
Make sure the next dialog box has the following settings:
Text Files:
Text
Other Files:
Raw Data
•
Click OK.
Fetch will upload the files. When the upload is complete, the contents of myhtmltutorial in the
Fetch window should contain the files you selected for transfer.
•
7.3
When you are satisfied that all your materials have been transferred, proceed to section
7.3 below.
The Moment of Truth
Now comes the moment of truth! Point your browser to:
http://xavier.xula.edu/your_username_here/myhtmltutorial/mustard.html
Congratulations -- you're a webmaster!
22
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
8. Cleaning Up
You probably don't want to leave these tutorial files on the server, so you may delete them.
•
Return to your FTP client.
•
Select the files you wish to delete from the remote system. Hold down the shift key to
select multiple files.
•
o
Windows users: Click the button to the right of the Remote System Window that
is marked Delete.
o
Mac users: Choose Remote > Delete Directory or File…
Click Delete in the dialog box that appears.
You may now close all running applications.
If you are doing this tutorial in a lab, you should also take a moment to clean up the desktop as a
courtesy to the next user. Simply drag your tutorial folder to the Recycle Bin (Windows) or the
Trash (Mac). Don't forget to shut down your computer and turn off the monitor.
23
How the Web Works, Part I: Introduction to HTML
HTML Tutorial
All About Mustard
An Abbreviated History of Mustard
The Greeks used mustard as a condiment and a drug but it was the Romans who first made
real culinary use of it by grinding the seeds and mixing the flour with wine, vinegar, oil and honey.
When they moved into Gaul they took mustard plants with them and it was in the rich wine
growing region of Burgundy that mustard flourished.
It is reputed that at a festival in 1336 attended by the Duke of Burgundy and his cousin King
Philip the Fair, no less than 70 gallons of mustard were eaten. Reports do not say how pickled
the guests were.
Pope John XX11 of Avignon loved mustard so much that he created the post of "Mustard
Maker to the Pope," a job he gave to an idle nephew who lived near Dijon. Dijon soon became the
mustard centre of the world and in fact so important was it that in 1634 a law was passed to grant
the men of the town the exclusive right to make mustard.
1777 saw the start of mustard making as we know it today as it was in this year that Messieurs
Grey and Poupon founded their company. They used Grey's recipe and Poupon's money! We still
owe a lot to this redoubtable duo as in 1850 their company invented a steam operated grinding
machine so ending the era of laborious and back-breaking hand grinding.
And as Jesus said in the Gospel of Thomas:
[The Kingdom of Heaven] is like a mustard seed. It is the smallest of all seeds; but when it falls
on tilled soil, it produces a great plant and becomes a shelter for birds of the air.
A Mustard Recipe
Ingredients
4 Tablespoons Dry mustard powder
1 Tablespoon White Wine Vinegar
2 Tablespoons Flat beer
1 Clove Garlic
1 Teaspoon Sugar
1/2 Teaspoon Salt
1/4 Teaspoon Turmeric
1 Tablespoon Olive oil -- optional
Preparation
1. Whisk together dry mustard, vinegar and beer.
2. Use a garlic press or large pair pliers to squeeze the juice from the clove o f garlic into the
mixture.
3. Stir in sugar, salt and turmeric.
4. To make mustard smoother and less hot, add olive oil to taste.
Mustard Links
•
Européenne de Condiments
http://www.moutarde.com/
A mustard company's website
•
Mustard Gas
http://www.spartacus.schoolnet.co.uk/FWWmustard.htm
A description of mustard gas
•
Mount Horeb Mustard Museum
http://www.mustardweb.com/
The world's largest collection of prepared mustards
24
HTML Primer
© Oxford Brookes University 2003
Contents
l
l
l
l
l
l
l
1. Introduction
¡ 1.1 History
¡ 1.2 XHTML
2. Basic Structure
¡ 2.1 Elements and Attributes
¡ 2.2 The HTML Document
¡ 2.3 Headers and Paragraphs
¡ 2.4 Some Global Attributes
¡ 2.5 Adding Emphasis
¡ 2.6 Layout Model
¡ 2.7 Line Breaks
¡ 2.8 Summary
3. Lists
¡ 3.1 Ordered and Unordered Lists
¡ 3.2 The List Element
¡ 3.3 Definition Lists
4. Linking
¡ 4.1 Anchors as Sources
¡ 4.2 Uniform Resource Locators
¡ 4.3 Fragment Destinations
¡ 4.4 The base Element
5. Further Block-level Elements
¡ 5.1 Introduction
¡ 5.2 Preformatted Text
¡ 5.3 Addresses
¡ 5.4 Quotations
¡ 5.5 Rules
¡ 5.6 The Generic div Element
6. Further Inline Elements
¡ 6.1 Significant Phrase Elements
¡ 6.2 Mathematics
¡ 6.3 Quotations
¡ 6.4 The Generic span Element
. Images
¡ 7.1 Introduction
¡ 7.2 The img Element
¡ 7.3 The object Element
¡ 7.4 Image Maps
-- ii -© Oxford Brookes University 2003
l
l
l
l
l
8. Tables
¡ 8.1 Introduction
¡ 8.2 Table Structure
¡ 8.3 Column Organisation
¡ 8.4 Cell Organisation
9. Forms
¡ 9.1 Introduction
¡ 9.2 Form Processing
¡ 9.3 The input Element
¡ 9.4 Selections
¡ 9.5 Writing Essays
¡ 9.6 Improving Layout
¡ 9.7 The button Element
¡ 9.8 Summary
10. The Document Head
¡ 10.1 Introduction
¡ 10.2 The title Element
¡ 10.3 The meta Element
¡ 10.4 Scripting
¡ 10.5 The style Element
¡ 10.6 The link Element
¡ 10.7 The base Element
11. Creating HTML
12. Frames
Appendices
l
l
l
A. References
B. Quick Reference Guide
C. Deprecated Attributes
-- 1 -© Oxford Brookes University 2003
1. Introduction
l
l
1.1 History
1.2 XHTML
1.1 History
HTML stands for the Hypertext Markup Language. It was defined by Tim Berners-Lee in 1990 as the
method of marking up pages of information to be looked at by a browser. The Standard Generalized
Markup Language (SGML) had been used widely at CERN for documentation and HTML was a cut
down version of the CERN documentation language. HTML is not a static language and has gone
though a number of iterations over the last 10 years:
l
l
l
l
l
l
l
l
HTML 2.0 was the first real standard definition for core HTML features based upon current
practice in 1994.
HTML 3.2 was W3C's first Recommendation for HTML and was defined in 1996. HTML 3.2
added tables, applets, text-flow around images, superscripts and subscripts, and was compatible
with HTML 2.0.
HTML 4.0 was first released as a W3C Recommendation on 18 December 1997.
HTML 4.01 was released on 24th December 1999 and fixed a number of bugs in the HTML 4.0
specification.
XHTML 1.0 is a reformulation of HTML 4 in XML and was released on 26 January 2000 (updated
on 1 August 2002)
XHTML 1.1 is a redefinition of XHTML 1.0 as a set of modules. It became a Recommendation on
31 May 2001. This Recommendation provides a consistent, forward-looking standard cleanly
separated from the deprecated, legacy functionality of HTML 4.01 that was brought forward as
part of XHTML 1.0.
XHTML Basic was released on 19 December 2000 and is a minimal set of XHTML 1.0
functionality (defined in terms of XHTML modules) supported by a range of user agents including
PDAs and mobile phones.
XHTML 2.0 will be the next version of HTML. It is currently at Working Draft stage. Latest Draft is
6 May 2003.
In August 2003, XHTML 1.0 (functionality defined in HTML 4.01) is the version of HTML widely
supported by today's browsers. An aim from the early days of the Web was that style and content of
web pages should be kept distinct. This helps to ensure that pages can be displayed on the widest set
of devices and allows them to be used by people with accessibility problems (either physical or due to
their location). In the early days, HTML was used for defining both the style and the content. Today, the
aim is that styling should be provided through a style sheet and that HTML should be responsible for
defining the content. HTML 4.01 includes a number of legacy styling attributes which are deprecated as
such styling should be done using a style sheet. These attributes do not appear in XHTML 1.1. This
Primer will stick to describing the basic features of XHTML1.1 (functionality defined in HTML 4.01) but
ignoring all the deprecated styling attributes of HTML 4.01 and XHTML 1.0.
1.2 XHTML
There is currently a move towards application-specific markup by using XML (Extensible Markup
Language) as the language for defining markup languages. XML derives from SGML. This means that a
reformulation of HTML as an application of XML makes a great deal of sense. The facilities available in
XML and the tools surrounding XML become available. For this to happen, HTML must be written more
strictly than is required in the HTML specification. For example, each start tag must have an end tag. In
consequence, this Primer is described it as though all that a browser supports is XHTML 1.0. The result
is a succinct Primer.
-- 2 -© Oxford Brookes University 2003
Frames in HTML 4.01 and XHTML 1.0 are not deprecated but, in many applications and environments
can cause problems. In consequence there are actually six different flavours of XHTML 4.01/XHTML
1.0:
l
l
HTML 4.01 comes in three flavours:
¡ Strict: no styling attributes that are deprecated should appear
¡ Transitional: styling attributes may appear
¡ Frameset: frame functionality is also allowed
XHTML 1.0 comes in the same three flavours:
¡ Strict: no styling attributes that are deprecated should appear
¡ Transitional: styling attributes may appear
¡ Frameset: frame functionality is also allowed
-- 3 -© Oxford Brookes University 2003
2. Basic Structure
l
l
l
l
l
l
l
2.1 Elements and Attributes
2.2 Basic Structure
2.3 Headers and Paragraphs
2.4 Some Global Attributes
2.5 Adding Emphasis
2.6 Layout Model
2.7 Summary
2.1 Elements and Attributes
Information in HTML is marked up by adding to the information markup that describes its structure.
Marked up information consists of a set of elements that have the general form:
<xyz>Some content</xyz>
The terminology used is that this defines an xyz element. The start tag for the element is <xyz> and the
end tag is </xyz>. The end tag looks very similar to the start tag except for the addition of the / before
the name of the element. The content of the element is any text to be marked-up and can contain other
elements. So, for example, this is also allowed:
<xyz>Some <abc>more</abc>content<def>added</def></xyz>
The tags must be correctly nested. This would be illegal:
<xyz>Some <abc>more content<def>added</abc></def></xyz>
Either the def element must be completely inside the abc element or completely outside it.
Elements may have attributes and these form part of the start tag:
<xyz attr1="sometext" attr2='somemoretext'>Some content</xyz>
Attributes consist of the attribute name followed by the equal sign and a value which is a string of text
inside one of two types of quotation marks (double quotes: ASCII decimal 34; single quotation marks:
ASCII decimal 39). Two types are allowed in case the attribute's value contains quotation marks. The
start and end quotation marks must either both be single or both be double quotes.
A shorthand is provided for element's that contain no content. For example:
<xyz attr1="sometext" attr2='somemoretext'></xyz>
may also be written:
<xyz attr1="sometext" attr2='somemoretext' />
-- 4 -© Oxford Brookes University 2003
2.2 The HTML Document
A strict XHTML 1.0 document would have the following structure:
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
...
</head>
<body>
...
</body>
</html>
The document starts by indicating that it is XML and follows with a document type declaration that says
what type of document this is. As we are going to be very strict in what we write, we can tell the browser
this and it may help it to run more efficiently. After this comes the complete document which is an html
element. It consists of two elements, the head element and the body element. The first contains
elements that define meta information about the document while the second gives the content of the
document. Most of this Primer will concentrate on defining what can be in the body of the document.
Treat the first two lines as text that you have to start the document with. About the simplest document
that we can have is:
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>My First Document</title>
</head>
<body>
<p>My first document</p>
</body>
</html>
The head consists of a single title element and the body consists of a single p for paragraph element.
Your browser is likely to display the title as part of its decoration around the document. The document
displayed will be the paragraph My first document displayed something like:
My first document
We have added a background to whatever our browser has produced for this page just so that the
results of the markup are differentiated from the text in the Primer. We will start by looking at the
elements that can be used in the body of the document and come back to discuss the head later. From
now on you can assume that the document has the structure given above and all we are discussing are
the elements that make up the contents of the body element.
The HTML document will normally be stored in a file. It is usual for that file to have an extension .htm
or .html.
If we were going to be less strict and define the document as an HTML 4.01 document that allows
styling attributes, the first two lines would be:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
-- 5 -© Oxford Brookes University 2003
2.3 Headers and Paragraphs
h1 h2 h3 h4 h5 h6 p
We have already introduced the paragraph element above. HTML allows you to define 6 levels of
headings with h1 being the most important and h6 the least important. So for example you could have:
<h1>1. My Book</h1>
<h2>1.1 The First Section in My Book</h2>
<h3>1.1.1 The First Sub-Section in my book</h3>
<h4>1.1.1.1 The First sub-sub-section</h4>
<p>This is the very first paragraph in my major work which tells in
great detail
all the things that I have ever done.
Sit back and enjoy it!<p>
<h4>1.1.1.2 The second sub-sub-section</h4>
<p>Which does not add a great deal to the first section which
sets the scene quite well.</p>
<h3>1.1.2 The Second Sub-Section in my book</h3>
<p>And so on. . .</p>
A browser might display this as follows:
1. My Book
1.1 The First Section in My Book
1.1.1 The First Sub-Section in my book
1.1.1.1 The First sub-sub-section
This is the very first paragraph in my major work which tells in great detail all the things that I have ever
done. Sit back and enjoy it!
1.1.1.2 The second sub-sub-section
Which does not add a great deal to the first section which sets the scene quite well.
1.1.2 The Second Sub-Section in my book
And so on. . .
How the browser chooses to display it will depend on the browser. They are expected to make the h1
elements more prominent than the h2 elements and so on. Users normally do not use a higher number
heading if they have not first used all the lower numbers. It would be regarded as bad practice to use
h1, h2 and then h4 without using h3 but it is not illegal. We have made the h1 and h2elements more
exotic by centring them and making them a different colour. Most browsers are not that adventurous and
just change the font size, style and boldness to differentiate the headings.
2.4 Some Global Attributes
<h1 id= class= style= title= lang= . . . onclick= onmousedown= . . . >
There are some attributes that apply to nearly all elements. They fall into three classes. The first set
identifies and styles the element more precisely, a second set concerns the language the element is
written in and a third set is concerned with interacting with the element. We will only look at the first set
at the moment.
-- 6 -© Oxford Brookes University 2003
The first set are:
l
l
l
l
id: a unique name is assigned to the element. No other element in the document is allowed to
have the same name. It is used for a variety of purposes including hypertext links, styling,
interaction etc. Those uses will be discussed later or in the CSS Primer.
class: at least one and possibly more class names are assigned to the element. The primary use
of the class attribute is to specify the styling for elements belonging to one or more classes. The
class attribute is fully described in the CSS Primer.
style: styling is normally done more globally than on a single element but there are times when
this may be useful. The style attribute is discussed in detail in the CSS Primer.
title: the attribute adds some information about the element. For elements in the body of the
document, there is no mandatory action or use for the title attribute. However it is usual for
browsers to use the information in some way. For example when the cursor moves over the
element, the browser may display its name as a tool tip.
An example of their use is:
<h1 title="My First Title" id="b123" class="header first topic"> . . .
</h1>
Unless stated otherwise, it can be assumed that any element in the body of the document may have
these attributes and these will be the only attributes unless others are mentioned. Appendix B has the
element names in bold that can have all the global attributes.
2.5 Adding Emphasis
em strong
Within a heading or paragraph, it is likely that some phrase or word may need to be emphasised to add
strength to some point. HTML provides two elements that can occur within the text of other elements to
achieve that goal. The element em emphasises the enclosing text and the element strong emphasises
it even more. It is up to the browser to decide how it will represent the two levels of emphasis. The text
enclosed by the em element might be in italic and the text within the strong element might be bold but
that is up to the browser. All that is hoped for is that the latter is emphasised greater than the former. An
example might be:
<p>This is a book that you really <em>must</em> read. Phone me
tomorrow <strong>in the afternoon</strong> and tell me what you
think.</p>
This might be rendered as:
This is a book that you really must read. Phone me tomorrow
you think.
in the afternoon and tell me what
It might also be rendered as:
This is a book that you really must read. Phone me tomorrow in the afternoon and tell me what you
think.
These are not the only elements that you can use to delineate some parts of an element like paragraph
and headers. We have described these two now because they are frequently used and it allows us now
to discuss a major breakdown of HTML elements into different types.
The important point in terms of the HTML document is that the reader can see that the word must is
emphasised and that the phrase in the afternoon is emphasised even more. In terms of content, that is
all that the reader of the page needs to know and that is all that is conveyed by the elements.
-- 7 -© Oxford Brookes University 2003
2.6 Layout Model
Some guidance is given within HTML as to how the elements in the document should appear. The
headers should appear on separate lines. If there are two paragraphs, one following another then the
first paragraph should normally be before the second and the end of one and the start of the other
should be obvious. For emphasis, it should be clear that the emphasised words are not separate
paragraphs but emphasised words within the paragraph.
In HTML, this is achieved by telling the browser what type of element each one is. They fall into two
major classes:
l
l
inline:elements that just contain text or other inline elements. The elements em and strong are
inline elements
block-level: elements that are more significant, can define their own space and can contain
inline elements. The elements p and h1 etc are examples of block-level elements. There are
some block-level elements that are more like containers than individual block-level elements.
They can contain other block-level elements. In this case the internal structure of the block is
more complex. We will come across many examples of these.
Unless told otherwise, the browser is expected to present the two types differently. Block-level elements
are expected to start on a newline while inline elements do not. When we get round to discuss styling,
things get a bit more complicated but while we are just looking at HTML, this is sufficient in describing
how the browser is expected to present the elements to the reader. The complications start to appear
when there are block-level elements enclosing block-level elements. In some sense we already have
that as the body element is a block-level element and we have shown that other block-level elements
can be contained within it.
There are some elements that are used to define how other elements should appear. These are not
block-level elements themselves and so fall outside the layout model. There are also elements that can
really appear anywhere (script elements are a good example) but apply globally. Their appearance at a
particular point in the document just to aid readability.
2.7 Line Breaks
<br />
For block-level elements like paragraphs, the normal pattern is to ignore additional white space
characters like extra spaces and fill each line up before carrying on with the paragraph on the next line.
If there is a need to force a line break within a paragraph, inserting the inline element br will cause this
to happen. For example:
<p>This is a paragraph with a great deal
of text in it to make sure that we have
more than one line in it and here<br /> is where
we want to force a line break</p>
This will be presented as:
This is a paragraph with a great deal of text in it to make sure that we have more than one line in it and
here
is where we want to force a line break
2.8 Summary
Appendix B gives a Quick Guide to all the elements allowed in our strict version of HTML and for each it
lists their attributes, whether they are inline, block or other and any special conditions that apply. Once
familiar with the elements, this should be useful for jogging your memory on a particular element.
The rest of this Primer will consider the remaining elements in some detail.
-- 8 -© Oxford Brookes University 2003
3. Lists
l
l
l
3.1 Ordered and Unordered Lists
3.2 The List Element
3.3 Definition Lists
3.1 Ordered and Unordered Lists
ul ol li
Two simple lists that are frequently used in documents are unordered lists, a set of bullet points that
are equally important and ordered lists where the order of reading the list has some importance. HTML
allows you to define both types of lists. The element ul element defines an unordered list and the
element ol defines an ordered list. They both contain a set of list elements. Both use the li element to
define the items in the list. For example:
<p>Here is an unordered list:</p>
<ul>
<li>A bullet point</li>
<li>Another bullet point</li>
<li>And a third</li>
</ul>
<p>Here is an ordered list:</p>
<ol>
<li>First point</li>
<li>Second point</li>
<li>Third point</li>
</ol>
This would appear something like:
Here is an unordered list:
l
l
l
A bullet point
Another bullet point
And a third
Here is an ordered list:
1. First point
2. Second point
3. Third point
The only element allowed within a ul element or a ol element is a li element. Please note!
In this case, the browser has chosen a certain style of bullet symbol to indicate the individual items and
has numbered the ordered list using the numbers 1, 2, 3 etc. Styling the document allows the user to
specify different bullet symbols and different number representations (a, b, c or i, ii, iii even). That does
not concern us here. We will just use the ones provided by the browser.
-- 9 -© Oxford Brookes University 2003
3.2 The List Element
Well it all looks pretty straightforward so far. We have a set of list elements each containing text (some
of which could be emphasised) and that is as far as it goes. However, it is a great deal more
complicated than that because the element li is a block-level element. So within an li element it is
possible to have other block-level elements. A very obvious example is to put another list within a list, a
markup that is often required. This works in much the same way for both ul and ol elements so we will
only consider one of them. Let us start with our example above:
<p>Here is an unordered list:</p>
<ul>
<li>A bullet point</li>
<li>Point about bags and boxes and rings</li>
<li>And a third</li>
</ul>
Anywhere within the second bullet (or the others) we can add another ordered or unordered list so here
is what happens when we insert a list after the word bags:
<p>Here is an unordered list:</p>
<ul>
<li>A bullet point</li>
<li>Point about bags
<ol>
<li>First point</li>
<li>Second point</li>
<li>Third point</li>
</ol>
and boxes and rings together</li>
<li>And a third</li>
</ul>
The result is as follows:
Here is an unordered list:
l
l
l
A bullet point
Point about bags
1. First point
2. Second point
3. Third point
and boxes and rings together
And a third
Let us go wild and put lists after the words bags, boxes and rings:
-- 10 -© Oxford Brookes University 2003
<p>Here is an unordered list:</p>
<ul>
<li>A bullet point</li>
<li>Point about bags
<ol>
<li>First bag point</li>
<li>Second bag point</li>
<li>Third bag point</li>
</ol>
and boxes
<ol>
<li>First box point</li>
<li>Second box point</li>
<li>Third box point</li>
</ol>
and rings
<ul>
<li>A ring point</li>
<li>Another ring point</li>
<li>A third point</li>
</ul>
together
</li>
<li>And a third</li>
</ul>
This is displayed by my browser as:
Here is an unordered list:
l
l
l
A bullet point
Point about bags
1. First bag point
2. Second bag point
3. Third bag point
and boxes
1. First box point
2. Second box point
3. Third box point
and rings
¡ A ring point
¡ Another ring point
¡ A third point
together
And a third
We could go on playing this game with lists inside lists inside lists. Note that the browser has chosen a
different bullet symbol for the inner list and has been kind enough to indent each sub-list to make it more
readable. When we do our own styling, we can provide even more control but that is sufficient for now.
However we need to show a common error that you must not do:
-- 11 -© Oxford Brookes University 2003
<p>The main points to be covered are:</p>
<ul>
<li>Lists</li>
<ul>
<li>Ordered Lists</li>
<li>Unordered Lists</li>
</ul>
<li>Headers</li>
</ul>
This looks alright and most likely the browser will accept it but it is illegal. Here the inner unordered list
appears as an element inside the outer unordered list at the same level as the li elements and that is
not allowed. It is only the li element that can have other block-level elements within it. What should be
written in this case is:
<p>The main points to be covered are:</p>
<ul>
<li>Lists
<ul>
<li>Ordered Lists</li>
<li>Unordered Lists</li>
</ul></li>
<li>Headers</li>
</ul>
We have seen that we can add lists within lists but the li element can contain any block-level element so
paragraphs and headers can also appear as part of the list element:
<p>The main points to be covered are:</p>
<ul>
<li>
<h4>Lists</h4>
<p>Ordered Lists</p>
<p>Unordered Lists</p>
</li>
<li>Headers</li>
</ul>
This will be displayed as:
The main points to be covered are:
l
Lists
Ordered Lists
Unordered Lists
l
Headers
-- 12 -© Oxford Brookes University 2003
3.3 Definition Lists
dl dt dd
The third type of list available in HTML is a definition list which consists of a dl element containing pairs
of dt and dd elements. The dt element defines the term to be defined and the dd element gives the
definition. For example:
<p>The following definitions apply:</p>
<dl>
<dt>Unordered List</dt>
<dd>List in any order that has a bullet in front of it</dd>
<dt>Ordered List</dt>
<dd>List in a precise order that are numbered</dd>
</dl>
The format for the definition list is again up to the browser. the browser might display it as:
The following definitions apply:
Unordered List
List in any order that has a bullet in front of it
Ordered List
List in a precise order that are numbered
HTML does not put any constraints on the positions of dt and dd elements within the dl element so that
the user can define terms without giving a definition and vice versa. This can sometimes be useful when
composing a document but in its final form it is sensible to have pairs of elements with each term
followed by its definition. A dt element may be followed by several dd elements when there are several
definitions that apply.
The dt element acts rather like a header element and should just contain text possibly with some inline
elements to give emphasis etc. On the other hand the dd element is very much like the li element and
can contain any mixture of block-level and inline elements allowed in the body of the document.
-- 13 -© Oxford Brookes University 2003
4. Linking
l
l
l
l
4.1 Anchors as Sources
4.2 Uniform Resource Locators
4.3 Fragment Destinations
4.4 The base Element
4.1 Anchors as Sources
<a href= >
<h1 id= >
The success of the Web has come about because it allows documents on the web to link to other
documents or even to parts of the current document. The a element, short for anchor, is the element
that achieves that in HTML. It is mainly used to define the source of the link. An element within a
document is defined as the destination of the link by the id attribute. For example:
<p>More information will be found on
<a href="http://www.w3.org/fred/intro.htm#mydestination">the W3C site</a>.
Please visit it.</p>
This will be displayed something like:
More information will be found on the W3C site. Please visit it.
Here the anchor element defines the source of the anchor by the href attribute. Such an anchor is
displayed by most browsers with some indication that the inline text that is the content of the element is
emphasised in some way. In the example above, the text is underlined, and in a different colour. Some
browsers will show the source element differently depending on whether the link has been traversed
before or not. Clicking on the link will cause the page with name intro.htm in the directory fred on the
W3C site to be opened and positioned so the element with its id attribute set to mydestination is
visible. If this is in the middle of the document, the document will be scrolled to a position where this
element is visible, usually at the top of the screen. The browsers usually default to the current web page
being replaced by the one referenced in the anchor element.
4.2 Uniform Resource Locators
The href attribute must be a Uniform Resource Locator although this can be relative or absolute.
Given that the source document is http://www.w3.org/fred/index.htm, some examples of URLs are:
http://www.w3.org/fred/intro.htm#mydestination
A full URL that defines the protocol for communicating with the server (http), the name of the server
(www.w3.org), the name of the resource on that server (fred/intro.htm) and the element within the
resource (the one identified by mydestination).
http://www.w3.org/fred/intro.htm
As above, but the link is to the whole resource and it will normally be displayed with the start of the
page visible
http://www.w3.org/fred/
Defines the default main document in the file fred. It is up to the server to define what file it returns.
#mydest
A relative address. It defines the element identified by the id attribute with value mydest in the same
file as the source anchor. In this case it expands to http://www.w3.org/fred/index.htm#mydest.
-- 14 -© Oxford Brookes University 2003
intro.htm
A relative address. It defines the file intro.htm in the same directory as the file containing the source
anchor. In this case it expands to http://www.w3.org/fred/intro.htm.
./intro.htm
A relative address. It defines the file intro.htm in the same directory as the file containing the source
anchor. The dot notation moves you up a directory. In this case it expands to
http://www.w3.org/fred/intro.htm.
../intro.htm
A relative address. It defines the file intro.htm in the directory above the file containing the source
anchor. In this case it expands to http://www.w3.org/intro.htm.
../another/intro.htm
A relative address. It moves up two levels in the hierarchy and then the sub-directory another. In this
case it expands to http://www.w3.org/another/intro.htm.
4.3 Fragment Destinations
If the destination of a link is part of a document, it is defined by the id attribute. For example:
<p>More information will be found in
<a href="http://www.w3.org/fred/intro.htm#sec3">Section 3</a>.
Please visit it.</p>
. . .
<h1 id="sec3">3. Section Three of Document<h1>
The id attribute must be unique within the document.
4.4 The base Element
< base href= />
The base element appears in the head of the document and there should be only one of them. It has a
single attribute, href that defines the base to be used for all relative URLs in the document. In Section
4.2, the base for the examples was http://www.w3.org/fred/index.htm. If there was a base element in the
document, the value specified by the href attribute would be used in place of this. The base element is
mainly used when the same document can be retrieved from different places. The document may have
arrived from one destination but the author would like all the references in the document to be made as
though it came from a different origin.
-- 15 -© Oxford Brookes University 2003
5. Further Block-level Elements
l
l
l
l
l
5.1 Introduction
5.2 Preformatted Text
5.3 Addresses
5.4 Quotations
5.5 Rules
5.1 Introduction
pre address blockquote hr
HTML identifies three types of paragraph for special treatment. They are:
l
l
l
Preformatted text: there are many instances where the precise layout of a piece of text has
been defined by spaces and newlines and needs to be retained.
Addresses: documents normally have an author and this element is intended to convey the
relevant information in order to contact that person.
Quotations: borrowed material should have a link to the owner. This element is designed for that
purpose.
A fourth element , the hard rule could either be regarded as styling or the null element. It is also
described in this Section.
5.2 Preformatted Text
<pre>
The ability to output preformatted text is needed in HTML because the usual behaviour is to throw
unnecessary whitespace away. For example:
<p>
Cascading
Style
Sheets
from the
World
Wide
Web
Consortium
</p>
will be displayed as:
Cascading Style Sheets from the World Wide Web Consortium
This loses all the flavour of cascading that was in the original layout. Replacing p by pre as the element
produces something like:
-- 16 -© Oxford Brookes University 2003
Cascading
Style
Sheets
from the
World
Wide
Web
Consortium
The browser is expected to take account of all the whitespace and render it correctly. To help the layout
of spacing to be just right, the browser is asked to use a fixed-pitch or monospaced font as has been
done here. The usual method of presenting paragraphs is to fill up each line and then wrap on to the
next. For preformatted text, if the line is long it should be left that way. The user will then have to scroll
across to see it. One problem with preformatted text is the positioning of tabs. as no guidance is given
by HTML, browsers are likely to make different decisions on what a tab means. In consequence, it is
recommended not to use tabs in preformatted text.
Because preformatted text is trying to get the spacing just right, some of the inline elements are
disallowed. In particular, sup, sub, object, img are not allowed to be used within a preformatted
paragraph
5.3 Addresses
<address>
It is surprising that the address element has survived the various revisions of HTML. It has all the same
characteristics as the p element, and has no additional attributes. In consequence, it could easily be
achieved by having normal paragraphs with a class address. Browsers tend to render the element
using italic script. For example:
<address> Bob Hopgood<br />
Oxford Brookes University<br />
[email protected]<br />
</address>
This would be rendered as:
Bob Hopgood
Oxford Brookes University
[email protected]
Note that the element is practically useless without forcing the line breaks by using the br element.
5.4 Quotations
<blockquote cite= >
Copyright is an important issue particularly on the Web where borrowing material is relatively easy. As
the Web allows every resource to be uniquely identified, it is appropriate to define a block-level element
that provides the additional attribute to point to the location from where the quotation was taken. For
example:
-- 17 -© Oxford Brookes University 2003
<p>The role of W3C is as follows:</p>
<blockquote cite="http://www.w3.org">
<p>The World Wide Web Consortium (W3C)
develops interoperable technologies
(specifications, guidelines, software, and tools)
to lead the Web to its full potential as a forum for
information, commerce, communication, and collective understanding.</p>
</blockquote>
This would be displayed as:
The role of W3C is as follows:
The World Wide Web Consortium (W3C) develops interoperable technologies
(specifications, guidelines, software, and tools) to lead the Web to its full potential as a
forum for information, commerce, communication, and collective understanding.
Note that the browser has indented the text and changed the colour of the text as well. Unfortunately, it
has not provided any mechanism for seeing the citation apart from looking at the source code.
5.5 Rules
<hr />
The hard rule element is probably more a styling rule than an information content one although it could
be used to delineate major sections in a document. It has no additional parameters and is used as
follows:
<p>My first paragraph</p>
<hr />
<p>My second paragraph</p>
This would be presented as:
My first paragraph
My second paragraph
The rule can be styled using CSS.
5.6 The Generic div Element
div
HTML has a generic block-level element called div. It can have any of the inline or block-level elements
within it and it has no additional attributes. Its purpose is to group elements together so that they can act
as a set. The element is quite powerful in terms of styling as it can have a class attribute defined for it
so that a specific div element is styled differently. If the user wished to interact with a part of the
document, enclosing that part with a div element and assigning it a unique id attribute ensures that the
part of the document is located precisely. Until those are discussed in detail, the element does not
appear to provide much additional functionality.
-- 18 -© Oxford Brookes University 2003
6. Further Inline Elements
l
l
l
l
6.1 Significant Phrase Elements
6.2 Mathematics
6.3 Quotations
6.4 The Generic span Element
6.1 Significant Phrase Elements
cite defn code samp var abbr acronym
HTML provides a number of inline elements that more precisely define the semantic meaning of the
enclosed text. This may be useful for the browser in terms of presentation but could also be of use to a
search engine or a spell checker. They indicate phrases in the document that are not normal textual
information that would appear in a paragraph. Here is an example of most of them:
<p>As <cite>Bob Hopgood</cite> points out, <dfn>HTML stands for
Hypertext Markup Language</dfn>, which is a <abbr title="World Wide Web
Consortium">W3C</abbr> Recommendation used by <acronym title="North
Atlantic Treaty Organisation">NATO</acronym> to markup documents.
Something like <code>class="classified"</code> is used to indicate that
some text like <samp>In Confidence</samp> is added to all the
classified paragraphs. If the <var>class</var> has a value of
<var>unclassified</var>, no additional text is added.</p>
This would be displayed as:
As Bob Hopgood points out, HTML stands for Hypertext Markup Language, which is a W3C
Recommendation used by NATO to markup documents. Something like class="classified" is
used to indicate that some text like In Confidence is added to all the classified paragraphs. If the
class attribute has a value of unclassified no additional text is added.
The meaning of each is:
cite
A citation or reference to another source
dfn
This is the place where this term is defined
code
A fragment of code
samp
Sample output
var
A program argument or variable
abbr
Abbreviation, title attribute is used to define the abbreviation
acronym
The title attribute is used to define the acronym
As can be seen in the example, most browsers make some attempt at rendering the inline elements
differently. Hovering over the acronyms and abbreviations should cause the meaning to be displayed as
a tooltip. The element abbr is rarely used.
-- 19 -© Oxford Brookes University 2003
6.2 Mathematics
HTML makes no attempt to display mathematics correctly. There is a separate markup language,
MathML, for that purpose. However superscripts and subscripts appear sufficiently often that markup is
provided for them:
<p> x<sub>i</sub> = y<sub>i</sub> + 2<sup>a + b<sup>2</sup></sup></p>
This would be displayed as:
xi = yi + 2 a + b
2
As is shown, inline elements may have inline elements inside them if it makes sense. Broadly speaking
anything that is sensible is allowed.
6.3 Quotations
<q cite= />
As well as the blockquote element, there is also an inline quotation element that allows quotations to
occur within a paragraph. For example:
<p>David said, <q cite="David Duce">I saw Bob and he said <q cite="Bob
Hopgood">SVG is nearly finished</q> so we had better start using
it</q>.</p>
This would be displayed as:
David said, "I saw Bob and he said 'SVG is nearly finished' so we had better start using it".
The browser is supposed to add the quotation marks and be clever enough to use different quotation
marks for the outer and inner quotes. These facilities are currently poorly supported in browsers. For
example. IE6 produces no quotation marks and Opera produces the same quotation marks for both the
inner and outer quotes so this is a risky element to use.
6.4 The Generic span Element
span
HTML has a generic inline element called span. It can have any of the inline elements within it and it
has no additional attributes. Its purpose is to bracket some inline text and elements so that they can act
as a set. The element is quite powerful in terms of styling as it can have a class attribute defined for it
so that a specific span element is styled differently. If the user wished to interact with a part of a blocklevel element, enclosing that part with a span element and assigning it a unique id attribute ensures that
the part of the block-level element is located precisely. Until those are discussed in detail, the element
does not appear to provide much additional functionality.
-- 20 -© Oxford Brookes University 2003
7. Images
l
l
l
l
7.1 Introduction
7.2 The img Element
7.3 The object Element
7.4 Image Maps
7.1 Introduction
Inline images were added to HTML quite early on and provide a mechanism for adding pictorial
information to Web pages. Two elements are provided:
img
The img element was defined early on and is a simple mechanism for adding images. It does not
provide much control in terms of providing alternatives if either the image requested is unavailable or
it is impossible for the viewer to perceive it. The aim is to supersede the img element with the object
element although in August 2003 both were available for use.
object
The object element is similar to the img element but allows alternative representations so it has
wider applicability. It is particularly useful when using specific image types that require additional
functionality in the browser or where an alternative might be preferred due to the type of connection
that the user currently has (a mobile phone, for example).
HTML does not legislate which media types, sometimes called MIME type are supported by the
browser. MIME stands for Multi purpose Internet Mail Extensions. In some cases, the browser can be
enhanced by adding a plug-in provided by a different organisation to support another MIME type. For
example, Scalable Vector Graphics (SVG) pictures are currently supported in IE6 using a plug-ins
provided by Adobe or Corel. If the user has not down loaded the plug-in, the SVG pictures specified
cannot be displayed. If the object element is used to specify the SVG file to be loaded, it could provide
as an alternative either the picture in a different format that most browsers do support or it could display
a message telling the user to download the plug-in. The browser has to work out what type of image is
being provided and in the case of the img element it does that by data sniffing, that is MIME type
detection. When the server sends the file it may send the MIME type with it. The file extension will
normally give a good clue to the contents. If the browser is sufficiently intelligent, it can look at the
contents of the file and determine it that way. So getting the type of file requires quite a bit of work on
the part of the browser and server.
In the case of the object element the browser retrieves the value of the type attribute if provided and
that gives the MIME type. This means that if it does not support the MIME type, it does not need to
download the file. Some of the more usual images are (filename followed in brackets by the image type):
abc.gif (image/gif)
The GIF (Graphics Interchange Format) format is widely used for bit map images that are graphics
art. It is lossless, which means that all the information in the original image is kept. It suffers from
some patent problems on the algorithms used for compression and so is being replaced by the PNG
format
abc.png (image/png)
The PNG (Portable Network Graphics) format is similar to GIF but can handle a wider range of
images with better colour support and can be more efficiently compressed.
abc.jpg abc.jpeg (image/jpeg)
JPEG (Joint Photographic Experts Group) format is widely used for transmitting real world images. It
is a lossy compression which means that it approximates the original image throwing away
superfluous detail.
abc.mpeg abc.mpg (application/mpeg)
The MPEG (Moving Picture Experts Group) format is for transmitting video. It provides high
compression by being lossy and only transmitting the changes from one frame to the next.
-- 21 -© Oxford Brookes University 2003
abc.cgm (image/cgm)
The CGM (Computer Graphics Metafile) format is designed for transmitting line drawings. It is an ISO
standard and there is a WebCGM profile for use on the Web.
abc.svg (image/svg+xml)
The SVG (Scalable Vector Graphics) format is designed as an XML application providing line drawing
functionality similar to CGM but it also has better text drawing capabilities and special effects
including animation. It is the standard on the web for pictures that are not bit map images.
Other possibilities that might be recognised are text/richtext, text/html, audio/wav, video/avi,
application/pdf, etc. The list is very long.
7.2 The img Element
<img src= alt= height= width= longdesc= usemap= />
The inline img element defines an image to be displayed inline. If there is insufficient space on the line
for the image, it will be placed on the next line. Better control of images is available through styling. The
main attributes are:
src
Gives the URL of the file containing the image
alt
An alternative text description of the image. If the reader has the browser set not to display images,
the alt text will be displayed instead. Some browsers provide the option that the text is displayed
when you hover over the image. For viewers listening to the page via a text-to-speech browser, the
alt text is spoken in place of the image. The alt attribute should always be provided.
width, height
These two attributes define the width and height of the image in pixels. If they are not provided, the
browser downloads the image and works out the values for itself. This means that the rest of the page
cannot be composed until the image arrives. Good practice is for these two attributes always to be
provided. If their values are different from the size of the image, the browser will scale the image until
it fits
longdesc
Gives the URL of a file that provides additional information about the image. For complex images
where the designer wants to provide sufficient information for, say, a blind person to get an in depth
description of the image, the longdesc attribute should be provided. When the image has an
associated image map ( to be discussed later), this can be used to provide additional information
about the image map's contents.
usemap
For handling client side image maps, to be discussed later.
Here is an example that displays a JPEG image called bobbin.jpg that is 349 pixels wide and 91 pixels
high:
<p>Hanging bobbins like this one:
<img width="349" height="91" alt="a bobbin" src="bobbin.jpg"
longdesc="bobbin.txt" />
were sold at hangings in England as souvenirs.
The actual size is smaller:
<img width="174" height="45" alt="a bobbin" src="bobbin.jpg" />
and I can make them look silly by changing the aspect ratio.
Here the height has been halved:
<img width="349" height="45" alt="a bobbin" src="bobbin.jpg" />
and here the height has been doubled and the width halved:
<img width="174" height="182" alt="a bobbin" src="bobbin.jpg" > </p>
-- 22 -© Oxford Brookes University 2003
This would appear as:
Hanging bobbins like this one:
were sold at
hangings in England as souvenirs. The actual size is smaller:
and I can
make them look silly by changing the aspect ratio. Here the height has been halved:
and here the height has been doubled and
the width halved:
The file bobbin.txt might contain:
William Bradbury was murdered near Luton. William Worsley and Levi Welch were both
charged with the crime but Levi Welch turned king's evidence admitting that he had robbed
him but that Worsley had struck the blow that killed him. William Worsley was found guilty
of highway robbery and murder. His death was the last public hanging to take place in
Bedford on 31 March 1868. Bobbins were produced as souvenirs for the men in the crowd
to give to their wives as a memento of the occasion. Being the last public hanging, this
bobbin was produced in a reasonable quantity and so are not as rare as other hanging
bobbins. At auction in good condition they are worth around 150 pounds sterling. In a shop
you might pay a significant mark up on that price.
7.3 The object Element
<object data= type= standby= height= width= >
The object element is designed to replace the img element and to provide facilities for inserting into a
Web page files in a whole variety of formats.
The inline object element defines one of a set of objects to be displayed inline. The main attributes are:
data
Gives the URL of the file containing the image
type
Gives the MIME type for the object to be downloaded. The browser can check this before attempting
a download.
-- 23 -© Oxford Brookes University 2003
width, height
These two attributes define the width and height of the object in pixels. If they are not provided, the
browser downloads the object and works out the values for itself. Good practice is for these two
attributes always to be provided.
standby
Gives a text message for the browser to display while the object is being downloaded.
Here is the previous example that displays an image called bobbin that is 349 pixels wide and 91 pixels
high. The image is available in JPEG, GIF and PNG formats:
<object width="349" height="91" data="bobbin.jpg" type="image/jpg"
standby="JPEG image downloading">
<object width="349" height="91" data="bobbin.png" type="image/png"
standby="PNG image downloading" />
<img width="349" height="91" src="bobbin.gif" alt="bobbin photo" />
No image available
</object>
In this case the browser will first attempt to download the JPG object. If this is not possible for any
reason, it will try the PNG object and if that is also not possible, it will try to download the GIF image
using the img element. If all three are not possible, it will display the text No image available. Adding
an img element using a format that is almost certainly going to be available is useful for browsers that
still do not recognise the object element. They will ignore those and just display the GIF image.
At the moment (August 2003), the support for the object element is improving but still not complete in
some browsers. In consequence for most image formats (jpg, png, gif) it is often useful to continue with
the img element.
7.4 Image Maps
< img usemap= />
<map name= >
<area href= alt= shape= coords= />
It is possible to use an image as a mechanism for linking to other pages in the same way that anchors
are used. To achieve this, it is necessary to define the parts of the image that will be activated when a
click is made over them and also the action to take when this happens. For example:
<h3>Robert Cailliau and Murray Maloney</h3>
<a href="#dummy">
<img alt="Robert and Murray" width="277" height="127"
src="photorcmm.jpg" usemap="#maprcmm" />
</a>
</p>
<map name="maprcmm">
<area href="http://cern.web.cern.ch/CERN/Divisions/ETT/WPE/People/RobertCailliau/"
shape="rect" coords="0, 0, 138, 127" />
<area href="http://www.muzmo.com/Murray/" shape="rect" coords="139, 0, 277, 127" />
</map>
-- 24 -© Oxford Brookes University 2003
This would appear as:
Robert Cailliau and Murray Maloney
The map element can be anywhere in the file and the attribute name is used by the img element to
indicate which map is being used. The img element has its ismap attribute set to the name of the map
element. To ensure that the inline img element is recognised as an anchor, it is enclosed by an a
element where the href attribute is not used and can be set to anything. It should be included as some
browsers check that it is present.
Within the map element is a set of area elements each of which define part of the image as a clickable
region and the destination of the link when a user clicks on that part of the image. In the example, there
are two areas. The coords attribute defines the part of the image that is active and the shape of the
area is defined by the shape attribute. The example has two rectangular areas and the four coordinates
define positions on the image in pixels. The four coordinates define minx miny maxx maxy where the
origin is the top left corner of the image and y increases in the downwards direction. In the example, the
two areas are the left side of the photograph and the right side of the photograph. Clicking on one or
other will cause a link to the appropriate home page of Robert Cailliau at CERN or Murray Maloney at
his company, Muzmo Communications. The possible shapes are:
default
Defines the whole area
rect
A rectangular area where the coords attribute consists of minx miny maxx maxy
circle
A circular area where the coords attribute consists of centrex centrey radius
poly
A polygonal area where the coords attribute consists of x1 y1 x2 y2 x3 y3 . . .
There are a number of editors on the market that aid in the production of image maps. In most cases it
is possible to achieve the same effect either by careful styling or by the use of Scalable Vector Graphics
possible with associated images. This is probably the least useful method of associating links with
images.
-- 25 -© Oxford Brookes University 2003
8. Tables
l
l
l
l
8.1 Introduction
8.2 Table Structure
8.3 Column Organisation
8.4 Cell Organisation
8.1 Introduction
HTML provides good support for tables. The table is divided into three main parts, a header, a body and
a footer. There is also an optional caption that can be added to the table. Inside the three main parts, a
table is divided into rows each having a number of columns. As with most word processing systems it is
possible to give groups of columns special features and to merge two or more columns together or two
or more rows together. The table is basically made up of cells and the content of a cell may be any set
of block-level elements rather like the li element. So it is possible to put another table inside a single
cell. In consequence, almost any table that is required can be achieved. CSS provides good control of
the styling of individual cells and the table decoration. We shall not consider that further here.
8.2 Table structure
<table summary= width= >
<caption>. . .</caption>
<colgroup align= span= width= />
<col align= span= width= />
<thead>
...
</thead>
<tfoot>
...
</tfoot>
<tbody>
...
</tbody>
</table>
The table head and foot are very similar to the table body. The main difference is that the browser is
supposed to output the table head and table foot on every page of the output if it is a very long table.
Most of the browsers do not appear to have implemented this. Multiple table bodies are allowed and this
can be useful if different parts of the table are to be styled differently. Here is a very simple example:
-- 26 -© Oxford Brookes University 2003
<table title="Membership of W3C July 2001" summary="5 column table with
header row and first column the type of membership. Total in the final
column and bottom row" width="90%">
<caption>W3C Membership</caption>
<thead>
<tr>
<th>Type</th><th>Americas</th><th>Europe</th><th>Pacific</th><th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<th>Full</th><td>62</td><td>29</td><td>17</td><td>108</td>
</tr>
<tr>
<th>Affiliate</th><td>240</td><td>123</td><td>47</td><td>410</td>
</tr>
<tr>
<th>Total</th><td>302</td><td>152</td><td>64</td><th>518</th>
</tr>
</tbody>
</table>
This would be displayed something like:
W3C Membership
Type
Americas
Europe
Pacific
Total
Full
62
29
17
108
Affiliate
240
123
47
410
Total
302
152
64
518
The sections of the table are made up of table rows denoted by the tr element. Each row consists of a
set of entries which can either be td elements (for data) or th elements (for headers). Note that the
header elements can be anywhere. In this case the table has them in the top row and first column and
the overall total. The browser is expected to render the two elements differently. the browser will most
likely make the header data elements (th) bolder than the normal data elements (td).
The table has been defined as having a width of 90% of the width of the page. Any of the usual length
values may be used but it is quite common to specify the width as a fraction of the current window size.
The summary element is aimed at users who for one reason or another will have difficulty seeing the
table in full. They might be blind or have a very small display or have had the table converted to text to
transmit it by voice. The aim is to give some information to make it easier to understand the table. Other
facilities are provided to help the user understand the table structure. Normally the summary would not
be this long.
8.3 Column Organisation
The col and colgroup elements allow the author to define properties for a whole column or group of
columns.
The colgroup element is provided to create structural divisions in the table. For example, the table
above might have immediately after the caption:
<colgroup span="1" width="30%" />
<colgroup span="3" width="10%" />
<colgroup span="1" width="30%" />
-- 27 -© Oxford Brookes University 2003
This would change the table to look like:
W3C Membership
Type
Americas Europe Pacific
Total
Full
62
29
17
108
Affiliate
240
123
47
410
Total
302
152
64
518
The first column, being the headings for each row is put into one group, the three columns giving the
information is a second group while the third group is the one containing the totals. The attribute span
defines the number of columns in the group in each case. In the example, the widths have been made
difference to demonstrate this. Styling can be applied differently to each of the groups.
The col element shares attributes between several columns. For example:
<colgroup span="3" align="right">
<col width="30%">
<col span="2" width="10%">
</colgroup>
<colgroup span="2" width="20%">
The colgroup element