2016-03-21 4 views
0

Kaç tane düğümde çalıştığımı hatırlamak için bir sayaç kullanmalıyım. Bu yüzden global var $ classCounter tanımladım. Bazı bilinmeyen nedenlerden ötürü, bir hata alıyorum bu hatadan ne anlama geldiğini anlamıyorum. XQuery'de global bir sayaç nasıl uygulanır?XQuery: global var fonksiyonunu kullanarak

bütün xqy dosyasıdır:

declare namespace rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"; 
declare namespace owl="http://www.w3.org/2002/07/owl#"; 
declare namespace xsd="http://www.w3.org/2001/XMLSchema#"; 
declare namespace rdfs="http://www.w3.org/2000/01/rdf-schema#"; 

import module namespace functx="http://www.functx.com"; 

declare variable $srcDoc:="test_xsd.xml"; (:need to adjust the input XSD file here:) 
declare variable $defaultXMLNS:="http://www.test.com#"; 
declare variable $defaultXMLBase:=$defaultXMLNS; 


declare variable $classCounter:=0; 

declare function local:owlClassNameBuilerHelper($pnode as node()*) 
as xs:string? 
{ 
    $classCounter:=classCounter+1; 
    let $tmp:="" 
    return 
    (
    "haha" 
    (:if(functx:if-empty($pnode/@name, "-1")!="-1") (:if the name attr doesn't exist:) 
    then data($pnode/ancestor::element[1]/@name) (:get the name attr of first ancestor named element:) 
    else data($pnode/@name):) 
) 
}; 

element rdf:RDF 
{ 
    namespace {""} {$defaultXMLNS}, 
    namespace {"owl"} {"http://www.w3.org/2002/07/owl#"}, 
    namespace {"xsd"} {"http://www.w3.org/2001/XMLSchema#"}, 
    namespace {"rdfs"} {"http://www.w3.org/2000/01/rdf-schema#"}, 
    attribute xml:base {$defaultXMLBase} 

} 

komut satırı: Ben ile uğraşan var kaç düğüm hatırlamak için bir sayaç kullanmak gerekir

zorba -i -f -q test.xqy 
+0

Lütfen bir [SSCCE] (http://sscce.org) belirtin. Sorunun ilgili kısmının kodun atlanmış bölümünde yer almasından korkuyorum. Lütfen asgari bir örnek bulmaya çalışın (a) Buradan mesaj gönderebilirsiniz ve (b) çok uzun değil. Olduğu gibi, bu soru neredeyse cevaplanamaz ve bundan dolayı kapalı olabilir. –

+0

XQuery Scripting'i kullanıyor musunuz? Bu, göstermeniz gereken çok önemli bir şey. –

+0

@JensErat güncellendi –

cevap

0

.

İlk olarak, XQuery işlevsel bir programlama dilidir. Bu tamamen farklı bir işlem modelidir: “ele aldığınız şeyi” hatırlayamazsınız, çünkü hafıza ve zaman boyutu yoktur. Fonksiyonlar matematiksel fonksiyonlardır, global değişkenleri güncelleme gibi yan etkileri olamaz.

Şimdi, hata iletisi kullandığınız XQuery işlemcisinin (Zorba) saf işlevsel programlama modelinden ayrılmanıza izin veren uzantılara sahip olduğunu gösteriyor; ancak uzantıları yanlış kullanıyorsunuz. Özellikle, bir fonksiyonun yan etkilere sahip olmasını istiyorsanız, işlevi böyle bildirmelisiniz. Bunu yapmak için Zorba belgelerine bakmanız gerekecek, çünkü standart yok.