2017-09-18 1 views
1

Saxon의 PHP 버전과 관련된 몇 가지 문제점으로 인해 현재 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> 

및 명령은 XML 파일 내가 '고 내 문제가 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>

입니다 실행 m 님과 함께 작업하는 것은 아직 게시되지 않은 문자 전사이며, 나는 그들이 황금 시간대에 대비할 때까지 비밀번호로 보호 된 폴더를 유지하고 싶습니다. 나는 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로 파일을 얻고 있다는 것을 나에게 꽤 명백하다 , 그리고 나서 그것으로 무엇을해야할지 모른다. 제 질문은 Saxon에게 컬렉션에 .htaccess를 포함시키지 말라고 제 xery 파일에 지시하는 방법이 있다면 말입니다. 확실하지만, 내가 찾은 모든 것은 파일 이름을 찾는 것에 관한 것이지, 건물에있는 컬렉션에서 파일 이름을 숨기는 것에 관한 것이 아닙니다. 좋아

답변

2

은 그냥 바보입니다. 혹시 글로브 패턴을 사용하여 선택보다 더 정교한 뭔가를해야 할 경우, 당신은 uri-collection() 기능을 사용할 수 있습니다

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

:이 솔루션은 지금처럼 $ 수집 변수에 선택 정보를 추가하기 위해 CONCAT 문을 추가하는 것입니다 디렉토리에있는 파일의 URI를 반환 한 다음에 관심이 실제로 사람을 처리 할 수 ​​doc()를 사용합니다. 예를 들어, 당신이로 시작하지 않는 모든 것을 원하는 경우에 당신에게 해결책을 줄 것이다 ".", 그 확장에 관계없이. 당신이 uri-collection()로 할 수있는

또 다른 것은 당신이 오류 처리를 완벽하게 제어 할 수 있도록 각 try/catch 블록 내에서 URI를 반환 처리하는 것입니다.

관련 문제