2012-09-21 1 views
1

body 섹션 다음에 이름 목록이있는 epub을 자동으로 만들려고합니다. 이렇게하려면 tei 스타일 시트를 변경하고 있습니다. 출력은 본문 섹션 전에 이름의 목록을 보여줍니다이 경우tei 스타일 시트를 편집하기 위해 템플릿을 호출하는 방법

<xsl:template match="tei:body"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    <xsl:element name="back" namespace="http://www.tei-c.org/ns/1.0"> 
     <xsl:element name="div" namespace="http://www.tei-c.org/ns/1.0"> 
     <xsl:for-each select="//tei:rs[@type='luogo']"> 
      <xsl:element name="p" namespace="http://www.tei-c.org/ns/1.0"> 
      <xsl:value-of select="."/> 
      </xsl:element> 
     </xsl:for-each> 
     </xsl:element> 
    </xsl:element> 
    </xsl:template> 

: 첫째, 나는 "정보/기본/EPUB"폴더 내부의 "to.xsl"파일에이 코드를 삽입하는 tryed . 그런 다음 here을 볼 수있는 "bodyHook"템플릿을 찾았지만 작동하지 않습니다 (또는 사용 방법을 모르겠 음). 나는 이런 식으로 뭔가 쓰려고했습니다 :

<xsl:param name="indiceNomi"> 
    <back> 
    <div> 
     <xsl:for-each select="//tei:rs[@type='luogo']"> 
     <p> 

      <xsl:value-of select="."/> 
     </p> 
     </xsl:for-each> 
    </div> 
    </back> 
    </xsl:param> 

    <xsl:template match="tei:body"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    <xsl:call-template name="bodyHook"/> 
    <xsl:with-param name="creaIndice" select="$indiceNomi"/> 
    </xsl:template> 

을하지만 그것은 잘못된 것입니다 (즉, XSL을 보인다 XSL 내에서 수 없습니다로-PARAM : 템플릿, 나는이 같은 몇 가지 예를 본 경우에도). 이것이 내 입력 파일 인 경우 어떤 코드를 작성해야합니까?

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="file:/C:/Users/User/Desktop/prova2.xsl"?> 
<TEI xmlns="http://www.tei-c.org/ns/1.0"> 
    <teiHeader><fileDesc> 
     <titleStmt> 
      <title>AA</title> 
     </titleStmt> 
     <publicationStmt><p><!-- supply publication information --></p></publicationStmt> 
     <sourceDesc> 
      <bibl>AA</bibl> 
     </sourceDesc> 
    </fileDesc><profileDesc> 
     <langUsage> 
      <language ident="ita">AA</language> 
      <language ident="lat">AA</language> 
     </langUsage> 
    </profileDesc></teiHeader> 
    <text> 
     <body> 
      <div type="book" n="3" xml:id="L3"> 
       <head>AA 
       </head> 
       <div type="capitolo" n="1" xml:id="L3-01"> 
        <head>AA</head> 
        <p>AA 
         <pb n="200"/>textt<rs type="luogo">Genova</rs>texttex ttexttexttexttexttexttexttexttext<rs type="luogo">London</rs>exttextte<rs type="luogo">Paris</rs> 
         texttexttexttexttexttexttexttexttext<rs type="luogo">Tokyo</rs>xttexttexttexttexttexttexttext<rs type="luogo">New York</rs> 
         <rs type="luogo">Dublin</rs><rs type="luogo">Moscow</rs><rs type="luogo">Cairo</rs>texttexttexttexttexttexttexttexttexttexttexttexttexttexttext</p> 
       </div> 
      </div> 
     </body> 
    </text> 
</TEI> 

미리 감사드립니다. 제게 많은 도움이 될 것입니다.

+1

당신의 첫 번째 예제가 실제로 당신이 묘사 한 결과물을 만든다고 믿기 어렵습니다. body 요소 앞에, * after *를 포함하는 'back'과 'div'요소를 생성해야합니다. 문제를 올바르게 진단 했습니까? –

+0

예, 정말 이상합니다. TEI 스타일 시트를 사용하지 않아도 다른 파일에서도 출력 결과가 좋았습니다. "index.html"섹션에 추가하고있는 섹션을 작성하고, 내가 작성한 (이 스타일 시트가 epub을 작성하기 전에) 빈 바디 섹션을 작성한다는 것을 알았습니다. "core.xsl"또는 "tei-to-epub.xsl"파일에이 코드를 쓰면 출력이 동일합니다 (여전히 색인 섹션에 추가하는 목록을 작성하여 비어있는 본문을 만듭니다 섹션 앞에). 내 출력물이 색인 파일에있을 필요는 없지만 그 뒤에있는 파일 (일반적으로 "L1, L2, ..."라고 함)에 있기 때문입니다. – TMT

+0

그래서 저는 어떻게 든 출력을 강요하려고합니다. – TMT

답변

0

TEI XSLT 동작을 사용자 정의하는 방법에 대해 오해했습니다. 사전 정의 된 파일을 수정하지 않아도됩니다. this page의 맨 위가 간단한 설명을 제공합니다. 기본적으로 아이디어는 tei.xsl 파일을 가져 오는 자신 만의 XSLT 파일을 만들고 자신의 XSLT 파일에 고유 한 템플릿을 추가하여 동작을 사용자 지정하는 것입니다. 예를 들어, <body> 섹션의 끝 부분에 삽입 할 수있는 템플릿을 정의하기 위해, 당신은 당신의 XSLT 파일에 이런 식으로 뭔가를 추가 :

<xsl:template name="bodyEndHook"> 
    <back> 
    <div> 
     <xsl:for-each select="//tei:rs[@type='luogo']"> 
     <p> 

      <xsl:value-of select="."/> 
     </p> 
     </xsl:for-each> 
    </div> 
    </back> 
</xsl:template> 

아마의 TEI 자동 변환의 끝에서이 템플릿을 호출 <body>. bodyEndHook의 기본 동작은 아무 것도하지 않지만 자체 템플릿을 추가하여 기본 동작을 재정의 할 수 있습니다.