- From: Mark Proctor <mproctor@codehaus.org>
- Date: Mon, 25 Oct 2004 14:35:01 +0200
- To: George Cristian Bina <george@sync.ro>
- CC: xmlschema-dev@w3.org
I just tried it doing getResource and toExternalForm which produces the
following string:
jar:file:/D:/java/workspaces/drools/target/drools-java-2.0-beta-18.jar!/META-INF/java.xsd
jar:file:/D:/java/workspaces/drools/target/drools-python-2.0-beta-18.jar!/META-INF/python.xsd
jar:file:/D:/java/workspaces/drools/target/drools-groovy-2.0-beta-18.jar!/META-INF/groovy.xsd
jar:file:/D:/java/workspaces/drools/target/drools-base-2.0-beta-18.jar!/META-INF/rules.xsd
I do this using the following code:
URL java = cl.getResource( "META-INF/java.xsd" );
URL python = cl.getResource( "META-INF/python.xsd" );
URL groovy = cl.getResource( "META-INF/groovy.xsd" );
URL rules = cl.getResource( "META-INF/rules.xsd" );
String url = "";
if ( java != null ) url = url + java.toExternalForm() + " ";
if ( python != null ) url = url + python.toExternalForm() + " ";
if ( groovy != null ) url = url + groovy.toExternalForm() + " ";
if ( rules != null ) url = url + rules.toExternalForm();
parser.setProperty( JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA );
parser.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation",
url);
But now I get the following error, like its not finding the xsds at all:
(jar:file:/D:/java/workspaces/drools/drools-examples/target/drools-examples-2.0-beta-18.jar!/org/drools/examples/fibonacci/fibonacci.java.drl:5,57)
: cvc-elt.1: Cannot find the declaration of element 'rule-set'.
Mark
Mark Proctor wrote:
> I currently use:
> private static final String JAXP_SCHEMA_LANGUAGE =
> "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
> private static final String W3C_XML_SCHEMA =
> "http://www.w3.org/2001/XMLSchema";
> private static final String SCHEMA_SOURCE =
> "http://java.sun.com/xml/jaxp/properties/schemaSource";
> As detailed in the following IBM article:
> http://www-106.ibm.com/developerworks/xml/library/x-tipvalschm/
> I do know that our original xsds worked with that property, but that
> was where we imported the java namespace into rules.xsd and used choice.
>
> I'm looking at xerces and see that it has its own properties as well.
> http://xml.apache.org/xerces-j/properties.html
> However using this property I can no longer specify the xsds as an
> InputStream, how would I specify urls for files that are in jars,
> which themselves are in the classpath?
>
> Regards
>
> Mark
> George Cristian Bina wrote:
>
>> Hi Mark,
>>
>> Well, the following schemas plus instance are valid(Xerces 2.6.2). I
>> do not know what SCHEMA_SOURCE contains in your code line:
>>
>> parser.setProperty(SCHEMA_SOURCE,( InputStream[] )
>> schemaList.toArray( new InputStream[0] ) );
>>
>> You may try setting a value similar with the one from schemaLocation
>> attribute to the
>> http://apache.org/xml/properties/schema/external-schemaLocation
>> property.
>>
>> rules.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: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>
>>
>> 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"
>> schemaLocation="rules.xsd"/>
>> <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>
>>
>> sample.xml
>> ==========
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <rule-set name="fibonacci" xmlns="http://drools.org/rules"
>> xmlns:java="http://drools.org/semantics/java"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:schemaLocation="http://drools.org/semantics/java java.xsd
>> http://drools.org/rules rules.xsd">
>> <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>
>>
>> Best Regards,
>> George
>> ---------------------------------------------------------------------
>> George Cristian Bina
>> <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
>> http://www.oxygenxml.com
>>
>>
>
>
Received on Monday, 25 October 2004 12:35:43 UTC