J'ai déjà su comment valider un seul xsd avec le programme php, j'ai toujours un problème avec le label <xs:any>
en validation xsd quand je suis ce tutoriel https://www.tutorialspoint.com/xsd/xsd_complex_any.htm, ce qui suit est ma démo:comment valider xml avec php quand j'ai plusieurs documents de schéma
Person.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns="http://cos-git.dev"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://cos-git.dev"
elementFormDefault="qualified">
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string" minOccurs="0" maxOccurs="5"/>
<xs:any minOccurs = "0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
et mon child.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns="http://www.w3school.com.cn"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
elementFormDefault="qualified">
<xs:element name="children">
<xs:complexType>
<xs:sequence>
<xs:element name="childname" type="xs:string"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
et mon fichier test.xml est comme suit:
<persons xmlns="http://cos-git.dev"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://cos-git.dev person.xsd http://www.w3school.com.cn child.xsd">
<person>
<full_name>Tony Smith</full_name>
<child_name>Cecilie</child_name>
<children>
<childname>Name</childname>
</children>
</person>
</persons>
programme php validate simple est la suivante:
<?php
function libxml_display_error($error)
{
$return = "<br/>\n";
switch ($error->level) {
case LIBXML_ERR_WARNING:
$return .= "<b>Warning $error->code</b>: ";
break;
case LIBXML_ERR_ERROR:
$return .= "<b>Error $error->code</b>: ";
break;
case LIBXML_ERR_FATAL:
$return .= "<b>Fatal Error $error->code</b>: ";
break;
}
$return .= trim($error->message);
if ($error->file) {
$return .= " in <b>$error->file</b>";
}
$return .= " on line <b>$error->line</b>\n";
return $return;
}
function libxml_display_errors() {
$errors = libxml_get_errors();
var_dump($errors);exit;
foreach ($errors as $error) {
print libxml_display_error($error);
}
libxml_clear_errors();
}
// Enable user error handling
libxml_use_internal_errors(true);
$xml = new DOMDocument();
$xml->load('xmlfilepath');
if ($xml->schemaValidate('xsdfilename')) {
echo "validated</n>";
}else{
libxml_display_errors();
}
?>
Maintenant, mon problème est que la façon de valider test.xml avec Person.xsd et child.xsd. Pourriez-vous me donner quelques conseils?
==============
Merci pour CM Sperberg-McQueen pour me donner quelques conseils pour créer un autre fichier nommé driver.xsd pour résoudre mon problème
Le Voici ma solution:
driver.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://cos-git.dev" schemaLocation="person.xsd"/>
<xs:import namespace="http://www.w3school.com.cn" schemaLocation="child.xsd"/>
</xs:schema>
et mon test.xml
<?xml version="1.0" encoding="UTF-8"?>
<persons xmlns="http://cos-git.dev" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:r="http://www.w3school.com.cn">
<person >
<full_name>Tony Smith</full_name>
<child_name>Cecilie</child_name>
<r:children >
<r:childname>Name</r:childname>
<r:childname>Name1</r:childname>
</r:children>
</person>
</persons>
maintenant je peux valider mon xml par plusieurs xsd avec un même programme de validation php
Merci beaucoup
Si vous avez une autre solution s'il vous plaît partager votre idée :)
Merci beaucoup pour vos conseils, il me semble trouver une solution. Pourriez-vous me rendre un service pour vérifier ma solution dont j'ai déjà traité ma question? –