パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

XML誕生から20年」記事へのコメント

  • by Anonymous Coward on 2018年02月12日 17時25分 (#3360237)

    書き方1

    <sample>
        <item option="abc">
            <name>ABC</name>
        </item>
    </sample>

    書き方2

    <sample>
        <item>
            <name>ABC</name>
            <option>abc</option>
        </item>
    </sample>

    どっちが正しいのか分からず、数名と議論して、結局「書き方2」の方を選びましたけども。
    ちなみにoptionは有る場合と無い場合があります。
    # 細かい部分は省略

    • これは自分も悩んだが、行き着い合理的な判断基準は「子が要素か改行を含むテキストなら2」
      親コメント
    • by Anonymous Coward on 2018年02月12日 17時46分 (#3360246)

      私なら次のように考えますね。

      option の内容は複雑か(階層化した方が良いか)
      →YES なら書き方 2
      →No なら、option の数は 0..1 か 0..* か
       →0..1 なら書き方 1
       →0..* なら書き方 2

      初期値ないし単一のバインディングで済む書き方 1 で済むなら、そちらの方が楽です。
      ただし、それで表現できないケースは書き方 2 にせざるを得ません。

      まぁチーム開発で混乱したり議論になったり、後で書き方 1 → 2 になって面倒だ、ってなるぐらいなら 2 に統一で良いと思いますよ。

      親コメント
      • by Anonymous Coward

        大体同意。
        自分はぶっちゃけ、属性で済むデータ構造なら数がいくらあろうと属性で完結させてしまう。
        属性で表現できない構造を要素に展開していく。まあノードの意味も低優先で考慮はするけど。

        #3360237は、

        <sample>
            <item
              name="ABC"
              option="abc"
            />
        </sample>

        こうしたい。

      • by Anonymous Coward

        ついでに長い文字列になる可能性があるなら2にしない?
        改行とか"とか含まれることが想定される場合も2の方が見やすいと思う。

        • by Anonymous Coward

          現場レベルだとそういう判断は要るんだけど、
          理想を言うとテキストエディタの編集都合のためにXMLのフォーマットを変えるのは本道じゃ無いんだよなと思う。
          本当はスタンダードなXMLエディタというものが存在して、そのツール上では属性値も改行や引用符がそのまま使えるという姿であるべきだった。
          テキストエディタでXMLを編集するのは、ある意味テキストをバイナリエディタで編集するのと同じ行為で、
          メタ情報までいじれてしまうのはあんま良い形ではない。

          まあ結局、今日に至るまで支持されるXMLエディタは生まれていないのが現実なのだけれど。

    • どんな用途を想定してるかによるけど、大抵の場合、どっちも間違ってる気がする。

      普通に考えるなら「item要素はnameの値に紐付いている」ように見えるから、

      <sample>
        <item name="ABC">
          <option>abc</option>
        </item>
      </sample>

      になるのが筋じゃないのかなーって?

      itemという要素の中にnameという要素を内包しているのか、itemという要素が持つ属性の1つがnameなのか。
      どっちを意図したデータなのかでしょー?

      親コメント
      • 追記。

        特定の要素を、いわゆる表形式のデータベースと対比して考えたときに、1レコードに該当する要素があるなら、そのレコードのキー値は「要素の子要素ではなく、属性として実装されるべき」だと思います。

        だって「特定のキーを元に要素を取り出したい」ときに、わざわざ子要素を見てから「その親要素を取得する」って処理として変じゃないの?っていう話。

        親コメント
    • dtd、Schemaとパーサー次第。
      妥当性検査するならきっちり決めた方がいいし、そうではなく連想配列に単純に突っ込みたいならどっちでもいい。
      Attributeはあくまで属性なので、読み飛ばされてもデータの根幹部分を毀損しないような感じにしてるけど、そうで無いschemaも見るのでそれぞれかな。

      親コメント
      • by Anonymous Coward on 2018年02月12日 22時48分 (#3360372)

        Attributeという名前に惑わされてないか。
        ElementもText NodeもAttributeも、等しくNodeの派生であって、XMLの規格で優先順位や重要度は設定されていない。
        故に、(事前に明確に不要とわかっている時以外は)読み飛ばすような処理をしてはならないし、一般的なXMLパーサーにそんな挙動はない。

        親コメント
        • by Anonymous Coward

          XPath の string 関数で element node を文字列化すると、
          直下や配下 element node 配下の text node は文字列中に含まれるけど、
          配下 attribute node 配下の text node は文字列中に含まれない、
          とかはあるよね。
          XPath の仕様が変なわけでもなく、XMLノードを文字列化する際によく見る仕様だと思う。
          (HTMLの仕様がそうだから、XML非対応ブラウザで無理やり XML を開いた場合等もそんな感じになる)

          規格上、element も attribute も等しく node であるというのはそうだけれども、
          だったら element だけあればよいのであって、attribute なんていらない。

          • by Anonymous Coward

            少なくとも、XPath の規格設計者はそう考えてるんだと思う。

            XPath使うならchildのtext見るより対象ノードのattributeみる方が自然だと思うけど。
            特定の要素が不可分に持つデータは属性、分離しても意味を持ちうるのが子要素じゃないの?

    • by Anonymous Coward

      XMLの設計における
      「構造のもつ意味を正確に記述するよう強いたい」という欲求と
      「機械的になんでも書ける、扱えるようにしたい」という欲求のせめぎあいの果てに、
      今の末端ユーザの混乱があるように思う。

    • by Anonymous Coward

      nameとoptionの意味次第かな?
      消えても良いなら属性
      保持するなら要素

      属性はファイルで言うとパーミッション/ACLに該当(互換性無い環境に移動すれば失われる)

      • 消えても良いなら属性
        保持するなら要素

        属性はファイルで言うとパーミッション/ACLに該当(互換性無い環境に移動すれば失われる)

        こういう誤解(だと思う)をちらほら見かけるけど、どこから来るんだろ。

        XML勧告では「属性が検証できなければ(≒互換性のない環境に移動したら?)CDATAとして扱わなければならない(SHOULD)」ことになってるので、消えても良いなんてことはない筈。少なくとも「消してる」処理系はあっても、「消えてもよい」というスタンスでどうにかしてるのは見たことない。

        や、それ以前に、XMLの要素を「移動する」という概念がそもそも不明瞭なのだけど(DOMでいうDocumentFragmentみたいなやつ?)
        たとえば、何かしらのプログラミング言語とかで、XMLの要素(Element)を引数に渡したときに、それを言語側の処理系(ランタイムやライブラリ等)が理解できなくて「ないものとして扱う」のなら、それはXMLの処理系としては不完全な実装でしかなくて、XMLの一般的な扱い方じゃないと思うんだけどなー。

        親コメント
        • by Anonymous Coward

          >XMLの処理系としては不完全な実装
          その通りですよ。
          まあ相手側の処理で要素しか見てくれないのが実際有ったので期待しない形ですね。

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

処理中...