La función XMLReader::setSchema() es una función incorporada en PHP que se usa para validar el documento usando un esquema XSD. Este esquema XSD no es más que un archivo que define la regla para la estructura XML y debe tener la forma de un archivo .xsd.
Sintaxis:
bool XMLReader::setSchema( string $filename )
Parámetros: esta función acepta un solo parámetro $filename que contiene el nombre del archivo XSD.
Valor de retorno: esta función devuelve VERDADERO en caso de éxito o FALSO en caso de error.
Excepciones: esta función arroja E_WARNING si la extensión libxml se compiló sin soporte de esquema.
Los siguientes ejemplos ilustran la función XMLReader::setSchema() en PHP:
Ejemplo 1:
- data.xml (El archivo XML a validar)
<?
xml
version
=
"1.0"
?>
<
student
>
<
name
>Rahul</
name
>
<
rollno
>1726262</
rollno
>
</
student
>
- rule.xsd (Las reglas a seguir por el archivo XML)
<?
xml
version
=
"1.0"
?>
<
xs:schema
xmlns:xs
=
elementFormDefault
=
"qualified"
>
<
xs:element
name
=
"student"
>
<
xs:complexType
>
<
xs:sequence
>
<
xs:element
name
=
"name"
type
=
"xs:string"
/>
<
xs:element
name
=
"rollno"
type
=
"xs:integer"
/>
</
xs:sequence
>
</
xs:complexType
>
</
xs:element
>
</
xs:schema
>
- index.php (El script PHP para ejecutar la validación)
<?php
// Create a new XMLReader instance
$XMLReader
=
new
XMLReader();
// Open the XML file
$XMLReader
->open(
'data.xml'
);
// Load the rule
$XMLReader
->setSchema(
'rule.xsd'
);
// Iterate through the XML nodes
while
(
$XMLReader
->read()) {
if
(
$XMLReader
->nodeType == XMLREADER::ELEMENT) {
// Check if XML follows the XSD rule
if
(
$XMLReader
->isValid()) {
echo
"This document is valid!<br>"
;
}
}
}
?>
- Producción:
This document is valid! This document is valid! This document is valid!
Ejemplo 2:
- datos.xml
<?
xml
version
=
"1.0"
?>
<
div
>
<
phoneNo
>This should not be text</
phoneNo
>
</
div
>
- regla.xsd
<?
xml
version
=
"1.0"
?>
<
xs:schema
xmlns:xs
=
elementFormDefault
=
"qualified"
>
<
xs:element
name
=
"div"
>
<
xs:complexType
>
<
xs:sequence
>
<
xs:element
name
=
"phoneNo"
type
=
"xs:integer"
/>
</
xs:sequence
>
</
xs:complexType
>
</
xs:element
>
</
xs:schema
>
- índice.php
<?php
// Create a new XMLReader instance
$XMLReader
=
new
XMLReader();
// Open the XML file
$XMLReader
->open(
'data.xml'
);
// Load the rule
$XMLReader
->setSchema(
'rule.xsd'
);
// Iterate through the XML nodes
while
(
$XMLReader
->read()) {
if
(
$XMLReader
->nodeType == XMLREADER::ELEMENT) {
// Check if XML follows the XSD rule
if
(!
$XMLReader
->isValid()) {
echo
"This document is not valid!<br>"
;
}
}
}
?>
- Producción:
This document is not valid! This document is not valid!
Referencia: https://www.php.net/manual/en/xmlreader.setschema.php