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 " — &author;."> <!ENTITY % question "Why couldn’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 < and &, 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 & or & or & 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 " or " or " 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 ' or ' (not as ' 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 é or as the numeric references é or é, 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 & Trucks</title> • Incorrect: <a href="index.php?page=news&id=5">News</a> • Correct: <a href="index.php?page=news&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  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 ( ) " " compare space ( ) " " • Cyrillic Capital Letter A (А) "А" compare Latin Capital Letter A (A) "A" There are five predefined entities: • < represents "<" • > represents ">" • & represents "&" • ' represents ' • " 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 中 or 中. Similarly, the string "I <3 Jörg" could be encoded for inclusion in an XML document as "I <3 Jörg". "�" 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 />" 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"> </td> <td valign="top"> </td> </tr> <tr> <td valign="top"> </td> <td valign="top"> </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