The XMLReader::setRelaxNGSchemaSource() function is an inbuilt function in PHP which is used to set the data containing a RelaxNG Schema to use for validation. The setRelaxNGSchemaSource() function is different from setRelaxNGSchema() function as the former accepts the rule as a string variable whereas later function accepts the rule as a .rng file.
Syntax:
bool XMLReader::setRelaxNGSchemaSource( string $source )
Parameters: This function accepts a single parameter $source which holds the string containing the RelaxNG Schema.
Return Value: This function returns TRUE on success or FALSE on failure.
Below examples illustrate the XMLReader::setRelaxNGSchemaSource() function in PHP:
Example 1:
- data.xml
<?xmlversion="1.0"?><body>Â Â Â Â<div>Â Â Â Â Â Â Â Â<h1>GeeksForGeeks</h1>Â Â Â Â Â Â Â Â<p>Portal for Geeks</p>Â Â Â Â</div>Â Â Â Â<div>Â Â Â Â Â Â Â Â<h1>Heading 3</h1>Â Â Â Â Â Â Â Â<p>Heading 4</p>Â Â Â Â</div></body> - index.php
<?phpÂÂ// Create a new XMLReader instance$XMLReader=newXMLReader();ÂÂ// Open the XML file$XMLReader->open('data.xml');ÂÂ// Create rule as a string$RNG= "<element name=\"body\"xmlns=\"http://relaxng.org/ns/structure/1.0\"><zeroOrMore> Â<element name=\"div\">   Â<element name=\"h1\">     Â<text/>   Â</element>   Â<element name=\"p\">     Â<text/>   Â</element> Â</element></zeroOrMore></element>";ÂÂ// Load the rule$XMLReader->setRelaxNGSchemaSource($RNG);ÂÂ// Iterate through the XML nodeswhile($XMLReader->read()) {   Âif($XMLReader->nodeType == XMLREADER::ELEMENT) {       Â// Check if XML follows the relaxNG rule       Âif($XMLReader->isValid()) {           Âecho"This document is valid!<br>";       Â}   Â}}?> - Output:
This document is valid! This document is valid! This document is valid! This document is valid! This document is valid! This document is valid! This document is valid!
Example 2:
- data.xml
<?xmlversion="1.0"?><body>   Â<div>       Â<!--Create empty div element          Âto violate rule-->   Â</div>   Â<div>       Â<h1>Heading 3</h1>       Â<h2>Heading 4</h2>   Â</div></body> - index.php
<?phpÂÂ// Create a new XMLReader instance$XMLReader=newXMLReader();ÂÂ// Open the XML file$XMLReader->open('data.xml');ÂÂ// Create rule as a string$RNG= "<element name=\"body\"xmlns=\"http://relaxng.org/ns/structure/1.0\"><zeroOrMore> Â<element name=\"div\">   Â<element name=\"h1\">     Â<text/>   Â</element>   Â<element name=\"h2\">     Â<text/>   Â</element> Â</element></zeroOrMore></element>";ÂÂ// Load the rule$XMLReader->setRelaxNGSchemaSource($RNG);ÂÂ// Iterate through the XML nodeswhile($XMLReader->read()) {   Âif($XMLReader->nodeType == XMLREADER::ELEMENT) {       Â// Check if XML follows the relaxNG rule       Âif(!$XMLReader->isValid()) {           Âecho"This document is not valid!<br>";       Â}   Â}}?> - Output:
This document is not valid! This document is not valid! This document is not valid!
Reference: https://www.php.net/manual/en/xmlreader.setrelaxngschemasource.php
