Hello,

The first problem is that the .xsd was not up to date.

The second is that you cannot call load() on an xml string, you have to call loadXML().
load() is for a file.

- Ben

Ben Sgro wrote:
Hello,

I'm having a lot of trouble getting the dom object schema validation to work. After looking on google, it seems there isn't a straight forward way to handle
complex schemas.

Take the following code:

       if (is_file($schemaFile))
       {
           $domObj->load($requestXml);
           if (!$domObj->schemaValidate($schemaFile))
           {


load() is throwing a warning:
<b>Warning</b>: DOMDocument::load() [<a href='function.DOMDocument-load'>function.DOMDocument-load</a>]: I/O warning : failed to load external entity

And so is the call to schemaValidate()
<b>Warning</b>: DOMDocument::schemaValidate() [<a href='function.DOMDocument-schemaValidate'>function.DOMDocument-schemaValidate</a>]: The document has no document element.

My XML struct:

<Template archived="0" id="2" label="Millenium PredictR Template" version="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
 <Meta />
 <Phases>
   <Phase state="development" />
   <Phase state="testing" />
   <Phase state="published">
     <SubjectTypes>
       <SubjectTypeRef idref="MilleniumProperty" />
     </SubjectTypes>
     <DataPointGroups>
       <DataPointGroup dataSourceMappingRef="1" label="Millenium">
         <DataPoint name="prepredictr" />
       </DataPointGroup>
     </DataPointGroups>
     <Output>
<Transformation enabled="true" filename="PredictR_result_to_pxClient" />
     </Output>
   </Phase>
 </Phases>
 <History>
   <Event dateTime="2008-04-14T10:56:12Z" type="created" user="ramap@" />
 </History>
</Template>

My schema struct:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";>
   <xs:element name="Template">
       <xs:complexType>
           <xs:sequence>
                             <xs:element name="Meta" minOccurs="0">
                   <xs:complexType>
                       <xs:sequence>
<xs:element name="Meta" type="SimpleNameValuePairType" minOccurs="0"
                               maxOccurs="unbounded"/>
                       </xs:sequence>
</xs:complexType> </xs:element>

               <xs:element name="Phases">
                   <xs:complexType>
                       <xs:sequence>
<xs:element name="Phase" minOccurs="3" maxOccurs="3">
                               <xs:complexType mixed="true">
                                   <xs:sequence>
<xs:element name="SubjectTypes" minOccurs="0" maxOccurs="1">
                                           <xs:complexType>
                                               <xs:sequence>
<xs:element name="SubjectTypeRef" minOccurs="1" maxOccurs="unbounded">
                                                       <xs:complexType>
<xs:attribute name="idref" type="xs:string" use="required"/>
                                                       </xs:complexType>
                                                   </xs:element>
                                               </xs:sequence>
                                           </xs:complexType>
                                       </xs:element>
<xs:element name="DataPointGroups" minOccurs="0" maxOccurs="1">
                                           <xs:complexType>
                                               <xs:sequence>
<xs:element name="DataPointGroup">
                                                       <xs:complexType>
                                                           <xs:sequence>
<xs:element name="DataPoint"> <xs:complexType> <xs:sequence> <xs:element name="Exceptions" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="Exception" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="value" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="name" use="required"/> <xs:attribute name="dataSourceMappingRef" use="required"/> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="label"/>
                                                       </xs:complexType>
                                                   </xs:element>
                                               </xs:sequence>
                                           </xs:complexType>
                                       </xs:element>
<xs:element name="Output" minOccurs="0" maxOccurs="1">
                                           <xs:complexType>
                                               <xs:sequence>
<xs:element name="Transformation"/>
                                               </xs:sequence>
<xs:attribute name="enabled" type="xs:boolean"/> <xs:attribute name="filename"/>
                                           </xs:complexType>
                                       </xs:element>
                                   </xs:sequence>
                                   <xs:attribute name="state">
                                       <xs:simpleType>
<xs:restriction base="NonEmptyString"> <xs:pattern value="development|testing|published"></xs:pattern>
                                           </xs:restriction>
                                       </xs:simpleType>
                                   </xs:attribute>
<xs:attribute name="version" use="optional" type="xs:integer"/>
                               </xs:complexType>
                           </xs:element>
                       </xs:sequence>
                   </xs:complexType>
               </xs:element>
<!-- <xs:element name="History" minOccurs="0" maxOccurs="1">
                   <xs:complexType>
                       <xs:sequence>
<xs:element name="Event" minOccurs="0" maxOccurs="unbounded"/>
                                                 </xs:sequence>
                       <xs:attribute name="type"/>
                       <xs:attribute name="user"/>
                       <xs:attribute name="dateTime"/>
                   </xs:complexType>
               </xs:element> -->
                            <xs:element name="History">
                   <xs:complexType>
                       <xs:sequence minOccurs="0" maxOccurs="unbounded">
                           <xs:element name="Event">
                               <xs:complexType mixed="true">
                                   <xs:attribute name="type"/>
                                   <xs:attribute name="user"/>
                                   <xs:attribute name="dateTime"/>
<xs:anyAttribute namespace="##any" processContents="lax"/>
                               </xs:complexType>
                           </xs:element>
                       </xs:sequence>
                   </xs:complexType>
               </xs:element>
                         </xs:sequence>
                     <xs:attribute name="id" type="xs:integer"/>
           <xs:attribute name="label" type="xs:string"/>
           <xs:attribute name="version" type="xs:integer"/>
           <xs:attribute name="archived" type="xs:integer"/>
       </xs:complexType>
   </xs:element>


   <xs:complexType name="SimpleNameValuePairType">
       <xs:sequence>
<xs:element name="Meta" type="SimpleNameValuePairType" minOccurs="0"
               maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute name="name" use="required">
           <xs:simpleType>
               <xs:restriction base="xs:string">
                   <xs:minLength value="1"/>
                   <xs:whiteSpace value="collapse"/>
               </xs:restriction>
           </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="value" type="xs:anySimpleType"/>
   </xs:complexType>
     <xs:simpleType name="NonEmptyString">
       <xs:restriction base="xs:string">
           <xs:minLength value="1"/>
       </xs:restriction>
   </xs:simpleType>
  </xs:schema>


- Ben
_______________________________________________
New York PHP Community Talk Mailing List
http://lists.nyphp.org/mailman/listinfo/talk

NYPHPCon 2006 Presentations Online
http://www.nyphpcon.com

Show Your Participation in New York PHP
http://www.nyphp.org/show_participation.php

_______________________________________________
New York PHP Community Talk Mailing List
http://lists.nyphp.org/mailman/listinfo/talk

NYPHPCon 2006 Presentations Online
http://www.nyphpcon.com

Show Your Participation in New York PHP
http://www.nyphp.org/show_participation.php

Reply via email to