Re: substitutionGroup across namespaces

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 09:15:15 UTC