<?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="Applications">

  <s2 title="Overview">
    <p>This page lists popular application and libraries that
       are based on or provide an additional functionality on
       top of &XercesCName;. If you know of an application that
       you feel should be listed here, send an email with all the
       relevant information to one of the <jump href="mailing-lists.html">
       &XercesCName; mailing lists</jump>.</p>

    <s3 title="CodeSynthesis XSD">
      <p><jump href="http://www.codesynthesis.com/products/xsd/">CodeSynthesis
         XSD</jump> is an open-source XML Schema to C++ data
         binding compiler that uses &XercesCName; as the underlying XML
         parser. Provided with an XML instance specification (XML Schema), XSD
         generates C++ classes that represent the given vocabulary as well
         as parsing and serialization code. You can then access the data
         stored in XML using types and functions that semantically
         correspond to your application domain rather than dealing with
         direct representations of XML such as DOM and SAX.</p>
    </s3>

    <s3 title="Xalan-C++">
      <p><jump href="http://xml.apache.org/xalan-c/">Xalan-C++</jump>
         is an open-source XSLT processor for transforming XML documents
         into HTML, text, or other XML document types. It implemented the W3C
         recommendations for XSL Transformations (XSLT) and the XML Path
         Language (XPath) and is based on &XercesCName;.</p>
    </s3>

    <s3 title="XQilla">
      <p><jump href="http://xqilla.sourceforge.net">XQilla</jump>
         is an open-source XQuery and XPath 2.0 implementation based
         on &XercesCName;. It implements the DOM 3 XPath API and conforms
         to the W3C proposed recommendation of XQuery and XPath 2.0.</p>
    </s3>

    <s3 title="XML Security for C++">
      <p><jump href="http://xml.apache.org/security/c/">XML Security
         for C++</jump> is an open-source implementation of the XML
         Digital Signature specification and is based on &XercesCName;.
         The library also provides support for serializing XML in the
         canonical form.</p>
    </s3>

  </s2>
</s1>
