Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [XSD/XMLNS] Validacja XML z użyciem XML Schema zawodzi, namespace'y atrybutów
wrzasq
post
Post #1





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Jest 1:34, nie spałem od niedzieli więc może przyczyna jest banalna. Jednak ja jej znaleźć nie mogę, a googlałem, szukałem w bugsach, na forum i w wielu innych miejscach pod przeróżnymi hasłami.

Problem brzmi: PHP nie chce mi interpretować domyślnych przestrzeni nazw w czasie parsowania XMLa przy użyciu XML Schema.

W wersji okrojonej, która jednak nadal powoduje takie same objawy:

plik XML Schema:
  1. <?xml version="1.0" encoding="utf-8"?>
  2.  
  3. <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:myNS" xmlns="urn:myNS" xmlns:wf="urn:myNS">
  4.  
  5.    <!-- protocol version -->
  6.    <xsd:attribute name="version" type="xsd:string" fixed="0.0.1">
  7.        <xsd:annotation>
  8.            <xsd:documentation xml:lang="en">Current version of protocol. At the moment only "0.0.1" is supported.</xsd:documentation>
  9.        </xsd:annotation>
  10.    </xsd:attribute>
  11.  
  12.    <!-- backed XML format -->
  13.    <xsd:complexType name="transport">
  14.        <xsd:annotation>
  15.            <xsd:documentation xml:lang="en">Structure of backend XML protocol.</xsd:documentation>
  16.        </xsd:annotation>
  17.        
  18.        <xsd:attribute ref="wf:version" use="required" />
  19.    </xsd:complexType>
  20.  
  21.    <!-- root node -->
  22.    <xsd:element name="transport" type="wf:transport">
  23.        <xsd:annotation>
  24.            <xsd:documentation xml:lang="en">Root element for XML backend protocol.</xsd:documentation>
  25.        </xsd:annotation>
  26.    </xsd:element>
  27.  
  28. </xsd:schema>


plik docelowy:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <transport xmlns="urn:myNS" version="0.0.1" />


walidowanie:
  1. <?php
  2.  
  3. $xml = new DOMDocument();
  4. $xml->load('plik.xml');
  5. $xml->schemaValidate('schema.xsd');
  6.  
  7. ?>


efekt:
Cytat
Warning: DOMDocument::schemaValidate(): Element '{urn:myNS}transport', attribute 'version': The attribute 'version' is not allowed. in /home/wrzasq/public_html/test.php on line 34

Warning: DOMDocument::schemaValidate(): Element '{urn:myNS}transport': The attribute '{urn:myNS}version' is required but missing. in /home/wrzasq/public_html/test.php on line 34


Jak widać problem jest z przestrzenią nazw. Mimo zadeklarowania domyślnej, PHP nadal nie traktuje atrybutu jako należącego do danej przestrzeni. Co ciekawe ten problem nie dotyczy elementów (tak jak mówiłem to wersja okrojona do lepszego zobrazowania problemu - w wersji pełnej typy danych są dużo bardziej złożone, ale jednak elementy są traktowane poprawnie jako należące do domyślnej przestrzeni nazw).
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 20:55