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