<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
  
      http://www.apache.org/licenses/LICENSE-2.0
    	  
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
  
-->
<!-- Persons Data -->
<dataset name="personsData">
	<myXML>
    <person>
        <name>אריאל שרון</name>
        <title>ראש הממשלה</title>
    </person>
    <person>
        <name>גל פרידמן</name>
        <title>מדליסט אולימפי</title>
    </person>
     <person>
        <name>פיני גרשון</name>
        <title>מאמן מכבי תל-אביב</title>
    </person>
    <person>
        <name>שרי אריסון</name>
        <title>מיליארדרית</title>
    </person>
    <person>
        <name>שלמה ארצי</name>
        <title>זמר</title>
    </person>
    <person>
        <name>מיקי ברקוביץ</name>
        <title>כדורסלן עבר</title>
    </person>
    <person>
        <name>יוסי בניון</name>
        <title>שחקן כדורגל</title>
    </person>
   <person>
        <name>ביל גייטס</name>
        <title>בעל חברת מיקרוסופט</title>
    </person>
	</myXML>
</dataset>
