- From: Mark Proctor <mproctor@codehaus.org>
- Date: Mon, 25 Oct 2004 13:14:54 +0200
- To: George Cristian Bina <george@sync.ro>
- CC: xmlschema-dev@w3.org
I just added the sequence as shown in your example and I still get the following error: fibonacci-java: [java] Using drl: fibonacci.java.drl [java] (null: 10, 83): src-resolve: Cannot resolve the name 'rules:class' to a(n) 'element declaration' component. [java] (jar:file:/D:/java/workspaces/drools/drools-examples/target/drools-examples-2.0-beta-18.jar!/org/drools/examples/fibonacci/fibonacci.java.drl: 9, 19) : cvc-complex-type.2.4.a: Invalid content was found starting with element 'java:class'. One of '{"http://drools.org/rules":class}' is expected. [java] (jar:file:/D:/java/workspaces/drools/drools-examples/target/drools-examples-2.0-beta-18.jar!/org/drools/examples/fibonacci/fibonacci.java.drl: 11, 21): cvc-complex-type.2.4.a: Invalid content was found starting with element 'java:condition'. One of '{"http://drools.org/rules":parameter, "http://drools.org/rules":condition}' is expected. Mark George Cristian Bina wrote: > Hi Mark, > > Your rulex.xsd schema is invalid > > <xs:complexType> > <xs:element ref="rules:class"/> > <xs:attribute name="identifier" use="required" type="xs:string"/> > </xs:complexType> > > should be: > > <xs:complexType> > <xs:sequence> > <xs:element ref="rules:class"/> > </xs:sequence> > <xs:attribute name="identifier" use="required" type="xs:string"/> > </xs:complexType> > > Best regards, > George > --------------------------------------------------------------------- > George Cristian Bina > <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger > http://www.oxygenxml.com > > > > Mark Proctor wrote: > >> >> When processing the following file: >> <?xml version="1.0"?> >> <rule-set name="fibonacci" >> xmlns="http://drools.org/rules" >> xmlns:java="http://drools.org/semantics/java"> >> >> <rule name="Recurse" salience="10"> >> <parameter identifier="f"> >> <java:class>org.drools.examples.fibonacci.Fibonacci</java:class> >> </parameter> >> <java:condition>f.getValue() == -1</java:condition> >> <java:consequence> >> System.err.println( "recurse for " + f.getSequence() ); >> drools.assertObject( new Fibonacci( f.getSequence() - 1 ) ); >> </java:consequence> >> </rule> >> </rule-set> >> >> I get the following error: >> [java] Using drl: fibonacci.java.drl >> [java] (null: 10, 83): src-resolve: Cannot resolve the name >> 'rules:class' to >> a(n) 'element declaration' component. >> [java] (null: 23, 46): s4s-elt-invalid-content.1: The content of >> '#AnonType_ >> parameterrule' is invalid. Element 'element' is invalid, misplaced, >> or occurs t >> oo often. >> [java] >> (jar:file:/D:/java/workspaces/drools/drools-examples/target/drools-ex >> amples-2.0-beta-18.jar!/org/drools/examples/fibonacci/fibonacci.java.drl: >> 11, 21 >> ): cvc-complex-type.2.4.a: Invalid content was found starting with >> element 'java >> :condition'. One of '{"http://drools.org/rules":parameter, >> "http://drools.org/ru >> les":condition}' is expected. >> >> Yes I'm using xerces 2.6.2 and I make it aware of the .xsds with the >> following code: >> InputStream java = cl.getResourceAsStream( "META-INF/java.xsd" ); >> InputStream python = cl.getResourceAsStream( "META-INF/python.xsd" ); >> InputStream groovy = cl.getResourceAsStream( "META-INF/groovy.xsd" ); >> InputStream rules = cl.getResourceAsStream( "META-INF/rules.xsd" ); >> >> java.util.List schemaList = new java.util.ArrayList( ); >> >> if ( java != null ) schemaList.add( java ); >> if ( python != null ) schemaList.add( python ); >> if ( groovy != null ) schemaList.add( groovy ); >> if ( rules != null ) schemaList.add( rules ); >> >> parser.setProperty( JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA ); >> parser.setProperty(SCHEMA_SOURCE,( InputStream[] ) >> schemaList.toArray( new InputStream[0] ) ); >> >> For reference these are the exact files I'm using to to the validation: >> rulex.xsd >> <?xml version="1.0" encoding="UTF-8"?> >> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >> targetNamespace="http://drools.org/rules" >> elementFormDefault="qualified" >> xmlns:rules="http://drools.org/rules"> >> >> <xs:element name="rule-set"> >> <xs:complexType> >> <xs:sequence> >> <xs:element minOccurs="0" maxOccurs="unbounded" >> ref="rules:rule"/> >> </xs:sequence> >> <xs:attribute name="name" use="required" type="xs:string"/> >> <xs:attribute name="description" type="xs:string"/> >> </xs:complexType> >> </xs:element> >> >> <xs:element name="rule"> >> <xs:complexType> >> <xs:sequence> >> >> <xs:element name="parameter" maxOccurs="unbounded" > >> <xs:complexType> >> <xs:element ref="rules:class"/> >> <xs:attribute name="identifier" use="required" >> type="xs:string"/> >> </xs:complexType> >> </xs:element> >> >> >> <xs:element ref="rules:condition" maxOccurs="unbounded"/> >> >> >> <xs:element ref="rules:consequence"/> >> >> </xs:sequence> >> <xs:attribute name="name" use="required" type="xs:string"/> >> <xs:attribute name="salience" type="xs:integer"/> >> <xs:attribute name="no-loop" type="xs:boolean"/> >> <xs:attribute name="description" type="xs:string"/> >> </xs:complexType> >> >> </xs:element> >> >> <xs:element name="class" type="xs:string" abstract="true"/> >> <xs:element name="condition" type="xs:string" abstract="true"/> >> <xs:element name="consequence" type="xs:string" abstract="true"/> >> >> </xs:schema> >> java.xsd >> <?xml version="1.0" encoding="UTF-8"?> >> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >> targetNamespace="http://drools.org/semantics/java" >> elementFormDefault="qualified" >> xmlns:java="http://drools.org/semantics/java" >> xmlns:rules="http://drools.org/rules"> >> >> <xs:import namespace="http://drools.org/rules"/> >> >> <xs:element name="class" type="xs:string" >> substitutionGroup="rules:class"/> >> <xs:element name="condition" type="xs:string" >> substitutionGroup="rules:condition"/> >> <xs:element name="consequence" type="xs:string" >> substitutionGroup="rules:consequence"/> >> >> </xs:schema> >> >> Hope thats enough information. >> >> Mark >> >> >> >> >> George Cristian Bina wrote: >> >>> >>> Hi Mark, >>> >>> I tried your files and they work without any problems. I saved the >>> first schema as rules.xsd, the second as java.xsd and added a >>> schemaLocation to the import element, then the following sample: >>> >>> <?xml version="1.0" encoding="UTF-8"?> >>> <rule-set xmlns="http://drools.org/rules" >>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>> xsi:schemaLocation="http://drools.org/semantics/java java.xsd >>> http://drools.org/rules rules.xsd" name="test"> >>> <rule name="r1"> >>> <parameter identifier="test"> >>> <class xmlns="http://drools.org/semantics/java"/> >>> </parameter> >>> <condition xmlns="http://drools.org/semantics/java"/> >>> <consequence xmlns="http://drools.org/semantics/java"/> >>> </rule> >>> </rule-set> >>> >>> is valid according with Xerces 2.6.2 (from your similar post on the >>> xerces-j-dev list I guess you are using Xerces). >>> >>> Hope that helps, >>> George >>> --------------------------------------------------------------------- >>> George Cristian Bina >>> <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger >>> http://www.oxygenxml.com >>> >>> >>> Mark Proctor wrote: >>> >>>> In the http://drools.org project we have a base name space: >>>> http://drools.org/rules >>>> And three semantic namespaces: >>>> http://drools.org/semantic/java >>>> http://drools.org/semantic/groovy >>>> http://drools.org/semantic/python >>>> >>>> Each namespace xsd is in its own file. >>>> >>>> A rule is made up of classes, conditions, consequences and at the >>>> moment in the rule.xsd we use the choice feature to allow a user to >>>> specify which one they want: >>>> <xs:choice> >>>> <xs:element ref="java:consequence"/> >>>> <xs:element ref="groovy:consequence"/> >>>> <xs:element ref="python:consequence"/> >>>> </xs:choice> >>>> However this has the side affect of coupling the rule.xsd to the >>>> semantic xsds, and as a user only has the semantic xsds in the >>>> classpath that they wish to use they receive errors about the other >>>> namespaces, plus it makes it difficult for users wishing to add >>>> more semantic implementations as they need to alter rules.xsd. >>>> >>>> To try and remove this coupling we wanted to use some sort of >>>> abstract class in rules.xsd to specify a type, which the semantics >>>> would then extend. It seems the only way to do this is with >>>> substitutionalGroup, however it refuses to work when the elements >>>> are in different files and namespaces. >>>> >>>> I have included some sample code, any help would be greatly >>>> appreciated. >>>> >>>> Regards >>>> >>>> Mark >>>> >>>> ------------------------------- >>>> <?xml version="1.0" encoding="UTF-8"?> >>>> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >>>> targetNamespace="http://drools.org/rules" >>>> elementFormDefault="qualified" >>>> xmlns:rules="http://drools.org/rules"> >>>> >>>> <xs:element name="rule-set"> >>>> <xs:complexType> >>>> <xs:sequence> >>>> <xs:element minOccurs="0" maxOccurs="unbounded" >>>> ref="rules:rule"/> >>>> </xs:sequence> >>>> <xs:attribute name="name" use="required" type="xs:string"/> >>>> <xs:attribute name="description" type="xs:string"/> >>>> </xs:complexType> >>>> </xs:element> >>>> >>>> <xs:element name="rule"> >>>> <xs:complexType> >>>> <xs:sequence> >>>> >>>> <xs:element name="parameter" maxOccurs="unbounded" > >>>> <xs:complexType> >>>> <xs:sequence> >>>> <xs:element ref="rules:class"/> >>>> </xs:sequence> >>>> <xs:attribute name="identifier" use="required" >>>> type="xs:string"/> >>>> </xs:complexType> >>>> </xs:element> >>>> >>>> <xs:element ref="rules:condition" maxOccurs="unbounded" /> >>>> >>>> <xs:element ref="rules:consequence"/> >>>> >>>> </xs:sequence> >>>> <xs:attribute name="name" use="required" type="xs:string"/> >>>> <xs:attribute name="salience" type="xs:integer"/> >>>> <xs:attribute name="no-loop" type="xs:boolean"/> >>>> <xs:attribute name="description" type="xs:string"/> >>>> </xs:complexType> >>>> </xs:element> >>>> >>>> <xs:element name="class" type="xs:string" abstract="true"/> >>>> <xs:element name="condition" type="xs:string" abstract="true"/> >>>> <xs:element name="consequence" type="xs:string" abstract="true"/> >>>> >>>> </xs:schema> >>>> ------------------------------------------- >>>> <?xml version="1.0" encoding="UTF-8"?> >>>> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >>>> targetNamespace="http://drools.org/semantics/java" >>>> elementFormDefault="qualified" >>>> xmlns:java="http://drools.org/semantics/java" >>>> xmlns:rules="http://drools.org/rules"> >>>> >>>> <xs:import namespace="http://drools.org/rules"/> >>>> >>>> <xs:element name="class" type="xs:string" >>>> substitutionGroup="rules:class"/> >>>> <xs:element name="condition" type="xs:string" >>>> substitutionGroup="rules:condition"/> >>>> <xs:element name="consequence" type="xs:string" >>>> substitutionGroup="rules:consequence"/> >>>> >>>> </xs:schema> >>>> >>>> >>>> >>>> >>> >>> >>> >> > >
Received on Monday, 25 October 2004 11:15:28 UTC