パスワードを忘れた? アカウント作成
13524711 journal
日記

maiaの日記: XML誕生から20年 104

日記 by maia

2月10日はXML 1.0のリリースから20年だそうだ(XML.comの記事)。XMLはあまりに基本的な技術となっているが、メタ言語でもあり、何を語るべきかよく分からない。JSONと二題噺にしたら面白いかもしれない。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2018年02月11日 20時02分 (#3359993)

    XMLとその関連技術は素晴らしすぎて、20年後の現在もかなり完成されているように見える。
    今はJSON好きが多いけれど、XMLより劣る点は多い。
    現在でもつかわれるプロトコルとして、SMTPとかのメール周りは改良点は多数あるし(参考 [srad.jp])、HTMLは実際手を入れられているが再設計するならかなり良くなるだろう。
    その点でXMLをより良くするなら、今の視点で設計するなら、というのはテーマとして面白いと思う。

    自分としては、

    • 属性を要素に展開する標準的な手法の規定(XAMLではある)。
    • 一般のバイナリを記述できるスキーマ。XMLと相互変換可能(XMLのバイナリ化は既にある [wikipedia.org])。
    • およそあらゆる言語に変換できるXMLプログラミング言語。
    • 属性の名前空間がややこしいのでそこら辺の改良。

    こんな所かな。
    あればいいなと思ったら大抵あるのがXMLのすごい所。

    • XMLの「閉じタグにタグ名を書く」のは何とかならんもんなんですかね
      </>
      で良いんだったらだいぶ心穏やかになるな

      名前空間が使いにくいのもちょっと微妙だが機能が高いので仕方ないのかな…

      親コメント
    • > およそあらゆる言語に変換できるXMLプログラミング言語。

      IDLからCORBAとかのスタブつくるみたく、XMLスキーマからスタブ...は今でもそこそこある気はするけど、XMLでプログラム自体を書いて変換、なのかな。

      それはもうメタ言語として別にしたほうがたぶんいいと思う...

      --
      M-FalconSky (暑いか寒い)
      親コメント
      • by Anonymous Coward

        XSLT なんてまさに XML でプログラム書いてるようなものだが、超めんどくさい。C言語の "=",",","(",")","{","}" などなどに相当するものを全部 element で囲って書くはめになるんだから。XSLT 2.0 以降では、"if ... then ... else ..." を書ける attribute も登場したのは、みんな「めんどくせー」、って思ったせいじゃないかしら。

    • SGML「」

      HTMLは実際のところ、XML化を諦めてる。
      SGML由来のdtdより柔軟になったとは言え、Schemaを理解してまともに書ける技術者は限られている。指摘にもあるけどnamespaceは素晴らしい仕組みだが、すごく分かりにくいです。
      交換データ形式としては優れていても、人が直接書くものじゃ無いよ。

      親コメント
      • by Anonymous Coward

        現在のHTMLのパーサーはチューリング機械が必要なので設計の美しさなんて宇宙の彼方に放り投げてる

    • by Anonymous Coward on 2018年02月12日 16時04分 (#3360214)

      バイナリに対するXMLとして、EBMLというのもあります。

      ところで、JSONにもXMLのようなnamespaceなどを扱えるJSON-LDというものがあります。それを見ていると、JSONのようなファイルフォーマットが担うような機能は限定して、必要に応じてJSON-LDのような拡張を行うのが良いような気もします。実際、JSON-LDが必要なケースはJSON全体の利用ケースに比べて限定的ですから。
      私はJSONの機能は更に削減できるとさえ考えます。例えば、配列だけで十分なんじゃないかと。例えば、

      ((key0 value0)
        (key1 (value10 value11 value 12))
        (key2 ((key20 value20)
                      (key21 (value210 value211 value222))))

      # 待てよ、もしかするとこれでプログラムも書けるのでは?

      親コメント
    • XMLそのものの改良や再設計と、XSLTやXAMLのようにXMLを使って実現したいものは分けた方がいいような。

      およそあらゆる言語に変換できるXMLプログラミング言語

      は後者だよね。

      --
      うじゃうじゃ
      親コメント
    • by Anonymous Coward on 2018年02月12日 17時44分 (#3360243)

      Excelファイルでいいじゃん。。。。。。。。。。

      親コメント
    • by Anonymous Coward

      例えるならMicrosoft Officeのようなものか?

    • by Anonymous Coward

      HTML高速な(かつ安定した)DOMパーサが実装できるから、その恩恵も大きいと思う。
      あとXPathを使いこなすと便利。

    • by Anonymous Coward

      「charset が出現するまでは必ず ASCII コード」という規約が欲しい
      いや、BOM なし UTF-16 な XML なんて存在しないならどうでもいいのですが。

      # オレオレパーサを書くのが一番悪いってのはわかっているのですが

      • by Anonymous Coward

        いや、それマトモにテキストエディタで開けないから駄目だろ

        • by Anonymous Coward

          同じ理由で大きなバイナリを埋め込む仕組みとかの拡張も無理そう。
          PDFとか基本テキストベースのはずが読める気がしない。

        • by Anonymous Coward

          途中で文字コードが変わるテキストデータの話ではなく、文字コードの判別方法に関してです。

          BOM つき UTF-16→わかる
          7bit 領域は ASCII 互換→charset の結果でわかる(SJIS とか UTF-8 とか)
          BOM なし UTF-16→ビッグエンディアンの UTF-16 と判別して読み込む(が、どう判別する?)

          2 番目まで処理してパースに失敗したら 3 番目処理して、というのが現実的な解でしょうか?
          (これだけのために文字コード判別のライブラリとか組み込みたくないので)

          • BOMとか見るなら、頭2バイト見ればわかるんじゃないの?

            0x3c 0x3f ならASCII互換の「<?」なのでencoding指定まで読み進める
            0xFE 0xFF ならUTF-16のBig Endian
            0xFF 0xFE ならUTF-16またはUTF-32のLIttle Endian(UTF-16とUTF-32の確定ができないので4byte目まで読む必要がある)
            0x00 0x00 ならUTF-32のBig Endianの可能性が高い(4byte目まで見ないとBOMか確定はできない)
            0xEF 0xBB BOMありUTF-8(厳密には3byte目の0xBFまでがBOMだけど)
            0x00 0x3c ならUTF-16のBE(BOMなし)
            0x3c 0x00 ならUTF-16またはUTF-32のLE
            それ以外ならXMLではない

            という判定をすれば事足りるよねっていう?

            親コメント
    • by Anonymous Coward

      > XMLより劣る点は多い。

      XMLは必要とされてない機能に無駄にコストを掛けてたってことだよ。

  • 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 に統一で良いと思いますよ。

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

      普通に考えるなら「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

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

  • by Anonymous Coward on 2018年02月12日 15時38分 (#3360203)

    みんなそんなに Lisp が嫌いなの

    • by Anonymous Coward

      Lispが嫌いとかじゃなくより広く普及させるために費やした労力の差の気がします

      • by Anonymous Coward

        それだけコストを掛けてもあっさりJSONに追い抜かれた

  • by Anonymous Coward on 2018年02月12日 15時52分 (#3360211)

    でいいんじゃないか

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

    RSSの配信がXMLだったから利用したかな?
    そのあとはJavaプログラムでかな。

  • by Anonymous Coward on 2018年02月12日 18時56分 (#3360268)

    今でもiniファイルに固執してる人がいるから困る
    客のロートルがiniファイルじゃないと変更できないって言うから仕方ないけど、未だにXMLを知らない・学ぶ意欲も無い人に重要な設定を弄らせるのはどうなんだろうかと思わなくもない

    • by Anonymous Coward

      人を馬鹿にして自分が優位だと思いたい人?

    • by Anonymous Coward

      ファイルを編集する以外の方法で設定できるようにすれば何の問題もないな。お前がサボってるだけだ。

typodupeerror

海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs

読み込み中...