ぽっくるのITざっき

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

【XML Schema】複数xsd:patternのORによる組み合わせ

2007-12-15 19:28:42 | Weblog
以下のようなXML Schema文書を作成すると、パターン1またはパターン2のいずれかにマッチする要素を定義できる。

 <?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="PatternType">
   <xsd:restriction base="xsd:string">
    <xsd:pattern value="[a-g]+"/>
    <xsd:pattern value="[q-z]+"/>
   </xsd:restriction>

  </xsd:simpleType>
 </xsd:schema>

以下のXML文書は妥当である。

 <?xml version="1.0" encoding="Shift_JIS"?>
 <PatternTest>
  <Pattern>abcdefg</Pattern>
  <Pattern>qrstuvwxyz</Pattern>

 </PatternTest>

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

【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