Ruby 4.0 リファレンスマニュアル

library rexml/validation/relaxng

[edit]

要約

XML 文書を RELAX NG のスキーマで検証するためのライブラリです。

REXML::Validation::RelaxNG のオブジェクト(バリデータ)を、REXML::Parsers::UltraLightParser#add_listener などでパーサに登録して使います。パーサが文書を読み進めるのに合わせて検証が行われ、文書がスキーマに合わないことが分かった時点で REXML::Validation::ValidationException が発生します。

例
require 'rexml/parsers/ultralightparser'
require 'rexml/validation/relaxng'

schema = <<~RELAXNG
  <?xml version="1.0" encoding="UTF-8"?>
  <element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
    <zeroOrMore>
      <element name="card">
        <element name="name"><text/></element>
        <element name="email"><text/></element>
      </element>
    </zeroOrMore>
  </element>
RELAXNG

validator = REXML::Validation::RelaxNG.new(schema)

# スキーマに合う文書は、例外が発生せずにパースが終わる
xml = "<addressBook><card><name>John Smith</name><email>js@example.com</email></card></addressBook>"
parser = REXML::Parsers::UltraLightParser.new(xml)
parser.add_listener(validator)
parser.parse

# 同じバリデータで別の文書を検証する前に reset を呼ぶ
validator.reset

# スキーマに合わない文書では例外が発生する
xml = "<addressBook><card><name>John Smith</name></card></addressBook>"
parser = REXML::Parsers::UltraLightParser.new(xml)
parser.add_listener(validator)
begin
  parser.parse
rescue REXML::Validation::ValidationException => e
  p e.class  # => REXML::Validation::ValidationException
end

要素と要素の間にある空白(改行やインデント)もテキストとして検証されます。スキーマがテキストを許していない位置に空白があると、検証に失敗します。

クラス

REXML::Validation::RelaxNG

RELAX NG のスキーマ(XML 構文)に基づくバリデータです。

モジュール

REXML::Validation::Validator

バリデータに共通の機能を提供するモジュールです。

例外クラス

REXML::Validation::ValidationException

文書がスキーマに合わないときに発生する例外です。