-----Ursprüngliche Nachricht----- Von: basex-talk-bounces@mailman.uni-konstanz.de [mailto:basex-talk-bounces@mailman.uni-konstanz.de] Im Auftrag von basex-talk-request@mailman.uni-konstanz.de Gesendet: Dienstag, 12. Juli 2011 12:27 An: basex-talk@mailman.uni-konstanz.de Betreff: BaseX-Talk Digest, Vol 19, Issue 14 Send BaseX-Talk mailing list submissions to basex-talk@mailman.uni-konstanz.de To subscribe or unsubscribe via the World Wide Web, visit https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk or, via email, send a message with subject or body 'help' to basex-talk-request@mailman.uni-konstanz.de You can reach the person managing the list at basex-talk-owner@mailman.uni-konstanz.de When replying, please edit your Subject line so it is more specific than "Re: Contents of BaseX-Talk digest..." Today's Topics: 1. XQST0054 ? (Burkert, Michael) ---------------------------------------------------------------------- Message: 1 Date: Tue, 12 Jul 2011 10:28:15 +0000 From: "Burkert, Michael" <Michael.Burkert@gigatronik.com> To: "basex-talk@mailman.uni-konstanz.de" <basex-talk@mailman.uni-konstanz.de> Subject: [basex-talk] XQST0054 ? Message-ID: <A037E4EDAB128E42A44F20AF7E898C69017BD3@S-MEX2.GT.local> Content-Type: text/plain; charset="iso-8859-1" Hallo ! Der Fehler XQST0054 soll aussagen: A global variable depends on itself. This may be triggered by a circular variable definition. Nun verwende ich gar keine globale Variable. Die Aufgabe ist einfach: Ein XML-Schema (xsd) soll geparst werden und die Abh?ngigkeit der Elemente (xsd:element) in eine gew?nschte Darstellung gebracht werden. Etwa so: <XSDBaum> <elem name="ElNameX1" min="" max=""> <elem name=" ElNameX2" min="0" max="1"/> <elem name=" ElNameX3" min="0" max="1"> Der Fehler tritt erst auf, wenn die Stelle im xml-File bearbeitet wird. Blendet man diese aus, gibt es keine Fehler-Meldung von BaseX. Fehlermeldung mit: if ( name($node) = "xsd:element") then erg:element($root, $node) Keine Fehlermeldung mit: if ( name($node) = "xsd:elementAUSBLENDEN") then erg:element($root, $node) Die problemeatische Stelle im xml-File sieht in etwa folgenderma?en aus: <xsd:complexType name="CTName1"> <xsd:sequence> <xsd:choice minOccurs="0" maxOccurs="unbounded"> <xsd:element name="eLName1" type="ns:ELName1" minOccurs="1" maxOccurs="1" /> <xsd:element name="eLName2" type="ns:ELName2" minOccurs="1" maxOccurs="1" /> </xsd:choice> <xsd:choice minOccurs="0" maxOccurs="1"> <xsd:element name="eLName5" type="ns:ELName5" minOccurs="1" maxOccurs="1" /> <xsd:element name="eLName6" type="ns:ELName6" minOccurs="1" maxOccurs="1" /> </xsd:choice> </xsd:sequence> </xsd:complexType> Die Bearbeitung stockt demzufolge nach xsd:choice, auf die Ebene xsd:element. Die Abfrage: declare namespace xsd="http://www.w3.org/2001/XMLSchema"; declare namespace erg="http://www.MB.org/OTXErg"; declare function erg:next( $root , $CC) { for $node in $CC return <ende>{$node}</ende> }; declare function erg:all( $root , $CC) { for $node in $CC/* return if ( name($node) = "xsd:element") then erg:element( $root , $node) else <endeAll>{$node}</endeAll> }; declare function erg:getCTName( $n) { let $CTNAME := substring($n/@type,5,string-length($n/@type)) return $CTNAME }; declare function erg:choice( $root , $CC) { <choice min="{$CC/@minOccurs}" max="{$CC/@maxOccurs}"> { for $node in $CC/* return if ( name($node) = "xsd:element") then erg:element($root, $node) else <endeCC nodeName="{name($node)}"></endeCC> } </choice> }; declare function erg:sequence( $root , $CC) { for $node in $CC/* return if ( name($node) = "xsd:element") then erg:element( $root , $node) else if ( name($node) = "xsd:choice") then erg:choice( $root , $node) else if ( name($node) = "xsd:any") then () else <endeSEQ>{$node}</endeSEQ> }; declare function erg:extension( $root , $CC) { for $node in $CC/* return if ( name($node) = "xsd:sequence") then erg:sequence($root, $node) else if ( name($node) = "xsd:attribute") then () else <endeEXT>{$node}</endeEXT> }; declare function erg:complexContent( $root , $CC) { for $node in $CC/* return if ( name($node) = "xsd:extension") then erg:extension($root, $node) else <endeCC>{$node}</endeCC> }; declare function erg:complexType( $root , $CTName) { for $node in $root/xsd:complexType[ @name=$CTName]/* return if ( name($node) = "xsd:complexContent") then erg:complexContent($root, $node) else if ( name($node) = "xsd:sequence") then erg:sequence($root, $node) else if ( name($node) = "xsd:choice") then erg:choice($root, $node) else if ( name($node) = "xsd:anyAttribute") then () else if ( name($node) = "xsd:attribute") then () else if ( name($node) = "xsd:attributeGroup") then () else if ( name($node) = "xsd:all") then erg:all($root, $node) else <endeCT>{$node}</endeCT> }; declare function erg:element( $root , $elem ) { let $CTName := erg:getCTName($elem) return <elem name="{$elem/@name}" min="{$elem/@minOccurs}" max="{$elem/@maxOccurs}" >{erg:complexType( $root, $CTName)}</elem> }; <XSDBaum> { let $elem := //xsd:element[@name='otx'] return erg:element( /* , $elem) } </XSDBaum> Mit freundlichen Gr??en Michael
participants (1)
-
Burkert, Michael