2

私は学習目的で手帳を作っていますが、XML を扱ったことがないので、自分のソリューションが最適かどうかはわかりません。付属の XML ファイルの基本構造は次のとおりです。

<calendar>
    <year value="2008">
        <month value="october">
            <day value="16">
                <activity name="mike's birthday" time="21:00" address="mike's apartment" urgency="10">
                     activity description.
                </activity>
            </day>
        </month>
    </year>
</calendar>

緊急性属性は 1 から 10 のスケールである必要があります
。Google で簡単に検索したところ、適切な例が見つかりませんでした。多分それは最善の解決策ではないので、それが適切かどうか知りたいです。関連性がある場合は、PHPでアプリケーションを実行しています。

4

5 に答える 5

2

あなたのやり方は私には十分です。ただし、私は属性よりも子タグを好むので、私の方法は次のようになります。

<activity>
  <name>Mike's Birthday</name>
  <time>2100</time>
  <address>Mike's Place</address>
  <urgency>10</urgency>
  <description>activity description</description>
</activity>

しかし、私が言ったように、あなたのやり方は問題ありません。

簡単な質問ですが、なぜデータベースではないのでしょうか?

于 2008-10-16T18:36:11.677 に答える
1

あなたは単純にこれにたどり着いたかもしれませんが、XML 設計の主な特徴は、日付による検索用に最適化されていることです。XML 文書が大きく、日付による検索を頻繁に行う場合 (これは手帳の最も一般的な使用例だと思います)、これは良いことです。

この XPath パターンを実行します。

/calendar/year[@value='2008']/month[@value='10']/day[@value='7']/activity

Kev のより単純なフラット化された組織で使用する必要があるパターンを使用する場合よりも、はるかに少ないノードを調べます。

/calendar/activity[@year='2008' and @month='10' and @day='7']

基本的に、ドキュメント内のすべてのノードを確認する必要があります。

monthところで、およびday属性は数値であると想定していることに注意してください。ある時点でこのデータを並べ替えたいと思うことはほぼ間違いないため、これは重要です。また、ドキュメント内の並べ替え順序を維持しない限り (認めますが、これについては議論の余地があります)、あなたは'これらの属性は、簡単に並べ替えられる形式にする必要があります。

これらの属性に数値データを格納する方法に一貫性を持たせることも重要です。(会議でスマートに聞こえたい場合は、データ型の標準的な表現を確立していると言えます。) たとえば、先行ゼロを使用する場合と使用しない場合がある場合、これらの XPath パターンはどれも確実に機能しません。に設定された属性@day='7'とは一致しません。(関数を使用して XPath で属性を数値に変換することで回避できますが、最初から問題を回避することをお勧めします。)day"07"number()

于 2008-10-16T19:15:55.230 に答える
0

iCalendar標準の XML 準拠の表現であるxCalを検討する価値があるかもしれません。

于 2008-10-16T19:11:42.400 に答える
0

その階層を次のようにフラット化できます。

<calendar>
    <activity
        id="123456"
        name="mike's birthday" 
        year="2008"
        month="10"
        day="16"
        time="21:00" 
        address="mike's apartment" 
        urgency="10">
            activity description.
        </activity>
</calendar>

また..

<calendar>
    <activity id="12345">
        <name>mike's birthday</name>
        <year>2008</year>
        <month>10<month>
        <day>16</day>
        <time>21:00</time>
              <urgency>10</urgency>
        <address>mike's apartment<address>
        <description>activity description.</description>
    </activity>
</calendar>

XPath クエリを実行すると、生活が少し楽になります。アクティビティを一意に識別できるように、id 属性も追加しました。

于 2008-10-16T18:44:02.503 に答える
0

あなたの構造はあなたがしていることには問題ないと思います。

これを部分的に XML について学習するために使用することを計画している場合は、属性と要素を組み合わせて使用​​し、それぞれのコレクションを操作する練習をすることを検討してください。XML に慣れたら、どのプロパティが属性になり、どのプロパティが要素になるかを決定するために使用するルールを定義し始めるでしょう。

適切なコードを使用すると、XML ファイルとデータベース テーブルの間で情報をやり取りできます。また、 XSLの学習を開始して、元の XML ファイルを変更せずに (または、データがテーブルに格納されると、元の XML ファイルがなくても) 移動する練習をすることもできます。

于 2008-10-16T18:51:44.513 に答える