123456789_123456789_123456789_123456789_123456789_

Class: LibXML::XML::RelaxNG

Relationships & Source Files
Inherits: Object
Defined in: ext/libxml/ruby_xml_relaxng.c,
ext/libxml/ruby_xml_relaxng.c

Overview

The RelaxNG class is used to prepare RelaxNG schemas for validation of xml documents.

Schemas can be created from ::LibXML::XML documents, strings or URIs using the corresponding methods (new for URIs).

Once a schema is prepared, an ::LibXML::XML document can be validated by the Document#validate_relaxng method providing the RelaxNG object as parameter. The method will raise an exception if the document is not valid.

Basic Usage:

# parse schema as xml document
relaxng_document = XML::Document.file('schema.rng')

# prepare schema for validation
relaxng_schema = XML::RelaxNG.document(relaxng_document)

# parse xml document to be validated
instance = XML::Document.file('instance.xml')

# validate
instance.validate_relaxng(relaxng_schema)

Class Method Summary

Constructor Details

XML::Relaxng.new(relaxng_uri) ⇒ RelaxNG

Create a new relaxng from the specified URI.

[ GitHub ]

  
# File 'ext/libxml/ruby_xml_relaxng.c', line 48

static VALUE rxml_relaxng_init_from_uri(VALUE class, VALUE uri)
{
  xmlRelaxNGParserCtxtPtr xparser;
  xmlRelaxNGPtr xrelaxng;

  Check_Type(uri, T_STRING);

  xparser = xmlRelaxNGNewParserCtxt(StringValuePtr(uri));
  xrelaxng = xmlRelaxNGParse(xparser);
  xmlRelaxNGFreeParserCtxt(xparser);

  return Data_Wrap_Struct(cXMLRelaxNG, NULL, rxml_relaxng_free, xrelaxng);
}

Class Method Details

XML::RelaxNG.document(document) ⇒ RelaxNG

Create a new relaxng from the specified document.

[ GitHub ]

  
# File 'ext/libxml/ruby_xml_relaxng.c', line 68

static VALUE rxml_relaxng_init_from_document(VALUE class, VALUE document)
{
  xmlDocPtr xdoc;
  xmlRelaxNGPtr xrelaxng;
  xmlRelaxNGParserCtxtPtr xparser;

  Data_Get_Struct(document, xmlDoc, xdoc);

  xparser = xmlRelaxNGNewDocParserCtxt(xdoc);
  xrelaxng = xmlRelaxNGParse(xparser);
  xmlRelaxNGFreeParserCtxt(xparser);

  return Data_Wrap_Struct(cXMLRelaxNG, NULL, rxml_relaxng_free, xrelaxng);
}

XML::RelaxNG.string("relaxng_data") ⇒ "value"

Create a new relaxng using the specified string.

[ GitHub ]

  
# File 'ext/libxml/ruby_xml_relaxng.c', line 89

static VALUE rxml_relaxng_init_from_string(VALUE self, VALUE relaxng_str)
{
  xmlRelaxNGParserCtxtPtr xparser;
  xmlRelaxNGPtr xrelaxng;

  Check_Type(relaxng_str, T_STRING);

  xparser = xmlRelaxNGNewMemParserCtxt(StringValuePtr(relaxng_str), (int)strlen(StringValuePtr(relaxng_str)));
  xrelaxng = xmlRelaxNGParse(xparser);
  xmlRelaxNGFreeParserCtxt(xparser);

  return Data_Wrap_Struct(cXMLRelaxNG, NULL, rxml_relaxng_free, xrelaxng);
}