Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


[XML Schema] Extending types in imported schema instance

From: <wilde825@------.-->
To: <xml-dev@-----.---.--->
Date: 4/1/2008 2:34:00 PM
Dear devver,
 
I'm having big difficulties getting my schema to work. I've been reading the w3 works about the XML schema, but can't find the problem I'm doing wrong.
 
My structure is some kind of top down extending structure. I've got my schema that i call from the XML instance, this one imports the other namespaces that should be used.
 
Here are my sources (I'll quote them at the bottom of this message for archiving):
 
Validation:
http://sove.nl/xmysql_mysql.php
 
XML Source example:
http://sove.nl/xmysql_mysql.xml
 
XSD ('wrapper') schema instance:
http://sove.nl/ns/core.xsd
 
XSD (import) schema instance for ns 'mysql':

http://sove.nl/ns/system/mysql.xsd
 
 
I've been able to create this working structure (in mysql.xsd):
    <xs:complexType name="table"> 
        <xs:sequence> 
            <xs:element ref="field" minOccurs="0" maxOccurs="unbounded" /> 
        </xs:sequence> 
        <xs:attribute name="name" type="xs:string" use="required" /> 
    </xs:complexType> 
[..] 
    <xs:complexType name="field"> 
        <xs:attribute name="name" type="xs:string" use="required" /> 
        <xs:attribute name="table" type="xs:string" use="optional" /> 
    </xs:complexType> 
[..] 
    <xs:element name="field"             type="field" />
But I'd like to use this (doesn't validate with the xml) (in mysql.xsd):    <xs:complexType name="table"> 
        <xs:sequence> 
            <xs:element name="field" type="mysql:field" minOccurs="0" maxOccurs="unbounded" /> <!-- or type="field" //--> 
        </xs:sequence> 
        <xs:attribute name="name" type="xs:string" use="required" /> 
    </xs:complexType> 
[..] 
    <xs:complexType name="field"> 
        <xs:attribute name="name" type="xs:string" use="required" /> 
        <xs:attribute name="table" type="xs:string" use="optional" /> 
    </xs:complexType>This is probably the only way out, if I'm trying to extend using the same tagname (but stronger validation because of parent element). This doesnt work (in mysql.xsd):    <xs:complexType name="cond"> 
        <xs:sequence> 
            <xs:element name="field" minOccurs="0" maxOccurs="unbounded"> 
                <xs:complexType> 
                    <xs:complexContent> 
                        <xs:extension base="field"> 
                            <xs:attribute name="operator" type="xs:string" use="required" /> 
                        </xs:extension> 
                    </xs:complexContent> 
                </xs:complexType>         
            </xs:element> 
        </xs:sequence> 
    </xs:complexType>I don't understand what I'm doing wrong, because all google code snippets + w3 works does say this should be right. I've been shuffling around with targetnamespace and so on, but it didn't work outThis error i get very much:Warning: DOMDocument::schemaValidate() [function.DOMDocument-schemaValidate]: Validation failed: no DTD found !Element '{http://sove.nl/ns/system/mysql/}field': This element is not expected. Expected is ( field ). in /var/www/client/sove.nl/httpdocs/xmysql_mysql.php on line 34So it's expecting an element with a blank namespace, but it's defined inside the MYSQL namespace (but is ignored)How can I get my extension to work? Please help, been trying for days now. Big thanks, Robert de Wilde Here are my full source codes (better don't quote them i guess): XMYSQL_MYSQL.PHP<?php $library = new SchemaDOMDocument("1.0"); 
 $library->validateOnParse = true; 
 
 $library->load('xmysql_mysql.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; 
     } 
 }  ?>
XMYSQL_MYSQL.XML:<?xml version="1.0" encoding="utf-8"?><stream xmlns="http://sove.nl/ns/core/" 
    xmlns:mysql="http://sove.nl/ns/system/mysql/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://sove.nl/ns/core/ http://sove.nl/ns/core.xsd">
    
    
 <mysql:set>  
  <mysql:query type="select">
   <mysql:table name="objects">
    <mysql:field name="objectid" />
    <mysql:field name="objectname" />
    <mysql:field name="objectgroup" />
   </mysql:table>
   <mysql:table name="settings">
    <mysql:field name="settingtimezone" />
   </mysql:table>
   <mysql:join>
    <mysql:table name="extended">
     <mysql:field name="extendedobjectid" />
     <mysql:field name="extendedinfo" />
    </mysql:table>
    <mysql:cond>
     <mysql:field name="extendedobjectid" table="extended" />
    </mysql:cond>
   </mysql:join>
   <mysql:cond>
    <mysql:field name="objectid" table="objects" />
   </mysql:cond>
   <mysql:order type="desc">
    <mysql:field name="objectid" table="objects" />
   </mysql:order>
   <mysql:group>
    <mysql:field name="objectid" table="objects" />
   </mysql:group>
  </mysql:query>
 </mysql:set>
  
  
