<?xml version="1.0"  encoding="iso-8859-1" standalone="no"?>
<!--
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
-->

<!DOCTYPE s1 SYSTEM "sbk:/style/dtd/document.dtd">

<s1 title="Download">

  <s2 title="Download">
    <p>Use the links below to download &XercesCName; from one of
       our mirrors.  You <em>must</em> <link anchor="verify">verify the
       integrity</link> of the downloaded files using signatures downloaded
       from our main distribution directory.</p>

    <p>You can download the &XercesCName; source distributions from
       the <jump href="https://downloads.apache.org/xerces/c/3/sources/">master
       distribution directory</jump> or, preferably, its <jump
       href="[preferred]/xerces/c/">mirror</jump>. Only current
       recommended releases are available on the main distribution
       site and its mirrors.</p>
       
    <p>Older releases are available from the
       <jump href="https://archive.apache.org/dist/xerces/c/">archive
       download site</jump>, but you should be aware that there is a lot
       of accumulated "cruft" in the archives, and many confusingly
       named files. Anything labeled "current" is likely not.</p>
  </s2>

  <s2 title="Mirror">
    <p>The currently selected mirror is <em>[preferred]</em>.  If you
       encounter a problem with this mirror, please select another
       mirror.  If all mirrors are failing, there are <em>backup</em>
       mirrors (at the end of the mirrors list) that should be available.</p>


<form action="[location]" method="get" id="SelectMirror">
Other mirrors: <select name="Preferred">
[if-any http]
  [for http]<option value="[http]">[http]</option>[end]
[end]
[if-any ftp]
  [for ftp]<option value="[ftp]">[ftp]</option>[end]
[end]
[if-any backup]
  [for backup]<option value="[backup]">[backup] (backup)</option>[end]
[end]
</select>
<input type="submit" value="Change" />
</form>

    <p>You may also consult the <jump href="http://www.apache.org/mirrors/">complete
       list of mirrors</jump>.</p>
  </s2>

  <s2 title="Latest 3-Series Release">

    <p>The &XercesCName; &XercesCLatest; release is available in source code
       distributions only. If binaries are produced at a future point, this
       page will be updated.</p>

    <s3 title="Source Distributions">
      <p>
         <jump href="[preferred]/xerces/c/3/sources/xerces-c-&XercesCLatest;.zip">xerces-c-&XercesCLatest;.zip</jump>
         [<jump href="http://www.apache.org/dist/xerces/c/3/sources/xerces-c-&XercesCLatest;.zip.asc">PGP</jump>]
         [<jump href="http://www.apache.org/dist/xerces/c/3/sources/xerces-c-&XercesCLatest;.zip.sha256">SHA2</jump>]<br/>

         <jump href="[preferred]/xerces/c/3/sources/xerces-c-&XercesCLatest;.tar.gz">xerces-c-&XercesCLatest;.tar.gz</jump>
         [<jump href="http://www.apache.org/dist/xerces/c/3/sources/xerces-c-&XercesCLatest;.tar.gz.asc">PGP</jump>]
         [<jump href="http://www.apache.org/dist/xerces/c/3/sources/xerces-c-&XercesCLatest;.tar.gz.sha256">SHA2</jump>]<br/>

         <jump href="[preferred]/xerces/c/3/sources/xerces-c-&XercesCLatest;.tar.bz2">xerces-c-&XercesCLatest;.tar.bz2</jump>
         [<jump href="http://www.apache.org/dist/xerces/c/3/sources/xerces-c-&XercesCLatest;.tar.bz2.asc">PGP</jump>]
         [<jump href="http://www.apache.org/dist/xerces/c/3/sources/xerces-c-&XercesCLatest;.tar.bz2.sha256">SHA2</jump>]<br/>

         <jump href="[preferred]/xerces/c/3/sources/xerces-c-&XercesCLatest;.tar.xz">xerces-c-&XercesCLatest;.tar.xz</jump>
         [<jump href="http://www.apache.org/dist/xerces/c/3/sources/xerces-c-&XercesCLatest;.tar.xz.asc">PGP</jump>]
         [<jump href="http://www.apache.org/dist/xerces/c/3/sources/xerces-c-&XercesCLatest;.tar.xz.sha256">SHA2</jump>]

      </p>
    </s3>
  </s2>

  <anchor name="verify"/>
  <s2 title="Verify the integrity of the files">

    <p>It is essential that you verify the integrity of the downloaded
       files using the PGP or MD5/SHA files.  Please read <jump
       href="http://httpd.apache.org/dev/verification.html">Verifying
       HTTP Server Releases</jump> for more information on why you
       should verify our releases.</p>

    <p>The PGP signatures can be verified using PGP or GPG. First
       download the <jump href="http://www.apache.org/dist/xerces/c/KEYS">&XercesCName; KEYS</jump>
       as well as the <code>.asc</code> signature file for the particular
       distribution.  Make sure you get these files from the <jump
       href="http://www.apache.org/dist/xerces/c/">main distribution
       directory</jump>, rather than from a mirror. Then verify the
       signatures using:</p>

<source>
% pgpk -a KEYS
% pgpv &lt;distribution-name>.asc
</source>
<p><em>or</em></p>
<source>
% pgp -ka KEYS
% pgp &lt;distribution-name>.asc
</source>
<p><em>or</em></p>
<source>
% gpg --import KEYS
% gpg --verify &lt;distribution-name>.asc
</source>

    <p>Alternatively, you can verify the digests on the files. A
       command line program called <code>md5</code> or <code>md5sum</code>
       is included in most UNIX distributions.  It is also available as
       part of <jump href="http://www.gnu.org/software/textutils/textutils.html">GNU
       Textutils</jump>.  Windows users can get binary md5 programs from <jump
       href="http://www.fourmilab.ch/md5/">here</jump>, <jump
       href="http://www.pc-tools.net/win32/freeware/console/">here</jump>, or
       <jump href="http://www.slavasoft.com/fsum/">here</jump>.</p>

  </s2>

</s1>
