<?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="Source Repository">

  <s2 title="Overview">
    <p>The &XercesCName; source code is stored in the Subversion
       repository (SVN). The SVN repository is public and everyone
       has read access. The repository uses a standard layout of:</p>

<source>
https://svn.apache.org/repos/asf/xerces/c/
                                        |
                                        | - branches/
                                        |
                                        | - tags/
                                        \
                                          - trunk/
</source>

    <p>For example, to check out the trunk (the place where the main
       development is taking place), execute:</p>

<source>
svn co https://svn.apache.org/repos/asf/xerces/c/trunk
</source>

    <p>To check out the code in the xerces-2.7 branch, execute:</p>

<source>
svn co https://svn.apache.org/repos/asf/xerces/c/branches/xerces-2.7
</source>

    <p>To check out the code tagged xerces-2.8.0_rc1, execute:</p>

<source>
svn co https://svn.apache.org/repos/asf/xerces/c/tags/xerces-2.8.0_rc1
</source>

    <p>You can also browse the repository and examine individual
       files using the <jump href="http://svn.apache.org/viewvc/xerces/c/?root=Apache-SVN">Web
       interface</jump>.</p>

  </s2>
</s1>
