La función XMLReader::setRelaxNGSchema() es una función incorporada en PHP que se usa para establecer el nombre de archivo o URI para que RelaxNG Schema lo use para la validación.
Sintaxis:
bool XMLReader::setRelaxNGSchema( string $filename )
Parámetros: esta función acepta un solo parámetro $filename que contiene el nombre de archivo o URI que apunta a un 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::setRelaxNGSchema() en PHP:
- Ejemplo 1:
- data.xml (El archivo XML a validar)
<?
xml
version
=
"1.0"
?>
<
body
>
<
div
>
<
h1
>Heading 1</
h1
>
<
h2
>Heading 2</
h2
>
</
div
>
<
div
>
<
h1
>Heading 3</
h1
>
<
h2
>Heading 4</
h2
>
</
div
>
</
body
>
- rule.rng (Las reglas a seguir por el archivo XML)
<
element
name
=
"body"
<
zeroOrMore
>
<
element
name
=
"div"
>
<
element
name
=
"h1"
>
<
text
/>
</
element
>
<
element
name
=
"h2"
>
<
text
/>
</
element
>
</
element
>
</
zeroOrMore
>
</
element
>
- index.php (Script PHP para ejecutar el validador)
<?php
// Create a new XMLReader instance
$XMLReader
=
new
XMLReader();
// Open the XML file
$XMLReader
->open(
'data.xml'
);
// Load the rule file
$XMLReader
->setRelaxNGSchema(
'rule.rng'
);
// Iterate through the XML nodes
// and validate each node
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!
Programa 2:
- datos.xml
<?
xml
version
=
"1.0"
?>
<
body
>
<
div
>
<!--Remove Heading 1
to violate rule-->
<
h2
>Heading 2</
h2
>
</
div
>
<
div
>
<
h1
>Heading 3</
h1
>
<
h2
>Heading 4</
h2
>
</
div
>
</
body
>
- regla.rng
<
element
name
=
"body"
<
zeroOrMore
>
<
element
name
=
"div"
>
<
element
name
=
"h1"
>
<
text
/>
</
element
>
<
element
name
=
"h2"
>
<
text
/>
</
element
>
</
element
>
</
zeroOrMore
>
</
element
>
- índice.php
<?php
// Create a new XMLReader instance
$XMLReader
=
new
XMLReader();
// Open the XML file
$XMLReader
->open(
'data.xml'
);
// Load the rule file
$XMLReader
->setRelaxNGSchema(
'rule.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! This document is not valid!
Referencia: https://www.php.net/manual/en/xmlreader.setrelaxngschema.php