Sophie

Sophie

distrib > Fedora > 13 > i386 > by-pkgid > 7dbb97048ebf07a07f14d36d61024b23 > files > 50

wsdlpull-doc-1.23-3.fc13.noarch.rpm

<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>wsdlpull: /builddir/build/BUILD/wsdlpull-1.23/src/schemaparser/SchemaParser.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javaScript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<!-- Generated by Doxygen 1.6.2-20100208 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <img id="MSearchSelect" src="search/search.png"
             onmouseover="return searchBox.OnSearchSelectShow()"
             onmouseout="return searchBox.OnSearchSelectHide()"
             alt=""/>
        <input type="text" id="MSearchField" value="Search" accesskey="S"
             onfocus="searchBox.OnSearchFieldFocus(true)" 
             onblur="searchBox.OnSearchFieldFocus(false)" 
             onkeyup="searchBox.OnSearchFieldChange(event)"/>
        <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
        </div>
      </li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
    </ul>
  </div>
  <div class="navpath"><a class="el" href="dir_02f058d422e7266632662d1436e7c90d.html">src</a>&nbsp;&raquo;&nbsp;<a class="el" href="dir_aa09c601595277e3f572f9f53a7da262.html">schemaparser</a>
  </div>
</div>
<div class="contents">
<h1>SchemaParser.cpp</h1><a href="SchemaParser_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* </span>
<a name="l00002"></a>00002 <span class="comment"> * wsdlpull - A C++ parser  for WSDL  (Web services description language)</span>
<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2005-2007 Vivek Krishna</span>
<a name="l00004"></a>00004 <span class="comment"> *</span>
<a name="l00005"></a>00005 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
<a name="l00006"></a>00006 <span class="comment"> * modify it under the terms of the GNU Library General Public</span>
<a name="l00007"></a>00007 <span class="comment"> * License as published by the Free Software Foundation; either</span>
<a name="l00008"></a>00008 <span class="comment"> * version 2 of the License, or (at your option) any later version.</span>
<a name="l00009"></a>00009 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
<a name="l00010"></a>00010 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00011"></a>00011 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
<a name="l00012"></a>00012 <span class="comment"> * Library General Public License for more details.</span>
<a name="l00013"></a>00013 <span class="comment"> *</span>
<a name="l00014"></a>00014 <span class="comment"> * You should have received a copy of the GNU Library General Public</span>
<a name="l00015"></a>00015 <span class="comment"> * License along with this library; if not, write to the Free</span>
<a name="l00016"></a>00016 <span class="comment"> * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.</span>
<a name="l00017"></a>00017 <span class="comment"> *</span>
<a name="l00018"></a>00018 <span class="comment"> *</span>
<a name="l00019"></a>00019 <span class="comment"> */</span>
<a name="l00020"></a>00020 
<a name="l00021"></a>00021 <span class="preprocessor">#include &quot;<a class="code" href="SchemaParser_8h.html">schemaparser/SchemaParser.h</a>&quot;</span>
<a name="l00022"></a>00022 
<a name="l00023"></a>00023 <span class="preprocessor">#ifndef _WIN32</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#include &quot;<a class="code" href="ConfigFile_8h.html">xmlpull/ConfigFile.h</a>&quot;</span>
<a name="l00025"></a>00025 <span class="preprocessor">#endif</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span>
<a name="l00027"></a>00027 <span class="comment">//</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;climits&gt;</span>
<a name="l00029"></a>00029 
<a name="l00030"></a>00030 <span class="keyword">namespace </span>Schema {
<a name="l00031"></a>00031 <span class="keyword">using namespace </span>std;
<a name="l00032"></a><a class="code" href="classSchema_1_1SchemaParser.html#ac0e2c65eebd75fb3a5f36dc884fa6083">00032</a> <a class="code" href="classSchema_1_1SchemaParser.html#a1c3f89d88098fdaee9705dd2b599819e">SchemaParser::SchemaParser</a>(<a class="code" href="classXmlPullParser.html">XmlPullParser</a> * parser, 
<a name="l00033"></a>00033                            std::string tns,
<a name="l00034"></a>00034                            std::ostream &amp; log,
<a name="l00035"></a>00035                            <span class="keyword">const</span> std::string &amp; s)
<a name="l00036"></a>00036   :tnsUri_(tns), 
<a name="l00037"></a>00037    xParser_(parser),
<a name="l00038"></a>00038    elementQualified_ (false),
<a name="l00039"></a>00039    attributeQualified_ (false),
<a name="l00040"></a>00040    deleteXmlParser_(false),
<a name="l00041"></a>00041    resolveFwdRefs_(true),
<a name="l00042"></a>00042    level_(1),
<a name="l00043"></a>00043    logFile_(log),
<a name="l00044"></a>00044    confPath_(s)
<a name="l00045"></a>00045 {
<a name="l00046"></a>00046   init();
<a name="l00047"></a>00047 }
<a name="l00048"></a>00048 
<a name="l00049"></a><a class="code" href="classSchema_1_1SchemaParser.html#a1c3f89d88098fdaee9705dd2b599819e">00049</a> <a class="code" href="classSchema_1_1SchemaParser.html#a1c3f89d88098fdaee9705dd2b599819e">SchemaParser::SchemaParser</a>(<span class="keyword">const</span> std::string &amp;Uri, 
<a name="l00050"></a>00050                            std::string tns , 
<a name="l00051"></a>00051                            std::ostream &amp; log ,
<a name="l00052"></a>00052                            <span class="keyword">const</span> std::string &amp; s)
<a name="l00053"></a>00053   :tnsUri_(tns),
<a name="l00054"></a>00054    xParser_(0),
<a name="l00055"></a>00055    elementQualified_ (false),
<a name="l00056"></a>00056    attributeQualified_ (false),
<a name="l00057"></a>00057    deleteXmlParser_(false),
<a name="l00058"></a>00058    resolveFwdRefs_(true),
<a name="l00059"></a>00059    level_(1),
<a name="l00060"></a>00060    logFile_(log),
<a name="l00061"></a>00061    confPath_(s)
<a name="l00062"></a>00062 {
<a name="l00063"></a>00063     <span class="keywordflow">if</span>(<a class="code" href="namespaceXmlUtils.html#a49cb0c0850b4a22b1fe0d5efd7553b01">XmlUtils::fetchUri</a>(Uri,fname_))
<a name="l00064"></a>00064     {
<a name="l00065"></a>00065       xmlStream_.open(fname_.c_str());
<a name="l00066"></a>00066       xParser_ = <span class="keyword">new</span> <a class="code" href="classXmlPullParser.html">XmlPullParser</a>(xmlStream_);
<a name="l00067"></a>00067       xParser_-&gt;<a class="code" href="classXmlPullParser.html#afd20dea242da6a493321050f24230b54">setFeature</a>(<a class="code" href="XmlPullParser_8h.html#ada32f6169a51300722b9b7dd38fa4032">FEATURE_PROCESS_NAMESPACES</a>, <span class="keyword">true</span>);
<a name="l00068"></a>00068       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a7b14708ef982d48b41009380146f523a">require</a>(<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a9a40df5e7fdb1a29f88425ef3eb8c1fa">XmlPullParser::START_DOCUMENT</a>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>);
<a name="l00069"></a>00069       <span class="keywordflow">while</span> (!xmlStream_.fail() &amp;&amp; xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() != xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a7857338db3efb0bcd468b06fe346076f">END_DOCUMENT</a>)
<a name="l00070"></a>00070         { 
<a name="l00071"></a>00071           xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00072"></a>00072           <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a9b3020c88a2935db197d7a72cf36067c">START_TAG</a> &amp;&amp;
<a name="l00073"></a>00073               xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;schema&quot;</span>)
<a name="l00074"></a>00074             {
<a name="l00075"></a>00075               deleteXmlParser_=<span class="keyword">true</span>;
<a name="l00076"></a>00076               tnsUri_=tns;
<a name="l00077"></a>00077               <span class="keywordflow">break</span>; 
<a name="l00078"></a>00078             }
<a name="l00079"></a>00079         }
<a name="l00080"></a>00080 
<a name="l00081"></a>00081     }
<a name="l00082"></a>00082   <span class="keywordflow">if</span>(!deleteXmlParser_) <span class="comment">//something wron while opening the schema file</span>
<a name="l00083"></a>00083     {
<a name="l00084"></a>00084       <span class="keyword">delete</span> xParser_;
<a name="l00085"></a>00085       xParser_=0;
<a name="l00086"></a>00086     }
<a name="l00087"></a>00087       
<a name="l00088"></a>00088   init();
<a name="l00089"></a>00089   uri_ = Uri.substr(0,Uri.rfind(<span class="charliteral">&#39;/&#39;</span>) + 1);
<a name="l00090"></a>00090 }
<a name="l00091"></a>00091 
<a name="l00092"></a>00092 <span class="keywordtype">void</span>
<a name="l00093"></a>00093 SchemaParser::init()
<a name="l00094"></a>00094 {
<a name="l00095"></a>00095   lElems_.clear()   ;
<a name="l00096"></a>00096   lAttributes_.clear();
<a name="l00097"></a>00097   lAttributeGroups_.clear();
<a name="l00098"></a>00098   importedSchemas_.clear();
<a name="l00099"></a>00099   constraints_.clear();
<a name="l00100"></a>00100 
<a name="l00101"></a>00101   <span class="keywordflow">if</span> (confPath_.empty()) {
<a name="l00102"></a>00102 <span class="preprocessor">#if defined SCHEMADIR</span>
<a name="l00103"></a>00103 <span class="preprocessor"></span>    confPath_ = SCHEMADIR;
<a name="l00104"></a>00104 <span class="preprocessor">#else</span>
<a name="l00105"></a>00105 <span class="preprocessor"></span>    confPath_ = <span class="stringliteral">&quot;src/schemas&quot;</span>;
<a name="l00106"></a>00106 <span class="preprocessor">#endif</span>
<a name="l00107"></a>00107 <span class="preprocessor"></span>  }
<a name="l00108"></a>00108   
<a name="l00109"></a>00109   Element e(<span class="stringliteral">&quot;schema&quot;</span>,
<a name="l00110"></a>00110             <a class="code" href="namespaceSchema.html#a72d35008bb7fd2d8627e8347240e7d98">SchemaUri</a>,
<a name="l00111"></a>00111             <a class="code" href="namespaceSchema.html#a72d35008bb7fd2d8627e8347240e7d98">SchemaUri</a>,
<a name="l00112"></a>00112             <a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711da80431102c2c828dc1842e7f9a4ef62c1">Schema::XSD_SCHEMA</a>);
<a name="l00113"></a>00113   lElems_.push_back(e);
<a name="l00114"></a>00114 
<a name="l00115"></a>00115 
<a name="l00116"></a>00116 
<a name="l00117"></a>00117 <span class="preprocessor">#ifdef LOGGING</span>
<a name="l00118"></a>00118 <span class="preprocessor"></span>  level_ = 2;
<a name="l00119"></a>00119 <span class="preprocessor">#endif</span>
<a name="l00120"></a>00120 <span class="preprocessor"></span>}
<a name="l00121"></a>00121 
<a name="l00122"></a><a class="code" href="classSchema_1_1SchemaParser.html#ab7300dc7ba47dfdab07cd7fccad384e9">00122</a> <a class="code" href="classSchema_1_1SchemaParser.html#ab7300dc7ba47dfdab07cd7fccad384e9">SchemaParser::~SchemaParser</a>()
<a name="l00123"></a>00123 {
<a name="l00124"></a>00124   <span class="comment">//clear the Types table</span>
<a name="l00125"></a>00125   typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#aa6d93332463ed4bc266b2e844cc98fa5">clean</a>();
<a name="l00126"></a>00126   <span class="keywordflow">if</span>(deleteXmlParser_) {
<a name="l00127"></a>00127     
<a name="l00128"></a>00128     <span class="keyword">delete</span> xParser_;
<a name="l00129"></a>00129     xmlStream_.close();
<a name="l00130"></a>00130   }
<a name="l00131"></a>00131    
<a name="l00132"></a>00132   <span class="keywordflow">for</span> (ConstraintList::iterator ci=constraints_.begin();
<a name="l00133"></a>00133        ci != constraints_.end();
<a name="l00134"></a>00134        ci++)
<a name="l00135"></a>00135     <span class="keyword">delete</span> *ci;
<a name="l00136"></a>00136   <span class="keywordflow">for</span> (AttributeGroupList::iterator agi = lAttributeGroups_.begin();
<a name="l00137"></a>00137        agi != lAttributeGroups_.end();
<a name="l00138"></a>00138        agi++)
<a name="l00139"></a>00139     <span class="keyword">delete</span> *agi; 
<a name="l00140"></a>00140 }
<a name="l00141"></a>00141 
<a name="l00142"></a>00142 
<a name="l00143"></a>00143 <span class="comment">/*</span>
<a name="l00144"></a>00144 <span class="comment"> * Parses an schema definition.</span>
<a name="l00145"></a>00145 <span class="comment"> * This is the main entry method for the schema parser</span>
<a name="l00146"></a>00146 <span class="comment"> */</span>
<a name="l00147"></a>00147 <span class="keywordtype">bool</span> 
<a name="l00148"></a><a class="code" href="classSchema_1_1SchemaParser.html#a6f1dddf50bcb4dec24df5334971400c0">00148</a> <a class="code" href="classSchema_1_1SchemaParser.html#a6f1dddf50bcb4dec24df5334971400c0">SchemaParser::parseSchemaTag</a>()
<a name="l00149"></a>00149 {
<a name="l00150"></a>00150   <span class="keywordtype">int</span> i = 0;
<a name="l00151"></a>00151   <span class="keywordflow">try</span> {
<a name="l00152"></a>00152   <span class="keywordflow">if</span>(!xParser_)
<a name="l00153"></a>00153     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00154"></a>00154   <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() != xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a9b3020c88a2935db197d7a72cf36067c">START_TAG</a>)
<a name="l00155"></a>00155     xParser_-&gt;<a class="code" href="classXmlPullParser.html#a41f3309e5232870695111df156e4a064">next</a>();
<a name="l00156"></a>00156   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a7b14708ef982d48b41009380146f523a">require</a>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a9b3020c88a2935db197d7a72cf36067c">START_TAG</a>, <a class="code" href="namespaceSchema.html#a72d35008bb7fd2d8627e8347240e7d98">Schema::SchemaUri</a>, <span class="stringliteral">&quot;schema&quot;</span>);
<a name="l00157"></a>00157   <span class="keywordtype">int</span> attcnt = xParser_-&gt;<a class="code" href="classXmlPullParser.html#afa91180fecdf4078ad07884f481eed86">getAttributeCount</a>();
<a name="l00158"></a>00158 
<a name="l00159"></a>00159   <span class="comment">//parse the schema tag&#39;s attributes</span>
<a name="l00160"></a>00160   <span class="keywordflow">for</span> (i = 0; i &lt; attcnt; i++) {
<a name="l00161"></a>00161     std::string attName = xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i);
<a name="l00162"></a>00162     <span class="keywordflow">if</span> (<span class="stringliteral">&quot;targetNamespace&quot;</span> == attName)
<a name="l00163"></a>00163       <span class="comment">//store the tns URI</span>
<a name="l00164"></a>00164       tnsUri_ = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i);
<a name="l00165"></a>00165     <span class="keywordflow">if</span> (<span class="stringliteral">&quot;version&quot;</span> == attName)
<a name="l00166"></a>00166       version_ = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i);
<a name="l00167"></a>00167     <span class="keywordflow">if</span> (<span class="stringliteral">&quot;elementFormDefault&quot;</span> == attName){
<a name="l00168"></a>00168       <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i) == <span class="stringliteral">&quot;unqualified&quot;</span>)
<a name="l00169"></a>00169         elementQualified_ = <span class="keyword">false</span>;
<a name="l00170"></a>00170 
<a name="l00171"></a>00171       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i) == <span class="stringliteral">&quot;qualified&quot;</span>)
<a name="l00172"></a>00172         elementQualified_ = <span class="keyword">true</span>;
<a name="l00173"></a>00173     }
<a name="l00174"></a>00174     <span class="keywordflow">if</span> (<span class="stringliteral">&quot;attributeFormDefault&quot;</span> == attName) {
<a name="l00175"></a>00175       <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i) == <span class="stringliteral">&quot;unqualified&quot;</span>)
<a name="l00176"></a>00176         attributeQualified_ = <span class="keyword">false</span>;
<a name="l00177"></a>00177 
<a name="l00178"></a>00178       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i) == <span class="stringliteral">&quot;qualified&quot;</span>)
<a name="l00179"></a>00179         attributeQualified_ = <span class="keyword">true</span>;
<a name="l00180"></a>00180     }
<a name="l00181"></a>00181   }
<a name="l00182"></a>00182 
<a name="l00183"></a>00183   <span class="keywordflow">for</span> (i = xParser_-&gt;<a class="code" href="classXmlPullParser.html#ae3a063b82589ddf483a3f28ca997b38d">getNamespaceCount</a>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#a6457f790d1b47cb8b236834d9916a5ff">getDepth</a>()) - 1;
<a name="l00184"></a>00184        i &gt; xParser_-&gt;<a class="code" href="classXmlPullParser.html#ae3a063b82589ddf483a3f28ca997b38d">getNamespaceCount</a>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#a6457f790d1b47cb8b236834d9916a5ff">getDepth</a>() - 1) - 1; i--)
<a name="l00185"></a>00185     <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad4f2b72e8fb308dddafe8330aaaad3ab">getNamespaceUri</a>(i) == tnsUri_)
<a name="l00186"></a>00186       tnsPrefix_ = xParser_-&gt;<a class="code" href="classXmlPullParser.html#af5c4739b6934d81d199a7a825b7c2442">getNamespacePrefix</a>(i);
<a name="l00187"></a>00187   typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#a7517b44dc9248df4104b14ac68abf3ec">setTargetNamespace</a>(tnsUri_);
<a name="l00188"></a>00188   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00189"></a>00189 
<a name="l00190"></a>00190   <span class="keywordflow">return</span>   parseSchema();
<a name="l00191"></a>00191   } <span class="keywordflow">catch</span> (<a class="code" href="classXmlPullParserException.html">XmlPullParserException</a> xpe){
<a name="l00192"></a>00192 
<a name="l00193"></a>00193        logFile_ &lt;&lt;<span class="stringliteral">&quot;Error parsing schema for namespace &quot;</span>&lt;&lt;tnsUri_&lt;&lt;std::endl;
<a name="l00194"></a>00194        logFile_ &lt;&lt; xpe.<a class="code" href="classXmlPullParserException.html#a5e678f53a8e21e41646f669897bf901c">description</a> &lt;&lt; <span class="stringliteral">&quot; at &quot;</span>
<a name="l00195"></a>00195            &lt;&lt; xpe.<a class="code" href="classXmlPullParserException.html#ab91ff9c9c31ddd56f13c7ebe1176dad4">line</a> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; xpe.<a class="code" href="classXmlPullParserException.html#ad31a87cfe1fb235c47ce203c868f9063">col</a> 
<a name="l00196"></a>00196            &lt;&lt; std::endl;
<a name="l00197"></a>00197       <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00198"></a>00198   }
<a name="l00199"></a>00199   <span class="keywordflow">catch</span>(<a class="code" href="classSchema_1_1SchemaParserException.html">SchemaParserException</a> spe) {
<a name="l00200"></a>00200 
<a name="l00201"></a>00201       spe.<a class="code" href="classSchema_1_1SchemaParserException.html#a962a143b653375a0149bfcd2e373d7e7">line</a> = xParser_-&gt;<a class="code" href="classXmlPullParser.html#a85f448552915586aa04c44a7d16e8e48">getLineNumber</a>();
<a name="l00202"></a>00202       spe.<a class="code" href="classSchema_1_1SchemaParserException.html#acba399209c103bd6fda937a6e0e4dff8">col</a> = xParser_-&gt;<a class="code" href="classXmlPullParser.html#a81379b1abbe24acb76739836c51563b1">getColumnNumber</a>();
<a name="l00203"></a>00203 
<a name="l00204"></a>00204        logFile_ &lt;&lt; spe.<a class="code" href="classSchema_1_1SchemaParserException.html#abad96177c969c678702645a9a792fe34">description</a> &lt;&lt; <span class="stringliteral">&quot; at &quot;</span>
<a name="l00205"></a>00205            &lt;&lt; spe.<a class="code" href="classSchema_1_1SchemaParserException.html#a962a143b653375a0149bfcd2e373d7e7">line</a> &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; spe.<a class="code" href="classSchema_1_1SchemaParserException.html#acba399209c103bd6fda937a6e0e4dff8">col</a> 
<a name="l00206"></a>00206            &lt;&lt; std::endl;
<a name="l00207"></a>00207 
<a name="l00208"></a>00208       <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00209"></a>00209   }
<a name="l00210"></a>00210 }
<a name="l00211"></a>00211 
<a name="l00212"></a>00212 <span class="comment">//this function handles the schema</span>
<a name="l00213"></a>00213 <span class="keywordtype">bool</span>
<a name="l00214"></a>00214 SchemaParser::parseSchema(std::string tag)
<a name="l00215"></a>00215 {
<a name="l00216"></a>00216   <span class="keywordflow">try</span>
<a name="l00217"></a>00217     {
<a name="l00218"></a>00218       <span class="keywordflow">do</span>
<a name="l00219"></a>00219         {
<a name="l00220"></a>00220   
<a name="l00221"></a>00221           <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>)
<a name="l00222"></a>00222             {
<a name="l00223"></a>00223               <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == tag)
<a name="l00224"></a>00224                 <span class="keywordflow">break</span>;
<a name="l00225"></a>00225               <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() != xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a9b3020c88a2935db197d7a72cf36067c">START_TAG</a>)
<a name="l00226"></a>00226                 xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00227"></a>00227             }
<a name="l00228"></a>00228 
<a name="l00229"></a>00229           <span class="comment">/*</span>
<a name="l00230"></a>00230 <span class="comment">            This is the main loop</span>
<a name="l00231"></a>00231 <span class="comment">            Depending on the tag encountered call the appropriate routines</span>
<a name="l00232"></a>00232 <span class="comment">            Schema elements visible at this level</span>
<a name="l00233"></a>00233 <span class="comment">            1. Global  Element declarations</span>
<a name="l00234"></a>00234 <span class="comment">            2. Global attribute declarations</span>
<a name="l00235"></a>00235 <span class="comment">            3. Complex type and Simple type declarations</span>
<a name="l00236"></a>00236 <span class="comment"></span>
<a name="l00237"></a>00237 <span class="comment">          */</span>
<a name="l00238"></a>00238           std::string elemName = xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>();
<a name="l00239"></a>00239           <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;element&quot;</span>) {
<a name="l00240"></a>00240             <span class="keywordtype">bool</span> fwd;
<a name="l00241"></a>00241           Element e = parseElement(fwd);
<a name="l00242"></a>00242           lElems_.push_back(e);
<a name="l00243"></a>00243           }
<a name="l00244"></a>00244           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;complexType&quot;</span>)
<a name="l00245"></a>00245             {
<a name="l00246"></a>00246               XSDType *t = parseComplexType();
<a name="l00247"></a>00247               typesTable_.addType(t);
<a name="l00248"></a>00248             }
<a name="l00249"></a>00249           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;simpleType&quot;</span>)
<a name="l00250"></a>00250             {
<a name="l00251"></a>00251               XSDType *t = parseSimpleType();
<a name="l00252"></a>00252               typesTable_.addType(t);
<a name="l00253"></a>00253             }
<a name="l00254"></a>00254           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;attribute&quot;</span>) {
<a name="l00255"></a>00255             <span class="keywordtype">bool</span> fwd;
<a name="l00256"></a>00256             lAttributes_.push_back(parseAttribute(fwd));
<a name="l00257"></a>00257           }
<a name="l00258"></a>00258           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;annotation&quot;</span>){
<a name="l00259"></a>00259             parseAnnotation();
<a name="l00260"></a>00260           }
<a name="l00261"></a>00261           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;import&quot;</span>) {
<a name="l00262"></a>00262             parseImport();
<a name="l00263"></a>00263           }
<a name="l00264"></a>00264           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName==<span class="stringliteral">&quot;include&quot;</span>){
<a name="l00265"></a>00265             parseInclude();
<a name="l00266"></a>00266           }
<a name="l00267"></a>00267           <span class="keywordflow">else</span> <span class="keywordflow">if</span>(elemName==<span class="stringliteral">&quot;attributeGroup&quot;</span>) {
<a name="l00268"></a>00268             AttributeGroup* ag = parseAttributeGroup();
<a name="l00269"></a>00269             <span class="keywordflow">if</span> (ag)
<a name="l00270"></a>00270               lAttributeGroups_.push_back(ag);
<a name="l00271"></a>00271             
<a name="l00272"></a>00272           }<span class="keywordflow">else</span> <span class="keywordflow">if</span>(elemName==<span class="stringliteral">&quot;group&quot;</span>) {
<a name="l00273"></a>00273             
<a name="l00274"></a>00274             lGroups_.push_back(parseGroup());
<a name="l00275"></a>00275             Group &amp; g=lGroups_.back();
<a name="l00276"></a>00276             <span class="comment">//make this grp the owner of the content model</span>
<a name="l00277"></a>00277             g.setContents(g.getContents(),<span class="keyword">false</span>);
<a name="l00278"></a>00278           }
<a name="l00279"></a>00279           <span class="keywordflow">else</span> <span class="keywordflow">if</span>( elemName==<span class="stringliteral">&quot;key&quot;</span>)     {
<a name="l00280"></a>00280             
<a name="l00281"></a>00281             constraints_.push_back(parseConstraint(<a class="code" href="namespaceSchema.html#a016df5c282799f5a08aeb68727dfae3ca9bdd1ec9b56fc15df2af7358360ec7c2">Schema::Key</a>));
<a name="l00282"></a>00282           }
<a name="l00283"></a>00283           <span class="keywordflow">else</span> <span class="keywordflow">if</span>( elemName==<span class="stringliteral">&quot;keyref&quot;</span>)  {
<a name="l00284"></a>00284             constraints_.push_back(parseConstraint(<a class="code" href="namespaceSchema.html#a016df5c282799f5a08aeb68727dfae3ca1fbfc9ad564f0975cf903b923e243b8f">Schema::Keyref</a>));
<a name="l00285"></a>00285           }
<a name="l00286"></a>00286           <span class="keywordflow">else</span> <span class="keywordflow">if</span>( elemName==<span class="stringliteral">&quot;unique&quot;</span>)  {
<a name="l00287"></a>00287             constraints_.push_back(parseConstraint(<a class="code" href="namespaceSchema.html#a016df5c282799f5a08aeb68727dfae3cafe0dfe827b7a23a72e2099a8621cacdc">Schema::Unique</a>));
<a name="l00288"></a>00288           }<span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName==<span class="stringliteral">&quot;redefine&quot;</span>){
<a name="l00289"></a>00289             parseRedefine();
<a name="l00290"></a>00290           }
<a name="l00291"></a>00291           <span class="keywordflow">else</span> {
<a name="l00292"></a>00292             error(<span class="stringliteral">&quot;Unknown element &quot;</span>+ elemName,1);
<a name="l00293"></a>00293             <span class="keywordflow">break</span>;
<a name="l00294"></a>00294           }
<a name="l00295"></a>00295           xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00296"></a>00296         }
<a name="l00297"></a>00297       <span class="keywordflow">while</span> (<span class="keyword">true</span>);
<a name="l00298"></a>00298       <span class="keywordflow">if</span> ((importedSchemas_.size() == 0) &amp;&amp;
<a name="l00299"></a>00299           typesTable_.detectUndefinedTypes()){
<a name="l00300"></a>00300         
<a name="l00301"></a>00301         typesTable_.printUndefinedTypes(logFile_);logFile_.flush();
<a name="l00302"></a>00302         error(<span class="stringliteral">&quot;Undefined Types in namespace &quot;</span>+tnsUri_);
<a name="l00303"></a>00303         }
<a name="l00304"></a>00304       <span class="keywordflow">if</span>(shouldResolve())
<a name="l00305"></a>00305         {
<a name="l00306"></a>00306             
<a name="l00307"></a>00307           resolveForwardElementRefs();
<a name="l00308"></a>00308           resolveForwardAttributeRefs();
<a name="l00309"></a>00309         }
<a name="l00310"></a>00310         
<a name="l00311"></a>00311     }
<a name="l00312"></a>00312   <span class="keywordflow">catch</span>(SchemaParserException spe)
<a name="l00313"></a>00313     {
<a name="l00314"></a>00314       spe.line = xParser_-&gt;<a class="code" href="classXmlPullParser.html#a85f448552915586aa04c44a7d16e8e48">getLineNumber</a>();
<a name="l00315"></a>00315       spe.col = xParser_-&gt;<a class="code" href="classXmlPullParser.html#a81379b1abbe24acb76739836c51563b1">getColumnNumber</a>();
<a name="l00316"></a>00316 
<a name="l00317"></a>00317        logFile_ &lt;&lt; spe.description &lt;&lt; <span class="stringliteral">&quot; at &quot;</span>
<a name="l00318"></a>00318            &lt;&lt; spe.line &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; spe.col 
<a name="l00319"></a>00319            &lt;&lt; std::endl;
<a name="l00320"></a>00320 
<a name="l00321"></a>00321       <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00322"></a>00322     }
<a name="l00323"></a>00323   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00324"></a>00324 }
<a name="l00325"></a>00325 
<a name="l00326"></a>00326 
<a name="l00327"></a>00327 <span class="keywordtype">void</span> SchemaParser::parseAnnotation()
<a name="l00328"></a>00328 {
<a name="l00329"></a>00329 
<a name="l00330"></a>00330   <span class="keywordflow">do</span>
<a name="l00331"></a>00331     {
<a name="l00332"></a>00332       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a74c8bdd7edc2f341a8ed4eb8fed7c950">nextToken</a>();
<a name="l00333"></a>00333       <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>
<a name="l00334"></a>00334           &amp;&amp; xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;annotation&quot;</span>)
<a name="l00335"></a>00335         <span class="keywordflow">break</span>;
<a name="l00336"></a>00336     }
<a name="l00337"></a>00337   <span class="keywordflow">while</span> (<span class="keyword">true</span>);
<a name="l00338"></a>00338 }
<a name="l00339"></a>00339 
<a name="l00340"></a>00340 
<a name="l00341"></a>00341 ComplexType *
<a name="l00342"></a>00342 SchemaParser::parseComplexType()
<a name="l00343"></a>00343 {
<a name="l00344"></a>00344   ComplexType *newType = <span class="keyword">new</span> ComplexType(tnsUri_);
<a name="l00345"></a>00345   <span class="keywordtype">int</span> attcnt = xParser_-&gt;<a class="code" href="classXmlPullParser.html#afa91180fecdf4078ad07884f481eed86">getAttributeCount</a>();
<a name="l00346"></a>00346   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; attcnt; i++)
<a name="l00347"></a>00347     {
<a name="l00348"></a>00348       <span class="keywordflow">if</span> (<span class="stringliteral">&quot;name&quot;</span> == xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i))
<a name="l00349"></a>00349         newType-&gt;setName(xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i));
<a name="l00350"></a>00350      
<a name="l00351"></a>00351       <span class="keywordflow">if</span> (<span class="stringliteral">&quot;mixed&quot;</span> == xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i) &amp;&amp;
<a name="l00352"></a>00352           (xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i).empty() ||
<a name="l00353"></a>00353            xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i)==<span class="stringliteral">&quot;true&quot;</span>))
<a name="l00354"></a>00354         
<a name="l00355"></a>00355         newType-&gt;setContentModel(<a class="code" href="namespaceSchema.html#a84b8523395bb986be4b87ff834308103a373040414bed3a7d96ec599e71e75ff7">Schema::Mixed</a>);
<a name="l00356"></a>00356     }
<a name="l00357"></a>00357 
<a name="l00358"></a>00358 
<a name="l00359"></a>00359   <span class="keywordflow">do</span>
<a name="l00360"></a>00360     {
<a name="l00361"></a>00361       <span class="comment">//begin parsing the complex type&#39;s children</span>
<a name="l00362"></a>00362       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00363"></a>00363       <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>)
<a name="l00364"></a>00364         {
<a name="l00365"></a>00365           <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;complexType&quot;</span>)
<a name="l00366"></a>00366             <span class="keywordflow">break</span>;
<a name="l00367"></a>00367 
<a name="l00368"></a>00368           <span class="comment">//if an end tag is seen proceed till next start tag</span>
<a name="l00369"></a>00369           <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() != xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a9b3020c88a2935db197d7a72cf36067c">START_TAG</a>)
<a name="l00370"></a>00370             xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00371"></a>00371         }
<a name="l00372"></a>00372       std::string elemName = xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>();
<a name="l00373"></a>00373       
<a name="l00374"></a>00374       
<a name="l00375"></a>00375       <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;all&quot;</span>){
<a name="l00376"></a>00376         ContentModel * cm= <span class="keyword">new</span> ContentModel(<a class="code" href="namespaceSchema.html#a1adfaf18fd7d826648b3d01d953a434cad72664c314f8671075e550b614c63990">Schema::All</a>);
<a name="l00377"></a>00377         newType-&gt;setContents(cm);
<a name="l00378"></a>00378         parseContent(cm);
<a name="l00379"></a>00379       }
<a name="l00380"></a>00380       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;sequence&quot;</span>){
<a name="l00381"></a>00381         ContentModel * cm= <span class="keyword">new</span> ContentModel(<a class="code" href="namespaceSchema.html#a1adfaf18fd7d826648b3d01d953a434ca24a2a381feadbd50e8005da5f7dbffca">Schema::Sequence</a>);
<a name="l00382"></a>00382         newType-&gt;setContents(cm);
<a name="l00383"></a>00383         parseContent(cm);
<a name="l00384"></a>00384       }
<a name="l00385"></a>00385       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;choice&quot;</span>){
<a name="l00386"></a>00386         ContentModel * cm= <span class="keyword">new</span> ContentModel(<a class="code" href="namespaceSchema.html#a1adfaf18fd7d826648b3d01d953a434cab1b96c47de244209c2c1ed736cb08869">Schema::Choice</a>);
<a name="l00387"></a>00387         newType-&gt;setContents(cm);
<a name="l00388"></a>00388         parseContent(cm);
<a name="l00389"></a>00389       }
<a name="l00390"></a>00390       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;attribute&quot;</span>) {
<a name="l00391"></a>00391         <span class="keywordtype">bool</span> f=<span class="keyword">false</span>;
<a name="l00392"></a>00392         Attribute a=parseAttribute(f);
<a name="l00393"></a>00393         newType-&gt;addAttribute(a,f);
<a name="l00394"></a>00394       }<span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName==<span class="stringliteral">&quot;attributeGroup&quot;</span>){
<a name="l00395"></a>00395         parseAttributeGroup(newType);
<a name="l00396"></a>00396       }
<a name="l00397"></a>00397       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName==<span class="stringliteral">&quot;group&quot;</span>){
<a name="l00398"></a>00398         <span class="comment">//TODO</span>
<a name="l00399"></a>00399         ContentModel* cm= <span class="keyword">new</span> ContentModel(<a class="code" href="namespaceSchema.html#a1adfaf18fd7d826648b3d01d953a434ca24a2a381feadbd50e8005da5f7dbffca">Schema::Sequence</a>);
<a name="l00400"></a>00400         newType-&gt;setContents(cm);
<a name="l00401"></a>00401         parseGroup(cm);
<a name="l00402"></a>00402       }
<a name="l00403"></a>00403       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;anyAttribute&quot;</span>)
<a name="l00404"></a>00404         addAnyAttribute(newType);
<a name="l00405"></a>00405 
<a name="l00406"></a>00406       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;complexContent&quot;</span>)
<a name="l00407"></a>00407         parseComplexContent(newType);
<a name="l00408"></a>00408 
<a name="l00409"></a>00409       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;simpleContent&quot;</span>)
<a name="l00410"></a>00410         parseSimpleContent(newType);
<a name="l00411"></a>00411 
<a name="l00412"></a>00412       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;annotation&quot;</span>)
<a name="l00413"></a>00413         parseAnnotation();
<a name="l00414"></a>00414 
<a name="l00415"></a>00415       <span class="keywordflow">else</span>
<a name="l00416"></a>00416         error(<span class="stringliteral">&quot;Unexpected tag: &#39;&quot;</span>+elemName+<span class="stringliteral">&quot;&#39; in &quot;</span>+newType-&gt;getName() );
<a name="l00417"></a>00417     }
<a name="l00418"></a>00418   <span class="keywordflow">while</span> (<span class="keyword">true</span>);
<a name="l00419"></a>00419   makeListFromSoapArray(newType);
<a name="l00420"></a>00420   <span class="keywordflow">return</span> newType;
<a name="l00421"></a>00421 }
<a name="l00422"></a>00422 
<a name="l00423"></a>00423 AttributeGroup*
<a name="l00424"></a>00424 SchemaParser::parseAttributeGroup(ComplexType* cType)
<a name="l00425"></a>00425 {
<a name="l00426"></a>00426   std::string name,ref;
<a name="l00427"></a>00427   ref = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;ref&quot;</span>);
<a name="l00428"></a>00428   <span class="keywordflow">if</span> (!ref.empty())
<a name="l00429"></a>00429     {
<a name="l00430"></a>00430       <a class="code" href="classQname.html">Qname</a> agRef(ref);
<a name="l00431"></a>00431       AttributeGroup *ag= <a class="code" href="classSchema_1_1SchemaParser.html#af7b03dfae9c493636019f1851a57e6f5">getAttributeGroup</a>(agRef);
<a name="l00432"></a>00432       <span class="keywordflow">if</span>(cType &amp;&amp; ag){
<a name="l00433"></a>00433         
<a name="l00434"></a>00434         <span class="keywordflow">for</span>(list&lt;Attribute&gt;::iterator ai= ag-&gt;begin();
<a name="l00435"></a>00435             ai!=ag-&gt;end();
<a name="l00436"></a>00436             ai++)
<a name="l00437"></a>00437           cType-&gt;addAttribute(*ai);
<a name="l00438"></a>00438       }
<a name="l00439"></a>00439       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cType){
<a name="l00440"></a>00440         cType-&gt;addAttributeGroupName(ref);
<a name="l00441"></a>00441       }
<a name="l00442"></a>00442       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();    
<a name="l00443"></a>00443       <span class="keywordflow">return</span> ag;
<a name="l00444"></a>00444     }
<a name="l00445"></a>00445   
<a name="l00446"></a>00446   name = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;name&quot;</span>);
<a name="l00447"></a>00447   AttributeGroup *ag = <span class="keyword">new</span> AttributeGroup(name);
<a name="l00448"></a>00448   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00449"></a>00449   <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;annotation&quot;</span>)
<a name="l00450"></a>00450     {
<a name="l00451"></a>00451       parseAnnotation();
<a name="l00452"></a>00452       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00453"></a>00453     }
<a name="l00454"></a>00454   std::string elemName=xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>();
<a name="l00455"></a>00455   <span class="keywordflow">while</span> (!((xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>) &amp;&amp;
<a name="l00456"></a>00456            (elemName == <span class="stringliteral">&quot;attributeGroup&quot;</span>))){
<a name="l00457"></a>00457    
<a name="l00458"></a>00458     <span class="keywordflow">if</span>(elemName==<span class="stringliteral">&quot;attribute&quot;</span>){
<a name="l00459"></a>00459       <span class="keywordtype">bool</span> fwd;
<a name="l00460"></a>00460       ag-&gt;addAttribute(parseAttribute(fwd));
<a name="l00461"></a>00461     }<span class="keywordflow">else</span> <span class="keywordflow">if</span>(elemName==<span class="stringliteral">&quot;attributeGroup&quot;</span>){
<a name="l00462"></a>00462       AttributeGroup* ag1=parseAttributeGroup();
<a name="l00463"></a>00463       <span class="keywordflow">for</span>(list&lt;Attribute&gt;::iterator ai= ag1-&gt;begin();
<a name="l00464"></a>00464           ai!=ag1-&gt;end();
<a name="l00465"></a>00465           ai++)
<a name="l00466"></a>00466         ag-&gt;addAttribute(*ai);
<a name="l00467"></a>00467     }<span class="keywordflow">else</span> <span class="keywordflow">if</span>(elemName==<span class="stringliteral">&quot;anyAttribute&quot;</span>){
<a name="l00468"></a>00468       ag-&gt;addAttribute(addAnyAttribute(cType));
<a name="l00469"></a>00469     }
<a name="l00470"></a>00470     xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();    
<a name="l00471"></a>00471     elemName=xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>();
<a name="l00472"></a>00472   }
<a name="l00473"></a>00473   
<a name="l00474"></a>00474   <span class="keywordflow">if</span>(cType){
<a name="l00475"></a>00475     
<a name="l00476"></a>00476     <span class="keywordflow">for</span>(list&lt;Attribute&gt;::iterator ai= ag-&gt;begin();
<a name="l00477"></a>00477         ai!=ag-&gt;end();
<a name="l00478"></a>00478         ai++)
<a name="l00479"></a>00479       cType-&gt;addAttribute(*ai);
<a name="l00480"></a>00480     <span class="keyword">delete</span> ag;<span class="comment">//dont store anonymous attribute groups</span>
<a name="l00481"></a>00481     ag = 0;
<a name="l00482"></a>00482   }
<a name="l00483"></a>00483   <span class="keywordflow">return</span> ag;
<a name="l00484"></a>00484 }
<a name="l00485"></a>00485 
<a name="l00486"></a>00486 Group
<a name="l00487"></a>00487 SchemaParser::parseGroup(ContentModel* c)
<a name="l00488"></a>00488 {
<a name="l00489"></a>00489   <span class="keywordtype">int</span> minimum = 1, maximum = 1;
<a name="l00490"></a>00490   std::string tmp, name,ref;
<a name="l00491"></a>00491   
<a name="l00492"></a>00492   tmp = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;minOccurs&quot;</span>);
<a name="l00493"></a>00493   <span class="keywordflow">if</span> (!tmp.empty())
<a name="l00494"></a>00494     minimum = <a class="code" href="namespaceXmlUtils.html#a3241046dfb313c27669514a95f7538d5">XmlUtils::parseInt</a>(tmp);
<a name="l00495"></a>00495   tmp = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;maxOccurs&quot;</span>);
<a name="l00496"></a>00496   <span class="keywordflow">if</span> (!tmp.empty()) {
<a name="l00497"></a>00497     <span class="keywordflow">if</span> (<span class="stringliteral">&quot;unbounded&quot;</span> == tmp)
<a name="l00498"></a>00498       maximum = <a class="code" href="Element_8h.html#af17df4d5d5bad0ea1d48fa796a91d4ce">UNBOUNDED</a>;
<a name="l00499"></a>00499     <span class="keywordflow">else</span>
<a name="l00500"></a>00500       maximum = <a class="code" href="namespaceXmlUtils.html#a3241046dfb313c27669514a95f7538d5">XmlUtils::parseInt</a>(tmp);
<a name="l00501"></a>00501   }
<a name="l00502"></a>00502   ref = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;ref&quot;</span>);
<a name="l00503"></a>00503   <span class="keywordflow">if</span> (!ref.empty()) {
<a name="l00504"></a>00504 
<a name="l00505"></a>00505     <a class="code" href="classQname.html">Qname</a> gName(ref);
<a name="l00506"></a>00506     xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00507"></a>00507     Group* gRef=<a class="code" href="classSchema_1_1SchemaParser.html#a0ebc5538bb373dd99c04b3485462acfa">getGroup</a>(gName);
<a name="l00508"></a>00508     <span class="keywordflow">if</span>(gRef){
<a name="l00509"></a>00509       Group g(*gRef);
<a name="l00510"></a>00510       <span class="keywordflow">if</span>(c)
<a name="l00511"></a>00511         c-&gt;addGroup(g,<span class="keyword">true</span>);
<a name="l00512"></a>00512       <span class="keywordflow">return</span> g;
<a name="l00513"></a>00513     }
<a name="l00514"></a>00514     <span class="keywordflow">else</span>{
<a name="l00515"></a>00515       Group g(gName.getLocalName(),minimum,maximum);
<a name="l00516"></a>00516       <span class="keywordflow">if</span>(c)
<a name="l00517"></a>00517         c-&gt;addGroup(g,<span class="keyword">true</span>);
<a name="l00518"></a>00518       <span class="keywordflow">return</span> g;
<a name="l00519"></a>00519     }
<a name="l00520"></a>00520   }
<a name="l00521"></a>00521 
<a name="l00522"></a>00522   name = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;name&quot;</span>);
<a name="l00523"></a>00523   Group g(name,minimum,maximum);
<a name="l00524"></a>00524   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00525"></a>00525   <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;annotation&quot;</span>) {
<a name="l00526"></a>00526     parseAnnotation();
<a name="l00527"></a>00527     xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00528"></a>00528   }
<a name="l00529"></a>00529 
<a name="l00530"></a>00530   std::string elemName = xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>();
<a name="l00531"></a>00531   ContentModel * cm=0;
<a name="l00532"></a>00532   <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;all&quot;</span>){
<a name="l00533"></a>00533     cm = <span class="keyword">new</span> ContentModel(<a class="code" href="namespaceSchema.html#a1adfaf18fd7d826648b3d01d953a434cad72664c314f8671075e550b614c63990">Schema::All</a>);
<a name="l00534"></a>00534   }
<a name="l00535"></a>00535   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;sequence&quot;</span>){
<a name="l00536"></a>00536     cm= <span class="keyword">new</span> ContentModel(<a class="code" href="namespaceSchema.html#a1adfaf18fd7d826648b3d01d953a434ca24a2a381feadbd50e8005da5f7dbffca">Schema::Sequence</a>);
<a name="l00537"></a>00537   }
<a name="l00538"></a>00538   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;choice&quot;</span>){
<a name="l00539"></a>00539     cm= <span class="keyword">new</span> ContentModel(<a class="code" href="namespaceSchema.html#a1adfaf18fd7d826648b3d01d953a434cab1b96c47de244209c2c1ed736cb08869">Schema::Choice</a>);
<a name="l00540"></a>00540   }
<a name="l00541"></a>00541   g.setContents(cm,<span class="keyword">true</span>);
<a name="l00542"></a>00542   parseContent(cm);
<a name="l00543"></a>00543   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00544"></a>00544 
<a name="l00545"></a>00545   <span class="keywordflow">if</span>(c)
<a name="l00546"></a>00546     c-&gt;addGroup(g,<span class="keyword">false</span>);
<a name="l00547"></a>00547   <span class="keywordflow">return</span> g;
<a name="l00548"></a>00548 }
<a name="l00549"></a>00549 
<a name="l00550"></a>00550 <span class="keywordtype">void</span>
<a name="l00551"></a>00551 SchemaParser::parseContent(ContentModel * cm)
<a name="l00552"></a>00552 {
<a name="l00553"></a>00553   <span class="keywordtype">int</span> minimum = 1, maximum = 1;
<a name="l00554"></a>00554   std::string tmp;
<a name="l00555"></a>00555 
<a name="l00556"></a>00556   tmp = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;minOccurs&quot;</span>);
<a name="l00557"></a>00557   <span class="keywordflow">if</span> (!tmp.empty())
<a name="l00558"></a>00558     minimum = <a class="code" href="namespaceXmlUtils.html#a3241046dfb313c27669514a95f7538d5">XmlUtils::parseInt</a>(tmp);
<a name="l00559"></a>00559   tmp = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;maxOccurs&quot;</span>);
<a name="l00560"></a>00560   <span class="keywordflow">if</span> (!tmp.empty())
<a name="l00561"></a>00561     {
<a name="l00562"></a>00562       <span class="keywordflow">if</span> (<span class="stringliteral">&quot;unbounded&quot;</span> == tmp)
<a name="l00563"></a>00563         maximum = <a class="code" href="Element_8h.html#af17df4d5d5bad0ea1d48fa796a91d4ce">UNBOUNDED</a>;
<a name="l00564"></a>00564       <span class="keywordflow">else</span>
<a name="l00565"></a>00565         maximum = <a class="code" href="namespaceXmlUtils.html#a3241046dfb313c27669514a95f7538d5">XmlUtils::parseInt</a>(tmp);
<a name="l00566"></a>00566     }
<a name="l00567"></a>00567   cm-&gt;setMin(minimum);
<a name="l00568"></a>00568   cm-&gt;setMax(maximum);
<a name="l00569"></a>00569 
<a name="l00570"></a>00570   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00571"></a>00571   <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;annotation&quot;</span>)
<a name="l00572"></a>00572     {
<a name="l00573"></a>00573       parseAnnotation();
<a name="l00574"></a>00574       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00575"></a>00575     }
<a name="l00576"></a>00576 
<a name="l00577"></a>00577   <span class="keywordflow">while</span> (!((xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>) &amp;&amp;
<a name="l00578"></a>00578            (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;choice&quot;</span>
<a name="l00579"></a>00579             || xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;sequence&quot;</span>
<a name="l00580"></a>00580             || xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;all&quot;</span>)))
<a name="l00581"></a>00581     {
<a name="l00582"></a>00582       <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;element&quot;</span>) {
<a name="l00583"></a>00583         <span class="keywordtype">bool</span> f=<span class="keyword">false</span>;
<a name="l00584"></a>00584         Element e =parseElement(f);
<a name="l00585"></a>00585         cm-&gt;addElement(e);
<a name="l00586"></a>00586       }<span class="keywordflow">else</span> <span class="keywordflow">if</span>(cm-&gt;getCompositor()!=<a class="code" href="namespaceSchema.html#a1adfaf18fd7d826648b3d01d953a434cad72664c314f8671075e550b614c63990">Schema::All</a>){
<a name="l00587"></a>00587         
<a name="l00588"></a>00588         <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;any&quot;</span>)
<a name="l00589"></a>00589           addAny(cm);
<a name="l00590"></a>00590         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;choice&quot;</span>){
<a name="l00591"></a>00591           ContentModel * cmc= <span class="keyword">new</span> ContentModel(<a class="code" href="namespaceSchema.html#a1adfaf18fd7d826648b3d01d953a434cab1b96c47de244209c2c1ed736cb08869">Schema::Choice</a>);
<a name="l00592"></a>00592           cm-&gt;addContentModel(cmc);
<a name="l00593"></a>00593           parseContent(cmc);  
<a name="l00594"></a>00594         }
<a name="l00595"></a>00595         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;sequence&quot;</span>){
<a name="l00596"></a>00596           ContentModel * cms= <span class="keyword">new</span> ContentModel(<a class="code" href="namespaceSchema.html#a1adfaf18fd7d826648b3d01d953a434ca24a2a381feadbd50e8005da5f7dbffca">Schema::Sequence</a>);
<a name="l00597"></a>00597           cm-&gt;addContentModel(cms);
<a name="l00598"></a>00598           parseContent(cms);  
<a name="l00599"></a>00599         }
<a name="l00600"></a>00600         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;group&quot;</span>){
<a name="l00601"></a>00601           parseGroup(cm);
<a name="l00602"></a>00602         }
<a name="l00603"></a>00603         <span class="keywordflow">else</span> <span class="keywordflow">if</span>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;annotation&quot;</span>) {
<a name="l00604"></a>00604           parseAnnotation();
<a name="l00605"></a>00605         }
<a name="l00606"></a>00606         <span class="keywordflow">else</span>
<a name="l00607"></a>00607           error(<span class="stringliteral">&quot;parseContent: Unexpected tag &quot;</span>+xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>());
<a name="l00608"></a>00608       }<span class="keywordflow">else</span>{
<a name="l00609"></a>00609         
<a name="l00610"></a>00610         error(<span class="stringliteral">&quot;parseContent &lt;all&gt;:Syntax Error&quot;</span>);
<a name="l00611"></a>00611       }
<a name="l00612"></a>00612       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00613"></a>00613     }
<a name="l00614"></a>00614 }
<a name="l00615"></a>00615 
<a name="l00616"></a>00616 Element
<a name="l00617"></a>00617 SchemaParser::parseElement(<span class="keywordtype">bool</span> &amp; fwdRef)
<a name="l00618"></a>00618 {
<a name="l00619"></a>00619   std::string name, fixedVal, defaultVal, 
<a name="l00620"></a>00620     <span class="comment">// the namespace of the element is the</span>
<a name="l00621"></a>00621     <span class="comment">// namespace of the sp that parsed it!</span>
<a name="l00622"></a>00622     typeNs = tnsUri_,elemNs = tnsUri_;
<a name="l00623"></a>00623   Constraint* c=0;
<a name="l00624"></a>00624   <span class="keywordtype">int</span> type_id = 0, minimum = 1, maximum = 1, attcnt;
<a name="l00625"></a>00625   <a class="code" href="classQname.html">Qname</a> refName;
<a name="l00626"></a>00626   <span class="keywordtype">bool</span> qualified = <span class="keyword">false</span>,nill = <span class="keyword">false</span>;
<a name="l00627"></a>00627   XSDType *elemType;
<a name="l00628"></a>00628   fwdRef=<span class="keyword">false</span>;
<a name="l00629"></a>00629   attcnt = xParser_-&gt;<a class="code" href="classXmlPullParser.html#afa91180fecdf4078ad07884f481eed86">getAttributeCount</a>();
<a name="l00630"></a>00630   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; attcnt; i++)
<a name="l00631"></a>00631     {
<a name="l00632"></a>00632       std::string attName = xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i);
<a name="l00633"></a>00633       <span class="keywordflow">if</span> (<span class="stringliteral">&quot;name&quot;</span> == attName)
<a name="l00634"></a>00634         name = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i);
<a name="l00635"></a>00635 
<a name="l00636"></a>00636       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;type&quot;</span> == attName)
<a name="l00637"></a>00637         {
<a name="l00638"></a>00638           <a class="code" href="classQname.html">Qname</a> typeName(xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i));
<a name="l00639"></a>00639           <span class="keywordflow">if</span> (type_id &gt; 0)
<a name="l00640"></a>00640             error
<a name="l00641"></a>00641               (<span class="stringliteral">&quot;&lt;element&gt; : type and ref are mutually exclusive in element decl&quot;</span>);
<a name="l00642"></a>00642           typeName.setNamespace(typeNs=xParser_-&gt;<a class="code" href="classXmlPullParser.html#ab64f42eff37c0c049024c8267f0732e8">getNamespace</a>(typeName.getPrefix()));
<a name="l00643"></a>00643           type_id = <a class="code" href="classSchema_1_1SchemaParser.html#ad8f407de76f38f1fa24c844faf9ca611">getTypeId</a>(typeName, <span class="keyword">true</span>);
<a name="l00644"></a>00644           <span class="keywordflow">if</span> (type_id == 0)
<a name="l00645"></a>00645             error(<span class="stringliteral">&quot;&lt;element&gt;:Could not resolve type &quot;</span> +
<a name="l00646"></a>00646                   typeName.getNamespace() + <span class="stringliteral">&quot;:&quot;</span> +
<a name="l00647"></a>00647                   typeName.getLocalName(),0);
<a name="l00648"></a>00648         }
<a name="l00649"></a>00649 
<a name="l00650"></a>00650       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;form&quot;</span> == attName)
<a name="l00651"></a>00651         {
<a name="l00652"></a>00652           <span class="keywordflow">if</span> (<span class="stringliteral">&quot;qualified&quot;</span> == xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i))
<a name="l00653"></a>00653             qualified = <span class="keyword">true</span>;
<a name="l00654"></a>00654 
<a name="l00655"></a>00655           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;unqualified&quot;</span> == xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i))
<a name="l00656"></a>00656             qualified = <span class="keyword">false</span>;
<a name="l00657"></a>00657           <span class="keywordflow">else</span>
<a name="l00658"></a>00658             error(<span class="stringliteral">&quot;&lt;element&gt;:Invalid value for form in element &quot;</span> +
<a name="l00659"></a>00659                   name,1);
<a name="l00660"></a>00660         }
<a name="l00661"></a>00661 
<a name="l00662"></a>00662       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;ref&quot;</span> == attName)
<a name="l00663"></a>00663         {
<a name="l00664"></a>00664           <span class="keywordflow">if</span> (!name.empty())
<a name="l00665"></a>00665             error
<a name="l00666"></a>00666               (<span class="stringliteral">&quot;&lt;element&gt;:name and ref are mutually exclusive in element decl&quot;</span>);
<a name="l00667"></a>00667           <span class="keywordflow">if</span> (type_id &gt; 0)
<a name="l00668"></a>00668             error
<a name="l00669"></a>00669               (<span class="stringliteral">&quot;&lt;element&gt;:type and ref are mutually exclusive in element decl&quot;</span>);
<a name="l00670"></a>00670           refName = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i);
<a name="l00671"></a>00671           refName.<a class="code" href="classQname.html#a1351793363ec2ed89910fc4f45ee36c1">setNamespace</a>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#ab64f42eff37c0c049024c8267f0732e8">getNamespace</a>(refName.<a class="code" href="classQname.html#a63ea9b0f43fa50e3a2ee6e35b50830e1">getPrefix</a>()));
<a name="l00672"></a>00672           Element *e=0;
<a name="l00673"></a>00673           elemNs = refName.<a class="code" href="classQname.html#ab7b6decf0167443096f034cd33c7d839">getNamespace</a>();
<a name="l00674"></a>00674 
<a name="l00675"></a>00675           <span class="keywordflow">if</span>(refName.<a class="code" href="classQname.html#ab7b6decf0167443096f034cd33c7d839">getNamespace</a>()==tnsUri_){
<a name="l00676"></a>00676 
<a name="l00677"></a>00677             e = <span class="keyword">const_cast&lt;</span>Element*<span class="keyword">&gt;</span>(<a class="code" href="classSchema_1_1SchemaParser.html#aa11d8f9bf85870304ab35e387fd486b1">getElement</a>(refName));
<a name="l00678"></a>00678             <span class="keywordflow">if</span> (e)
<a name="l00679"></a>00679               type_id = e-&gt;getType();
<a name="l00680"></a>00680           }
<a name="l00681"></a>00681           <span class="keywordflow">else</span>{
<a name="l00682"></a>00682             <span class="comment">//The referenced element may be in an imported schemaparser</span>
<a name="l00683"></a>00683             <span class="keywordtype">int</span> i=checkImport(refName.<a class="code" href="classQname.html#ab7b6decf0167443096f034cd33c7d839">getNamespace</a>());
<a name="l00684"></a>00684             <span class="keywordflow">if</span>(i&gt;=0 &amp;&amp; importedSchemas_[i].sParser) {
<a name="l00685"></a>00685            
<a name="l00686"></a>00686               e=<span class="keyword">const_cast&lt;</span>Element*<span class="keyword">&gt;</span>(importedSchemas_[i].sParser-&gt;getElement(refName));
<a name="l00687"></a>00687               <span class="keywordflow">if</span> (e){
<a name="l00688"></a>00688                 <span class="comment">//if the type is in an imported schema then we must add a local reference to</span>
<a name="l00689"></a>00689                 <span class="comment">// its type,because the type id as got by e-&gt;getType()</span>
<a name="l00690"></a>00690                 <span class="comment">// is not valid in the current schema context</span>
<a name="l00691"></a>00691                 <span class="keyword">const</span> XSDType* pType = importedSchemas_[i].sParser-&gt;getType(e-&gt;getType());
<a name="l00692"></a>00692                 type_id= typesTable_.addExternalTypeId(e-&gt;getName()+<span class="stringliteral">&quot;_&quot;</span>+e-&gt;getTypeNamespace(),
<a name="l00693"></a>00693                                                        pType);
<a name="l00694"></a>00694               }
<a name="l00695"></a>00695             }
<a name="l00696"></a>00696           }
<a name="l00697"></a>00697           
<a name="l00698"></a>00698           <span class="keywordflow">if</span> (e == 0){
<a name="l00699"></a>00699 
<a name="l00700"></a>00700             fwdRef=<span class="keyword">true</span>;
<a name="l00701"></a>00701             name=refName.<a class="code" href="classQname.html#acc177c6742061f76a3f09a3898256bf2">getLocalName</a>();
<a name="l00702"></a>00702             lForwardElemRefs_.push_back(refName);
<a name="l00703"></a>00703             <span class="comment">//this will be resolved later</span>
<a name="l00704"></a>00704           }
<a name="l00705"></a>00705           <span class="keywordflow">else</span>{
<a name="l00706"></a>00706             name = e-&gt;getName();
<a name="l00707"></a>00707             qualified = e-&gt;isQualified();
<a name="l00708"></a>00708             defaultVal = e-&gt;defaultVal();
<a name="l00709"></a>00709             fixedVal = e-&gt;fixedVal();
<a name="l00710"></a>00710             typeNs = e-&gt;getTypeNamespace();
<a name="l00711"></a>00711             elemNs = e-&gt;getNamespace();
<a name="l00712"></a>00712           }
<a name="l00713"></a>00713 
<a name="l00714"></a>00714 <span class="preprocessor">#ifdef LOGGING</span>
<a name="l00715"></a>00715 <span class="preprocessor"></span>            logFile_&lt;&lt;elemNs&lt;&lt;<span class="stringliteral">&quot;:&quot;</span>&lt;&lt;name&lt;&lt;<span class="stringliteral">&quot; -&gt;  element reference(&quot;</span>&lt;&lt;type_id&lt;&lt;<span class="stringliteral">&quot;)&quot;</span>&lt;&lt;std::endl;
<a name="l00716"></a>00716 <span class="preprocessor">#endif</span>
<a name="l00717"></a>00717 <span class="preprocessor"></span>          
<a name="l00718"></a>00718         }
<a name="l00719"></a>00719       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;minOccurs&quot;</span> == attName){
<a name="l00720"></a>00720         minimum = <a class="code" href="namespaceXmlUtils.html#a3241046dfb313c27669514a95f7538d5">XmlUtils::parseInt</a>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i), 10);
<a name="l00721"></a>00721       }
<a name="l00722"></a>00722       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;maxOccurs&quot;</span> == attName){
<a name="l00723"></a>00723         <span class="keywordflow">if</span> (<span class="stringliteral">&quot;unbounded&quot;</span> == xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i))
<a name="l00724"></a>00724           maximum = <a class="code" href="Element_8h.html#af17df4d5d5bad0ea1d48fa796a91d4ce">UNBOUNDED</a>;
<a name="l00725"></a>00725         <span class="keywordflow">else</span>
<a name="l00726"></a>00726           maximum = <a class="code" href="namespaceXmlUtils.html#a3241046dfb313c27669514a95f7538d5">XmlUtils::parseInt</a>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i), 10);
<a name="l00727"></a>00727         <span class="keywordflow">if</span> (maximum == -1){                        <span class="comment">//invalid value for maxOccurs</span>
<a name="l00728"></a>00728           error(<span class="stringliteral">&quot;&lt;element&gt;:Invalid value for maxOccurs&quot;</span>,1);
<a name="l00729"></a>00729           maximum=1;
<a name="l00730"></a>00730         }
<a name="l00731"></a>00731       }
<a name="l00732"></a>00732       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;default&quot;</span> == attName){
<a name="l00733"></a>00733         <span class="keywordflow">if</span> (fixedVal.empty())
<a name="l00734"></a>00734           defaultVal = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i);
<a name="l00735"></a>00735 
<a name="l00736"></a>00736         <span class="keywordflow">else</span>
<a name="l00737"></a>00737           error(<span class="stringliteral">&quot;&lt;element&gt;:fixed and default cannot occur together&quot;</span>);
<a name="l00738"></a>00738       }
<a name="l00739"></a>00739       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;fixed&quot;</span> == attName){
<a name="l00740"></a>00740         <span class="keywordflow">if</span> (defaultVal.empty())
<a name="l00741"></a>00741           fixedVal = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i);
<a name="l00742"></a>00742 
<a name="l00743"></a>00743         <span class="keywordflow">else</span>
<a name="l00744"></a>00744           error(<span class="stringliteral">&quot;&lt;element&gt;:fixed and default cannot occur together&quot;</span>);
<a name="l00745"></a>00745       }
<a name="l00746"></a>00746 
<a name="l00747"></a>00747       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;substitutionGroup&quot;</span> == attName) {
<a name="l00748"></a>00748 
<a name="l00749"></a>00749         <span class="comment">//do nothing</span>
<a name="l00750"></a>00750       }
<a name="l00751"></a>00751       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;nillable&quot;</span> == attName)  {
<a name="l00752"></a>00752 
<a name="l00753"></a>00753         <span class="comment">//a nillable element need not have a type ,so set it to anyType id if nop type was given</span>
<a name="l00754"></a>00754         nill = <span class="keyword">true</span>;
<a name="l00755"></a>00755         minimum = 0;
<a name="l00756"></a>00756       }
<a name="l00757"></a>00757       <span class="keywordflow">else</span>
<a name="l00758"></a>00758         error(<span class="stringliteral">&quot;&lt;element&gt;:Unsupported Attribute &quot;</span>+attName ,2) ;
<a name="l00759"></a>00759     }
<a name="l00760"></a>00760 
<a name="l00761"></a>00761   <span class="keywordflow">do</span>
<a name="l00762"></a>00762     {
<a name="l00763"></a>00763       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00764"></a>00764       std::string elemName=xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>();
<a name="l00765"></a>00765       <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>) {
<a name="l00766"></a>00766         <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;element&quot;</span>)
<a name="l00767"></a>00767           <span class="keywordflow">break</span>;
<a name="l00768"></a>00768 
<a name="l00769"></a>00769         <span class="comment">//if an end tag is seen proceed till next start tag</span>
<a name="l00770"></a>00770         <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() != xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a9b3020c88a2935db197d7a72cf36067c">START_TAG</a>)
<a name="l00771"></a>00771           xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00772"></a>00772       }
<a name="l00773"></a>00773 
<a name="l00774"></a>00774       <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;complexType&quot;</span>){
<a name="l00775"></a>00775         elemType = parseComplexType();
<a name="l00776"></a>00776         type_id = typesTable_.addType(elemType);
<a name="l00777"></a>00777         typeNs = elemType-&gt;getNamespace();
<a name="l00778"></a>00778       }
<a name="l00779"></a>00779       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;simpleType&quot;</span>){
<a name="l00780"></a>00780         elemType = parseSimpleType();
<a name="l00781"></a>00781         type_id = typesTable_.addType(elemType);
<a name="l00782"></a>00782         typeNs = elemType-&gt;getNamespace();
<a name="l00783"></a>00783       }
<a name="l00784"></a>00784       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;annotation&quot;</span>){
<a name="l00785"></a>00785         parseAnnotation();
<a name="l00786"></a>00786       }
<a name="l00787"></a>00787       <span class="keywordflow">else</span> <span class="keywordflow">if</span>( elemName==<span class="stringliteral">&quot;key&quot;</span>) {
<a name="l00788"></a>00788         <span class="keywordflow">if</span> (c)
<a name="l00789"></a>00789           <span class="keyword">delete</span> c;
<a name="l00790"></a>00790         c=parseConstraint(<a class="code" href="namespaceSchema.html#a016df5c282799f5a08aeb68727dfae3ca9bdd1ec9b56fc15df2af7358360ec7c2">Schema::Key</a>);
<a name="l00791"></a>00791       }
<a name="l00792"></a>00792       <span class="keywordflow">else</span> <span class="keywordflow">if</span>( elemName==<span class="stringliteral">&quot;keyref&quot;</span>)      {
<a name="l00793"></a>00793         <span class="keywordflow">if</span> (c)
<a name="l00794"></a>00794           <span class="keyword">delete</span> c;
<a name="l00795"></a>00795         c=parseConstraint(<a class="code" href="namespaceSchema.html#a016df5c282799f5a08aeb68727dfae3ca1fbfc9ad564f0975cf903b923e243b8f">Schema::Keyref</a>);
<a name="l00796"></a>00796       }
<a name="l00797"></a>00797       <span class="keywordflow">else</span> <span class="keywordflow">if</span>( elemName==<span class="stringliteral">&quot;unique&quot;</span>)      {
<a name="l00798"></a>00798         <span class="keywordflow">if</span> (c)
<a name="l00799"></a>00799           <span class="keyword">delete</span> c;
<a name="l00800"></a>00800         c=parseConstraint(<a class="code" href="namespaceSchema.html#a016df5c282799f5a08aeb68727dfae3cafe0dfe827b7a23a72e2099a8621cacdc">Schema::Unique</a>);
<a name="l00801"></a>00801       }
<a name="l00802"></a>00802       <span class="keywordflow">else</span>{
<a name="l00803"></a>00803         error(<span class="stringliteral">&quot;&lt;element&gt; : syntax error or unkown tag :&quot;</span>+elemName);
<a name="l00804"></a>00804       }
<a name="l00805"></a>00805     }
<a name="l00806"></a>00806   <span class="keywordflow">while</span> (<span class="keyword">true</span>);
<a name="l00807"></a>00807   
<a name="l00808"></a>00808   <span class="keywordflow">if</span> (nill &amp;&amp; type_id == 0) {
<a name="l00809"></a>00809     type_id = <a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711da36f13e661b35c242dcdbab96af0696c8">Schema::XSD_ANYTYPE</a>;
<a name="l00810"></a>00810   }
<a name="l00811"></a>00811   
<a name="l00812"></a>00812   constraints_.push_back(c);  
<a name="l00813"></a>00813   Element e(name,
<a name="l00814"></a>00814             elemNs,
<a name="l00815"></a>00815             typeNs,
<a name="l00816"></a>00816             type_id,
<a name="l00817"></a>00817             minimum,
<a name="l00818"></a>00818             maximum,
<a name="l00819"></a>00819             qualified,
<a name="l00820"></a>00820             defaultVal,
<a name="l00821"></a>00821             fixedVal);
<a name="l00822"></a>00822   e.addConstraint(c);
<a name="l00823"></a>00823   <span class="keywordflow">return</span> e;
<a name="l00824"></a>00824 }
<a name="l00825"></a>00825 
<a name="l00826"></a>00826 Constraint*
<a name="l00827"></a>00827 SchemaParser::parseConstraint(<a class="code" href="namespaceSchema.html#a016df5c282799f5a08aeb68727dfae3c">Schema::ConstraintType</a> cstr)
<a name="l00828"></a>00828 {
<a name="l00829"></a>00829   Constraint * c= <span class="keyword">new</span> Constraint(cstr);
<a name="l00830"></a>00830   c-&gt;setName(xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>,<span class="stringliteral">&quot;name&quot;</span>));
<a name="l00831"></a>00831 
<a name="l00832"></a>00832   <span class="keywordflow">do</span>
<a name="l00833"></a>00833     {
<a name="l00834"></a>00834       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00835"></a>00835       std::string elemName=xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>();
<a name="l00836"></a>00836       <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>) {
<a name="l00837"></a>00837         <span class="keywordflow">if</span> (cstr==<a class="code" href="namespaceSchema.html#a016df5c282799f5a08aeb68727dfae3ca9bdd1ec9b56fc15df2af7358360ec7c2">Schema::Key</a> &amp;&amp; elemName == <span class="stringliteral">&quot;key&quot;</span> ||
<a name="l00838"></a>00838             cstr==<a class="code" href="namespaceSchema.html#a016df5c282799f5a08aeb68727dfae3ca1fbfc9ad564f0975cf903b923e243b8f">Schema::Keyref</a> &amp;&amp; elemName == <span class="stringliteral">&quot;keyref&quot;</span> ||
<a name="l00839"></a>00839             cstr==<a class="code" href="namespaceSchema.html#a016df5c282799f5a08aeb68727dfae3cafe0dfe827b7a23a72e2099a8621cacdc">Schema::Unique</a> &amp;&amp; elemName == <span class="stringliteral">&quot;unique&quot;</span> )
<a name="l00840"></a>00840           <span class="keywordflow">break</span>;
<a name="l00841"></a>00841 
<a name="l00842"></a>00842         <span class="comment">//if an end tag is seen proceed till next start tag</span>
<a name="l00843"></a>00843         <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() != xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a9b3020c88a2935db197d7a72cf36067c">START_TAG</a>)
<a name="l00844"></a>00844           xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00845"></a>00845       }
<a name="l00846"></a>00846       <span class="keywordflow">if</span>(elemName==<span class="stringliteral">&quot;selector&quot;</span>){
<a name="l00847"></a>00847         c-&gt;setSelector(xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;xpath&quot;</span>));
<a name="l00848"></a>00848         xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00849"></a>00849       }
<a name="l00850"></a>00850       <span class="keywordflow">else</span> <span class="keywordflow">if</span>(elemName==<span class="stringliteral">&quot;field&quot;</span>){
<a name="l00851"></a>00851         c-&gt;addField(xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;xpath&quot;</span>));
<a name="l00852"></a>00852         xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00853"></a>00853       }
<a name="l00854"></a>00854     }<span class="keywordflow">while</span> (<span class="keyword">true</span>);
<a name="l00855"></a>00855   <span class="keywordflow">return</span> c;
<a name="l00856"></a>00856 }
<a name="l00857"></a>00857 
<a name="l00858"></a>00858 
<a name="l00859"></a>00859 Element
<a name="l00860"></a>00860 SchemaParser::addAny(ContentModel* cm)
<a name="l00861"></a>00861 {
<a name="l00862"></a>00862   std::string ns;
<a name="l00863"></a>00863   
<a name="l00864"></a>00864   <span class="keywordtype">int</span> type_id = <a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711daf98e1b46502181ba445f7331b6b38de3">Schema::XSD_ANY</a>, minimum = 1, maximum = 1, attcnt;
<a name="l00865"></a>00865   <span class="comment">//note  processContents=lax .</span>
<a name="l00866"></a>00866   attcnt = xParser_-&gt;<a class="code" href="classXmlPullParser.html#afa91180fecdf4078ad07884f481eed86">getAttributeCount</a>();
<a name="l00867"></a>00867   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; attcnt; i++)
<a name="l00868"></a>00868     {
<a name="l00869"></a>00869       std::string attr = xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i);
<a name="l00870"></a>00870       <span class="keywordflow">if</span> (<span class="stringliteral">&quot;namespace&quot;</span> == attr)
<a name="l00871"></a>00871         ns = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i);
<a name="l00872"></a>00872 
<a name="l00873"></a>00873       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;minOccurs&quot;</span> == attr)
<a name="l00874"></a>00874         minimum = <a class="code" href="namespaceXmlUtils.html#a3241046dfb313c27669514a95f7538d5">XmlUtils::parseInt</a>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i), 10);
<a name="l00875"></a>00875 
<a name="l00876"></a>00876       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;maxOccurs&quot;</span> == attr)
<a name="l00877"></a>00877         {
<a name="l00878"></a>00878           <span class="keywordflow">if</span> (<span class="stringliteral">&quot;unbounded&quot;</span> == xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i))
<a name="l00879"></a>00879             maximum = <a class="code" href="Element_8h.html#af17df4d5d5bad0ea1d48fa796a91d4ce">UNBOUNDED</a>;
<a name="l00880"></a>00880           <span class="keywordflow">else</span>
<a name="l00881"></a>00881             maximum = <a class="code" href="namespaceXmlUtils.html#a3241046dfb313c27669514a95f7538d5">XmlUtils::parseInt</a>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i), 10);
<a name="l00882"></a>00882           <span class="keywordflow">if</span> (maximum == -1){                        <span class="comment">//invalid value for maxOccurs</span>
<a name="l00883"></a>00883             error(<span class="stringliteral">&quot;&lt;element&gt;:Invalid value for maxOccurs&quot;</span>,1);
<a name="l00884"></a>00884             maximum=1;
<a name="l00885"></a>00885           }
<a name="l00886"></a>00886         }
<a name="l00887"></a>00887 
<a name="l00888"></a>00888       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;processContents&quot;</span> == attr || <span class="stringliteral">&quot;id&quot;</span> == attr) {
<a name="l00889"></a>00889         
<a name="l00890"></a>00890         <span class="comment">//do nothing</span>
<a name="l00891"></a>00891         }
<a name="l00892"></a>00892       <span class="keywordflow">else</span>
<a name="l00893"></a>00893         error(<span class="stringliteral">&quot;&lt;any&gt;:Unsupported Attribute &quot;</span>+attr,2);
<a name="l00894"></a>00894     }
<a name="l00895"></a>00895 
<a name="l00896"></a>00896   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00897"></a>00897   <span class="keywordflow">do</span>
<a name="l00898"></a>00898     {
<a name="l00899"></a>00899       <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>)
<a name="l00900"></a>00900         {
<a name="l00901"></a>00901           <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;any&quot;</span>)
<a name="l00902"></a>00902             <span class="keywordflow">break</span>;
<a name="l00903"></a>00903           
<a name="l00904"></a>00904         }
<a name="l00905"></a>00905       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a74c8bdd7edc2f341a8ed4eb8fed7c950">nextToken</a>();
<a name="l00906"></a>00906     }<span class="keywordflow">while</span> (<span class="keyword">true</span>);
<a name="l00907"></a>00907 
<a name="l00908"></a>00908 
<a name="l00909"></a>00909   Element e(ns,
<a name="l00910"></a>00910             ns,
<a name="l00911"></a>00911             ns,
<a name="l00912"></a>00912             type_id,
<a name="l00913"></a>00913             minimum,
<a name="l00914"></a>00914             maximum);
<a name="l00915"></a>00915   
<a name="l00916"></a>00916   cm-&gt;addElement(e);
<a name="l00917"></a>00917   <span class="keywordflow">return</span> e;
<a name="l00918"></a>00918 }
<a name="l00919"></a>00919 
<a name="l00920"></a>00920 
<a name="l00921"></a>00921 Attribute
<a name="l00922"></a>00922 SchemaParser::addAnyAttribute(ComplexType * cType)
<a name="l00923"></a>00923 {
<a name="l00924"></a>00924   std::string ns;
<a name="l00925"></a>00925   <span class="keywordtype">int</span> type_id = <a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711daf98e1b46502181ba445f7331b6b38de3">Schema::XSD_ANY</a>,attcnt;
<a name="l00926"></a>00926   <span class="keywordtype">bool</span> qualified = <span class="keyword">true</span>;
<a name="l00927"></a>00927 
<a name="l00928"></a>00928   <span class="comment">//note  processContents=lax .</span>
<a name="l00929"></a>00929   attcnt = xParser_-&gt;<a class="code" href="classXmlPullParser.html#afa91180fecdf4078ad07884f481eed86">getAttributeCount</a>();
<a name="l00930"></a>00930   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; attcnt; i++)
<a name="l00931"></a>00931     {
<a name="l00932"></a>00932       std::string attr = xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i);
<a name="l00933"></a>00933       <span class="keywordflow">if</span> (<span class="stringliteral">&quot;namespace&quot;</span> == attr)
<a name="l00934"></a>00934         ns = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i);
<a name="l00935"></a>00935 
<a name="l00936"></a>00936       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;processContents&quot;</span> == attr || <span class="stringliteral">&quot;id&quot;</span> == attr)
<a name="l00937"></a>00937         {
<a name="l00938"></a>00938 
<a name="l00939"></a>00939           <span class="comment">//do nothing</span>
<a name="l00940"></a>00940         }
<a name="l00941"></a>00941       <span class="keywordflow">else</span>
<a name="l00942"></a>00942         error(<span class="stringliteral">&quot;&lt;anyAttribute&gt;:Unsupported Attribute &quot;</span>+attr,1);
<a name="l00943"></a>00943     }
<a name="l00944"></a>00944   
<a name="l00945"></a>00945   Attribute a(ns,
<a name="l00946"></a>00946               type_id,
<a name="l00947"></a>00947               qualified);
<a name="l00948"></a>00948  <span class="keywordflow">if</span>(cType)
<a name="l00949"></a>00949    cType-&gt;addAttribute(a);
<a name="l00950"></a>00950   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00951"></a>00951   <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;annotation&quot;</span>)
<a name="l00952"></a>00952     {
<a name="l00953"></a>00953       parseAnnotation();
<a name="l00954"></a>00954       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l00955"></a>00955     }
<a name="l00956"></a>00956   <span class="keywordflow">return</span> a;
<a name="l00957"></a>00957   
<a name="l00958"></a>00958 }
<a name="l00959"></a>00959 
<a name="l00960"></a>00960 
<a name="l00961"></a>00961 <span class="comment">//This function parses and attribute</span>
<a name="l00962"></a>00962 Attribute
<a name="l00963"></a>00963 SchemaParser::parseAttribute(<span class="keywordtype">bool</span> &amp; fwdRef)
<a name="l00964"></a>00964 {
<a name="l00965"></a>00965   std::string name, fixedVal, defaultVal;
<a name="l00966"></a>00966   <span class="keywordtype">int</span> type_id = 0, attcnt;
<a name="l00967"></a>00967   <span class="keywordtype">bool</span> qualified = <span class="keyword">false</span>, use = <span class="keyword">false</span>;
<a name="l00968"></a>00968   fwdRef=<span class="keyword">false</span>;
<a name="l00969"></a>00969   
<a name="l00970"></a>00970   <a class="code" href="classQname.html">Qname</a> refAttribute;
<a name="l00971"></a>00971   attcnt = xParser_-&gt;<a class="code" href="classXmlPullParser.html#afa91180fecdf4078ad07884f481eed86">getAttributeCount</a>();
<a name="l00972"></a>00972   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; attcnt; i++) {
<a name="l00973"></a>00973     std::string attName = xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i);
<a name="l00974"></a>00974     std::string attNs=xParser_-&gt;<a class="code" href="classXmlPullParser.html#adc0e22132b843b7a34452a8bacb56efb">getAttributeNamespace</a>(i);
<a name="l00975"></a>00975     std::string attVal=xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i);
<a name="l00976"></a>00976     
<a name="l00977"></a>00977     
<a name="l00978"></a>00978     <span class="keywordflow">if</span> (<span class="stringliteral">&quot;name&quot;</span> == attName)
<a name="l00979"></a>00979       name = attVal;
<a name="l00980"></a>00980     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;type&quot;</span> == attName) {
<a name="l00981"></a>00981       <span class="keywordflow">if</span> (type_id &gt; 0)
<a name="l00982"></a>00982         error(<span class="stringliteral">&quot;&lt;attribute&gt;:type and ref are mutually exclusive in element decl&quot;</span>);
<a name="l00983"></a>00983       <a class="code" href="classQname.html">Qname</a> typeName(attVal);
<a name="l00984"></a>00984       typeName.setNamespace(xParser_-&gt;
<a name="l00985"></a>00985                             <a class="code" href="classSchema_1_1SchemaParser.html#a64e1a1534e45266a717fd1c52cbb337c">getNamespace</a>(typeName.getPrefix()));
<a name="l00986"></a>00986       type_id = <a class="code" href="classSchema_1_1SchemaParser.html#ad8f407de76f38f1fa24c844faf9ca611">getTypeId</a>(typeName, <span class="keyword">true</span>);
<a name="l00987"></a>00987       <span class="keywordflow">if</span> (type_id == 0)
<a name="l00988"></a>00988         error(<span class="stringliteral">&quot;&lt;attribute&gt;:Could not resolve type &quot;</span> +
<a name="l00989"></a>00989               typeName.getNamespace() + 
<a name="l00990"></a>00990               <span class="stringliteral">&quot;:&quot;</span> +typeName.getLocalName(),1);
<a name="l00991"></a>00991     }
<a name="l00992"></a>00992     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;form&quot;</span> == attName) {
<a name="l00993"></a>00993       <span class="keywordflow">if</span> (<span class="stringliteral">&quot;qualified&quot;</span> == attVal)
<a name="l00994"></a>00994         qualified = <span class="keyword">true</span>;
<a name="l00995"></a>00995       <span class="keywordflow">else</span> 
<a name="l00996"></a>00996         qualified = <span class="keyword">false</span>;
<a name="l00997"></a>00997     }
<a name="l00998"></a>00998     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;ref&quot;</span> == attName) {
<a name="l00999"></a>00999       <span class="keywordflow">if</span> (!name.empty())
<a name="l01000"></a>01000         error(<span class="stringliteral">&quot;&lt;attribute&gt;:name and ref are mutually exclusive in element decl&quot;</span>);
<a name="l01001"></a>01001       <span class="keywordflow">if</span> (type_id &gt; 0)
<a name="l01002"></a>01002         error(<span class="stringliteral">&quot;&lt;attribute&gt;:type and ref are mutually exclusive in element decl&quot;</span>);
<a name="l01003"></a>01003       refAttribute = attVal;
<a name="l01004"></a>01004       refAttribute.<a class="code" href="classQname.html#a1351793363ec2ed89910fc4f45ee36c1">setNamespace</a>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#ab64f42eff37c0c049024c8267f0732e8">getNamespace</a>(refAttribute.<a class="code" href="classQname.html#a63ea9b0f43fa50e3a2ee6e35b50830e1">getPrefix</a>()));
<a name="l01005"></a>01005       Attribute *a =0;
<a name="l01006"></a>01006       <span class="keywordflow">if</span>(refAttribute.<a class="code" href="classQname.html#ab7b6decf0167443096f034cd33c7d839">getNamespace</a>()==tnsUri_){
<a name="l01007"></a>01007         a=<a class="code" href="classSchema_1_1SchemaParser.html#a47bd98ca4024da64894ed46ade0f9554">getAttribute</a>(refAttribute);
<a name="l01008"></a>01008       }<span class="keywordflow">else</span>{
<a name="l01009"></a>01009         <span class="keywordtype">int</span> i=checkImport(refAttribute.<a class="code" href="classQname.html#ab7b6decf0167443096f034cd33c7d839">getNamespace</a>());
<a name="l01010"></a>01010         <span class="keywordflow">if</span>(i &gt;=0 &amp;&amp; importedSchemas_[i].sParser){
<a name="l01011"></a>01011           a=importedSchemas_[i].sParser-&gt;getAttribute(refAttribute);
<a name="l01012"></a>01012         }
<a name="l01013"></a>01013         <span class="keywordflow">else</span>
<a name="l01014"></a>01014           a=0;
<a name="l01015"></a>01015       }
<a name="l01016"></a>01016           
<a name="l01017"></a>01017       <span class="keywordflow">if</span> (a == 0){
<a name="l01018"></a>01018         fwdRef = <span class="keyword">true</span>;
<a name="l01019"></a>01019         name=refAttribute.<a class="code" href="classQname.html#acc177c6742061f76a3f09a3898256bf2">getLocalName</a>();
<a name="l01020"></a>01020         lForwardAttributeRefs_.push_back(refAttribute);
<a name="l01021"></a>01021       }
<a name="l01022"></a>01022       <span class="keywordflow">else</span>{
<a name="l01023"></a>01023         name = a-&gt;getName();
<a name="l01024"></a>01024         type_id = a-&gt;getType();
<a name="l01025"></a>01025         qualified = a-&gt;isQualified();
<a name="l01026"></a>01026         <span class="keywordflow">if</span> (defaultVal.empty())
<a name="l01027"></a>01027           defaultVal = a-&gt;defaultVal();
<a name="l01028"></a>01028         <span class="keywordflow">if</span> (fixedVal.empty())
<a name="l01029"></a>01029           fixedVal = a-&gt;fixedVal();
<a name="l01030"></a>01030       }
<a name="l01031"></a>01031     }
<a name="l01032"></a>01032     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;default&quot;</span> == attName) {
<a name="l01033"></a>01033       <span class="keywordflow">if</span> (fixedVal.empty())
<a name="l01034"></a>01034         defaultVal = attVal;
<a name="l01035"></a>01035       <span class="keywordflow">else</span>
<a name="l01036"></a>01036         error
<a name="l01037"></a>01037           (<span class="stringliteral">&quot;&lt;attribute&gt;:fixed and default cannot occur together&quot;</span>);
<a name="l01038"></a>01038     }
<a name="l01039"></a>01039     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;fixed&quot;</span> == attName) {
<a name="l01040"></a>01040       <span class="keywordflow">if</span> (defaultVal.empty())
<a name="l01041"></a>01041         fixedVal = attVal;
<a name="l01042"></a>01042       <span class="keywordflow">else</span>
<a name="l01043"></a>01043         error(<span class="stringliteral">&quot;&lt;attribute&gt;:fixed and default cannot occur together&quot;</span>);
<a name="l01044"></a>01044     }
<a name="l01045"></a>01045     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="stringliteral">&quot;use&quot;</span> == attName) {
<a name="l01046"></a>01046       <span class="keywordflow">if</span> (attVal == <span class="stringliteral">&quot;required&quot;</span>)
<a name="l01047"></a>01047         use = <span class="keyword">true</span>;
<a name="l01048"></a>01048       <span class="keywordflow">else</span> 
<a name="l01049"></a>01049         use = <span class="keyword">false</span>;
<a name="l01050"></a>01050     }
<a name="l01051"></a>01051     <span class="keywordflow">else</span> {
<a name="l01052"></a>01052       <span class="keywordtype">int</span> n=-1;
<a name="l01053"></a>01053       <span class="keywordflow">if</span>(!attNs.empty() &amp;&amp; ((n=checkImport(attNs))!=-1)){
<a name="l01054"></a>01054         fixedVal=attNs;<span class="comment">//hack for non schema attributes</span>
<a name="l01055"></a>01055         defaultVal=attVal;<span class="comment">//store non schema attributes.esp for soapenc:arrayType</span>
<a name="l01056"></a>01056       }<span class="keywordflow">else</span>{
<a name="l01057"></a>01057         error(<span class="stringliteral">&quot;&lt;attribute&gt;:Unsupported attribute {&quot;</span>+ attNs+ <span class="stringliteral">&quot;}:&quot;</span>+attName,2);
<a name="l01058"></a>01058       }
<a name="l01059"></a>01059     }
<a name="l01060"></a>01060   }
<a name="l01061"></a>01061   <span class="comment">//Now parse the children of the attribute tag viz simpleType</span>
<a name="l01062"></a>01062   <span class="keywordflow">do</span>
<a name="l01063"></a>01063     {
<a name="l01064"></a>01064       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01065"></a>01065       <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>)
<a name="l01066"></a>01066         {
<a name="l01067"></a>01067           <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;attribute&quot;</span>)
<a name="l01068"></a>01068             <span class="keywordflow">break</span>;
<a name="l01069"></a>01069 
<a name="l01070"></a>01070           <span class="comment">//if an end tag is seen proceed till next start tag</span>
<a name="l01071"></a>01071           <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() != xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a9b3020c88a2935db197d7a72cf36067c">START_TAG</a>)
<a name="l01072"></a>01072             xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01073"></a>01073         }
<a name="l01074"></a>01074 
<a name="l01075"></a>01075       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;simpleType&quot;</span>)
<a name="l01076"></a>01076         {
<a name="l01077"></a>01077           XSDType *elemType = parseSimpleType();
<a name="l01078"></a>01078 
<a name="l01079"></a>01079           <span class="comment">//create an anonymous type</span>
<a name="l01080"></a>01080           type_id = typesTable_.addType(elemType);
<a name="l01081"></a>01081         }
<a name="l01082"></a>01082 
<a name="l01083"></a>01083       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;annotation&quot;</span>)
<a name="l01084"></a>01084         parseAnnotation();
<a name="l01085"></a>01085       <span class="keywordflow">else</span>
<a name="l01086"></a>01086         error(<span class="stringliteral">&quot;&lt;attribute&gt;:Syntax error or unkown tag  &quot;</span>+xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>());
<a name="l01087"></a>01087     }
<a name="l01088"></a>01088   <span class="keywordflow">while</span> (<span class="keyword">true</span>);
<a name="l01089"></a>01089 
<a name="l01090"></a>01090   Attribute a(name,
<a name="l01091"></a>01091               type_id,
<a name="l01092"></a>01092               qualified,
<a name="l01093"></a>01093               defaultVal,
<a name="l01094"></a>01094               fixedVal,
<a name="l01095"></a>01095               use);
<a name="l01096"></a>01096   <span class="keywordflow">return</span> a;
<a name="l01097"></a>01097   
<a name="l01098"></a>01098 }
<a name="l01099"></a>01099 
<a name="l01100"></a>01100 SimpleType *
<a name="l01101"></a>01101 SchemaParser::parseSimpleType()
<a name="l01102"></a>01102 {
<a name="l01103"></a>01103   SimpleType *st = <span class="keyword">new</span> SimpleType(tnsUri_);
<a name="l01104"></a>01104   <span class="keywordtype">int</span> basetype_id = 0;
<a name="l01105"></a>01105   <span class="keywordtype">int</span> attcnt;
<a name="l01106"></a>01106   attcnt = xParser_-&gt;<a class="code" href="classXmlPullParser.html#afa91180fecdf4078ad07884f481eed86">getAttributeCount</a>();
<a name="l01107"></a>01107   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; attcnt; i++)
<a name="l01108"></a>01108     {
<a name="l01109"></a>01109       <span class="keywordflow">if</span> (<span class="stringliteral">&quot;name&quot;</span> == xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i))
<a name="l01110"></a>01110         st-&gt;setName(xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i));
<a name="l01111"></a>01111 
<a name="l01112"></a>01112       <span class="keywordflow">else</span>
<a name="l01113"></a>01113         error(<span class="stringliteral">&quot;&lt;simpleType&gt; :&quot;</span> + xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i) +
<a name="l01114"></a>01114               <span class="stringliteral">&quot;:Unknown/Unsupported  attribute &quot;</span>,2);
<a name="l01115"></a>01115     }
<a name="l01116"></a>01116 
<a name="l01117"></a>01117   <span class="keywordflow">do</span>
<a name="l01118"></a>01118     {
<a name="l01119"></a>01119       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01120"></a>01120       <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>)
<a name="l01121"></a>01121         {
<a name="l01122"></a>01122           <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;simpleType&quot;</span>)
<a name="l01123"></a>01123             <span class="keywordflow">break</span>;
<a name="l01124"></a>01124 
<a name="l01125"></a>01125           <span class="comment">//if an end tag is seen proceed till next start tag</span>
<a name="l01126"></a>01126           <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() != xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a9b3020c88a2935db197d7a72cf36067c">START_TAG</a>)
<a name="l01127"></a>01127             xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01128"></a>01128         }
<a name="l01129"></a>01129       <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;restriction&quot;</span>)
<a name="l01130"></a>01130         {
<a name="l01131"></a>01131           attcnt = xParser_-&gt;<a class="code" href="classXmlPullParser.html#afa91180fecdf4078ad07884f481eed86">getAttributeCount</a>();
<a name="l01132"></a>01132           <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; attcnt; i++)
<a name="l01133"></a>01133             {
<a name="l01134"></a>01134               <span class="keywordflow">if</span> (<span class="stringliteral">&quot;base&quot;</span> == xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i))
<a name="l01135"></a>01135                 {
<a name="l01136"></a>01136                   <a class="code" href="classQname.html">Qname</a> typeName(xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i));
<a name="l01137"></a>01137                   typeName.setNamespace(xParser_-&gt;
<a name="l01138"></a>01138                                         <a class="code" href="classSchema_1_1SchemaParser.html#a64e1a1534e45266a717fd1c52cbb337c">getNamespace</a>(typeName.
<a name="l01139"></a>01139                                                      getPrefix()));
<a name="l01140"></a>01140                   st-&gt;setBaseType(basetype_id =
<a name="l01141"></a>01141                                   <a class="code" href="classSchema_1_1SchemaParser.html#ad8f407de76f38f1fa24c844faf9ca611">getTypeId</a>(typeName, <span class="keyword">true</span>));
<a name="l01142"></a>01142                   <span class="keywordflow">if</span> (basetype_id == 0)
<a name="l01143"></a>01143                     error(<span class="stringliteral">&quot;&lt;simpleType&gt;:&quot;</span> +
<a name="l01144"></a>01144                           xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i) +
<a name="l01145"></a>01145                           <span class="stringliteral">&quot;:Unknown base type &quot;</span>,1);
<a name="l01146"></a>01146                 }
<a name="l01147"></a>01147               <span class="keywordflow">else</span>
<a name="l01148"></a>01148                 error(<span class="stringliteral">&quot;&lt;simpleType&gt;:&quot;</span> + xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i) +
<a name="l01149"></a>01149                       <span class="stringliteral">&quot;:Unknown/Unsupported  attribute for &lt;restriction&gt;&quot;</span>,2);
<a name="l01150"></a>01150             }
<a name="l01151"></a>01151           parseRestriction(st);
<a name="l01152"></a>01152         }
<a name="l01153"></a>01153       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;union&quot;</span>){
<a name="l01154"></a>01154         
<a name="l01155"></a>01155         std::string members = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;memberTypes&quot;</span>);
<a name="l01156"></a>01156         <span class="keywordtype">size_t</span> s = 0;
<a name="l01157"></a>01157         <span class="keywordflow">while</span>(s &lt; members.length()){
<a name="l01158"></a>01158           <span class="keywordflow">while</span>(members[s]==<span class="charliteral">&#39; &#39;</span>)s++;
<a name="l01159"></a>01159           std::string type = members.substr(s,members.find(<span class="charliteral">&#39; &#39;</span>,s)-s);
<a name="l01160"></a>01160           <a class="code" href="classQname.html">Qname</a> typeName(type);
<a name="l01161"></a>01161           typeName.setNamespace(xParser_-&gt;<a class="code" href="classXmlPullParser.html#ab64f42eff37c0c049024c8267f0732e8">getNamespace</a>(typeName.getPrefix()));
<a name="l01162"></a>01162           basetype_id = <a class="code" href="classSchema_1_1SchemaParser.html#ad8f407de76f38f1fa24c844faf9ca611">getTypeId</a>(typeName,<span class="keyword">true</span>);
<a name="l01163"></a>01163           st-&gt;setUnionType(basetype_id);
<a name="l01164"></a>01164           s+=type.length()+1;
<a name="l01165"></a>01165         }
<a name="l01166"></a>01166         
<a name="l01167"></a>01167         xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01168"></a>01168         <span class="keywordflow">while</span>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;simpleType&quot;</span>){
<a name="l01169"></a>01169           XSDType * t = parseSimpleType();
<a name="l01170"></a>01170           <a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711d">Schema::Type</a> i = (<a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711d">Schema::Type</a>)typesTable_.addType(t);
<a name="l01171"></a>01171 
<a name="l01172"></a>01172           st-&gt;setUnionType(i);
<a name="l01173"></a>01173           xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01174"></a>01174         }
<a name="l01175"></a>01175       } 
<a name="l01176"></a>01176       <span class="keywordflow">else</span> <span class="keywordflow">if</span>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;list&quot;</span>){
<a name="l01177"></a>01177         
<a name="l01178"></a>01178         basetype_id = <a class="code" href="classSchema_1_1SchemaParser.html#ad8f407de76f38f1fa24c844faf9ca611">getTypeId</a>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;itemType&quot;</span>));
<a name="l01179"></a>01179         st-&gt;setListType(basetype_id);
<a name="l01180"></a>01180         xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01181"></a>01181       }
<a name="l01182"></a>01182       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;annotation&quot;</span>)
<a name="l01183"></a>01183         parseAnnotation();
<a name="l01184"></a>01184       <span class="keywordflow">else</span>
<a name="l01185"></a>01185         error(<span class="stringliteral">&quot;&lt;simpleType&gt;:Syntax error&quot;</span>);
<a name="l01186"></a>01186     }
<a name="l01187"></a>01187   <span class="keywordflow">while</span> (<span class="keyword">true</span>);
<a name="l01188"></a>01188   <span class="keywordflow">return</span> st;
<a name="l01189"></a>01189 }
<a name="l01190"></a>01190 
<a name="l01191"></a>01191 <span class="keywordtype">void</span> 
<a name="l01192"></a>01192 SchemaParser::parseRestriction(SimpleType * st,
<a name="l01193"></a>01193                                ComplexType * ct)
<a name="l01194"></a>01194 {
<a name="l01195"></a>01195   <span class="keywordflow">if</span> (st-&gt;getBaseTypeId() == 0)
<a name="l01196"></a>01196     error(<span class="stringliteral">&quot;&lt;restriction&gt;:unkown BaseType&quot;</span>,1);
<a name="l01197"></a>01197 
<a name="l01198"></a>01198   <span class="keywordflow">do</span> {
<a name="l01199"></a>01199     xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01200"></a>01200     <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>)
<a name="l01201"></a>01201       {
<a name="l01202"></a>01202         <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;restriction&quot;</span>)
<a name="l01203"></a>01203           <span class="keywordflow">break</span>;
<a name="l01204"></a>01204         <span class="keywordflow">else</span>
<a name="l01205"></a>01205           xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01206"></a>01206         <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;restriction&quot;</span>
<a name="l01207"></a>01207             &amp;&amp; xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>)
<a name="l01208"></a>01208           <span class="keywordflow">break</span>;
<a name="l01209"></a>01209       }
<a name="l01210"></a>01210     <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;annotation&quot;</span>) {
<a name="l01211"></a>01211       parseAnnotation();
<a name="l01212"></a>01212       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01213"></a>01213     }
<a name="l01214"></a>01214     <span class="keywordflow">if</span>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>()==<span class="stringliteral">&quot;attribute&quot;</span> &amp;&amp; ct!=0){
<a name="l01215"></a>01215       <span class="keywordtype">bool</span> f=<span class="keyword">false</span>;
<a name="l01216"></a>01216       Attribute a=parseAttribute(f);
<a name="l01217"></a>01217       ct-&gt;addAttribute(a,f);
<a name="l01218"></a>01218     }
<a name="l01219"></a>01219     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (st-&gt;isvalidFacet(xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>())){
<a name="l01220"></a>01220       <span class="comment">//This function also sets the facet if valid</span>
<a name="l01221"></a>01221 
<a name="l01222"></a>01222       st-&gt;setFacetValue(xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>(),
<a name="l01223"></a>01223                         xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;value&quot;</span>));
<a name="l01224"></a>01224     }<span class="keywordflow">else</span>{
<a name="l01225"></a>01225       error(<span class="stringliteral">&quot;&lt;restriction&gt;:&quot;</span> + xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() +
<a name="l01226"></a>01226             <span class="stringliteral">&quot; is not a valid facet /attribute for the type&quot;</span>,1);
<a name="l01227"></a>01227     }
<a name="l01228"></a>01228   } <span class="keywordflow">while</span> (<span class="keyword">true</span>);
<a name="l01229"></a>01229 }
<a name="l01230"></a>01230 
<a name="l01231"></a>01231 <span class="keywordtype">void</span>
<a name="l01232"></a>01232 SchemaParser::parseComplexContent(ComplexType * ct)
<a name="l01233"></a>01233 {
<a name="l01234"></a>01234   <span class="keywordtype">int</span> attcnt = xParser_-&gt;<a class="code" href="classXmlPullParser.html#afa91180fecdf4078ad07884f481eed86">getAttributeCount</a>();
<a name="l01235"></a>01235   <span class="keywordtype">int</span> i = 0;
<a name="l01236"></a>01236   <a class="code" href="classQname.html">Qname</a> typeName;
<a name="l01237"></a>01237 
<a name="l01238"></a>01238   ct-&gt;setContentModel(<a class="code" href="namespaceSchema.html#a84b8523395bb986be4b87ff834308103afd82bbac2e953f816f3ea3462f08929b">Schema::Complex</a>);
<a name="l01239"></a>01239   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01240"></a>01240 
<a name="l01241"></a>01241   <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;annotation&quot;</span>) {
<a name="l01242"></a>01242     parseAnnotation();
<a name="l01243"></a>01243     xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01244"></a>01244   }
<a name="l01245"></a>01245 
<a name="l01246"></a>01246   <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;restriction&quot;</span>)  {
<a name="l01247"></a>01247     attcnt = xParser_-&gt;<a class="code" href="classXmlPullParser.html#afa91180fecdf4078ad07884f481eed86">getAttributeCount</a>();
<a name="l01248"></a>01248     <span class="keywordflow">for</span> (i = 0; i &lt; attcnt; i++) {
<a name="l01249"></a>01249       <span class="keywordflow">if</span> (<span class="stringliteral">&quot;base&quot;</span> == xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i))
<a name="l01250"></a>01250         {
<a name="l01251"></a>01251           typeName = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i);
<a name="l01252"></a>01252           typeName.<a class="code" href="classQname.html#a1351793363ec2ed89910fc4f45ee36c1">setNamespace</a>(xParser_-&gt;
<a name="l01253"></a>01253                                 <a class="code" href="classSchema_1_1SchemaParser.html#a64e1a1534e45266a717fd1c52cbb337c">getNamespace</a>(typeName.<a class="code" href="classQname.html#a63ea9b0f43fa50e3a2ee6e35b50830e1">getPrefix</a>()));
<a name="l01254"></a>01254         }
<a name="l01255"></a>01255     }
<a name="l01256"></a>01256     ct-&gt;setBaseType(<a class="code" href="classSchema_1_1SchemaParser.html#ad8f407de76f38f1fa24c844faf9ca611">getTypeId</a>(typeName, <span class="keyword">true</span>),
<a name="l01257"></a>01257                     <a class="code" href="namespaceSchema.html#a37860d038e5376a5c902ff2c2adf2fd8a68d20493c325a2415e5110ba42e273f2">Schema::Restriction</a>);
<a name="l01258"></a>01258   }
<a name="l01259"></a>01259   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;extension&quot;</span>) {
<a name="l01260"></a>01260     attcnt = xParser_-&gt;<a class="code" href="classXmlPullParser.html#afa91180fecdf4078ad07884f481eed86">getAttributeCount</a>();
<a name="l01261"></a>01261     <span class="keywordflow">for</span> (i = 0; i &lt; attcnt; i++) {
<a name="l01262"></a>01262       <span class="keywordflow">if</span> (<span class="stringliteral">&quot;base&quot;</span> == xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i))  {
<a name="l01263"></a>01263         typeName = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i);
<a name="l01264"></a>01264         typeName.<a class="code" href="classQname.html#a1351793363ec2ed89910fc4f45ee36c1">setNamespace</a>(xParser_-&gt;
<a name="l01265"></a>01265                               <a class="code" href="classSchema_1_1SchemaParser.html#a64e1a1534e45266a717fd1c52cbb337c">getNamespace</a>(typeName.<a class="code" href="classQname.html#a63ea9b0f43fa50e3a2ee6e35b50830e1">getPrefix</a>()));
<a name="l01266"></a>01266       }
<a name="l01267"></a>01267     }
<a name="l01268"></a>01268     ct-&gt;setBaseType(<a class="code" href="classSchema_1_1SchemaParser.html#ad8f407de76f38f1fa24c844faf9ca611">getTypeId</a>(typeName, <span class="keyword">true</span>),
<a name="l01269"></a>01269                     <a class="code" href="namespaceSchema.html#a37860d038e5376a5c902ff2c2adf2fd8a4313ec3c74f679785d51168032149620">Schema::Extension</a>);
<a name="l01270"></a>01270   }
<a name="l01271"></a>01271   
<a name="l01272"></a>01272   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01273"></a>01273   <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;annotation&quot;</span>) {
<a name="l01274"></a>01274     parseAnnotation();
<a name="l01275"></a>01275     xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01276"></a>01276   }
<a name="l01277"></a>01277   
<a name="l01278"></a>01278   {
<a name="l01279"></a>01279     std::string elemName=xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>();
<a name="l01280"></a>01280     ContentModel * cm=0;      
<a name="l01281"></a>01281     <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;all&quot;</span>){
<a name="l01282"></a>01282       cm= <span class="keyword">new</span> ContentModel(<a class="code" href="namespaceSchema.html#a1adfaf18fd7d826648b3d01d953a434cad72664c314f8671075e550b614c63990">Schema::All</a>);
<a name="l01283"></a>01283     }
<a name="l01284"></a>01284     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;sequence&quot;</span>){
<a name="l01285"></a>01285       cm= <span class="keyword">new</span> ContentModel(<a class="code" href="namespaceSchema.html#a1adfaf18fd7d826648b3d01d953a434ca24a2a381feadbd50e8005da5f7dbffca">Schema::Sequence</a>);
<a name="l01286"></a>01286     }
<a name="l01287"></a>01287     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (elemName == <span class="stringliteral">&quot;choice&quot;</span>){
<a name="l01288"></a>01288       cm= <span class="keyword">new</span> ContentModel(<a class="code" href="namespaceSchema.html#a1adfaf18fd7d826648b3d01d953a434cab1b96c47de244209c2c1ed736cb08869">Schema::Choice</a>);
<a name="l01289"></a>01289     }
<a name="l01290"></a>01290 
<a name="l01291"></a>01291     <span class="keywordflow">if</span>(cm){
<a name="l01292"></a>01292       parseContent(cm);
<a name="l01293"></a>01293       ct-&gt;setContents(cm);
<a name="l01294"></a>01294       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01295"></a>01295     }
<a name="l01296"></a>01296 
<a name="l01297"></a>01297     <span class="comment">//parse any attributes</span>
<a name="l01298"></a>01298     <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() != xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>){
<a name="l01299"></a>01299       
<a name="l01300"></a>01300       <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;attribute&quot;</span>) {
<a name="l01301"></a>01301         <span class="keywordtype">bool</span> f=<span class="keyword">false</span>;
<a name="l01302"></a>01302         Attribute a=parseAttribute(f);
<a name="l01303"></a>01303         ct-&gt;addAttribute(a,f);
<a name="l01304"></a>01304       }
<a name="l01305"></a>01305       <span class="keywordflow">else</span> <span class="keywordflow">if</span>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;attributeGroup&quot;</span>)
<a name="l01306"></a>01306         {
<a name="l01307"></a>01307           parseAttributeGroup(ct);
<a name="l01308"></a>01308           
<a name="l01309"></a>01309         }
<a name="l01310"></a>01310       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;anyAttribute&quot;</span>)
<a name="l01311"></a>01311         addAnyAttribute(ct);
<a name="l01312"></a>01312       
<a name="l01313"></a>01313       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01314"></a>01314     }
<a name="l01315"></a>01315   }
<a name="l01316"></a>01316   
<a name="l01317"></a>01317   <span class="keywordflow">do</span> {
<a name="l01318"></a>01318     <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>)
<a name="l01319"></a>01319       <span class="keywordflow">if</span> ((xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;restriction&quot;</span> ||
<a name="l01320"></a>01320            xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;extension&quot;</span>) ) 
<a name="l01321"></a>01321         <span class="keywordflow">break</span>;
<a name="l01322"></a>01322     xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01323"></a>01323   }
<a name="l01324"></a>01324   <span class="keywordflow">while</span> (<span class="keyword">true</span>);
<a name="l01325"></a>01325   
<a name="l01326"></a>01326   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01327"></a>01327 }
<a name="l01328"></a>01328 
<a name="l01329"></a>01329 
<a name="l01330"></a>01330 <span class="keywordtype">void</span>
<a name="l01331"></a>01331 SchemaParser::parseSimpleContent(ComplexType * ct)
<a name="l01332"></a>01332 {
<a name="l01333"></a>01333   ct-&gt;setContentModel(<a class="code" href="namespaceSchema.html#a84b8523395bb986be4b87ff834308103ac32a5decc6e36a85f67c84470f71967f">Schema::Simple</a>);
<a name="l01334"></a>01334   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01335"></a>01335   <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;restriction&quot;</span>)
<a name="l01336"></a>01336     {
<a name="l01337"></a>01337       SimpleType *st = <span class="keyword">new</span> SimpleType(tnsUri_);
<a name="l01338"></a>01338       <span class="keywordtype">int</span> attcnt = xParser_-&gt;<a class="code" href="classXmlPullParser.html#afa91180fecdf4078ad07884f481eed86">getAttributeCount</a>();
<a name="l01339"></a>01339       <span class="keywordtype">int</span> basetype_id = 0;
<a name="l01340"></a>01340       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; attcnt; i++)
<a name="l01341"></a>01341         {
<a name="l01342"></a>01342           <span class="keywordflow">if</span> (<span class="stringliteral">&quot;base&quot;</span> == xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i))
<a name="l01343"></a>01343             {
<a name="l01344"></a>01344               <a class="code" href="classQname.html">Qname</a> typeName(xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i));
<a name="l01345"></a>01345               typeName.<a class="code" href="classQname.html#a1351793363ec2ed89910fc4f45ee36c1">setNamespace</a>(xParser_-&gt;
<a name="l01346"></a>01346                                     <a class="code" href="classSchema_1_1SchemaParser.html#a64e1a1534e45266a717fd1c52cbb337c">getNamespace</a>(typeName.<a class="code" href="classQname.html#a63ea9b0f43fa50e3a2ee6e35b50830e1">getPrefix</a>()));
<a name="l01347"></a>01347               st-&gt;setBaseType(basetype_id = <a class="code" href="classSchema_1_1SchemaParser.html#ad8f407de76f38f1fa24c844faf9ca611">getTypeId</a>(typeName, <span class="keyword">true</span>));
<a name="l01348"></a>01348               <span class="keywordflow">if</span> (basetype_id == 0)
<a name="l01349"></a>01349                 error(<span class="stringliteral">&quot;&lt;simpleContent&gt; :&quot;</span> +
<a name="l01350"></a>01350                       xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i) +
<a name="l01351"></a>01351                       <span class="stringliteral">&quot;:Unknown base type &quot;</span>,1);
<a name="l01352"></a>01352             }
<a name="l01353"></a>01353 
<a name="l01354"></a>01354           <span class="keywordflow">else</span>
<a name="l01355"></a>01355             error(<span class="stringliteral">&quot;&lt;simpleContent&gt; :&quot;</span> + xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i) +
<a name="l01356"></a>01356                   <span class="stringliteral">&quot;:Unknown/Unsupported  attribute &quot;</span>,2);
<a name="l01357"></a>01357         }
<a name="l01358"></a>01358       parseRestriction(st,ct);
<a name="l01359"></a>01359       <span class="keywordtype">int</span> typeId = typesTable_.addType(st);
<a name="l01360"></a>01360       ct-&gt;setSimpleContentType(typeId);
<a name="l01361"></a>01361     }
<a name="l01362"></a>01362 
<a name="l01363"></a>01363   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;extension&quot;</span>)
<a name="l01364"></a>01364     {
<a name="l01365"></a>01365       <span class="comment">//This extension does not use the full model that can come in</span>
<a name="l01366"></a>01366       <span class="comment">//ComplexContent .It uses the simple model.no particle allowed ,only attributes</span>
<a name="l01367"></a>01367       <span class="keywordtype">int</span> attcnt = xParser_-&gt;<a class="code" href="classXmlPullParser.html#afa91180fecdf4078ad07884f481eed86">getAttributeCount</a>();
<a name="l01368"></a>01368       <span class="keywordtype">int</span> basetype_id = 0;
<a name="l01369"></a>01369       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; attcnt; i++)
<a name="l01370"></a>01370         {
<a name="l01371"></a>01371           <span class="keywordflow">if</span> (<span class="stringliteral">&quot;base&quot;</span> == xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i))
<a name="l01372"></a>01372             {
<a name="l01373"></a>01373               <a class="code" href="classQname.html">Qname</a> typeName(xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i));
<a name="l01374"></a>01374               typeName.<a class="code" href="classQname.html#a1351793363ec2ed89910fc4f45ee36c1">setNamespace</a>(xParser_-&gt;
<a name="l01375"></a>01375                                     <a class="code" href="classSchema_1_1SchemaParser.html#a64e1a1534e45266a717fd1c52cbb337c">getNamespace</a>(typeName.<a class="code" href="classQname.html#a63ea9b0f43fa50e3a2ee6e35b50830e1">getPrefix</a>()));
<a name="l01376"></a>01376               ct-&gt;setSimpleContentType(basetype_id =
<a name="l01377"></a>01377                                        <a class="code" href="classSchema_1_1SchemaParser.html#ad8f407de76f38f1fa24c844faf9ca611">getTypeId</a>(typeName, <span class="keyword">true</span>));
<a name="l01378"></a>01378               <span class="keywordflow">if</span> (basetype_id == 0)
<a name="l01379"></a>01379                 error(<span class="stringliteral">&quot;&lt;simpleContent&gt; :&quot;</span> +
<a name="l01380"></a>01380                       xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(i) +
<a name="l01381"></a>01381                       <span class="stringliteral">&quot;:Unknown base type &quot;</span>,1);
<a name="l01382"></a>01382             }
<a name="l01383"></a>01383 
<a name="l01384"></a>01384           <span class="keywordflow">else</span>
<a name="l01385"></a>01385             error(<span class="stringliteral">&quot;&lt;simpleContent&gt; :&quot;</span> + xParser_-&gt;<a class="code" href="classXmlPullParser.html#aeae0b53785bfb92acaa86b9bf11a29de">getAttributeName</a>(i) +
<a name="l01386"></a>01386                   <span class="stringliteral">&quot;:Unknown/Unsupported  attribute &quot;</span>);
<a name="l01387"></a>01387         }
<a name="l01388"></a>01388       xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01389"></a>01389       <span class="keywordflow">do</span>
<a name="l01390"></a>01390         {
<a name="l01391"></a>01391           
<a name="l01392"></a>01392           <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;attribute&quot;</span>)
<a name="l01393"></a>01393             {
<a name="l01394"></a>01394               <span class="keywordtype">bool</span> f=<span class="keyword">false</span>;
<a name="l01395"></a>01395               Attribute a=parseAttribute(f);
<a name="l01396"></a>01396               ct-&gt;addAttribute(a,f);
<a name="l01397"></a>01397 
<a name="l01398"></a>01398 
<a name="l01399"></a>01399             }
<a name="l01400"></a>01400           <span class="keywordflow">else</span> <span class="keywordflow">if</span>(xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;attributeGroup&quot;</span>)
<a name="l01401"></a>01401             {
<a name="l01402"></a>01402               parseAttributeGroup(ct);
<a name="l01403"></a>01403 
<a name="l01404"></a>01404             }
<a name="l01405"></a>01405 
<a name="l01406"></a>01406           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;anyAttribute&quot;</span>)
<a name="l01407"></a>01407               addAnyAttribute(ct);
<a name="l01408"></a>01408           <span class="keywordflow">else</span>
<a name="l01409"></a>01409             <span class="keywordflow">break</span>;
<a name="l01410"></a>01410           xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01411"></a>01411         }<span class="keywordflow">while</span>(<span class="keyword">true</span>);
<a name="l01412"></a>01412       
<a name="l01413"></a>01413       <span class="keywordflow">if</span> (!
<a name="l01414"></a>01414           (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;extension&quot;</span>
<a name="l01415"></a>01415            &amp;&amp; xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>))
<a name="l01416"></a>01416         error(<span class="stringliteral">&quot;&lt;simpleContent&gt; :Syntax error :extension&quot;</span>);
<a name="l01417"></a>01417     }
<a name="l01418"></a>01418   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01419"></a>01419   <span class="keywordflow">if</span> (!
<a name="l01420"></a>01420       (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;simpleContent&quot;</span>
<a name="l01421"></a>01421        &amp;&amp; xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a01175879185048fcb8f34df520b2bfdb">END_TAG</a>))
<a name="l01422"></a>01422     error(<span class="stringliteral">&quot;&lt;simpleContent&gt; :Syntax error &quot;</span>);
<a name="l01423"></a>01423 }
<a name="l01424"></a>01424 
<a name="l01425"></a>01425 
<a name="l01426"></a>01426 <span class="keywordtype">bool</span>
<a name="l01427"></a>01427 SchemaParser::parseRedefine()
<a name="l01428"></a>01428 {
<a name="l01429"></a>01429   parseInclude();
<a name="l01430"></a>01430   resolveFwdRefs_=<span class="keyword">false</span>;
<a name="l01431"></a>01431   parseSchema(<span class="stringliteral">&quot;redefine&quot;</span>);
<a name="l01432"></a>01432   resolveFwdRefs_=<span class="keyword">true</span>;
<a name="l01433"></a>01433   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01434"></a>01434 }
<a name="l01435"></a>01435 
<a name="l01436"></a>01436 <span class="keywordtype">bool</span>
<a name="l01437"></a>01437 SchemaParser::parseInclude()
<a name="l01438"></a>01438 {
<a name="l01439"></a>01439   ifstream xsdStream;
<a name="l01440"></a>01440   std::string loc = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;schemaLocation&quot;</span>);
<a name="l01441"></a>01441 
<a name="l01442"></a>01442 
<a name="l01443"></a>01443   <span class="comment">// FV Sat Dec 22 15:33:09 CET 2007 I added the absolute path and the file:/ use-cases </span>
<a name="l01444"></a>01444   <span class="comment">//in the the test. Will not work for paths like &quot;C:\temp\schema.xsd&quot; .Use the file:/ protocol</span>
<a name="l01445"></a>01445 
<a name="l01446"></a>01446 
<a name="l01447"></a>01447   <span class="keywordflow">if</span> ( loc.find(<span class="stringliteral">&quot;/&quot;</span>,0)      != 0                 &amp;&amp;         <span class="comment">// not an asolute path</span>
<a name="l01448"></a>01448        loc.find(<span class="stringliteral">&quot;file:/&quot;</span>,0) == std::string::npos &amp;&amp;
<a name="l01449"></a>01449        loc.find(<span class="stringliteral">&quot;http://&quot;</span>)  == std::string::npos)
<a name="l01450"></a>01450     loc = uri_ + loc;
<a name="l01451"></a>01451 
<a name="l01452"></a>01452 
<a name="l01453"></a>01453 <span class="preprocessor">#ifndef _WIN32</span>
<a name="l01454"></a>01454 <span class="preprocessor"></span>  
<a name="l01455"></a>01455   <span class="keywordflow">if</span> (!loc.empty()) {
<a name="l01456"></a>01456     
<a name="l01457"></a>01457     std::string schemaconf= confPath_ + <span class="stringliteral">&quot;schema.conf&quot;</span>;
<a name="l01458"></a>01458     <span class="keywordflow">try</span> {
<a name="l01459"></a>01459     <a class="code" href="classConfigFile.html">ConfigFile</a> cf(schemaconf);
<a name="l01460"></a>01460     cf.readInto&lt;std::string&gt;(loc,loc);
<a name="l01461"></a>01461     }<span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="structConfigFile_1_1file__not__found.html">ConfigFile::file_not_found</a> &amp; e) {}
<a name="l01462"></a>01462   }
<a name="l01463"></a>01463 <span class="preprocessor">#endif</span>
<a name="l01464"></a>01464 <span class="preprocessor"></span>  
<a name="l01465"></a>01465   
<a name="l01466"></a>01466   <span class="keywordflow">if</span>(!loc.empty())
<a name="l01467"></a>01467     {
<a name="l01468"></a>01468       <span class="keywordflow">if</span>(<a class="code" href="namespaceXmlUtils.html#a49cb0c0850b4a22b1fe0d5efd7553b01">XmlUtils::fetchUri</a>(loc,fname_))
<a name="l01469"></a>01469         {
<a name="l01470"></a>01470           <span class="comment">/*</span>
<a name="l01471"></a>01471 <span class="comment">           * If the schema definition was retrieved successfully </span>
<a name="l01472"></a>01472 <span class="comment">           * process it and add all type definitions and</span>
<a name="l01473"></a>01473 <span class="comment">           * declaration to the current namespace</span>
<a name="l01474"></a>01474 <span class="comment">           */</span>
<a name="l01475"></a>01475         xsdStream.open(fname_.c_str());
<a name="l01476"></a>01476             
<a name="l01477"></a>01477           <a class="code" href="classXmlPullParser.html">XmlPullParser</a> * xpp = <span class="keyword">new</span> <a class="code" href="classXmlPullParser.html">XmlPullParser</a>(xsdStream);
<a name="l01478"></a>01478           <a class="code" href="classXmlPullParser.html">XmlPullParser</a> * tmpXparser=xParser_;
<a name="l01479"></a>01479           xParser_=xpp;
<a name="l01480"></a>01480 
<a name="l01481"></a>01481           xParser_-&gt;<a class="code" href="classXmlPullParser.html#afd20dea242da6a493321050f24230b54">setFeature</a>(<a class="code" href="XmlPullParser_8h.html#ada32f6169a51300722b9b7dd38fa4032">FEATURE_PROCESS_NAMESPACES</a>, <span class="keyword">true</span>);
<a name="l01482"></a>01482           xParser_-&gt;<a class="code" href="classXmlPullParser.html#a7b14708ef982d48b41009380146f523a">require</a>(<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a9a40df5e7fdb1a29f88425ef3eb8c1fa">XmlPullParser::START_DOCUMENT</a>, <span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;&quot;</span>);
<a name="l01483"></a>01483           <span class="keywordflow">while</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() != xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a7857338db3efb0bcd468b06fe346076f">END_DOCUMENT</a>){ 
<a name="l01484"></a>01484             xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01485"></a>01485             <span class="keywordflow">if</span> (xParser_-&gt;<a class="code" href="classXmlPullParser.html#a707466b0d0f10ead2266a750ad84278f">getEventType</a>() == xParser_-&gt;<a class="code" href="classXmlPullParser.html#ad5db81dea47b59d1aab8e24ca78baf45a9b3020c88a2935db197d7a72cf36067c">START_TAG</a> &amp;&amp;
<a name="l01486"></a>01486                 xParser_-&gt;<a class="code" href="classXmlPullParser.html#a861f8c8b5b08ab96fb7c33756f7cc94d">getName</a>() == <span class="stringliteral">&quot;schema&quot;</span>){
<a name="l01487"></a>01487               resolveFwdRefs_=<span class="keyword">false</span>;
<a name="l01488"></a>01488                    
<a name="l01489"></a>01489               <span class="keywordflow">if</span>(!<a class="code" href="classSchema_1_1SchemaParser.html#a6f1dddf50bcb4dec24df5334971400c0">parseSchemaTag</a>())
<a name="l01490"></a>01490                 error(<span class="stringliteral">&quot;Error while parsing the included schema &quot;</span> + loc);
<a name="l01491"></a>01491               <span class="keywordflow">else</span>{
<a name="l01492"></a>01492 
<a name="l01493"></a>01493                 resolveFwdRefs_=<span class="keyword">true</span>;  
<a name="l01494"></a>01494                 <span class="keywordflow">break</span>;
<a name="l01495"></a>01495               }
<a name="l01496"></a>01496             }
<a name="l01497"></a>01497           }
<a name="l01498"></a>01498           xParser_=tmpXparser;
<a name="l01499"></a>01499           <span class="keyword">delete</span> xpp;
<a name="l01500"></a>01500         }
<a name="l01501"></a>01501       <span class="keywordflow">else</span>{
<a name="l01502"></a>01502           
<a name="l01503"></a>01503           error(<span class="stringliteral">&quot;Error while opening the included schema &quot;</span> + loc);
<a name="l01504"></a>01504         }
<a name="l01505"></a>01505     }
<a name="l01506"></a>01506   <span class="keywordflow">else</span>{
<a name="l01507"></a>01507 
<a name="l01508"></a>01508       error(<span class="stringliteral">&quot;schemaLocation is a required attribute for &lt;include&gt;&quot;</span>);
<a name="l01509"></a>01509     }
<a name="l01510"></a>01510           
<a name="l01511"></a>01511   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01512"></a>01512   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01513"></a>01513 }
<a name="l01514"></a>01514 
<a name="l01515"></a>01515 <span class="keywordtype">bool</span>
<a name="l01516"></a>01516 SchemaParser::parseImport()
<a name="l01517"></a>01517 {
<a name="l01518"></a>01518   <a class="code" href="classQname.html">Qname</a> typeName;
<a name="l01519"></a>01519   std::string xsdFile;
<a name="l01520"></a>01520   std::string ns = xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;namespace&quot;</span>);
<a name="l01521"></a>01521   std::string loc=xParser_-&gt;<a class="code" href="classXmlPullParser.html#abcadde67a15be58a4eac0b4592b2e645">getAttributeValue</a>(<span class="stringliteral">&quot;&quot;</span>, <span class="stringliteral">&quot;schemaLocation&quot;</span>);
<a name="l01522"></a>01522 
<a name="l01523"></a>01523   <span class="keywordflow">if</span>(ns == tnsUri_)
<a name="l01524"></a>01524     <span class="keywordflow">return</span> parseInclude();<span class="comment">//sometimes import is used to import schemas in same ns.</span>
<a name="l01525"></a>01525                           <span class="comment">//treat it internally like include</span>
<a name="l01526"></a>01526 
<a name="l01527"></a>01527   <span class="comment">//  if (loc.empty()) </span>
<a name="l01528"></a>01528   <span class="comment">//    loc = ns; //try using the namespace as schemalocation</span>
<a name="l01529"></a>01529   
<a name="l01530"></a>01530   <span class="comment">// FV Sat Dec 22 15:33:09 CET 2007 I added the absolute path and the file:/ use-cases in the the test</span>
<a name="l01531"></a>01531 <span class="comment">//   if ( !loc.empty() &amp;&amp; loc.find(&quot;http://&quot;) == std::string::npos)</span>
<a name="l01532"></a>01532 <span class="comment">//      loc = uri_ + loc;</span>
<a name="l01533"></a>01533 
<a name="l01534"></a>01534   <span class="keywordflow">if</span> ( !loc.empty() &amp;&amp;
<a name="l01535"></a>01535        loc.find(<span class="stringliteral">&quot;/&quot;</span>,0)      != 0                 &amp;&amp;         <span class="comment">// no an asolute path</span>
<a name="l01536"></a>01536        loc.find(<span class="stringliteral">&quot;file:/&quot;</span>,0) == std::string::npos &amp;&amp;
<a name="l01537"></a>01537        loc.find(<span class="stringliteral">&quot;http://&quot;</span>)  == std::string::npos)
<a name="l01538"></a>01538     loc = uri_ + loc;
<a name="l01539"></a>01539   
<a name="l01540"></a>01540 <span class="preprocessor">#ifndef _WIN32 </span>
<a name="l01541"></a>01541 <span class="preprocessor"></span>  <span class="keywordflow">if</span> (!loc.empty()) {
<a name="l01542"></a>01542     
<a name="l01543"></a>01543     std::string schemaconf= confPath_ + <span class="stringliteral">&quot;schema.conf&quot;</span>;
<a name="l01544"></a>01544     <span class="keywordflow">try</span> {
<a name="l01545"></a>01545       <a class="code" href="classConfigFile.html">ConfigFile</a> cf(schemaconf);
<a name="l01546"></a>01546       cf.readInto&lt;std::string&gt;(loc,loc);
<a name="l01547"></a>01547     }<span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="structConfigFile_1_1file__not__found.html">ConfigFile::file_not_found</a> &amp;e) {}
<a name="l01548"></a>01548   }
<a name="l01549"></a>01549 <span class="preprocessor">#endif</span>
<a name="l01550"></a>01550 <span class="preprocessor"></span>  
<a name="l01551"></a>01551   <span class="keywordflow">if</span>(!loc.empty())
<a name="l01552"></a>01552     {
<a name="l01553"></a>01553       <span class="keywordflow">if</span>(<a class="code" href="namespaceXmlUtils.html#a49cb0c0850b4a22b1fe0d5efd7553b01">XmlUtils::fetchUri</a>(loc,xsdFile))
<a name="l01554"></a>01554         {
<a name="l01555"></a>01555           <span class="comment">/*</span>
<a name="l01556"></a>01556 <span class="comment">           * If the schema definition was retrieved successfully </span>
<a name="l01557"></a>01557 <span class="comment">           * process it and add it to list of imported schemas</span>
<a name="l01558"></a>01558 <span class="comment">           */</span>
<a name="l01559"></a>01559           <a class="code" href="classSchema_1_1SchemaParser.html#a1c3f89d88098fdaee9705dd2b599819e">SchemaParser</a> *sp = <span class="keyword">new</span> <a class="code" href="classSchema_1_1SchemaParser.html#a1c3f89d88098fdaee9705dd2b599819e">SchemaParser</a>(xsdFile,ns);
<a name="l01560"></a>01560           sp-&gt;setUri(uri_);
<a name="l01561"></a>01561           <span class="comment">//pass the imports to the new schema parser</span>
<a name="l01562"></a>01562           <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; importedSchemas_.size(); i++) {
<a name="l01563"></a>01563         
<a name="l01564"></a>01564             <span class="keywordflow">if</span>(importedSchemas_[i].sParser ) {
<a name="l01565"></a>01565               sp-&gt;addImport(importedSchemas_[i].sParser);
<a name="l01566"></a>01566             }
<a name="l01567"></a>01567           }
<a name="l01568"></a>01568 
<a name="l01569"></a>01569           <span class="keywordflow">if</span>(sp-&gt;parseSchemaTag())
<a name="l01570"></a>01570             <a class="code" href="classSchema_1_1SchemaParser.html#af01538823b660050028b2b52071f031f">addImport</a>(sp);
<a name="l01571"></a>01571           <span class="keywordflow">else</span>
<a name="l01572"></a>01572             error(<span class="stringliteral">&quot;Error while parsing imported namespace &quot;</span>+ns,0);
<a name="l01573"></a>01573                
<a name="l01574"></a>01574         }
<a name="l01575"></a>01575       <span class="keywordflow">else</span>{
<a name="l01576"></a>01576         
<a name="l01577"></a>01577         error(<span class="stringliteral">&quot;could not import namespace from location &quot;</span>+loc);
<a name="l01578"></a>01578       }
<a name="l01579"></a>01579     }
<a name="l01580"></a>01580   <span class="keywordflow">else</span>{
<a name="l01581"></a>01581     <span class="comment">// if no location is mentioned ,just add the namespace,types will be resolved later</span>
<a name="l01582"></a>01582     
<a name="l01583"></a>01583     <a class="code" href="classSchema_1_1SchemaParser.html#af01538823b660050028b2b52071f031f">addImport</a>(ns);
<a name="l01584"></a>01584   }
<a name="l01585"></a>01585 
<a name="l01586"></a>01586   error(<span class="stringliteral">&quot;Imported namespace &quot;</span>+ns+<span class="stringliteral">&quot;  from &quot;</span> + loc,2);
<a name="l01587"></a>01587 
<a name="l01588"></a>01588   <span class="keywordflow">if</span> (loc.empty()) 
<a name="l01589"></a>01589     error(<span class="stringliteral">&quot;No location supplied for the import&quot;</span>+ns,2);
<a name="l01590"></a>01590 
<a name="l01591"></a>01591   xParser_-&gt;<a class="code" href="classXmlPullParser.html#a12e19fdc259b06078316b861cfaac791">nextTag</a>();
<a name="l01592"></a>01592   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01593"></a>01593 }
<a name="l01594"></a>01594 
<a name="l01595"></a><a class="code" href="classSchema_1_1SchemaParser.html#adea72dec2bf6296659459642d4291b86">01595</a> <span class="keywordtype">bool</span> <a class="code" href="classSchema_1_1SchemaParser.html#adea72dec2bf6296659459642d4291b86">SchemaParser::isBasicType</a>(<span class="keywordtype">int</span> sType)<span class="keyword"> const</span>
<a name="l01596"></a>01596 <span class="keyword"></span>{
<a name="l01597"></a>01597   <span class="keywordflow">if</span> (sType &gt; <a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711dafe1e2787d9278ac67be79e01f93f40a5">Schema::XSD_ANYURI</a> || sType &lt;= <a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711da0c01ff4fc47f2f6e148f3bc01aee7caf">Schema::XSD_INVALID</a>)
<a name="l01598"></a>01598     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01599"></a>01599 
<a name="l01600"></a>01600   <span class="keywordflow">else</span>
<a name="l01601"></a>01601     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01602"></a>01602 }
<a name="l01603"></a>01603 
<a name="l01604"></a>01604 
<a name="l01605"></a>01605 <span class="comment">//This function gets the id of a type whose Qname is passed.</span>
<a name="l01606"></a>01606 <span class="comment">//The Qname struct if it has a prefix must either be a valid namespace</span>
<a name="l01607"></a>01607 <span class="comment">//default is http://www.w3.org/2001/XMLSchema</span>
<a name="l01608"></a>01608 <span class="comment">//This function has two modes</span>
<a name="l01609"></a>01609 <span class="comment">//if &#39;create&#39; is true a new type is created (for fwd references)</span>
<a name="l01610"></a>01610 <span class="comment">//otherwise the existing list of parsed types is used for resolution</span>
<a name="l01611"></a>01611 
<a name="l01612"></a>01612 <span class="keywordtype">int</span>
<a name="l01613"></a><a class="code" href="classSchema_1_1SchemaParser.html#ad8f407de76f38f1fa24c844faf9ca611">01613</a> <a class="code" href="classSchema_1_1SchemaParser.html#ad8f407de76f38f1fa24c844faf9ca611">SchemaParser::getTypeId</a>( <span class="keyword">const</span> <a class="code" href="classQname.html">Qname</a> &amp;  type, <span class="keywordtype">bool</span> create)
<a name="l01614"></a>01614 {
<a name="l01615"></a>01615   std::string typens = type.<a class="code" href="classQname.html#ab7b6decf0167443096f034cd33c7d839">getNamespace</a>();
<a name="l01616"></a>01616   <span class="keywordflow">if</span> (typens.empty()||
<a name="l01617"></a>01617       typens == tnsUri_ ||
<a name="l01618"></a>01618       typens == <a class="code" href="namespaceSchema.html#a72d35008bb7fd2d8627e8347240e7d98">Schema::SchemaUri</a>){
<a name="l01619"></a>01619 
<a name="l01620"></a>01620     <span class="keywordflow">return</span> typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#ae38cc3b4c35b897ae0e690ff2d6d8681">getTypeId</a>(type, create);
<a name="l01621"></a>01621   }
<a name="l01622"></a>01622   <span class="keywordflow">else</span> {
<a name="l01623"></a>01623     <span class="comment">//postpone resolution till matchExtRefs is called</span>
<a name="l01624"></a>01624     <span class="keywordflow">if</span> (importedSchemas_.size() == 0  &amp;&amp; create) {                
<a name="l01625"></a>01625       
<a name="l01626"></a>01626       <span class="keywordflow">return</span> typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#abe499b2221b242a9c604c7d41cc4c28a">addExternalTypeId</a>(type, 0);
<a name="l01627"></a>01627     }
<a name="l01628"></a>01628 
<a name="l01629"></a>01629     <span class="comment">//search in the array of imported schemas</span>
<a name="l01630"></a>01630     <span class="keywordtype">int</span> typeId = 0;
<a name="l01631"></a>01631     <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; importedSchemas_.size(); i++) {
<a name="l01632"></a>01632         
<a name="l01633"></a>01633       <span class="keywordflow">if</span> ( importedSchemas_[i].ns == type.<a class="code" href="classQname.html#ab7b6decf0167443096f034cd33c7d839">getNamespace</a>()) {
<a name="l01634"></a>01634 
<a name="l01635"></a>01635         <span class="keywordflow">if</span>(importedSchemas_[i].sParser ) {
<a name="l01636"></a>01636 
<a name="l01637"></a>01637           typeId = importedSchemas_[i].sParser-&gt;getTypeId(type, <span class="keyword">false</span>);
<a name="l01638"></a>01638           <span class="comment">//get the type definition from the imported namespace schema parser and </span>
<a name="l01639"></a>01639           <span class="comment">// add a reference to the current schema parser</span>
<a name="l01640"></a>01640           <span class="keywordflow">if</span> (typeId) {
<a name="l01641"></a>01641             <span class="keywordflow">return</span> typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#abe499b2221b242a9c604c7d41cc4c28a">addExternalTypeId</a>(type,
<a name="l01642"></a>01642                                                  (<a class="code" href="classSchema_1_1XSDType.html">XSDType</a> *) importedSchemas_[i].sParser-&gt;getType(typeId));
<a name="l01643"></a>01643           }
<a name="l01644"></a>01644           <span class="keywordflow">else</span>
<a name="l01645"></a>01645             <span class="keywordflow">return</span> 0;
<a name="l01646"></a>01646         }
<a name="l01647"></a>01647       }
<a name="l01648"></a>01648     }
<a name="l01649"></a>01649     <span class="keywordflow">if</span> (create){
<a name="l01650"></a>01650           <span class="comment">//automatically add an unreferenced namespace as an import</span>
<a name="l01651"></a>01651       <a class="code" href="classSchema_1_1SchemaParser.html#af01538823b660050028b2b52071f031f">addImport</a>(type.<a class="code" href="classQname.html#ab7b6decf0167443096f034cd33c7d839">getNamespace</a>()); 
<a name="l01652"></a>01652       <span class="keywordflow">return</span> typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#abe499b2221b242a9c604c7d41cc4c28a">addExternalTypeId</a>(type, 0);
<a name="l01653"></a>01653         }
<a name="l01654"></a>01654   }
<a name="l01655"></a>01655   <span class="keywordflow">return</span> <a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711da0c01ff4fc47f2f6e148f3bc01aee7caf">XSD_INVALID</a>;
<a name="l01656"></a>01656 }
<a name="l01657"></a>01657 
<a name="l01658"></a>01658 
<a name="l01659"></a>01659 <span class="comment">//resolves any external references with  the imported schemas</span>
<a name="l01660"></a>01660 <span class="comment">//This method must be called to ensure resolution of all types</span>
<a name="l01661"></a><a class="code" href="classSchema_1_1SchemaParser.html#a14b7afa532833ecace14459384ec6a74">01661</a> <span class="keywordtype">bool</span> <a class="code" href="classSchema_1_1SchemaParser.html#a14b7afa532833ecace14459384ec6a74">SchemaParser::finalize</a>(<span class="keywordtype">void</span>)
<a name="l01662"></a>01662 {
<a name="l01663"></a>01663   <span class="keywordtype">int</span> unresolved=typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#a87f56d64bb7f5d9faaafad78ae5450cb">getNumExtRefs</a>();
<a name="l01664"></a>01664   <span class="keywordflow">if</span>(unresolved &gt; 0) {
<a name="l01665"></a>01665     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; unresolved; i++){
<a name="l01666"></a>01666     
<a name="l01667"></a>01667       <a class="code" href="classQname.html">Qname</a> &amp; type = typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#ae15e67210a022d01e67d6447f9d67502">getExtRefName</a>(i);
<a name="l01668"></a>01668       <span class="keywordtype">int</span> localId = typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#ac95151c9d7ceb76348d8047fad31d34d">getExtRefType</a>(i);
<a name="l01669"></a>01669 
<a name="l01670"></a>01670       <span class="comment">//search in the array of imported schemas</span>
<a name="l01671"></a>01671       <span class="keywordtype">int</span> typeId = 0;
<a name="l01672"></a>01672       <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> n = 0; n &lt; importedSchemas_.size(); n++)
<a name="l01673"></a>01673         {
<a name="l01674"></a>01674           <span class="keywordflow">if</span> (importedSchemas_[n].ns == type.<a class="code" href="classQname.html#ab7b6decf0167443096f034cd33c7d839">getNamespace</a>())
<a name="l01675"></a>01675             {
<a name="l01676"></a>01676               <span class="keywordflow">if</span>(importedSchemas_[n].sParser){
<a name="l01677"></a>01677                 typeId = importedSchemas_[n].sParser-&gt;getTypeId(type);
<a name="l01678"></a>01678                 <span class="keywordflow">if</span> (typeId != 0)
<a name="l01679"></a>01679                   typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#a79c431d07d932c20b7381ba72ebb4cdb">addExtType</a>((<a class="code" href="classSchema_1_1XSDType.html">XSDType</a> *) importedSchemas_[n].sParser-&gt;getType(typeId),
<a name="l01680"></a>01680                                          localId);
<a name="l01681"></a>01681               }
<a name="l01682"></a>01682             }
<a name="l01683"></a>01683         }
<a name="l01684"></a>01684       
<a name="l01685"></a>01685       <span class="keywordflow">if</span> (typeId == 0) {
<a name="l01686"></a>01686         
<a name="l01687"></a>01687         logFile_&lt;&lt;<span class="stringliteral">&quot;Undefined type &quot;</span>&lt;&lt;type&lt;&lt;std::endl;
<a name="l01688"></a>01688       }
<a name="l01689"></a>01689     }
<a name="l01690"></a>01690   }
<a name="l01691"></a>01691   <span class="keywordflow">if</span> (typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#a4236e1822d56c6a4bb0ed6f1262e9f0b">detectUndefinedTypes</a>())
<a name="l01692"></a>01692     {
<a name="l01693"></a>01693       typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#af17e89b141f33901fd8adcd93d295502">printUndefinedTypes</a>(logFile_);logFile_.flush();
<a name="l01694"></a>01694       logFile_&lt;&lt;<span class="stringliteral">&quot;Unresolved types in namespace &quot;</span>&lt;&lt;tnsUri_&lt;&lt;std::endl;
<a name="l01695"></a>01695       <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01696"></a>01696     }
<a name="l01697"></a>01697 
<a name="l01698"></a>01698   <span class="keywordflow">else</span>{
<a name="l01699"></a>01699     
<a name="l01700"></a>01700     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01701"></a>01701   }
<a name="l01702"></a>01702   
<a name="l01703"></a>01703 }
<a name="l01704"></a>01704 
<a name="l01705"></a>01705 
<a name="l01706"></a>01706 <span class="comment">//resolves any forward references of the kind&lt;element ref=Qname... &gt;</span>
<a name="l01707"></a>01707 <span class="keywordtype">void</span>
<a name="l01708"></a>01708 SchemaParser::resolveForwardElementRefs()
<a name="l01709"></a>01709 {
<a name="l01710"></a>01710   <span class="keywordtype">bool</span> errors=<span class="keyword">false</span>;
<a name="l01711"></a>01711   <span class="keywordflow">if</span> (lForwardElemRefs_.empty())
<a name="l01712"></a>01712     <span class="keywordflow">return</span>;
<a name="l01713"></a>01713   <span class="keywordflow">for</span> (list &lt; Qname &gt;::iterator pQnames = lForwardElemRefs_.begin();
<a name="l01714"></a>01714        pQnames != lForwardElemRefs_.end(); pQnames++) {
<a name="l01715"></a>01715     
<a name="l01716"></a>01716     <span class="comment">// cout&lt;&lt;*pQnames&lt;&lt;std::endl;</span>
<a name="l01717"></a>01717     <a class="code" href="classSchema_1_1Element.html">Element</a> *e = <span class="keyword">const_cast&lt;</span><a class="code" href="classSchema_1_1Element.html">Element</a>*<span class="keyword">&gt;</span>(<a class="code" href="classSchema_1_1SchemaParser.html#aa11d8f9bf85870304ab35e387fd486b1">getElement</a>(*pQnames));
<a name="l01718"></a>01718     <span class="comment">//TODO , in case the forward ref is in an imported schema we cant just copy the type id</span>
<a name="l01719"></a>01719     <span class="comment">//it needs to be changed to make it a valid type id in current schema</span>
<a name="l01720"></a>01720     <span class="keywordflow">if</span> (e)
<a name="l01721"></a>01721       typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#a5214c2e934cf4816754827be6eb621c9">resolveForwardElementRefs</a>(pQnames-&gt;getLocalName(),*e);
<a name="l01722"></a>01722     <span class="keywordflow">else</span> {
<a name="l01723"></a>01723       error(<span class="stringliteral">&quot;Could not resolve element reference &quot;</span>+pQnames-&gt;getLocalName(),1);
<a name="l01724"></a>01724       errors=<span class="keyword">true</span>;
<a name="l01725"></a>01725     }
<a name="l01726"></a>01726   }
<a name="l01727"></a>01727   <span class="keywordflow">if</span>(errors)
<a name="l01728"></a>01728     error(<span class="stringliteral">&quot;Unresolved element references&quot;</span>,1);
<a name="l01729"></a>01729 }
<a name="l01730"></a>01730 
<a name="l01731"></a>01731 
<a name="l01732"></a>01732 <span class="keywordtype">void</span>
<a name="l01733"></a>01733 SchemaParser::resolveForwardAttributeRefs()
<a name="l01734"></a>01734 {
<a name="l01735"></a>01735   <span class="keywordtype">bool</span> errors=<span class="keyword">false</span>;
<a name="l01736"></a>01736   <span class="keywordflow">if</span> (lForwardAttributeRefs_.empty())
<a name="l01737"></a>01737     <span class="keywordflow">return</span>;
<a name="l01738"></a>01738   <span class="keywordflow">for</span> (list &lt; Qname &gt;::iterator pQnames = lForwardAttributeRefs_.begin();
<a name="l01739"></a>01739        pQnames != lForwardAttributeRefs_.end(); pQnames++)
<a name="l01740"></a>01740     {
<a name="l01741"></a>01741       Attribute *a = <a class="code" href="classSchema_1_1SchemaParser.html#a47bd98ca4024da64894ed46ade0f9554">getAttribute</a>(*pQnames);
<a name="l01742"></a>01742       <span class="keywordflow">if</span> (a)
<a name="l01743"></a>01743         typesTable_.resolveForwardAttributeRefs(pQnames-&gt; getLocalName(), *a);
<a name="l01744"></a>01744       <span class="keywordflow">else</span> {
<a name="l01745"></a>01745         error(<span class="stringliteral">&quot;Could not resolve attribute reference  {&quot;</span>+pQnames-&gt;getNamespace()
<a name="l01746"></a>01746                +<span class="stringliteral">&quot;}&quot;</span>+pQnames-&gt;getLocalName(),1);
<a name="l01747"></a>01747         errors=<span class="keyword">true</span>;
<a name="l01748"></a>01748       }
<a name="l01749"></a>01749     }
<a name="l01750"></a>01750   <span class="keywordflow">if</span>(errors)
<a name="l01751"></a>01751     error(<span class="stringliteral">&quot;Unresolved attributes references&quot;</span>);
<a name="l01752"></a>01752 }
<a name="l01753"></a>01753 
<a name="l01754"></a>01754 
<a name="l01755"></a>01755 <span class="comment">//get the element id of a globally declared element</span>
<a name="l01756"></a>01756 <span class="keyword">const</span> Element*
<a name="l01757"></a><a class="code" href="classSchema_1_1SchemaParser.html#aa11d8f9bf85870304ab35e387fd486b1">01757</a> <a class="code" href="classSchema_1_1SchemaParser.html#aa11d8f9bf85870304ab35e387fd486b1">SchemaParser::getElement</a>(<span class="keyword">const</span> <a class="code" href="classQname.html">Qname</a> &amp; element,<span class="keywordtype">bool</span> checkImports)<span class="keyword">const</span>
<a name="l01758"></a>01758 <span class="keyword"></span>{
<a name="l01759"></a>01759   std::string typens = element.<a class="code" href="classQname.html#ab7b6decf0167443096f034cd33c7d839">getNamespace</a>();
<a name="l01760"></a>01760   <span class="keywordflow">if</span> (typens.empty())
<a name="l01761"></a>01761     typens = tnsUri_;
<a name="l01762"></a>01762   <span class="keywordflow">if</span> (typens== tnsUri_ || typens == <a class="code" href="namespaceSchema.html#a72d35008bb7fd2d8627e8347240e7d98">Schema::SchemaUri</a>)
<a name="l01763"></a>01763     {
<a name="l01764"></a>01764       <span class="keywordtype">int</span> i = 0;
<a name="l01765"></a>01765       <span class="comment">//check if it is a global element</span>
<a name="l01766"></a>01766       <span class="keywordflow">for</span> (std::list&lt;Element&gt;::const_iterator eli=lElems_.begin();
<a name="l01767"></a>01767            eli!= lElems_.end();
<a name="l01768"></a>01768            eli++,i++)
<a name="l01769"></a>01769         <span class="keywordflow">if</span> (eli-&gt;getName() == element.<a class="code" href="classQname.html#acc177c6742061f76a3f09a3898256bf2">getLocalName</a>())
<a name="l01770"></a>01770           <span class="keywordflow">return</span> &amp;(*eli);
<a name="l01771"></a>01771       <span class="keywordflow">return</span> 0;
<a name="l01772"></a>01772     }
<a name="l01773"></a>01773   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkImports)
<a name="l01774"></a>01774     { <span class="comment">//search imported namespaces</span>
<a name="l01775"></a>01775       <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; importedSchemas_.size(); i++)
<a name="l01776"></a>01776         {
<a name="l01777"></a>01777           <span class="keywordflow">if</span> ( importedSchemas_[i].ns == typens)
<a name="l01778"></a>01778             {
<a name="l01779"></a>01779               <span class="keywordflow">if</span>(importedSchemas_[i].sParser )
<a name="l01780"></a>01780                 {
<a name="l01781"></a>01781                   <span class="keywordflow">return</span> importedSchemas_[i].sParser-&gt;getElement(element);
<a name="l01782"></a>01782                 }
<a name="l01783"></a>01783             }
<a name="l01784"></a>01784         }
<a name="l01785"></a>01785     }
<a name="l01786"></a>01786   <span class="keywordflow">return</span> 0;
<a name="l01787"></a>01787 }
<a name="l01788"></a>01788 
<a name="l01789"></a>01789 <span class="comment">//get the attribute id of a globally declared attribute</span>
<a name="l01790"></a>01790 <a class="code" href="classSchema_1_1Attribute.html">Attribute</a>*
<a name="l01791"></a><a class="code" href="classSchema_1_1SchemaParser.html#a47bd98ca4024da64894ed46ade0f9554">01791</a> <a class="code" href="classSchema_1_1SchemaParser.html#a47bd98ca4024da64894ed46ade0f9554">SchemaParser::getAttribute</a>(<span class="keyword">const</span> <a class="code" href="classQname.html">Qname</a> &amp; attribute)
<a name="l01792"></a>01792 {
<a name="l01793"></a>01793   std::string typens = attribute.<a class="code" href="classQname.html#ab7b6decf0167443096f034cd33c7d839">getNamespace</a>();
<a name="l01794"></a>01794   <span class="keywordflow">if</span> (typens.empty())
<a name="l01795"></a>01795     typens = tnsUri_;
<a name="l01796"></a>01796   
<a name="l01797"></a>01797   <span class="keywordflow">if</span> (typens == tnsUri_ || typens == <a class="code" href="namespaceSchema.html#a72d35008bb7fd2d8627e8347240e7d98">Schema::SchemaUri</a>) {
<a name="l01798"></a>01798     <span class="comment">//check if it is a global attribute</span>
<a name="l01799"></a>01799     <span class="keywordflow">for</span>(std::list&lt;Attribute&gt;::iterator ali=lAttributes_.begin();
<a name="l01800"></a>01800         ali!=lAttributes_.end();
<a name="l01801"></a>01801         ali++)
<a name="l01802"></a>01802       <span class="keywordflow">if</span> (ali-&gt;getName() == attribute.<a class="code" href="classQname.html#acc177c6742061f76a3f09a3898256bf2">getLocalName</a>())
<a name="l01803"></a>01803         <span class="keywordflow">return</span> &amp;(*ali);
<a name="l01804"></a>01804   }<span class="keywordflow">else</span> {
<a name="l01805"></a>01805     <span class="comment">//search imported namespaces</span>
<a name="l01806"></a>01806     <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; importedSchemas_.size(); i++)
<a name="l01807"></a>01807       {
<a name="l01808"></a>01808         <span class="keywordflow">if</span> ( importedSchemas_[i].ns == typens)
<a name="l01809"></a>01809           {
<a name="l01810"></a>01810             <span class="keywordflow">if</span>(importedSchemas_[i].sParser )
<a name="l01811"></a>01811               {
<a name="l01812"></a>01812                 <span class="keywordflow">return</span> importedSchemas_[i].sParser-&gt;getAttribute(attribute);
<a name="l01813"></a>01813               }
<a name="l01814"></a>01814           }
<a name="l01815"></a>01815       }
<a name="l01816"></a>01816   }
<a name="l01817"></a>01817   <span class="keywordflow">return</span> 0;
<a name="l01818"></a>01818 }
<a name="l01819"></a>01819 
<a name="l01820"></a>01820 <span class="comment">//get the element id of a globally declared element</span>
<a name="l01821"></a>01821 <a class="code" href="classSchema_1_1Group.html">Group</a>*
<a name="l01822"></a><a class="code" href="classSchema_1_1SchemaParser.html#a0ebc5538bb373dd99c04b3485462acfa">01822</a> <a class="code" href="classSchema_1_1SchemaParser.html#a0ebc5538bb373dd99c04b3485462acfa">SchemaParser::getGroup</a>(<span class="keyword">const</span> <a class="code" href="classQname.html">Qname</a> &amp; name)
<a name="l01823"></a>01823 {
<a name="l01824"></a>01824   std::string typens = name.<a class="code" href="classQname.html#ab7b6decf0167443096f034cd33c7d839">getNamespace</a>();
<a name="l01825"></a>01825   <span class="keywordflow">if</span> (typens.empty())
<a name="l01826"></a>01826     typens = tnsUri_;
<a name="l01827"></a>01827   <span class="keywordflow">if</span> (typens== tnsUri_ || typens == <a class="code" href="namespaceSchema.html#a72d35008bb7fd2d8627e8347240e7d98">Schema::SchemaUri</a>)
<a name="l01828"></a>01828     {
<a name="l01829"></a>01829 
<a name="l01830"></a>01830       <span class="comment">//check if it is a global group</span>
<a name="l01831"></a>01831       <span class="keywordflow">for</span> (std::list&lt;Group&gt;::iterator gli =lGroups_.begin();
<a name="l01832"></a>01832            gli!= lGroups_.end();
<a name="l01833"></a>01833            gli++)
<a name="l01834"></a>01834         <span class="keywordflow">if</span> (gli-&gt;getName() == name.<a class="code" href="classQname.html#acc177c6742061f76a3f09a3898256bf2">getLocalName</a>())
<a name="l01835"></a>01835           <span class="keywordflow">return</span> &amp;(*gli);
<a name="l01836"></a>01836       <span class="keywordflow">return</span> 0;
<a name="l01837"></a>01837     }
<a name="l01838"></a>01838   <span class="keywordflow">else</span>
<a name="l01839"></a>01839     { <span class="comment">//search imported namespaces</span>
<a name="l01840"></a>01840       <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; importedSchemas_.size(); i++)
<a name="l01841"></a>01841         {
<a name="l01842"></a>01842           <span class="keywordflow">if</span> ( importedSchemas_[i].ns == typens)
<a name="l01843"></a>01843             {
<a name="l01844"></a>01844               <span class="keywordflow">if</span>(importedSchemas_[i].sParser )
<a name="l01845"></a>01845                 {
<a name="l01846"></a>01846                   <span class="keywordflow">return</span> importedSchemas_[i].sParser-&gt;getGroup(name);
<a name="l01847"></a>01847                 }
<a name="l01848"></a>01848             }
<a name="l01849"></a>01849         }
<a name="l01850"></a>01850     }
<a name="l01851"></a>01851   <span class="keywordflow">return</span> 0;
<a name="l01852"></a>01852 }
<a name="l01853"></a>01853 
<a name="l01854"></a>01854 <a class="code" href="classSchema_1_1AttributeGroup.html">AttributeGroup</a>*
<a name="l01855"></a><a class="code" href="classSchema_1_1SchemaParser.html#af7b03dfae9c493636019f1851a57e6f5">01855</a> <a class="code" href="classSchema_1_1SchemaParser.html#af7b03dfae9c493636019f1851a57e6f5">SchemaParser::getAttributeGroup</a>(<span class="keyword">const</span> <a class="code" href="classQname.html">Qname</a> &amp; name)
<a name="l01856"></a>01856 {
<a name="l01857"></a>01857   std::string typens = name.<a class="code" href="classQname.html#ab7b6decf0167443096f034cd33c7d839">getNamespace</a>();
<a name="l01858"></a>01858   <span class="keywordflow">if</span> (typens.empty())
<a name="l01859"></a>01859     typens = tnsUri_;
<a name="l01860"></a>01860   <span class="keywordflow">if</span> (typens== tnsUri_ || typens == <a class="code" href="namespaceSchema.html#a72d35008bb7fd2d8627e8347240e7d98">Schema::SchemaUri</a>)
<a name="l01861"></a>01861     {
<a name="l01862"></a>01862 
<a name="l01863"></a>01863       <span class="comment">//check if it is a global group</span>
<a name="l01864"></a>01864        <span class="keywordflow">for</span> (AttributeGroupList::iterator agli = lAttributeGroups_.begin();
<a name="l01865"></a>01865             agli!= lAttributeGroups_.end();
<a name="l01866"></a>01866             agli++)
<a name="l01867"></a>01867         <span class="keywordflow">if</span> ((*agli)-&gt;getName() == name.<a class="code" href="classQname.html#acc177c6742061f76a3f09a3898256bf2">getLocalName</a>())
<a name="l01868"></a>01868           <span class="keywordflow">return</span> (*agli);
<a name="l01869"></a>01869       <span class="keywordflow">return</span> 0;
<a name="l01870"></a>01870     }
<a name="l01871"></a>01871   <span class="keywordflow">else</span>
<a name="l01872"></a>01872     { <span class="comment">//search imported namespaces</span>
<a name="l01873"></a>01873       <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; importedSchemas_.size(); i++)
<a name="l01874"></a>01874         {
<a name="l01875"></a>01875           <span class="keywordflow">if</span> ( importedSchemas_[i].ns == typens)
<a name="l01876"></a>01876             {
<a name="l01877"></a>01877               <span class="keywordflow">if</span>(importedSchemas_[i].sParser )
<a name="l01878"></a>01878                 {
<a name="l01879"></a>01879                   <span class="keywordflow">return</span> importedSchemas_[i].sParser-&gt;getAttributeGroup(name);
<a name="l01880"></a>01880                 }
<a name="l01881"></a>01881             }
<a name="l01882"></a>01882         }
<a name="l01883"></a>01883     }
<a name="l01884"></a>01884   <span class="keywordflow">return</span> 0;
<a name="l01885"></a>01885 }
<a name="l01886"></a>01886 
<a name="l01887"></a>01887 std::string
<a name="l01888"></a><a class="code" href="classSchema_1_1SchemaParser.html#a64e1a1534e45266a717fd1c52cbb337c">01888</a> <a class="code" href="classSchema_1_1SchemaParser.html#a64e1a1534e45266a717fd1c52cbb337c">SchemaParser::getNamespace</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span>
<a name="l01889"></a>01889 <span class="keyword"></span>{
<a name="l01890"></a>01890   <span class="keywordflow">return</span> tnsUri_;
<a name="l01891"></a>01891 }
<a name="l01892"></a>01892 
<a name="l01893"></a>01893 
<a name="l01894"></a>01894 <span class="keyword">const</span> <a class="code" href="classSchema_1_1XSDType.html">XSDType</a> *
<a name="l01895"></a><a class="code" href="classSchema_1_1SchemaParser.html#ae544d4d2df1ca02efc42dfa9d5630d6c">01895</a> <a class="code" href="classSchema_1_1SchemaParser.html#a8f4e9997d8d4d84f37e33e425e3185c1">SchemaParser::getType</a>(<span class="keywordtype">int</span> <span class="keywordtype">id</span>)<span class="keyword"> const</span>
<a name="l01896"></a>01896 <span class="keyword"></span>{
<a name="l01897"></a>01897   <span class="keywordflow">return</span> (<span class="keyword">const</span> <a class="code" href="classSchema_1_1XSDType.html">XSDType</a> *) typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#a545c3d32a0232f75b47aeaeda6ff7bda">getTypePtr</a>(<span class="keywordtype">id</span>);
<a name="l01898"></a>01898 }
<a name="l01899"></a>01899 
<a name="l01900"></a>01900 
<a name="l01901"></a>01901 <span class="keyword">const</span> <a class="code" href="classSchema_1_1XSDType.html">XSDType</a> *
<a name="l01902"></a><a class="code" href="classSchema_1_1SchemaParser.html#a8f4e9997d8d4d84f37e33e425e3185c1">01902</a> <a class="code" href="classSchema_1_1SchemaParser.html#a8f4e9997d8d4d84f37e33e425e3185c1">SchemaParser::getType</a>(<span class="keyword">const</span> <a class="code" href="classQname.html">Qname</a> &amp; type,<span class="keywordtype">bool</span> checkImports ) 
<a name="l01903"></a>01903 {
<a name="l01904"></a>01904   <span class="keywordtype">int</span> id;
<a name="l01905"></a>01905   <a class="code" href="classQname.html">Qname</a> t=type;
<a name="l01906"></a>01906   
<a name="l01907"></a>01907   <span class="keywordflow">if</span>((<span class="keywordtype">id</span>=<a class="code" href="classSchema_1_1SchemaParser.html#ad8f407de76f38f1fa24c844faf9ca611">getTypeId</a>(t,<span class="keyword">false</span>))==0)
<a name="l01908"></a>01908     <span class="keywordflow">return</span> 0;
<a name="l01909"></a>01909   <span class="keywordflow">else</span> {
<a name="l01910"></a>01910     <span class="keyword">const</span> <a class="code" href="classSchema_1_1XSDType.html">XSDType</a>* pType = (<span class="keyword">const</span> <a class="code" href="classSchema_1_1XSDType.html">XSDType</a> *) typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#a545c3d32a0232f75b47aeaeda6ff7bda">getTypePtr</a>(<span class="keywordtype">id</span>);
<a name="l01911"></a>01911     <span class="keywordflow">if</span> (!checkImports) {
<a name="l01912"></a>01912 
<a name="l01913"></a>01913       <span class="keywordflow">if</span>(pType-&gt;<a class="code" href="classSchema_1_1XSDType.html#a0f61cf178c30a0afd00ef29ba82bcc98">getNamespace</a>() != tnsUri_)
<a name="l01914"></a>01914         <span class="keywordflow">return</span> 0;
<a name="l01915"></a>01915 
<a name="l01916"></a>01916     }
<a name="l01917"></a>01917     <span class="keywordflow">return</span> pType;
<a name="l01918"></a>01918    }
<a name="l01919"></a>01919 }
<a name="l01920"></a>01920 
<a name="l01921"></a>01921 
<a name="l01922"></a>01922  <span class="keyword">const</span> <a class="code" href="classSchema_1_1XSDType.html">XSDType</a> *
<a name="l01923"></a><a class="code" href="classSchema_1_1SchemaParser.html#a64b8d5b094b9387840cd1cbea3f03f46">01923</a>  <a class="code" href="classSchema_1_1SchemaParser.html#a8f4e9997d8d4d84f37e33e425e3185c1">SchemaParser::getType</a>(<span class="keywordtype">int</span> <span class="keywordtype">id</span>, std::string &amp;nameSpace)
<a name="l01924"></a>01924  {
<a name="l01925"></a>01925     <span class="keyword">const</span> <a class="code" href="classSchema_1_1SchemaParser.html">SchemaParser</a> *sp = <a class="code" href="classSchema_1_1SchemaParser.html#a7075e1bb5d4454c04fbdd0fadcc5f828">getImportedSchema</a>(nameSpace);
<a name="l01926"></a>01926     <span class="keywordflow">if</span> (sp == NULL)
<a name="l01927"></a>01927     {
<a name="l01928"></a>01928       <span class="keywordflow">return</span> 0;
<a name="l01929"></a>01929     }
<a name="l01930"></a>01930     <span class="keywordflow">else</span>
<a name="l01931"></a>01931     {
<a name="l01932"></a>01932       <span class="keywordflow">return</span> sp-&gt;<a class="code" href="classSchema_1_1SchemaParser.html#a8f4e9997d8d4d84f37e33e425e3185c1">getType</a>(<span class="keywordtype">id</span>);
<a name="l01933"></a>01933     }
<a name="l01934"></a>01934   }
<a name="l01935"></a>01935 
<a name="l01936"></a>01936   <span class="keyword">const</span> <a class="code" href="classSchema_1_1SchemaParser.html">SchemaParser</a> *
<a name="l01937"></a><a class="code" href="classSchema_1_1SchemaParser.html#a7075e1bb5d4454c04fbdd0fadcc5f828">01937</a>     <a class="code" href="classSchema_1_1SchemaParser.html#a7075e1bb5d4454c04fbdd0fadcc5f828">SchemaParser::getImportedSchema</a>(std::string &amp;nameSpace)
<a name="l01938"></a>01938   {
<a name="l01939"></a>01939     <span class="keywordflow">if</span> (nameSpace.empty()|| nameSpace == tnsUri_ || nameSpace == <a class="code" href="namespaceSchema.html#a72d35008bb7fd2d8627e8347240e7d98">Schema::SchemaUri</a>)    
<a name="l01940"></a>01940     {
<a name="l01941"></a>01941       <span class="keywordflow">return</span> <span class="keyword">this</span>;
<a name="l01942"></a>01942     }
<a name="l01943"></a>01943 
<a name="l01944"></a>01944     <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; importedSchemas_.size(); i++) 
<a name="l01945"></a>01945     {
<a name="l01946"></a>01946       <span class="keywordflow">if</span> ( importedSchemas_[i].ns == nameSpace) 
<a name="l01947"></a>01947       {
<a name="l01948"></a>01948         <span class="keywordflow">return</span> importedSchemas_[i].sParser;
<a name="l01949"></a>01949       }
<a name="l01950"></a>01950     }
<a name="l01951"></a>01951     <span class="keywordflow">return</span> NULL;
<a name="l01952"></a>01952   }
<a name="l01953"></a>01953 
<a name="l01954"></a>01954 list &lt; const XSDType *&gt;*
<a name="l01955"></a><a class="code" href="classSchema_1_1SchemaParser.html#a8504fe37fc887f27480dd36e8deeef99">01955</a> <a class="code" href="classSchema_1_1SchemaParser.html#a8504fe37fc887f27480dd36e8deeef99">SchemaParser::getAllTypes</a>()<span class="keyword"> const</span>
<a name="l01956"></a>01956 <span class="keyword"></span>{
<a name="l01957"></a>01957   list &lt; const XSDType *&gt;*pLTypes = <span class="keyword">new</span> list &lt; const XSDType * &gt;;
<a name="l01958"></a>01958   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classSchema_1_1SchemaParser.html#a648f733fd3b058ffb82b8d25359abae6">getNumTypes</a>(); i++)
<a name="l01959"></a>01959     {
<a name="l01960"></a>01960       <span class="keyword">const</span> <a class="code" href="classSchema_1_1XSDType.html">XSDType</a> *pType = <a class="code" href="classSchema_1_1SchemaParser.html#a8f4e9997d8d4d84f37e33e425e3185c1">getType</a>(i + <a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711dafe1e2787d9278ac67be79e01f93f40a5">Schema::XSD_ANYURI</a> + 1);
<a name="l01961"></a>01961       pLTypes-&gt;push_back(pType);
<a name="l01962"></a>01962     }
<a name="l01963"></a>01963   <span class="keywordflow">return</span> pLTypes;
<a name="l01964"></a>01964 }
<a name="l01965"></a>01965 
<a name="l01966"></a>01966 
<a name="l01967"></a>01967 <span class="keywordtype">int</span>
<a name="l01968"></a><a class="code" href="classSchema_1_1SchemaParser.html#a648f733fd3b058ffb82b8d25359abae6">01968</a> <a class="code" href="classSchema_1_1SchemaParser.html#a648f733fd3b058ffb82b8d25359abae6">SchemaParser::getNumTypes</a>()<span class="keyword"> const</span>
<a name="l01969"></a>01969 <span class="keyword"></span>{
<a name="l01970"></a>01970   <span class="keywordflow">return</span> typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#a9ada8d390149be21b8f3bd9183b7186f">getNumTypes</a>();
<a name="l01971"></a>01971 }
<a name="l01972"></a>01972 
<a name="l01973"></a>01973 
<a name="l01974"></a>01974 <span class="keywordtype">int</span>
<a name="l01975"></a><a class="code" href="classSchema_1_1SchemaParser.html#aad15ce5731f98126124b35ee2b982d40">01975</a> <a class="code" href="classSchema_1_1SchemaParser.html#aad15ce5731f98126124b35ee2b982d40">SchemaParser::getNumElements</a>()<span class="keyword"> const</span>
<a name="l01976"></a>01976 <span class="keyword"></span>{
<a name="l01977"></a>01977   <span class="keywordflow">return</span> lElems_.size();
<a name="l01978"></a>01978 }
<a name="l01979"></a>01979 
<a name="l01980"></a>01980 
<a name="l01981"></a>01981 <span class="keywordtype">int</span>
<a name="l01982"></a><a class="code" href="classSchema_1_1SchemaParser.html#a03737b95f34a4b8a48fbb4f55ed7cfd2">01982</a> <a class="code" href="classSchema_1_1SchemaParser.html#a03737b95f34a4b8a48fbb4f55ed7cfd2">SchemaParser::getNumAttributes</a>()<span class="keyword"> const</span>
<a name="l01983"></a>01983 <span class="keyword"></span>{
<a name="l01984"></a>01984   <span class="keywordflow">return</span> lAttributes_.size();
<a name="l01985"></a>01985 }
<a name="l01986"></a>01986 
<a name="l01987"></a>01987 <span class="comment">//To be deprecated</span>
<a name="l01988"></a>01988 <span class="keywordtype">bool</span>
<a name="l01989"></a><a class="code" href="classSchema_1_1SchemaParser.html#a3c1cd49cbd366366b4127a7d64252a2d">01989</a> <a class="code" href="classSchema_1_1SchemaParser.html#a3c1cd49cbd366366b4127a7d64252a2d">SchemaParser::addImports</a>(<span class="keyword">const</span> std::vector&lt;SchemaParser *&gt; &amp; schemaParsers)
<a name="l01990"></a>01990 {
<a name="l01991"></a>01991   <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0;i&lt;schemaParsers.size() ;i++){
<a name="l01992"></a>01992       
<a name="l01993"></a>01993     <span class="keywordflow">if</span>(schemaParsers[i]-&gt;<a class="code" href="classSchema_1_1SchemaParser.html#a64e1a1534e45266a717fd1c52cbb337c">getNamespace</a>()!=tnsUri_){
<a name="l01994"></a>01994         
<a name="l01995"></a>01995       <a class="code" href="classSchema_1_1SchemaParser.html#af01538823b660050028b2b52071f031f">addImport</a>(schemaParsers[i]);
<a name="l01996"></a>01996     }
<a name="l01997"></a>01997   }
<a name="l01998"></a>01998   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01999"></a>01999 }
<a name="l02000"></a>02000 
<a name="l02001"></a>02001 <span class="keywordtype">bool</span> 
<a name="l02002"></a><a class="code" href="classSchema_1_1SchemaParser.html#a845bb71f97cba857e34d0c69d696ca02">02002</a> <a class="code" href="classSchema_1_1SchemaParser.html#af01538823b660050028b2b52071f031f">SchemaParser::addImport</a>(<a class="code" href="classSchema_1_1SchemaParser.html">SchemaParser</a> *sp)
<a name="l02003"></a>02003 {
<a name="l02004"></a>02004   <span class="comment">//check if the namespace is added in the import list</span>
<a name="l02005"></a>02005   <span class="keywordtype">int</span> i= checkImport(sp-&gt;<a class="code" href="classSchema_1_1SchemaParser.html#a64e1a1534e45266a717fd1c52cbb337c">getNamespace</a>());
<a name="l02006"></a>02006   <span class="comment">//  std::cout&lt;&lt;&quot;Copying imports to &quot;&lt;&lt;sp-&gt;tnsUri_&lt;&lt;std::endl;</span>
<a name="l02007"></a>02007   <span class="comment">//  sp-&gt;copyImports(this);</span>
<a name="l02008"></a>02008   <span class="keywordflow">if</span>(i&gt;=0) {
<a name="l02009"></a>02009     importedSchemas_[i].sParser=sp;
<a name="l02010"></a>02010     importedSchemas_[i].ns=sp-&gt;<a class="code" href="classSchema_1_1SchemaParser.html#a64e1a1534e45266a717fd1c52cbb337c">getNamespace</a>();    
<a name="l02011"></a>02011   }
<a name="l02012"></a>02012   <span class="keywordflow">else</span> {
<a name="l02013"></a>02013     <span class="comment">//if this was a new import increment</span>
<a name="l02014"></a>02014     <a class="code" href="structSchema_1_1SchemaParser_1_1ImportedSchema.html">ImportedSchema</a> imp;
<a name="l02015"></a>02015     imp.<a class="code" href="structSchema_1_1SchemaParser_1_1ImportedSchema.html#a2512ce0c8e71c410bd4f70e548a00b1c">sParser</a>=sp;
<a name="l02016"></a>02016     imp.<a class="code" href="structSchema_1_1SchemaParser_1_1ImportedSchema.html#a4f84a9b9ab0dfc04c75659660096f65e">ns</a>=sp-&gt;<a class="code" href="classSchema_1_1SchemaParser.html#a64e1a1534e45266a717fd1c52cbb337c">getNamespace</a>();
<a name="l02017"></a>02017     importedSchemas_.push_back(imp);
<a name="l02018"></a>02018   }
<a name="l02019"></a>02019   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02020"></a>02020 }
<a name="l02021"></a>02021 
<a name="l02022"></a>02022 <span class="keywordtype">void</span>
<a name="l02023"></a>02023 SchemaParser::copyImports(<a class="code" href="classSchema_1_1SchemaParser.html">SchemaParser</a> * sp)
<a name="l02024"></a>02024 {
<a name="l02025"></a>02025   <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i=0;i&lt;importedSchemas_.size();i++) {
<a name="l02026"></a>02026     
<a name="l02027"></a>02027     <span class="keywordflow">if</span> (importedSchemas_[i].sParser) 
<a name="l02028"></a>02028       sp-&gt;<a class="code" href="classSchema_1_1SchemaParser.html#af01538823b660050028b2b52071f031f">addImport</a>(importedSchemas_[i].sParser);
<a name="l02029"></a>02029   }
<a name="l02030"></a>02030 }
<a name="l02031"></a>02031 
<a name="l02032"></a>02032 <span class="keywordtype">int</span> 
<a name="l02033"></a>02033 SchemaParser::checkImport(std::string nsp)<span class="keyword">const</span>
<a name="l02034"></a>02034 <span class="keyword"></span>{
<a name="l02035"></a>02035   <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i=0;i&lt;importedSchemas_.size();i++)
<a name="l02036"></a>02036     {
<a name="l02037"></a>02037       <span class="keywordflow">if</span>(importedSchemas_[i].ns==nsp)
<a name="l02038"></a>02038         <span class="keywordflow">return</span> i;
<a name="l02039"></a>02039     }
<a name="l02040"></a>02040   <span class="keywordflow">return</span> -1;
<a name="l02041"></a>02041 }
<a name="l02042"></a>02042 
<a name="l02043"></a>02043 <span class="keywordtype">bool</span> 
<a name="l02044"></a><a class="code" href="classSchema_1_1SchemaParser.html#af01538823b660050028b2b52071f031f">02044</a> <a class="code" href="classSchema_1_1SchemaParser.html#af01538823b660050028b2b52071f031f">SchemaParser::addImport</a>(std::string ns,
<a name="l02045"></a>02045                         std::string location)
<a name="l02046"></a>02046 {
<a name="l02047"></a>02047 
<a name="l02048"></a>02048   <span class="keywordtype">int</span> i= checkImport(ns);
<a name="l02049"></a>02049   <span class="keywordflow">if</span>(i==-1) {
<a name="l02050"></a>02050     <a class="code" href="structSchema_1_1SchemaParser_1_1ImportedSchema.html">ImportedSchema</a> imp;
<a name="l02051"></a>02051     imp.<a class="code" href="structSchema_1_1SchemaParser_1_1ImportedSchema.html#a2512ce0c8e71c410bd4f70e548a00b1c">sParser</a>=0;
<a name="l02052"></a>02052     imp.<a class="code" href="structSchema_1_1SchemaParser_1_1ImportedSchema.html#a4f84a9b9ab0dfc04c75659660096f65e">ns</a>=ns;
<a name="l02053"></a>02053     importedSchemas_.push_back(imp);
<a name="l02054"></a>02054     i =importedSchemas_.size()-1;
<a name="l02055"></a>02055   }<span class="keywordflow">else</span> {
<a name="l02056"></a>02056     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02057"></a>02057   }
<a name="l02058"></a>02058 
<a name="l02059"></a>02059   <span class="keywordflow">if</span>(location.empty())
<a name="l02060"></a>02060     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02061"></a>02061   std::string xsdFile;
<a name="l02062"></a>02062   <span class="keywordflow">if</span>(<a class="code" href="namespaceXmlUtils.html#a49cb0c0850b4a22b1fe0d5efd7553b01">XmlUtils::fetchUri</a>(location,xsdFile))
<a name="l02063"></a>02063     {
<a name="l02064"></a>02064       <span class="comment">/*</span>
<a name="l02065"></a>02065 <span class="comment">       * If the schema definition was retrieved successfully </span>
<a name="l02066"></a>02066 <span class="comment">       * process it and add it to list of imported schemas</span>
<a name="l02067"></a>02067 <span class="comment">       */</span>
<a name="l02068"></a>02068       <a class="code" href="classSchema_1_1SchemaParser.html">SchemaParser</a> *sp = <span class="keyword">new</span> <a class="code" href="classSchema_1_1SchemaParser.html#a1c3f89d88098fdaee9705dd2b599819e">SchemaParser</a>(xsdFile,ns);
<a name="l02069"></a>02069       sp-&gt;<a class="code" href="classSchema_1_1SchemaParser.html#a3b34d1a790d25778b56df0bf07a01a30">setUri</a>(uri_);
<a name="l02070"></a>02070       <span class="keywordflow">if</span>(sp-&gt;<a class="code" href="classSchema_1_1SchemaParser.html#a6f1dddf50bcb4dec24df5334971400c0">parseSchemaTag</a>())
<a name="l02071"></a>02071         {
<a name="l02072"></a>02072           importedSchemas_[i].sParser=sp;
<a name="l02073"></a>02073           <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02074"></a>02074         }
<a name="l02075"></a>02075       <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02076"></a>02076     }
<a name="l02077"></a>02077   <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02078"></a>02078 
<a name="l02079"></a>02079 }
<a name="l02080"></a>02080 
<a name="l02081"></a>02081 
<a name="l02082"></a>02082 <span class="keywordtype">void</span> SchemaParser::error(std::string mesg, <span class="keywordtype">int</span> level)
<a name="l02083"></a>02083 {
<a name="l02084"></a>02084   
<a name="l02085"></a>02085   <span class="keywordflow">if</span> (level == 0) {
<a name="l02086"></a>02086     
<a name="l02087"></a>02087     <a class="code" href="classSchema_1_1SchemaParserException.html">SchemaParserException</a> spe(mesg + <span class="stringliteral">&quot;\nFatal Error in SchemaParser\n&quot;</span>);
<a name="l02088"></a>02088     spe.line = xParser_-&gt;<a class="code" href="classXmlPullParser.html#a85f448552915586aa04c44a7d16e8e48">getLineNumber</a>();
<a name="l02089"></a>02089     spe.col = xParser_-&gt;<a class="code" href="classXmlPullParser.html#a81379b1abbe24acb76739836c51563b1">getColumnNumber</a>();
<a name="l02090"></a>02090     <span class="keywordflow">throw</span> spe;
<a name="l02091"></a>02091   }
<a name="l02092"></a>02092 
<a name="l02093"></a>02093   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level_ &gt;=1 &amp;&amp; level == 1){
<a name="l02094"></a>02094 
<a name="l02095"></a>02095     logFile_ &lt;&lt; <span class="stringliteral">&quot;Error @&quot;</span> &lt;&lt; xParser_-&gt;
<a name="l02096"></a>02096       getLineNumber() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; xParser_-&gt;
<a name="l02097"></a>02097       getColumnNumber() &lt;&lt; <a class="code" href="namespaceXmlUtils.html#ae0e3faa27567770a885ba4e4e187844e">XmlUtils::dbsp</a> &lt;&lt; mesg &lt;&lt; endl;
<a name="l02098"></a>02098   }
<a name="l02099"></a>02099   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (level_ &gt;= 2 &amp;&amp; level == 2) {
<a name="l02100"></a>02100 
<a name="l02101"></a>02101     logFile_ &lt;&lt; <span class="stringliteral">&quot;Alert @&quot;</span> &lt;&lt; xParser_-&gt;
<a name="l02102"></a>02102       getLineNumber() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; xParser_-&gt;
<a name="l02103"></a>02103       getColumnNumber() &lt;&lt; <a class="code" href="namespaceXmlUtils.html#ae0e3faa27567770a885ba4e4e187844e">XmlUtils::dbsp</a> &lt;&lt; mesg &lt;&lt; endl;
<a name="l02104"></a>02104 
<a name="l02105"></a>02105   }
<a name="l02106"></a>02106 }
<a name="l02107"></a>02107 
<a name="l02108"></a>02108 
<a name="l02109"></a>02109 <span class="keywordtype">int</span>
<a name="l02110"></a><a class="code" href="classSchema_1_1SchemaParser.html#a9ae0bb284b527910e9c5a7373ebb2b24">02110</a> <a class="code" href="classSchema_1_1SchemaParser.html#a9ae0bb284b527910e9c5a7373ebb2b24">SchemaParser::getBasicContentType</a>(<span class="keywordtype">int</span> typeId)<span class="keyword">const</span>
<a name="l02111"></a>02111 <span class="keyword"></span>{
<a name="l02112"></a>02112   <span class="keyword">const</span> <a class="code" href="classSchema_1_1XSDType.html">XSDType</a> *pType = <a class="code" href="classSchema_1_1SchemaParser.html#a8f4e9997d8d4d84f37e33e425e3185c1">getType</a>(typeId);
<a name="l02113"></a>02113   <span class="keywordtype">int</span> <span class="keywordtype">id</span> = typeId;
<a name="l02114"></a>02114   <span class="keywordflow">if</span> (pType != 0) {
<a name="l02115"></a>02115     
<a name="l02116"></a>02116     <span class="comment">/* </span>
<a name="l02117"></a>02117 <span class="comment">       It could be a complex type with</span>
<a name="l02118"></a>02118 <span class="comment">       simple content or a schema defined simpleType</span>
<a name="l02119"></a>02119 <span class="comment">    */</span>
<a name="l02120"></a>02120     <span class="keywordflow">if</span> (pType-&gt;<a class="code" href="classSchema_1_1XSDType.html#a6f87708ce2ba5f5ec7a7b3f5e7e0007b">isSimple</a>() == <span class="keyword">false</span>){
<a name="l02121"></a>02121 
<a name="l02122"></a>02122       <span class="keyword">const</span> <a class="code" href="classSchema_1_1ComplexType.html">ComplexType</a> * cType= <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classSchema_1_1ComplexType.html">ComplexType</a>*<span class="keyword">&gt;</span> (pType);
<a name="l02123"></a>02123 
<a name="l02124"></a>02124       <span class="keywordflow">if</span>(cType-&gt;<a class="code" href="classSchema_1_1XSDType.html#a4e1831007feec63c1a279cf16415e987">getContentModel</a>()==<a class="code" href="namespaceSchema.html#a84b8523395bb986be4b87ff834308103ac32a5decc6e36a85f67c84470f71967f">Schema::Simple</a>){
<a name="l02125"></a>02125         
<a name="l02126"></a>02126         <span class="keywordtype">id</span> = cType-&gt;<a class="code" href="classSchema_1_1ComplexType.html#a436ce9ff7dae1815505bf179306b0938">getContentType</a>();
<a name="l02127"></a>02127       }
<a name="l02128"></a>02128       <span class="keywordflow">else</span> {
<a name="l02129"></a>02129         
<a name="l02130"></a>02130         <span class="keywordflow">return</span> <a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711da0c01ff4fc47f2f6e148f3bc01aee7caf">Schema::XSD_INVALID</a>;
<a name="l02131"></a>02131       }
<a name="l02132"></a>02132     }
<a name="l02133"></a>02133     <span class="keywordflow">else</span>{
<a name="l02134"></a>02134       
<a name="l02135"></a>02135       <span class="keywordtype">id</span> = (<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classSchema_1_1SimpleType.html">SimpleType</a> *<span class="keyword">&gt;</span>(pType))-&gt;getBaseTypeId();
<a name="l02136"></a>02136     }
<a name="l02137"></a>02137     <span class="keywordtype">id</span> = <a class="code" href="classSchema_1_1SchemaParser.html#a9ae0bb284b527910e9c5a7373ebb2b24">getBasicContentType</a>(<span class="keywordtype">id</span>);
<a name="l02138"></a>02138   }
<a name="l02139"></a>02139   <span class="keywordflow">return</span> id;
<a name="l02140"></a>02140 }
<a name="l02141"></a>02141 
<a name="l02142"></a>02142 std::string
<a name="l02143"></a><a class="code" href="classSchema_1_1SchemaParser.html#aa92a73e7ae4a81583348e682e7f54f96">02143</a> <a class="code" href="classSchema_1_1SchemaParser.html#aa92a73e7ae4a81583348e682e7f54f96">SchemaParser::getTypeName</a>(<a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711d">Schema::Type</a> t)<span class="keyword">const</span>
<a name="l02144"></a>02144 <span class="keyword"></span>{
<a name="l02145"></a>02145   <span class="keywordflow">if</span> (<a class="code" href="classSchema_1_1SchemaParser.html#adea72dec2bf6296659459642d4291b86">isBasicType</a>(t)){
<a name="l02146"></a>02146     <span class="keywordflow">return</span> typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#a7c638ba8b3f93bce6d5b252357c9dcd5">getAtomicTypeName</a>(t);
<a name="l02147"></a>02147   }
<a name="l02148"></a>02148   <span class="keywordflow">else</span> {
<a name="l02149"></a>02149     <span class="keyword">const</span> <a class="code" href="classSchema_1_1XSDType.html">XSDType</a> * pType = (<span class="keyword">const</span> <a class="code" href="classSchema_1_1XSDType.html">XSDType</a> *) typesTable_.<a class="code" href="classSchema_1_1TypesTable.html#a545c3d32a0232f75b47aeaeda6ff7bda">getTypePtr</a>(t);
<a name="l02150"></a>02150     <span class="keywordflow">if</span> (pType)
<a name="l02151"></a>02151       <span class="keywordflow">return</span> pType-&gt;<a class="code" href="classSchema_1_1XSDType.html#ab2bf5bd951cc67fe5dd710532af0bfac">getName</a>();
<a name="l02152"></a>02152   }
<a name="l02153"></a>02153   <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;
<a name="l02154"></a>02154 }
<a name="l02155"></a>02155 
<a name="l02156"></a>02156 
<a name="l02157"></a>02157 <span class="comment">//handle soap arrays .this is really a special case.more like a hack</span>
<a name="l02158"></a>02158 <span class="keywordtype">bool</span>
<a name="l02159"></a>02159 SchemaParser::makeListFromSoapArray (<a class="code" href="classSchema_1_1ComplexType.html">ComplexType</a> * ct)
<a name="l02160"></a>02160 {
<a name="l02161"></a>02161   <span class="keyword">const</span> <a class="code" href="classSchema_1_1XSDType.html">XSDType</a> * baseType=<a class="code" href="classSchema_1_1SchemaParser.html#a8f4e9997d8d4d84f37e33e425e3185c1">getType</a>(ct-&gt;<a class="code" href="classSchema_1_1XSDType.html#ae423450dc2aaf5c60070b56340b48e2e">getBaseTypeId</a>());
<a name="l02162"></a>02162   <span class="keywordflow">if</span> (baseType) {
<a name="l02163"></a>02163     <span class="keywordflow">if</span>(baseType-&gt;<a class="code" href="classSchema_1_1XSDType.html#a0f61cf178c30a0afd00ef29ba82bcc98">getNamespace</a>()== <span class="stringliteral">&quot;http://schemas.xmlsoap.org/soap/encoding/&quot;</span> &amp;&amp; 
<a name="l02164"></a>02164        baseType-&gt;<a class="code" href="classSchema_1_1XSDType.html#ab2bf5bd951cc67fe5dd710532af0bfac">getName</a>()==<span class="stringliteral">&quot;Array&quot;</span>){
<a name="l02165"></a>02165       
<a name="l02166"></a>02166       <span class="keyword">const</span> <a class="code" href="classSchema_1_1Attribute.html">Attribute</a>* a = ct-&gt;<a class="code" href="classSchema_1_1ComplexType.html#a434a6364bf3b9107e4a0a7e697c0e0b3">getAttribute</a>(<span class="stringliteral">&quot;arrayType&quot;</span>);
<a name="l02167"></a>02167       <span class="keywordflow">if</span> (!a)
<a name="l02168"></a>02168         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02169"></a>02169       
<a name="l02170"></a>02170       std::string array = a-&gt;<a class="code" href="classSchema_1_1Attribute.html#add1aca16644e3b2fe101a4459df9ce99">defaultVal</a>();
<a name="l02171"></a>02171       <a class="code" href="classQname.html">Qname</a> q(array);
<a name="l02172"></a>02172       array = q.getLocalName();
<a name="l02173"></a>02173       <span class="keywordflow">while</span> (array[array.length()-1] ==<span class="charliteral">&#39;]&#39;</span> &amp;&amp; 
<a name="l02174"></a>02174              array[array.length()-2] ==<span class="charliteral">&#39;[&#39;</span>)
<a name="l02175"></a>02175         array = array.substr(0,array.length()-2);
<a name="l02176"></a>02176 
<a name="l02177"></a>02177       std::string arrayNs = xParser_-&gt;<a class="code" href="classXmlPullParser.html#ab64f42eff37c0c049024c8267f0732e8">getNamespace</a>(q.getPrefix());
<a name="l02178"></a>02178       q = <a class="code" href="classQname.html">Qname</a>(array);
<a name="l02179"></a>02179       q.setNamespace(arrayNs);
<a name="l02180"></a>02180       <a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711d">Schema::Type</a> t = (<a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711d">Schema::Type</a>)<a class="code" href="classSchema_1_1SchemaParser.html#ad8f407de76f38f1fa24c844faf9ca611">getTypeId</a>(q,<span class="keyword">true</span>);
<a name="l02181"></a>02181           <a class="code" href="classSchema_1_1Element.html">Element</a> e(<span class="stringliteral">&quot;*&quot;</span>,tnsUri_,tnsUri_,t,0,<a class="code" href="Element_8h.html#af17df4d5d5bad0ea1d48fa796a91d4ce">UNBOUNDED</a>);
<a name="l02182"></a>02182       <span class="keywordflow">if</span> (ct-&gt;<a class="code" href="classSchema_1_1ComplexType.html#a1a76250fcf51c807803c1fb929fdf628">getContents</a>() == 0){
<a name="l02183"></a>02183         <a class="code" href="classSchema_1_1ContentModel.html">ContentModel</a> * cm = <span class="keyword">new</span> <a class="code" href="classSchema_1_1ContentModel.html">ContentModel</a>(<a class="code" href="namespaceSchema.html#a1adfaf18fd7d826648b3d01d953a434ca24a2a381feadbd50e8005da5f7dbffca">Schema::Sequence</a>);
<a name="l02184"></a>02184         ct-&gt;<a class="code" href="classSchema_1_1ComplexType.html#ac983adf971998d67f1c9bc9b7a61766a">setContents</a>(cm);
<a name="l02185"></a>02185       }
<a name="l02186"></a>02186       ct-&gt;<a class="code" href="classSchema_1_1ComplexType.html#a1a76250fcf51c807803c1fb929fdf628">getContents</a>()-&gt;addElement(e);
<a name="l02187"></a>02187       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02188"></a>02188     }
<a name="l02189"></a>02189   }
<a name="l02190"></a>02190   <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02191"></a>02191 }
<a name="l02192"></a>02192 }
</pre></div></div>
<!--- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&nbsp;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&nbsp;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&nbsp;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&nbsp;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&nbsp;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&nbsp;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&nbsp;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&nbsp;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&nbsp;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&nbsp;</span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&nbsp;</span>Defines</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<hr class="footer"/><address style="text-align: right;"><small>Generated by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2-20100208 </small></address>
</body>
</html>