Ik probeer in mijn XML Schema, waarbij ik gebruik maak van meerdere namespaces, binnen een geimporteerd namespace een element in te voegen door gebruik te maken van een gedefinieerde complexType. Mijn validator (PHP) blijft echter zeuren dat dit niet mag. Via een ref="ns:ELMNAME" werkt wel, maar de type niet. Op geen enkele manier heb ik het idee.
Hieronder een deel van mijn bronbestanden:
hoofd xsd:
Een gedeelte van de geimporteerde XSD (mysql.xsd):
Ik heb ook al geprobeert:
type="mysql:query"
De empty namespace veranderd in xmlns:mysql
Empty namespace én xmlns:mysql
En alle variaties erop.
Misschien dat mijn PHP code nog relevant is:
Kan iemand mij vertellen hoe het wel moet? Ik heb al tientallen examples uit Google bekeken, vele op een andere manier dan de vorige, maar geen van alle lijkt te werken. Moet toch iemand zijn die dit eerder heeft gedaan?
Hieronder een deel van mijn bronbestanden:
hoofd xsd:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| <xs:schema xmlns="http://www.sove.nl/ns/core/" xmlns:mysql="http://www.sove.nl/ns/system/mysql/" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.sove.nl/ns/core/"> <!-- ## SYSTEM ## //--> <xs:import namespace="http://www.sove.nl/ns/system/mysql/" schemaLocation="http://www.sove.nl/ns/system/mysql.xsd"/> <xs:element name="stream"> <xs:complexType> <xs:sequence> <xs:element ref="mysql:set"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
Een gedeelte van de geimporteerde XSD (mysql.xsd):
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns="http://www.sove.nl/ns/system/mysql/" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.sove.nl/ns/system/mysql/"> <xs:element name="set"> <xs:complexType> <xs:sequence> <xs:element name="query" type="query"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="query"> <xs:sequence> <xs:element name="table" type="table" minOccurs="1" /> </xs:sequence> </xs:complexType> [...] </xs:schema> |
Ik heb ook al geprobeert:
type="mysql:query"
De empty namespace veranderd in xmlns:mysql
Empty namespace én xmlns:mysql
En alle variaties erop.
Misschien dat mijn PHP code nog relevant is:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| $library = new SchemaDOMDocument("1.0"); $library->validateOnParse = true; $library->load('source.xml'); $library->validateXMLSchemas(); class SchemaDOMDocument extends DOMDocument { public function validateXMLSchemas() { $schemaLocation = $this->documentElement->getAttributeNS('http://www.w3.org/2001/XMLSchema-instance', 'schemaLocation'); if (! $schemaLocation) { throw new DOMException('No schemas found'); } /* the schemaLocation contains pairs of values separated by spaces the first value in each pair is the name space to be validated. The second is a URI defining the location of the schema validate each namespace using the provided URI */ $pairs = preg_split('/\s+/', $schemaLocation); $pairCount = count($pairs); if ($pairCount <= 1) { throw new DOMException('Invalid schema location value.'); } $valid = true; for($x = 1; $x < $pairCount; $x+=2) { $valid = $this->schemaValidate($pairs[$x]) && $valid; } if(! $valid) { throw new DOMException('XML Schema Validation Failure'); } return true; } } |
Kan iemand mij vertellen hoe het wel moet? Ik heb al tientallen examples uit Google bekeken, vele op een andere manier dan de vorige, maar geen van alle lijkt te werken. Moet toch iemand zijn die dit eerder heeft gedaan?