Name: HTML 4.01 Specification
License: W3C (the original at http://www.w3.org/TR/1999/REC-html401-19991224/)
OSR: 2664
Version: 4.01
Description: Documentation for the HTML 4.01 standard
Origin: http://www.w3.org/TR/1999/REC-html401-19991224/

W3C (R) Intellectual Rights Notice and Legal Disclaimers

This page includes notices and disclaimers related to:

  1. Copyright
  2. Notices
  3. Trademarks
  4. Disclaimers_and_Liabilities


Copyright (C) 1994-2002 W3C (R) (Massachusetts_Institute_of_Technology, Institut
National_de_Recherche_en_Informatique_et_en_Automatique, Keio_University), All
Rights Reserved.

World Wide Web Consortium (W3C (R)) web site pages may contain other proprietary
notices and copyright information, the terms of which must be observed and
followed. Specific notices do exist for W3C documents and software. Also, there
are specific_usage_policies_associated_with_some_of_the_W3C_Icons. Please see
our Intellectual_Rights_FAQ for common questions about using materials from our
site.

Notice and Disclaimers

1. Unless otherwise noted, all materials contained in this Site are copyrighted
and may not be used except as provided in these terms and conditions or in the
copyright notice (documents and software) or other proprietary notice provided
with the relevant materials.
2. The materials contained in the Site may be downloaded or copied provided
that ALL copies retain the copyright and any other proprietary notices
contained on the materials. No material may be modified, edited or taken out of
context such that its use creates a false or misleading statement or impression
as to the positions, statements or actions of W3C.
3. The name and trademarks of copyright holders may NOT be used in advertising
or publicity pertaining to the Web site, its content, specifications, or
software without specific, written prior permission. Title to copyright in Web
site documents will at all times remain with copyright holders. Use of W3C
trademarks and service marks is covered by the W3C_Trademark_and_Servicemark
License.
4. Caches of W3C materials should comply with the "maximum time to live"
information provided with the materials. After such materials have expired they
should not be served from caches without first validating the contents of the
W3C Site. Organizations that want to mirror W3C content must abide by the W3C
Mirroring_Policy.

W3C (R)Trademarks and Generic Terms


Trademarks owned by W3C host institutions on behalf of W3C and generic terms
used by the W3C

5. The trademarks, logos, and service marks (collectively the "Trademarks")
displayed on the Site are registered and unregistered Trademarks of the
Massachusetts Institute of Technology (MIT), Institut National de Recherche en
Informatique et en Automatique (INRIA), or Keio University (Keio). All use of
the W3C Trademarks is governed by the W3C_Trademark_and_Servicemark_License. No
additional rights are granted by implication, estoppel, or otherwise. Terms
which claimed as generic are not governed by any W3C license and are used as
common descriptors by the W3C.
The following is a list of W3C terms claimed as a trademark or generic term by
MIT, INRIA, and/or Keio on behalf of the W3C:

     W3C (R), World Wide Web Consortium (registered in numerous countries)
     AmayaTM, a Web Browser
     CSSTM, Cascading Style Sheets Specification
     DOMTM, Document Object Model
     HTML (generic), HyperText Markup Language
     HTTP (generic), Hypertext Transfer Protocol
     MathMLTM, Mathematical Markup Language
     Metadata (generic)
     P3PTM, Platform for Privacy Preferences Project
     PICSTM, Platform for Internet Content Selection
     RDF (generic), Resource Description Framework
     SMILTM, Synchronized Multimedia Integration Language
     SVGTM, Scalable Vector Graphics
     WAITM, Web Accessibility Initiative
     XENC (generic), XML Encryption
     XHTMLTM, The Extensible HyperText Markup Language
     XML (generic), Extensible Markup Language
     XSLTM, Extensible Stylesheet Language

     ACSSTM, Aural Cascading Style Sheets
     DSigTM, Digital Signature Initiative
     JEPITM, Joint Electronic Payment Initiative
     JigsawTM
     PICSRulesTM
     WebFontsTM

The absence of a product or service name or logo from this list does not
constitute a waiver of MIT's, INRIA's, or Keio's trademark or other
intellectual rights concerning that name or logo.
Any questions concerning the use, status, or standing of W3C trademarks should
be directed to: site-policy@w3.org or to W3C (c/o Joseph Reagle), Laboratory
for Computer Science NE43-358, Massachusetts Institute of Technology, 200
Technology Square, Cambridge, MA 02139.

Non-W3C Trademarks; Member Trademarks

The trademarks, logos, and service marks not owned on behalf of the W3C and
that are displayed on the Site are the registered and unregistered marks of
their respective owners. No rights are granted by the W3C to use such marks,
whether by implication, estoppel, or otherwise.
"METADATA" is a trademark of the Metadata Company. W3C uses the term "metadata"
in a descriptive sense, meaning "data about data". W3C is not in any way
affiliated with the Metadata Company.

Legal Disclaimers

6. W3C has not reviewed any or all of the web sites linked to this Site and is
not responsible for the content of any off-site pages or any other web sites
linked to this Site. Please understand that any non-W3C web site is independent
from W3C, and W3C has no control over the content on that web site. In
addition, a link to a non-W3C web site does not mean that W3C endorses or
accepts any responsibility for the content, or the use, of such site. It is the
user's responsibility to take precautions to ensure that whatever is selected
is free of such items as viruses, worms, Trojan horses and other items of a
destructive nature.
7. Information W3C publishes on its Site may contain references or cross
references to W3C specifications, projects, programs and services that are not
announced or available in your country. Such references do not imply that W3C
intends to announce such specifications, projects, programs or services in your
country.
8. Information on this Site may contain technical inaccuracies or typographical
errors. Information may be changed or updated without notice. W3C may make
improvements and/or changes in the materials contained in or described on this
site at any time without notice. W3C may also make changes in these Terms and
Conditions without notice. User is bound by such revisions and should therefore
periodically visit this page to review the then current Terms and Conditions.

9. Limitation on Warranties.

ALL MATERIALS ON THE W3C SITE ARE PROVIDED "AS IS." W3C, MIT, INRIA, AND KEIO
MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
TITLE OR NON-INFRINGEMENT. AS TO DOCUMENTS AND GRAPHICS PUBLISHED ON THIS SITE,
W3C, MIT, INRIA, AND KEIO MAKE NO REPRESENTATION OR WARRANTY THAT THE CONTENTS
OF SUCH DOCUMENT OR GRAPHICS ARE FREE FROM ERROR OR SUITABLE FOR ANY PURPOSE;
NOR THAT IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY
PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
Please note that some jurisdictions may not allow the exclusion of implied
warranties, so some of the above exclusions may not apply to you.

10. Limitation on Liability.

IN NO EVENT WILL W3C, MIT, INRIA, AND KEIO BE LIABLE TO ANY PARTY FOR ANY
DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES FOR ANY USE OF THIS SITE, OR
ON ANY OTHER HYPERLINKED WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST
PROFITS, BUSINESS INTERRUPTION, LOSS OF PROGRAMS OR OTHER DATA ON YOUR
INFORMATION HANDLING SYSTEM OR OTHERWISE, EVEN IF W3C, MIT, INRIA, OR KEIO IS
EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
______________
Please see our Intellectual_Rights_FAQ for common questions about using
materials from our site. Questions about this notice can be directed to site-
policy@w3.org .
Created by reagle
last updated by reagle on $ Date: 1999/07/28 13:54:29 $
Copyright (C) 1998-2002 W3C (R) (MIT, INRIA, Keio), All Rights Reserved. W3C
liability, trademark, document_use and software_licensing rules apply.
-------------------------------------------------------------------------------


W3C (R) DOCUMENT NOTICE AND LICENSE


Copyright (C) 1994-2002 World Wide Web Consortium, (Massachusetts Institute of
Technology, Institut National de Recherche en Informatique et en Automatique,
Keio University). All Rights Reserved.
http://www.w3.org/Consortium/Legal/

Public documents on the W3C site are provided by the copyright holders under
the following license. The software or Document Type Definitions (DTDs)
associated with W3C specifications are governed by the Software Notice. By
using and/or copying this document, or the W3C document from which this
statement is linked, you (the licensee) agree that you have read, understood,
and will comply with the following terms and conditions:
Permission to use, copy, and distribute the contents of this document, or the
W3C document from which this statement is linked, in any medium for any purpose
and without fee or royalty is hereby granted, provided that you include the
following on ALL copies of the document, or portions thereof, that you use:

  1. A link or URL to the original W3C document.
  2. The pre-existing copyright notice of the original author, or if it doesn't
     exist, a notice of the form: "Copyright (C) [$date-of-document] World Wide
     Web Consortium, (Massachusetts Institute of Technology, Institut National
     de Recherche en Informatique et en Automatique, Keio University). All
     Rights Reserved. http://www.w3.org/Consortium/Legal/" (Hypertext is
     preferred, but a textual representation is permitted.)
  3. If it exists, the STATUS of the W3C document.

