2011-03-18 5 views
1
<xsl:variable name="html-output-name" 
     select="(if(@index and @index eq 'true') 
      then concat($default-name, '.html') 
      else(), 
     @html-output-name, 
     @output-name, 
     $default-html)[1]" /> 

'if'가 무엇을하는지 알지만, 명령의 나머지 항목을 이해하는 방법과 마지막에 [1]을 이해하는 방법을 모르겠습니다. 이 목록의 첫 번째 비어 있지 않은 항목 '을 추가 하는가 "xpath에서 쉼표 연산자는 c와 유사합니까?

답변

1

http://www.w3.org/TR/xpath20/#construct_seq

정의에서 :? 가하는 방법 중 하나 순서를 구성하는 것은 평가합니다 쉼표 운영자을 사용하는 것입니다 피연산자 각각은 단일 결과 시퀀스에, 순서대로, 결과 시퀀스를 연결해

부분 B NF는 :

[2] Expr ::=ExprSingle(","ExprSingle)*

그리고 http://www.w3.org/TR/xpath20/#id-filter-expr

[정의에서

하십시오 필터 식 단순히 0 이상의 predicates 뒤에 차 식 구성된다. 필터 식의 결과가 좌우로 에서 작업 차례로 각 술어를 적용하여 필터링 된 주 식에 의해 반환 항목들로 구성된다.] 술어 지정된 없다면, 결과는 간단히 결과 기본 표현식의 필터 식에서 반환 된 항목의 순서는 이며 식의 결과는 과 동일합니다. 컨텍스트 위치는 시퀀스에서 서수 위치에 따라 항목에 할당 된 입니다.

이 목록에 '첫 비어 있지 않은 항목을 추가 하는가 : 첫 번째 상황에 맞는 위치 1.

질문입니까?

응답 : 그렇지 않습니다. 그러면 목록의 첫 번째 항목이 선택됩니다. 빈 항목은 없지만 빈 시퀀스 만 있습니다. 그리고 중첩 된 시퀀스 (formaly tuples)가 없으므로이 시퀀스는 평면 시퀀스로 연결됩니다.

4

XPath 2.0의 관용어 (A, B, C)[1]은 "A가 존재하면 A를, 그렇지 않으면 B가 존재하면 B를, 그렇지 않으면 C가 존재한다면 C이고, 그렇지 않으면 아무것도"를 의미하는 것으로 사용됩니다. 나는 당신의 의역과 일치하는 "목록에서 첫 번째 비어 있지 않은 항목"이라고 생각합니다. 기술적으로 그것은 A에 의해 선택된 모든 항목을 포함하는 순서를 만들고 B에 의해 선택된 모든 항목, 그리고 C에 의해 선택된 모든 항목을 포함하고 목록의 첫 번째 항목을 선택합니다. 그러나 게으른 평가와 파이프 라이닝 때문에 실제로 전체 목록을 작성하지는 않습니다.

+0

저는 색슨 (Saxon)의 저자로부터 답을 얻게되어 영광입니다. – bmargulies