[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Best way to represent an item and its context?
Hi Folks, Many thanks for the responses. Please allow me to provide more insight into what I am doing and inquire why I am getting an "ArrayIndexOutOfBoundsException" with Saxon. Recall that an XML Schema may be imported or included by another XML Schema. That importing/including schema is the "context" for the schema. Further, there may be a schema that imports/includes the importing/including schema and is its context. And so on. I'd like to represent a schema in its context, i.e., a "schema-in-context". Here are two simple functions to do it. The first function takes a schema and creates a schema-in-context that has an empty context. The second takes a schema and its context. <xsl:function name="sic:schema-in-context"> <xsl:param name="schema" as="element()"/> <schema-in-context> <schema><xsl:sequence select="$schema" /></schema> <schema-in-context /> </schema-in-context> </xsl:function> <xsl:function name="sic:schema-in-context"> <xsl:param name="schema" as="element()"/> <xsl:param name="schema-in-context" as="element()"/> <schema-in-context> <schema><xsl:sequence select="$schema" /></schema> <xsl:sequence select="$schema-in-context" /> </schema-in-context> </xsl:function> Do you see anything wrong with those? Apparently there is something wrong, since I get an "ArrayIndexOutOfBoundsException" with Saxon, as I describe next. Here's a variable consisting of three schemas: <xsl:variable name="schemas"> <schemas> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.test. org" xmlns="http://www.test.org" elementFormDefault="qualified"> <xsd:include schemaLocation="schema2.xsd" /> <xsd:element name="Title" type="xsd:string" /> <xsd:element name="Author" type="Author" /> </xsd:schema> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:include schemaLocation="schema3.xsd" /> <xsd:simpleType name="Author"> <xsd:restriction base="xsd:string"> <xsd:maxLength value="20" /> </xsd:restriction> </xsd:simpleType> </xsd:schema> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:element name="Date" type="xsd:date" /> </xsd:schema> </schemas> </xsl:variable> I obtain the first schema and invoke the schema-in-context function with it: <xsl:variable name="schema-in-context-1" select="sic:schema-in-context($schemas/schemas/xs:schema[1])" /> <Test1> <xsl:sequence select="$schema-in-context-1" /> </Test1> The output is perfect. I obtain the second schema and invoke the schema-in-context function with it and $schema-in-context-1: <xsl:variable name="schema-in-context-2" select="sic:schema-in-context($schemas/schemas/xs:schema[2], $schema-in-context-1)" /> <Test2> <xsl:sequence select="$schema-in-context-2" /> </Test2> Again, the output is perfect. Now, things go bad. I obtain the third schema and invoke the schema-in-context function with it and $schema-in-context-2: <xsl:variable name="schema-in-context-3" select="sic:schema-in-context($schemas/schemas/xs:schema[3], $schema-in-context-2)" /> <Test3> <xsl:sequence select="$schema-in-context-3" /> </Test3> I get this exception: java.lang.ArrayIndexOutOfBoundsException: -1 at net.sf.saxon.om.NamePool.getPrefixFromNamespaceCode(NamePool.java:937) at net.sf.saxon.serialize.XMLEmitter.namespace(XMLEmitter.java:369) at net.sf.saxon.event.ProxyReceiver.namespace(ProxyReceiver.java:140) at net.sf.saxon.event.NamespaceReducer.namespace(NamespaceReducer.java:122) at net.sf.saxon.event.ComplexContentOutputter.startContent(ComplexContentOutputt er.java:571) at net.sf.saxon.event.ComplexContentOutputter.startElement(ComplexContentOutputt er.java:180) at net.sf.saxon.tree.tiny.TinyElementImpl.copy(TinyElementImpl.java:312) at net.sf.saxon.event.ComplexContentOutputter.append(ComplexContentOutputter.jav a:521) at net.sf.saxon.expr.Expression.process(Expression.java:490) at net.sf.saxon.expr.CardinalityChecker.process(CardinalityChecker.java:268) at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.j ava:318) at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.j ava:269) at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:569) at net.sf.saxon.expr.instruct.Instruction.process(Instruction.java:123) at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.j ava:318) at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.j ava:269) at net.sf.saxon.expr.instruct.Instruction.process(Instruction.java:123) at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.j ava:318) at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.j ava:269) at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:569) at net.sf.saxon.expr.LetExpression.processLeavingTail(LetExpression.java:567) at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:569) at net.sf.saxon.expr.instruct.Instruction.process(Instruction.java:123) at net.sf.saxon.expr.LetExpression.process(LetExpression.java:409) at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.j ava:318) at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.j ava:269) at net.sf.saxon.expr.instruct.Template.applyLeavingTail(Template.java:208) at net.sf.saxon.expr.instruct.ApplyTemplates.applyTemplates(ApplyTemplates.java: 368) at net.sf.saxon.Controller.transformDocument(Controller.java:1887) at net.sf.saxon.Controller.transform(Controller.java:1737) at net.sf.saxon.Transform.processFile(Transform.java:938) at net.sf.saxon.Transform.doTransform(Transform.java:572) at net.sf.saxon.Transform.main(Transform.java:72) Fatal error during transformation: java.lang.ArrayIndexOutOfBoundsException: -1 After much effort I am unable to determine what the problem is. Any help you could provide would be much appreciated. Below is the complete stylesheet. /Roger <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sic="http://www.schema-library.org/schema-in -context" version="2.0"> <xsl:function name="sic:schema-in-context"> <xsl:param name="schema" as="element()"/> <schema-in-context> <schema><xsl:sequence select="$schema" /></schema> <schema-in-context /> </schema-in-context> </xsl:function> <xsl:function name="sic:schema-in-context"> <xsl:param name="schema" as="element()"/> <xsl:param name="schema-in-context" as="element()"/> <schema-in-context> <schema><xsl:sequence select="$schema" /></schema> <xsl:sequence select="$schema-in-context" /> </schema-in-context> </xsl:function> <xsl:template match="/"> <Results> <xsl:variable name="schemas"> <schemas> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.test. org" xmlns="http://www.test.org" elementFormDefault="qualified"> <xsd:include schemaLocation="schema2.xsd" /> <xsd:element name="Title" type="xsd:string" /> <xsd:element name="Author" type="Author" /> </xsd:schema> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:include schemaLocation="schema3.xsd" /> <xsd:simpleType name="Author"> <xsd:restriction base="xsd:string"> <xsd:maxLength value="20" /> </xsd:restriction> </xsd:simpleType> </xsd:schema> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:element name="Date" type="xsd:date" /> </xsd:schema> </schemas> </xsl:variable> <xsl:variable name="schema-in-context-1" select="sic:schema-in-context($schemas/schemas/xs:schema[1])" /> <Test1> <xsl:sequence select="$schema-in-context-1" /> </Test1> <xsl:variable name="schema-in-context-2" select="sic:schema-in-context($schemas/schemas/xs:schema[2], $schema-in-context-1)" /> <Test2> <xsl:sequence select="$schema-in-context-2" /> </Test2> <xsl:variable name="schema-in-context-3" select="sic:schema-in-context($schemas/schemas/xs:schema[3], $schema-in-context-2)" /> <Test3> <xsl:sequence select="$schema-in-context-3" /> </Test3> </Results> </xsl:template> </xsl:stylesheet>
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|