When space permits, inclusion of the full text of this NOTICE should be
provided. We request that authorship attribution be provided in any software,
documents, or other items or products that you create pursuant to the
implementation of the contents of this document, or any portion thereof.
No right to create modifications or derivatives of W3C documents is granted
pursuant to this license. However, if additional requirements (documented in
the Copyright FAQ) are satisfied, the right to create modifications or
derivatives is sometimes granted by the W3C to individuals complying with those
requirements.
THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO
REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED
TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-
INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE FOR ANY
PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY
THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE PERFORMANCE
OR IMPLEMENTATION OF THE CONTENTS THEREOF.
The name and trademarks of copyright holders may NOT be used in advertising or
publicity pertaining to this document or its contents without specific, written
prior permission. Title to copyright in this document will at all times remain
with copyright holders.
----------------------------------------------------------------------------
This formulation of W3C's notice and license became active on April 05 1999 so
as to account for the treatment of DTDs, schema's and bindings. See the older
formulation for the policy prior to this date. Please see our Copyright FAQ for
common questions about using materials from our site, including specific terms
and conditions for packages like libwww, Amaya, and Jigsaw. Other questions
about this notice can be directed to site-policy@w3.org.
-------------------------------------------------------------------------------


W3C(R) SOFTWARE NOTICE AND LICENSE


