ぽっくるのITざっき

IT関連技術についての覚え書きです。不定期更新です。

【XML Schema】xsd:patternの派生は可能か?

2007-12-15 19:23:33 | Weblog
次のようなXML Schema文書を作成。PatternTestタイプはPatternTestBaseタイプを
派生させているが、それぞれxsd:patternにより文字列パターンによる制限を行っている。

 <?xml version="1.0" encoding="Shift_JIS"?>
 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="PatternTest" type="PatternTestType"/>
  <xsd:complexType name="PatternTestType">
   <xsd:sequence>
    <xsd:element name="Pattern" type="PatternType" maxOccurs="unbounded"/>
   </xsd:sequence>
  </xsd:complexType>
  <xsd:simpleType name="PatternTypeBase">
   <xsd:restriction base="xsd:string">
    <xsd:pattern value="[a-g]+"/>
   </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="PatternType">
   <xsd:restriction base="PatternTypeBase">
    <xsd:pattern value="[a-h]+"/>
   </xsd:restriction>
  </xsd:simpleType>
 </xsd:schema>

このスキーマ文書を用いて次のXML文書を検証すると、エラーになる。

 <?xml version="1.0" encoding="Shift_JIS"?>
 <PatternTest>
  <Pattern>abcdefg</Pattern>
  <-- ここでエラー -->
  <Pattern>abcdefgh</Pattern>

 </PatternTest>

どうもパターンで制限をしたタイプからのパターンの派生はできないらしい。
一番もととなる型のパターン制限が有効になるようだ。

【XMLパーサ】Xerces-J 2.9.0
【OS】Windows XP Professional Edition + SP2

【Ruby】 nil の真偽値

2007-12-15 14:30:45 | Weblog
Rubyでnilをif文などの条件判定で使用する場合はfalseとおなじ

  cond = nil
  if cond then
    print "nil is true\n"
  else
    print "nil is not true\n" # <- こちら
  end
  if not cond then
    print "not nil is true\n" # <- こちら
  else
    print "not nil is not true\n"
  end

【Rubyバージョン】1.8.6-p111-i386-mswin32
【OS】Windows XP Professional Edition + SP2

【Ruby】 複数のinitializeは定義できない? (2)

2007-12-12 01:16:50 | Weblog
前回の投稿に対して通りすがりさんよりコメントをいただきました。

Rubyではデフォルト引数を使うといいかもです。

 def initialize(param1, param2=nil)
  ...
  
  unless param2.nil? # 引数param2 が指定されている場合の処理
   ...
  end
 end


試してみましたがうまくいきました!!ありがとうございました。

【Ruby】 複数のinitializeは定義できない?

2007-12-09 00:42:36 | Weblog
Rubyで1つのクラスに複数のinitializeを定義した。

class a
 def initialize( param1 )
 ...
 end

 def initialize( param1, param2 )
 ...
 end
end

obj = a.new( "a" ) # NG
obj = a.new( "a1", "a2" ) # Good

オブジェクト生成時に1つだけパラメタを指定したところ、パラメタの数が足りないとのエラー。2つのinitializeの順番を入れ替えてみたが同じ。
  →うそ。最後に定義されているinitializeが使用される。
Rubyのクラスではコンストラクタを複数もてないのか?

【Rubyバージョン】1.8.6-p111-i386-mswin32
【OS】Windows XP Professional Edition + SP2

Windows Cプログラムの異常終了調査方法(map/cod)

2007-12-05 22:52:39 | Weblog
Windowsで、プログラムが異常終了することがときどきある。その場合、Dr.Watsonが自動的にログファイルを出力する。その情報と、Visual C++でプログラムをコンパイル/リンクするときに作成することができる次の2ファイルの情報から、デバッガがなくても異常終了箇所を特定することができることがある。

・.map (マップファイル)
・.cod (リスティングファイル)

その方法については、ITproのページにまとめられているのがわかりやすい。

Visual C++のダイアログリソース: CONTROLとLTEXT

2007-12-05 22:40:19 | Weblog
ダイアログリソースのスタティックコントロールは、通常だとLTEXT/CTEXT/RTEXTのいずれかになる。しかし、一部のスタイルを付与すると、CONTROL定義に変更される。

そのようなスタイルとして、以下のものがあり。
・ワードラップなし(SS_NOWORDWRAP)

VBScriptで任意の文字列を実行

2007-12-01 23:07:09 | Weblog
VBScriptで、任意の文字列をVBScriptのステートメントとして実行させる方法がある。
Executeステートメントを使用する。

strCommand = "MsgBox ""Test"""
Execute strCommand

というように書くと、"Test"と書かれているメッセージボックスが表示される。

Tomcatのservlet-classとurl-patternのパス

2007-11-30 00:17:23 | Weblog
Tomcatのweb.xmlに記述する要素内容
  • <servlet-class>に記述するクラス名: WEB-INF/classesをclasspathの基点とするパッケージ名
  • <servlet-mapping>の<url-pattern>に記述するURL: webapps/(アプリケーション名)をルートとするURLの一部。先頭を/で始める
一方、htmlファイルに記述するパスはWebサーバルートフォルダからのパスになる。そのため、アプリケーション名をパスに含める必要がある。