-2

宿題の手伝いが必要です。Person.xml と passedExams.xml の 2 つの XML ファイルがあります。

Person.xml フォーム ->

<listWrapper>
   <items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="person">
      <address>Random street 2, Neverland</address>
      <telephoneNumber>555-1-612-9999</telephoneNumber>
      <name>Captain</name>
      <sid>35168589</sid>
      <surname>Obvious</surname>
    </items>
    <items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="person">
      <address>Random avenue, Neverland</address>
      <telephoneNumber>555-1-123-9999</telephoneNumber>
      <name>Gabe</name>
      <sid>36431731</sid>
      <surname>Newell</surname>
   </items>
 </listWrapper>

passedExams.xml フォーム ->

<listWrapper>
   <items xsi:type="passedExams" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <id>
          <ExamID>BM3409</ExamID>
          <sid>36431731</sid>
      </id>
      <month>7</month>
      <grade>4</grade>
   </items> 
   <items xsi:type="passedExams" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
       <id>
           <ExamID>MV7402</ExamID>
           <sid>36441189</sid>
       </id>
       <month>7</month>
       <grade>4</grade>
   </items>
 </listWrapper>

これらの 2 つのファイルを使用して、y か月に x 試験に合格したすべての人をリストしようとしています。たとえば、1 年の 10 か月目に 2 つの試験に合格したすべての人を取得します。私はそれが得意ではないので、良いクエリを書くのに苦労しています。これは私がこれまでに得たものです:

for $exam in doc("pasedExams.xml")/listWrapper//items[month = 1]
where $person in doc("Person.xml")/listWrapper/items[$exam/sid = $person/sid] satisfies  (count($exam/sid) = 2)
return 
     <info>
        $person
     </info>

ここでは、デモ用に x = 1 および y = 2 とします。ユーザーは、プログラムの開始時にパラメーターを選択できます。この背後にあるロジックを明確にするために、1 月に行われた試験を反復して、試験の SID (学生 ID) を Person.xml の SID と一致させようとしています。 SID の発生数は、その学生が合格した試験の数であるため、passedExams での SID の発生。Stylus Studio でこれを実行すると、次のエラーが表示されます: [DataDirect][XQuery][err:XPST0003]Error at line 2, column 14. Expected "return", but occured "in".

どうすればこれを機能させることができますか?

4

2 に答える 2

1

エラーステートメントは、コードの構文エラーを明確に示しています。inwhere 句でその構造を使用することはできません。また、FWLOR式は達成したいことを表していません.すべてのユーザーを出力したいのですが、これは単に必須条件ですが、各試験を繰り返します. したがって、次のようになります。

for $user in doc("Person.xml")/listWrapper/items
where count(doc("passedExams.xml")/listWrapper/items[id/sid = $user/sid and month = 1]) >= 2
return $user

私は今gradeは知りませんが、それはその人が実際に axam に合格したか失敗したかを決定するので、別の条件が必要になるかもしれません.

于 2013-05-18T16:04:51.390 に答える