Copyright (c) 1994-2002 World Wide Web Consortium, (Massachusetts Institute of
Technology, Institut National de Recherche en Informatique et en Automatique,
Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/

This W3C work (including software, documents, or other related items) is being
provided by the copyright holders under the following license. By obtaining,
using and/or copying this work, you (the licensee) agree that you have read,
understood, and will comply with the following terms and conditions:
Permission to use, copy, modify, and distribute this software and its
documentation, with or without modification, for any purpose and without fee or
royalty is hereby granted, provided that you include the following on ALL
copies of the software and documentation or portions thereof, including
modifications, that you make:

  1. The full text of this NOTICE in a location viewable to users of the
     redistributed or derivative work.
  2. Any pre-existing intellectual property disclaimers, notices, or terms and
     conditions. If none exist, a short notice of the following form (hypertext
     is preferred, text is permitted) should be used within the body of any
     redistributed or derivative code: "Copyright (c) [$date-of-software] World
     Wide Web Consortium, (Massachusetts Institute of Technology, Institut
     National de Recherche en Informatique et en Automatique, Keio University).
     All Rights Reserved. http://www.w3.org/Consortium/Legal/"
  3. Notice of any changes or modifications to the W3C files, including the
     date changes were made. (We recommend you provide URIs to the location
     from which the code is derived.)

THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
The name and trademarks of copyright holders may NOT be used in advertising or
publicity pertaining to the software without specific, written prior
permission. Title to copyright in this software and any associated
documentation will at all times remain with copyright holders.
____________________________________
This formulation of W3C's notice and license became active on August 14 1998 so
as to improve compatibility with GPL. This version ensures that W3C software
licensing terms are no more restrictive than GPL and consequently W3C software
may be distributed in GPL packages. See the older_formulation for the policy
prior to this date. Please see our Copyright_FAQ for common questions about
using materials from our site, including specific terms and conditions for
packages like libwww, Amaya, and Jigsaw. Other questions about this notice can
be directed to site-policy@w3.org.
