2017-09-18 9 views
1

phpのSaxonに関するいくつかの問題のため、私は現在、Javaコマンドを実行し、結果をHTMLに変換し、そのHTMLをページに表示し、結果のhtmlを削除するphp呼び出しを行う複雑な設定をしています表示後それが助け場合、私はページへのリンクを提供することができますが、実際の.xqファイルはかなり単純化され:Saxonは.htaccessでページを操作できますか?

xquery version "1.0" encoding "UTF-8"; 

declare namespace tei="http://www.tei-c.org/ns/1.0"; 

declare variable $zone external; 
declare variable $line external; 
declare variable $collection external; 

declare function local:if-empty 
    ($arg as item()? , 
    $value as item()*) as item()* { 

    if (string($arg) != '') 
    then data($arg) 
    else $value 
}; 

declare function local:remove-elements($input as element(), $remove-names as xs:string*) as element() { 
    element {node-name($input) } 
     {$input/@*, 
     for $child in $input/node()[not(name(.)=$remove-names)] 
      return 
      if ($child instance of element()) 
       then local:remove-elements($child, $remove-names) 
       else $child 
     } 
}; 

declare function local:remove-empty-elements($nodes as node()*) as node()* { 
    for $node in $nodes 
    return 
    if (empty($node)) then() else 
    if ($node instance of element()) 
    then if (normalize-space($node) = '') 
      then() 
      else element { node-name($node)} 
       { $node/@*, 
        local:remove-empty-elements($node/node())} 
    else if ($node instance of document-node()) 
    then local:remove-empty-elements($node/node()) 
    else $node 
} ; 

<list> 
{ 
let $q:=collection($collection) 
let $remove-list := ('note') 

(:let $q:=local:remove-empty-elements($q):) 

for $y in $q 
let $s := $y//tei:surface 
let $t := $y//tei:titleStmt/@xml:id 
let $m := $y//tei:msDesc/@xml:id 
let $z := $s/tei:zone[@n=$zone] 
let $l := $z/tei:line[@n=$line] 
let $w := concat($y//tei:msDesc/tei:msIdentifier/tei:settlement/text(),', ',$y//tei:msDesc/tei:msIdentifier/tei:institution/text(),' ',$y//tei:msDesc/tei:msIdentifier/tei:idno/text()) 
let $g := concat($t, "/" , $m, "/", substring-before($l/../../tei:graphic/@url,"."),".html") 
let $o:=local:remove-elements($l/tei:orig,$remove-list) 
where ($z//tei:line/@n = "l.1") 


return 

<item>{$w}: <ref target="{$g}">{$o}</ref></item>} 
</list> 

し、それを実行するコマンドjava -Xms128m -Xmx1024m -XX:+UseCompressedOops -cp saxon9he.jar net.sf.saxon.Query -t -q:test.xq -o:1505740041.41932650059544.xml line=l.4 zone=EETS.QD.8 collection=file:<filefolder>

私の問題は、XMLファイルはI」ということです私は彼らがプライムタイムの準備が整うと思うまで、パスワードで保護されたフォルダの背後に置いておきたいと思います。私はfilefolderの場所にある.htaccessファイルの任意の並べ替えを持っている場合、私は、次のエラーメッセージが表示されます:

Building tree for file:<filefolder>/.htaccess using class net.sf.saxon.tree.tiny.TinyBuilder 
Error on line 1 column 1 of .htaccess: 
    SXXP0003: Error reported by XML parser: Content is not allowed in prolog. 
Query failed with dynamic error: org.xml.sax.SAXParseException; systemId: file:<filefolder>/.htaccess; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. 

それは何が起こっていることは、XMLではありませんこれは、.htaccessファイルになってきたということであるように私にはかなり明白ですそして、それをどうしたらいいのか分からない。私の質問は、私のxqueryファイルに、Saxonに.htaccessをコレクションに含めないように指示する方法があるかどうかです。私は確信していますが、私が見つけたものは、あなたが構築しているコレクションではなく、ファイル名を見つけることです。

答えて

2

私はばかだ。あなたはグロブパターンを使用して選択以上の精巧な何かが必要な場合は、その後、あなたはuri-collection()機能を使用することができます

let $collection:=concat($collection, '?select=*.xml') 
let $q:=collection($collection) 
let $remove-list := ('note') 
3

:解決策はそうのように、$コレクション変数に選択情報を追加するために、連結ステートメントを追加することですディレクトリ内のファイルのURIを返すために、doc()を使用して、実際に興味のあるものを処理します。たとえば、 "。"で始まらないものがすべて必要な場合は、その延長にかかわらず。

uri-collection()で実行できるもう1つのことは、返された各URIをtry/catchブロック内で処理して、エラー処理を完全に制御できるようにすることです。

関連する問題