<!--
  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.
-->

<test-group xmlns="http://www.w3.org/2005/02/query-test-XQTSCatalog" name="XMarkQueries" featureOwner="VXQuery">
   <GroupInfo>
      <title>XMark Queries</title>
      <description/>
   </GroupInfo>
   <test-case name="XMark-Queries-01" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 1</description>
      <query name="q01" date="2015-03-25"/>
      <output-file compare="Text">q01.txt</output-file>
   </test-case>
      <test-case name="XMark-Queries-02" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 2</description>
      <query name="q02" date="2015-03-25"/>
      <output-file compare="Text">q02.txt</output-file>
   </test-case>
      <test-case name="XMark-Queries-03" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 3</description>
      <query name="q03" date="2015-03-25"/>
      <output-file compare="Text">q03.txt</output-file>
   </test-case>
      <test-case name="XMark-Queries-04" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 4</description>
      <query name="q04" date="2015-03-25"/>
      <output-file compare="Text">q04.txt</output-file>
   </test-case>
      <test-case name="XMark-Queries-05" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 5</description>
      <query name="q05" date="2015-03-25"/>
      <output-file compare="Text">q05.txt</output-file>
   </test-case>
      <test-case name="XMark-Queries-06" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 6</description>
      <query name="q06" date="2015-03-25"/>
      <output-file compare="Text">q06.txt</output-file>
   </test-case>
      <test-case name="XMark-Queries-07" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 7</description>
      <query name="q07" date="2015-03-25"/>
      <output-file compare="Text">q07.txt</output-file>
   </test-case>
      <test-case name="XMark-Queries-08" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 8</description>
      <query name="q08" date="2015-03-25"/>
      <output-file compare="Text">q08.txt</output-file>
   </test-case>
      <test-case name="XMark-Queries-09" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 9</description>
      <query name="q09" date="2015-03-25"/>
      <output-file compare="Text">q09.txt</output-file>
   </test-case>
      <test-case name="XMark-Queries-10" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 10</description>
      <query name="q10" date="2015-03-25"/>
      <output-file compare="Text">q10.txt</output-file>
   </test-case>
      <test-case name="XMark-Queries-11" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 11</description>
      <query name="q11" date="2015-03-25"/>
      <output-file compare="Text">q11.txt</output-file>
   </test-case>
      <test-case name="XMark-Queries-12" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 12</description>
      <query name="q12" date="2015-03-25"/>
      <output-file compare="Text">q12.txt</output-file>
   </test-case>
      <test-case name="XMark-Queries-13" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 13</description>
      <query name="q13" date="2015-03-25"/>
      <output-file compare="Text">q13.txt</output-file>
   </test-case>
      <test-case name="XMark-Queries-14" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 14</description>
      <query name="q14" date="2015-03-25"/>
      <output-file compare="Text">q14.txt</output-file>
   </test-case>
   <test-case name="XMark-Queries-15" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 15</description>
      <query name="q15" date="2015-03-25"/>
      <output-file compare="Text">q15.txt</output-file>
   </test-case>
   <test-case name="XMark-Queries-16" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 16</description>
      <query name="q16" date="2015-03-25"/>
      <output-file compare="Text">q16.txt</output-file>
   </test-case>
      <test-case name="XMark-Queries-17" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 17</description>
      <query name="q17" date="2015-03-25"/>
      <output-file compare="Text">q17.txt</output-file>
   </test-case>
   <test-case name="XMark-Queries-18" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 18</description>
      <query name="q18" date="2015-03-25"/>
      <output-file compare="Text">q18.txt</output-file>
   </test-case>
   <test-case name="XMark-Queries-19" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 19</description>
      <query name="q19" date="2015-03-25"/>
      <output-file compare="Text">q19.txt</output-file>
   </test-case>
   <test-case name="XMark-Queries-20" FilePath="XMark/Modified/" Creator="Shivani Mall">
      <description>XMark Query 20</description>
      <query name="q20" date="2015-03-25"/>
      <output-file compare="Text">q20.txt</output-file>
   </test-case>
</test-group>