Toon posts:

[PHP5/XML] XSD wil niet valideren

Pagina: 1
Acties:
  • 213 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
In navolging van het draadje \[XML/PHP] xsd geeft problemen voor xpath query's zit ik met een volgende vraag. Ik probeer xml tegen een xsd schema te verifieren. Het is een standaard xml en een standaard xsd van de EURid voor de ontwikkeling van een epp server. De xsd kan je hier inzien. Wie kan mij hierin helpen?

Het probleem is dat deze xml wel valideert:

XML:
1
2
3
4
<?xml version="1.0" encoding="UTF-8"?>
    <epp xmlns="http://www.eurid.eu/xml/epp/epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.eurid.eu/xml/epp/epp-1.0 epp-1.0.xsd">
        <hello />
    </epp>


Maar als het wat complexer wordt (zie onderstaande xml) deze niet meer valideert

XML:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
    <epp xmlns="http://www.eurid.eu/xml/epp/epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.eurid.eu/xml/epp/epp-1.0 epp-1.0.xsd">
        <command>
            <info>
                <contact:info xmlns:contact="http://www.eurid.eu/xml/epp/contact-1.0" xsi:schemaLocation="http://www.eurid.eu/xml/epp/contact-1.0 contact-1.0.xsd">
                    <contact:id>c1006449</contact:id>
                </contact:info>
            </info>
            <clTRID>info-2222</clTRID>
        </command>
    </epp>


Op bovenstaande xml krijg ik onderstaande error:

code:
1
Error 1845: Element 'contact:info', [strict WC]: No matching global declaration available


Ik maak gebruik van het DomDocument object binnen PHP5. Kan deze daar niet mee omgaan? Ik vind bar weinig info over de toepassing waarvan ik gebruik wil maken.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

$request = '<?xml version="1.0" encoding="UTF-8"?>
                <epp xmlns="http://www.eurid.eu/xml/epp/epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.eurid.eu/xml/epp/epp-1.0 epp-1.0.xsd">
                    <command>
                        <info>
                            <contact:info
                                xmlns:contact="http://www.eurid.eu/xml/epp/contact-1.0"
                                xsi:schemaLocation="http://www.eurid.eu/xml/epp/contact-1.0 contact-1.0.xsd">
                                <contact:id>c1006449</contact:id>
                            </contact:info>
                        </info>
                        <clTRID>info-2222</clTRID>
                    </command>
                </epp>';

$xmlrequest = new DOMDocument('1.0', 'UTF-8');
$xmlrequest -> loadXML($request);

libxml_use_internal_errors(true);

if (!@$xmlrequest -> schemaValidate('epp-1.0.xsd')) { $error = libxml_display_errors(); } else { $error = null; }

if ($error == null) { echo 'Parsen is geslaagd...<br /><br />'; } else { echo 'Parsen is mislukt...<br /><br />error: '. $error .'<br /><br />'; }

?>

  • TukkerTweaker
  • Registratie: November 2001
  • Laatst online: 11:18
het probleem zit hem duidelijk in de het contact:info element. Misschien een optie om die contact.xsd te importeren om duidelijker en simpeler te maken.

  • Rock-Y
  • Registratie: Juni 2006
  • Laatst online: 30-10 18:59
Je vergeet bij $request <contact:info te sluiten met een >

[update]Woeps... verkeerd gekeke... ik heb geen idee...

[ Voor 33% gewijzigd door Rock-Y op 15-11-2006 14:03 ]


Verwijderd

Topicstarter
Daar was ik inderdaad ook al. Alleen zou ik denken dat dit bericht in iedere geval aan de default epp zou moeten voldoen. Dat de xsd niets controleert over het contact was mij duidelijk. De xsd contact-1.0.xsd geeft mij ook geen oplossing. Had ik uiteraard ook geprobeerd.

Ik krijg dan de volgende error:

code:
1
Error 1845: Element 'contact:id', [strict WC]: No matching global declaration available


@rock-y: even twee regels lager kijke, daar gebeurt dat ;)

[ Voor 3% gewijzigd door Verwijderd op 15-11-2006 14:05 ]


  • TukkerTweaker
  • Registratie: November 2001
  • Laatst online: 11:18
Verwijderd schreef op woensdag 15 november 2006 @ 14:05:
Daar was ik inderdaad ook al. Alleen zou ik denken dat dit bericht in iedere geval aan de default epp zou moeten voldoen. Dat de xsd niets controleert over het contact was mij duidelijk. De xsd contact-1.0.xsd geeft mij ook geen oplossing. Had ik uiteraard ook geprobeerd.

Ik krijg dan de volgende error:

code:
1
Error 1845: Element 'contact:id', [strict WC]: No matching global declaration available


@rock-y: even twee regels lager kijke, daar gebeurt dat ;)
Lastig..
Je moet het echter wel zoeken in de namespaces. Wat gebeurd er als je de xsd in een fatsoenlijke XML editor (XMLSpy) bewerkt?

Verwijderd

Topicstarter
In XMLSpy valideert de XML en de XSD's. Dus lijkt het in PHP niet goed te gaan... In mn vorige probleem was het registreren van een namespace binnen het xpath object de oplossing, alleen kan dat nu niet het geval zijn....

Verwijderd

Zet die xmlns:contact 's in de rootnode van je xml? Weet niet of 't uit gaat maken, maar aangezien je validator begint te miepen over 'matching global declaration' kan ik me voorstellen dat 'ie geen xmlns-definities in childnodes ondersteunt.
En misschien moet je dan xsi:schemaLocation wijzigen in contact:schemaLocation, maar dat is een wilde gok omdat ik niet zo gek veel ervaring heb met het gebruik van externe schema's...

Verwijderd

Topicstarter
Het was het proberen waard. Maar niet de oplossing. Het is ook niet dat de XML niet valid is. XMLSpy geeft in iedergeval aan dat alles valid is. Het is dus een probleem binnen het DomDocument van PHP5, met name het valideren van xsd's.

Verwijderd

Topicstarter
/me kickje

Iemand een idee voor mn probleem met php en multiple schema's op xml???
Pagina: 1