0

次のDTDがあります:

<!DOCTYPE guests [
<!ELEMENT Guest (Gname, youth+, car+)>
<!ELEMENT youth (Yname, dateofbirth)>
<!ELEMENT car (carType, excursion+)>
<!ELEMENT excursion (week, location)>
<!ELEMENT Gname (#PCDATA)>
<!ELEMENT Yname (#PCDATA)>
<!ELEMENT dateofbirth (#PCDATA)>
<!ELEMENT carType (#PCDATA)>
<!ELEMENT week (#PCDATA)>
<!ELEMENT location (#PCDATA)>
>]

そして、XQuery を使用して、8 月に誕生日を迎える若者がいるすべてのゲストの名前を検索したいと考えています。これは私が思いついたものです:

for $x in Guest/youth
let $GuessN := $x/@Gname
where $x/month:=8
return <Gname> $GuessN </Gname>

For $x in Guest/youth[month=8]
Return <Gname>$x/@Gname </Gname>

Month を読み取る関数はありますか?

4

1 に答える 1

1

月をチェックインしようとしている場合youth/dateofbirth(上記の私のコメントを参照)、次のいずれかを使用できます。

month-from-date()dateofbirthある場合xs:dateまたはある
month-from-dateTime()場合dateofbirthxs:dateTime

xs:date の        2012-06-14
例: xs:dateTime の例: 2012-06-14T22:34:52.682-06:00

dateofbirthxs:date または xs:dateTime としてキャスト可能な場合は、月を手動で抽出する必要があります (ほとんどの場合は を使用) tokenize()

を使った例month-from-date()です。の要素宣言を追加する必要があり、(の代わりに)guests内部サブセットを適切に閉じる必要がありました。]>>]

XML 入力

<!DOCTYPE guests [
<!ELEMENT guests (Guest+)>
<!ELEMENT Guest (Gname, youth+, car+)>
<!ELEMENT youth (Yname, dateofbirth)>
<!ELEMENT car (carType, excursion+)>
<!ELEMENT excursion (week, location)>
<!ELEMENT Gname (#PCDATA)>
<!ELEMENT Yname (#PCDATA)>
<!ELEMENT dateofbirth (#PCDATA)>
<!ELEMENT carType (#PCDATA)>
<!ELEMENT week (#PCDATA)>
<!ELEMENT location (#PCDATA)>
]>
<guests>
    <Guest>
        <Gname>Guest 1</Gname>
        <youth>
            <Yname>Youth A</Yname>
            <dateofbirth>2012-06-14</dateofbirth>
        </youth>
        <car>
            <carType/>
            <excursion>
                <week/>
                <location/>
            </excursion>
        </car>
    </Guest>
    <Guest>
        <Gname>Guest 2</Gname>
        <youth>
            <Yname>Youth B</Yname>
            <dateofbirth>2012-08-14</dateofbirth>
        </youth>
        <car>
            <carType/>
            <excursion>
                <week/>
                <location/>
            </excursion>
        </car>
    </Guest>
    <Guest>
        <Gname>Guest 3</Gname>
        <youth>
            <Yname>Youth C</Yname>
            <dateofbirth>2000-12-25</dateofbirth>
        </youth>
        <car>
            <carType/>
            <excursion>
                <week/>
                <location/>
            </excursion>
        </car>
    </Guest>
</guests>

XQuery

<guests>
{
for $guest in /guests/Guest[month-from-date(youth/dateofbirth) = 8]
    return $guest/Gname
}
</guests>

XML 出力

<guests>
   <Gname>Guest 2</Gname>
</guests>

実際、XQuery は次のように縮小できます。

<guests>{/guests/Guest[month-from-date(youth/dateofbirth) = 8]/Gname}</guests>
于 2012-06-15T04:47:20.297 に答える