image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« 2008年11月23日 | トップページ | 2008年11月25日 »

2008年11月24日

2008-11-24

ピックアップ:漢字の軌範は教育産業がリードする, ミシュランガイド東京の致命的な欠陥, etc

- http://www.xmlmaster.org/murata/xmlblog/xb081123.html
> 村田真のXMLブログ: 筑波大学でのスキーマの授業

- http://d.hatena.ne.jp/kuzan/20081123/1227433229
> 漢字の軌範は教育産業がリードする - くうざん本を見る

- http://gigazine.net/index.php?/news/comments/20081122_star_struck/
> 巨大な光る「何か」がものすごい勢いで地表へ落下する様子を偶然、警察のカメラが撮影に成功 - GIGAZINE

- http://gigazine.net/index.php?/news/comments/20081123_firefox_mozilla_revenue/
> Firefoxなどから得られた2007年度売上高は「約71億円(7500万ドル)」、どのようにして儲けているのか? - GIGAZINE

- http://d.hatena.ne.jp/aureliano/20081123/1227416275
> 目標を作り、与えられる人間こそ本当のマネジャーだ - ハックルベリーに会いに行く

- http://d.hatena.ne.jp/syou6162/20081123/1227405201
> LaTeXのこととかまとめておく - Seeking for my unique color.

- http://d.hatena.ne.jp/ki2neko/20081123/p5
> 本屋はネットカフェ業態を取り入れればいい - ねこかわいい

- http://d.hatena.ne.jp/rkmt/20081122/1227368105
> ミシュランガイド東京の致命的な欠陥 - NextReality

- http://sinsoku.livedoor.biz/archives/51222505.html
> 神速(´・ω・)VIP:保存してどうするんだよ・・・な画像を貼ってくれ

- http://d.hatena.ne.jp/shi3z/20081122/1227380254
> スライド配布派vsスライド配布反対派 - shi3zのzeptopad開発日記

- http://yebo-blog.blogspot.com/2008/11/google1pb6.html
> yebo blog: Googleは1PBのデータを6時間でソートできる

xml を別の xml 形式に変換するには?(その2)

汎用的なものはみつけられず。
ともかく、XBRL インスタンスの書き換え専用の ruby スクリプトを書いてみた。

$ cat toSimpleXbrl.rb
# 2008-11-23 katoy
# XBRL インスタンスの 科目タグを書き換える。
#   <foo:bar ...> <==> <item prefix='foo' local_name='bar' ...>
#

require 'rubygems'
require "rexml/document"
require 'open-uri'
require 'pp'

#----------------------
class XBRL
  def self.to_simple(doc)

    doc.elements.each do |elem|
      elem.elements.each do |c| 
        to_simple_tree(c)
      end
    end
  end

  def self.to_simple_tree elem

    prefix = elem.prefix
    return if prefix == 'xlink' or prefix == 'link'

    name = elem.name
    return if name == "context" or name == "unit"

    to_simple_element(elem)
    elem.elements.each do |e|
      name = e.name
      to_simple_tree(e)   
    end
  end

  def self.to_simple_element elem
    type = elem.node_type
    if type != :comment and type != :text
      name = elem.name
      elem.add_attributes( { 'prefix' => elem.prefix, 'local_name' => elem.local_name } )
      elem.name = :item
    end
  end

  #----------------------
  def self.to_xbrl(doc)

    doc.elements.each do |elem|
      elem.elements.each do |c|
        to_xbrl_tree(c)
      end
    end
  end

  def self.to_xbrl_tree elem
    to_xbrl_element(elem)
    elem.elements.each do |e|
      to_xbrl_tree(e)   
    end
  end

  def self.to_xbrl_element elem
    type = elem.node_type
    if type != :comment and type != :text   

      if elem.name == nil  # c.name == 'item' ではひかっからない、何故?
        elem.name = "#{elem.attribute('prefix')}:#{elem.attribute('local_name')}"
        elem.delete_attribute("prefix")
        elem.delete_attribute("local_name")
      end
    end
  end
end

def execute doc
  org_xml = doc.to_s

  XBRL::to_simple(doc)
  simple_xml = doc.to_s

  XBRL::to_xbrl(doc)
  xbrl_xml = doc.to_s

  # puts f
  if org_xml != xbrl_xml or simple_xml == xbrl_xml
    puts "--- Error #{f} ------"
    doc.write( File.new('1.org.xml', 'w'))
    File.new('1.simple.xml', 'w').write simple_xml
    File.new('1.xbrl.xml', 'w').write xbrl_xml
    exit
  end

  temp = REXML::Document.new simple_xml
  temp.write( File.new('1.simple.xml', 'w'), 4 )

  temp = REXML::Document.new org_xml
  temp.write( File.new('1.org.xml', 'w'), 4 )

end

# local file
pat = "/Users/youichikato/work/www/xbrl.org/XBRL-CONF/**/*.xbrl"
# pat = "397-00-ConsistentInstance-valid.xbrl"

# SEC - adobe
# pat = "http://www.sec.gov/Archives/edgar/data/796343/000079634308000007/adbe-20080916.xml"

count = 0

if pat.index('http:') == 0
  uri = URI.parse(pat)
  doc = REXML::Document.new uri.read
  execute doc
  count += 1
else
  Dir.glob(pat).each do |f|
    doc = REXML::Document.new File.open(f)
    execute doc
    count += 1
  end
end
puts "-- Checked #{count} files in #{pat}"

$ ruby toSimpleXbrl.rb
-- Checked 69 files in /Users/youichikato/work/www/xbrl.org/XBRL-CONF/**/*.xbrl

念のために実行後に 1.org.xml (変換前の XBRL), 1.simple.xml(変換後の XBRL)を出力している。

$ diff 1*
21c21
<     <tx:A decimals='0' contextRef='ctx0' unitRef='u1'>
---
>     <item local_name='A' prefix='tx' decimals='0' contextRef='ctx0' unitRef='u1'>
23,24c23,24
<     </tx:A>
<     <tx:B decimals='0' contextRef='ctx0' unitRef='u1'>
---
>     </item>
>     <item local_name='B' prefix='tx' decimals='0' contextRef='ctx0' unitRef='u1'>
26,27c26,27
<     </tx:B>
<     <tx:C decimals='0' contextRef='ctx0' unitRef='u1'>
---
>     </item>
>     <item local_name='C' prefix='tx' decimals='0' contextRef='ctx0' unitRef='u1'>
29,30c29,30
<     </tx:C>
<     <tx:D decimals='0' contextRef='ctx0' unitRef='u1'>
---
>     </item>
>     <item local_name='D' prefix='tx' decimals='0' contextRef='ctx0' unitRef='u1'>
32c32
<     </tx:D>
---
>     </item>

ローカルファイルだけでなく、SEC サイトのデータも扱える。
// 今は、ソース中の pat で、処理対象ファイルを指定するので、適宜 編集すること。

$ time ruby toSimpleXbrl.rb
-- Checked 69 files in /Users/youichikato/work/www/xbrl.org/XBRL-CONF/**/*.xbrl

real    0m1.131s
user    0m1.030s
sys    0m0.088s

$ time ruby toSimpleXbrl.rb
-- Checked 1 files in http://www.sec.gov/Archives/edgar/data/796343/000079634308000007/adbe-20080916.xml

real    0m5.754s
user    0m3.301s
sys    0m0.250s

« 2008年11月23日 | トップページ | 2008年11月25日 »

mokuji

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク