2004年度CALS完全実施。とうとうその時が来た。電子納品はすでに設計では始まっている。CALS対応図面Templateを準備しておかなければならない。CAD製図基準に従い、まずはレイヤーの名前、色、線種の設定をしておこう。 完全運用でCALS対応図面が流通すれば、既存図面からTemplateに整理しておけばいいのだが、まだ回って来ない状況だ。インターネットで検索しても見当たらない。PDF仕様を眺め、作るしかないのだろうか。 「(社)日本土木工業協会」にはCALS/EC特別委員会があり活発な活動をしている。 CALS/EC部会のページにこんなEXCELの表があった。EXCELはHTMLで保存できる。HTML形式でここに転載させて頂く。
EXCELはCSVを掃き出すこともできる。CSVからXMLリストを作ってみよう。 |
CAD製図基準の付属資料には14工種のレイヤ一覧表がある。PDFの文書セキュリテー の「内容のコピーまたは抽出」が「許可」であることを確認してTXTを抽出する。それを、 CSVに整形した橋梁詳細設計のレイヤー規則が上のTXT。 このデータを眺め、XMLの構造を考える。 XMLの例は、同じくCAD製図基準の付属資料5にある。TXTを抽出整形し、XMLの 拡張子で保存すれば、りっぱなXML文書。 |
このXML文書の大まかな構造は下記。
図面情報は次の9項目。
本来レイヤ情報は図面情報の要素であるが、CAD製図基準通りなら省略ということだろう。このXMLのDTD(Document Type Definition) を見てみると、追記はエラーとなりそうだ。もし、基準通りでないなら、「その他」の「受注者説明文」の中に書くのであろうか。 以上より図面レイヤ情報は次のようなXMLデータとしよう。
このXMLのソースにCSVのデータを合成すればいいだろう。javaScriptで行う。 XMLの概要はここに整理しておいた。 |
javaScriptのソースは下記。CSVのデータをXLMのタグでラッピングしている。
包装紙がHTMLタグなら、サーバーでCGIがしてる事と同じ。
|
工種を選択してCSV -->XMLをクリックでXML変換される。 ついでに、AutoCADLT用のスクリプトファイルを作っておこう。AutoCADスクリプトはコマンドに CSVデータを割り付けるので、上のjavaScriptのソースを利用すればいいが、XML変換された XML文書があるのだから、これを利用してみよう。 |
Internet Explorer6.0をインストールするとMsxml3.dllがPCのwindows/systemに組込まれる。知らない人が大半だが、PCの中を検索するとMsxml3.dll、Msxml3a.dll、Msxml3r.dllのセットであるはずだ。 当面、これだけあればXMLは事足りる。 XMLパーサは何をしてくれるかといえば、XML文書の文法チェック。間違いがあると矢印 で指摘してくれる。XML変換がリストとして無事に上で表示されたのは、 チェックをパスしたからだ。 DOMは何をしてくれるか。XML文書をオブジェクトにしてくれる。オブジェクトは階層構造があって、一番外のタグがルート、その内側は親、その内側は子、孫と系図状に定義される。javaScriptはオブジェクト指向言語。これで処理するのに便利。ただそれだれのこと。 |
XMLのソースを眺めれば分るのだが、タグ付きデータ=エレメントが階層構造に並べてある。これら全体をドキュメントと呼ぶ。xmlのルール。 眺めたり、データとして抜き取ったり、削除修正するにはアクセスできなければならない。JavaScriptはオブジェクト指向言語だから当然DOMのオブジェクトを利用する。要素には属性があった。属性は要素の付属物だから、要素と属性は対等関係ではない。しかし、まずはなんでもnodeというオブジェクトにしてしまおう。これがDOMの発想のようだ。 JavaScriptでXMLファイルからデーターを読み込む。そのため、xml用のオブジェクトを作る。名前はxmlのルールに従い自由に付ける。
xmlにはルート要素があった。これがdocumentElementに対応する。オブジェクトとプロパテーをこの様に指定する。
ルート要素のnodeNameを確認して、その直下のnode数をしらべ、 直下のnode(=子node)の名前を確認する。それを文字列に 取出して表示する。上の「ROOT INFO」に割り付けてある。 childNodes.item(1)はchildNodes[1]と短く書ける。documentElement.childNodes[1].childNodes[2]のようにルートから辿れば、どのnodeにもアクセス出来るが、階層が深いと気が遠くなる。ビジネスツールはもっとスマートなはず。nodeの名前は要素の名前、つまりタグ名ということ。ならば、タグ名で検索ができるはずだ。 この場合getElementsByTagName()を使いリストを作る。
nodeListに拾い出されているitem()は一人前のnode。というより、nodeListはオリジナルなnodeの仮集計票という感じだ。item()を通じてオリジナルnodeにアクセスする。
上の「図面リスト」、「図面名リスト」、「画層リスト」は、これを利用している。 図面情報は1枚の図面の「図面名」、「図面ファイル名」、「画層データ」をセットで並べた。7枚だから 21の項目が並列に並ぶ。一見処理に都合の悪い階層構造のようだが、DOMのメソッドのおかげで、不都合はない。工種によって、図面枚数は不定形だ。この構造は、これに対応する柔軟性を持っている。 「Layer情報リスト」のソースコードは以下。Microsoft.XMLDOMを利用しDOM仕様にするとJavaScriptのソースが スマートになるということだろう。
|
XML文書をデータとして要素の拾い出しをJavaScriptで行った。あとはAutoCADのSctiptに変換する。これはコマンドでラッピングすればいい。上のボタンに割り付けてみた。 新規図面はパッケージソフトを利用したり、電子納品図面をテンプレートに整理 したりの方法がある。過去の図面資産を電子納品図面にリメークする場合は手作業となるが、結構時間が掛かる。既存図面に電子納品レイヤーを追加する時には、このスクリプトは 重宝している。 電子納品はなぜXMLなの? そんな疑問を持つのだが。確かに、これからはテキストタグベースが文書構造の基本だろう。今回JavaScriptをDOMの応援で使った。このように、XMLは後の処理のデータとして使える。これが「今後はXML」という理由の一つ。PDFでは次世代仕様でないということだ。 今回JavaScriptを使ったが、 Scriptなしでワープロ感覚プロセッサーとしてXMLを扱えるのがSAX、XSLTのようだ。XMLベースのツールが続々登場してくるだろう。だからXMLと理解した。 |