La función XMLReader::setRelaxNGSchemaSource() es una función incorporada en PHP que se usa para configurar los datos que contienen un esquema RelaxNG para usarlos para la validación. La función setRelaxNGSchemaSource() es diferente de la función setRelaxNGSchema() ya que la primera acepta la regla como una variable de string, mientras que la función posterior acepta la regla como un archivo .rng.
Sintaxis:
bool XMLReader::setRelaxNGSchemaSource( string $source )
Parámetros: esta función acepta un solo parámetro $fuente que contiene la string que contiene el esquema RelaxNG.
Valor de retorno: esta función devuelve VERDADERO en caso de éxito o FALSO en caso de error.
Los siguientes ejemplos ilustran la función XMLReader::setRelaxNGSchemaSource() en PHP:
Ejemplo 1:
- datos.xml
<?
xml
version
=
"1.0"
?>
<
body
>
<
div
>
<
h1
>GeeksForGeeks</
h1
>
<
p
>Portal for Geeks</
p
>
</
div
>
<
div
>
<
h1
>Heading 3</
h1
>
<
p
>Heading 4</
p
>
</
div
>
</
body
>
- índice.php
<?php
// Create a new XMLReader instance
$XMLReader
=
new
XMLReader();
// 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 nodes
while
(
$XMLReader
->read()) {
if
(
$XMLReader
->nodeType == XMLREADER::ELEMENT) {
// Check if XML follows the relaxNG rule
if
(
$XMLReader
->isValid()) {
echo
"This document is valid!<br>"
;
}
}
}
?>
- Producción:
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!
Ejemplo 2:
- datos.xml
<?
xml
version
=
"1.0"
?>
<
body
>
<
div
>
<!--Create empty div element
to violate rule-->
</
div
>
<
div
>
<
h1
>Heading 3</
h1
>
<
h2
>Heading 4</
h2
>
</
div
>
</
body
>
- índice.php
<?php
// Create a new XMLReader instance
$XMLReader
=
new
XMLReader();
// 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 nodes
while
(
$XMLReader
->read()) {
if
(
$XMLReader
->nodeType == XMLREADER::ELEMENT) {
// Check if XML follows the relaxNG rule
if
(!
$XMLReader
->isValid()) {
echo
"This document is not valid!<br>"
;
}
}
}
?>
- Producción:
This document is not valid! This document is not valid! This document is not valid!
Referencia: https://www.php.net/manual/en/xmlreader.setrelaxngschemasource.php