</stream> CORE.XSD<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns="http://sove.nl/ns/core/" xmlns:mysql="http://sove.nl/ns/system/mysql/" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://sove.nl/ns/core/">
 
 <!-- ## SYSTEM ## //-->
 <xs:import namespace="http://sove.nl/ns/system/mysql/" schemaLocation="http://sove.nl/ns/system/mysql.xsd"/>
 
 <!-- ## TYPES ## //-->
 <!--<xs:import namespace="http://sove.nl/ns/types/boek/" schemaLocation="http://sove.nl/ns/types/boek.xsd"/>//-->
 
 <xs:complexType name="stream">
  <xs:sequence>
   <xs:element ref="mysql:set"/>
  </xs:sequence>
 </xs:complexType>
 
 <xs:element name="stream" type="stream" />
</xs:schema> MYSQL.XSD<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns="http://sove.nl/ns/system/mysql/" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://sove.nl/ns/system/mysql/">
  <xs:complexType name="set">
  <xs:sequence>
   <xs:element ref="query"/>
  </xs:sequence>     
 </xs:complexType> <xs:complexType name="query">
  <xs:sequence>
   <xs:element ref="table"   minOccurs="1" maxOccurs="unbounded" />
   <xs:element ref="query"   minOccurs="0" maxOccurs="unbounded" />
   <xs:element ref="join"    minOccurs="0" maxOccurs="unbounded" />
   <xs:element ref="cond"    minOccurs="0" maxOccurs="unbounded" />
   <xs:element ref="order"   minOccurs="0" maxOccurs="1" />
   <xs:element ref="group"   minOccurs="0" maxOccurs="1" />
  </xs:sequence>
  <xs:attribute name="type" type="xs:string" />
 </xs:complexType>
 
 <xs:complexType name="table">
  <xs:sequence>
   <xs:element ref="field" minOccurs="0" maxOccurs="unbounded" />
  </xs:sequence>
  <xs:attribute name="name" type="xs:string" use="required" />
 </xs:complexType>
 
 <xs:complexType name="field">
  <xs:attribute name="name" type="xs:string" use="required" />
  <xs:attribute name="table" type="xs:string" use="optional" />
 </xs:complexType> <xs:complexType name="join">
  <xs:sequence>
   <xs:element ref="table" minOccurs="1" />
   <xs:element ref="join" minOccurs="0" maxOccurs="unbounded" />
   <xs:element ref="cond" minOccurs="1" />
  </xs:sequence>
 </xs:complexType> <xs:complexType name="cond">
  <xs:sequence>
   <xs:element name="field" minOccurs="0" maxOccurs="unbounded">
    <xs:complexType>
     <xs:complexContent>
      <xs:extension base="field">
       <xs:attribute name="operator" type="xs:string" use="required" />
      </xs:extension>
     </xs:complexContent>
    </xs:complexType>  
   </xs:element>
  </xs:sequence>
 </xs:complexType> <xs:complexType name="order">
  <xs:sequence>
   <xs:element ref="field" minOccurs="0" maxOccurs="unbounded" />
   <xs:element ref="table" minOccurs="0" maxOccurs="unbounded" />
  </xs:sequence>
  <xs:attribute name="type" type="xs:string" />
 </xs:complexType> <xs:complexType name="group">
  <xs:sequence>
   <xs:element ref="field" minOccurs="0" maxOccurs="unbounded" />
   <xs:element ref="table" minOccurs="0" maxOccurs="unbounded" />
  </xs:sequence>
 </xs:complexType>
 <xs:element name="set"     type="set" />
 <xs:element name="query"    type="query" />
 <xs:element name="table"   type="table" />
 <xs:element name="field"    type="field" />
 <xs:element name="join"    type="join" />
 <xs:element name="cond"    type="cond" />
 <xs:element name="order"    type="order" />
 <xs:element name="group"    type="group" />
 
</xs:schema>Robert de Wilde
wilde825@p...


transparent
Print
Mail
Like It
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent