Course materials by the week:
Homework assignments:
Answer:跑出結果的 ... 如下: <!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>XMLS</title></head> <body><h1>Title of article</h1> <h2>Author of article</h2> <h3>20081209-000628</h3> <p id=\"test\">Put here whatever elements allowable in the body of an HTML document.</p> <p><em>These two paragraph elements</em> are just fine!</p> </body> </html> 想請問老師那段 <p id=\"test\">Put here whatever elements allowable in the body of an HTML document.</p> 為什麼其中 <p id=\"test\">會多跑出兩個 \ 呢?
Question:你可以用 PHP 的 stripslashes 函數,將 \ 字元從字串中拿掉: stripslashes($content) 說明及範例: > http://tw2.php.net/stripslashes 另外,這一部份,若你不處理元素中的屬性質,也就是 id="test" 等的情形,也沒有關係。我瞭解!
Answer:函數 writeRss 的部份,請再提示一下。
Question:這部份,要先判斷是否已有一個 rss.xml 檔案,若無,要新增一個檔案。 然後就剛新產生的 HTML 相關資訊,準備成一個 item 元素,放在所有 item 元素之前。通常的作法是將 rss.xml 檔案,解析成 DOM 物件, 再來處理。可參考以下程式片段: $rss = null; $root = null; $firstItem = null; if(!file_exists($rssname)){ $rss = new DOMDocument('1.0', 'utf-8'); $root = $rss->createElement("rdf:RDF"); $root->setAttribute("xmlns:rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); $root->setAttribute("xmlns", "http://purl.org/rss/1.0/"); $channel = $rss->createElement("channel"); $channel->setAttribute("rdf:about", HOME_URL); ..... $root->appendChild($channel); $rss->appendChild($root); } else{ $rss = new DOMDocument; $rss->load($rssname); $root = $rss->documentElement; ...... } $item = $rss->createElement("item"); ..... if($firstItem == null){ $root->appendChild($item); } else{ $root->insertBefore($item, $firstItem); } $s = $rss->saveXML(); writeFile($rssname, $s);
Answer:1. 程式範例中, validthis 這個函數定義中,以下的片段, $snoopy->submit 只傳兩個參數: if($snoopy->submit($submit_url,$submit_vars)){ .... } 但在 Snoopy.class.php 檔案中,函數 submit 卻有三個參數,這 OK 嗎? 2. 另外,能否給一些提示,validthis 要如何作?
Question:1. 這是 OK 的。 在 Snoopy.class.php 檔案中,函數 submit 三個參數的後兩個, 有內定值,所以呼叫時,不傳參數值過去,是 OK 的。 2. $snoopy->submit($submit_url,$submit_vars) 是呼叫 W3C 的 HTML validator 來看你所準備好的 HTML檔案,是否為 valid 。你可以就 $snoopy 所傳回的值,來判斷 validation 是否成功。有兩個方式可以判斷: 一種方式是看 $snoopy->results 的部份(會是一份 HTML 文件),其中關鍵的部份是 "valid" 或是 "invalid"。 (再提示:請看 body 元素下的第二個 div 元素下的 h2 元素的 class 屬性值)。 另一種方式是看 $snoopy->headers 的部份(會是一個陣列),再眾多 header 中, 其中 X-W3C-Validator-Status 的值是 "Valid" 還是 "Invalid"。 請到 HTTPTest 網頁(這個我們講過 Week9): http://www.garshol.priv.no/download/HTTPTest.html 分別輸入: http://validator.w3.org/check?url=http://www.iis.sinica.edu.tw/~trc/public/courses/Fall2008/ http://validator.w3.org/check?url=http://www.iis.sinica.edu.tw/ 用 HTTP HEAD 的方式來看就知道了。
Answer:我將很長的字串資料放入 PHP 的變數時,常會發生 parsing 出錯的情形。 例如放在 $htmlheader 變數中,關於 XML declaration 的資料、HTML header 的資訊等。
Question:為避免 PHP parsing 出錯的麻煩,可以使用 PHP 的 heredoc syntax ,將一大串字串資料, 於 <<< 之後,放在兩個相同的 identifiers 之間,如以下的例子(heredoc syntax 請見 http://tw.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc): $htmlfooter=<<<HTMLHEAD </body> </html> HTMLHEAD;
Answer:老師你好,有關於作業四有以下幾點問題請教: 1.寫得程式是只要寫parse.php裡面的...的內容而已嗎? 2.本次作業有需要像老師上課範例一樣,寫個story.xsl? 3.$htmlheader = .... $htmlfooter = .... 這兩個變數的意義分別是? 4.post.html送出之後導到parse.php,產生出來的頁面顯示畫面要跟parse.php一模一樣嗎?
> 1.寫得程式是只要寫parse.php裡面的...的內容而已嗎? 是的。 > 2.本次作業有需要像老師上課範例一樣,寫個story.xsl? 不需要。(這次要產生的XML檔案的內容來自使用者填入的資料,不是來自另一份XML檔案。) > 3.$htmlheader = .... > $htmlfooter = .... > 這兩個變數的意義分別是? 用來記住所產生 HTML 檔案中,最前頭和最後頭的部份。(不會變動,每次都一樣。) > 4.post.html送出之後導到parse.php,產生出來的頁面顯示畫面要跟parse.php一模一樣嗎? 不。這部份你可以自行設計。
Answer:由於hw2做出的格式不完全符合html範本所示,想請問:我們是否可以直接引用老師的html做css的套用。如此可能會比較有一致性。
Question:我想這是 OK 的。 你們也可就自己所產生(不完全符合)的 html 文件,來做 styling 。 這就讓你們自己來選吧!
Answer:請問第三次的作業 是只要用同一份css產生兩份不同的結果嗎?一個是pdf,一個是html 所以只有在原始xhtml引進時的media不同,其它通通相同,是同一個css?
> 是只要用同一份css產生兩份不同的結果嗎? > 一個是pdf,一個是html 是的。在 1. Write a stylesheet qaml2html.css for the generated XHTML documents. .. 的部份,你只要寫一份 CSS 。這份 CSS 於瀏覽器顯示和列印時,分別有 png 檔和 pdf 檔所示範的視覺效果。 不過,在 2. Write a new stylesheet my-qaml.css for QAML documents, and a new stylesheet my-qaml2html.css for the generated XHTML documents. 的部份,你還要寫以上兩個自己設計的 CSS 。
Answer:老師: 你的作業裡面包括了兩個xml檔案 一個是qaml 一個是xml10points 請問我們是要寫一個xsl檔案 然後兩個都可以轉成老師要的格式嗎?? 還是只要轉qaml就好???
Question:寫同一個 xsl 檔案。但這個 xsl 要能同時處理那兩個檔案, 將他們轉成所要求的 HTML 檔案。
Answer:這樣的話nubering的問題會變得很奇怪 qaml的title裡面原本就有umbering 可是xml10points的numbering要自己加 加了以後qaml就會變重複了 還是有別的方法可以判斷?
Question:這可以從 QAML 文件中, body 與 section 元素中 autonum 屬性的屬性值是否有設為 yes 來判斷。 在 xml10points.xml 中,可以看到 <body xml:lang="en" autonum="yes"> ... </body> <section id="intro" class="intro" autonum="yes"> 但在 qaml-faq 中,並沒有這樣的設定。 在 qaml-xml.dtd 中,有提到: If you do not put your own numbers in titles, you can signify this by specifying the autonum attribute on a body or section to "yes". 所以你寫的 xsl 程式,要判斷 autonum 的值,並依此用 <xsl:number level= .... count= .... format= .... /> 來處理。
Answer:目前問題如下: 1.依網址找不到xml10points.xml 只有html檔 2.要求的add back link是指什麼呢?
Question:
- 作業網址 上,提到
xml10points.xml
與qaml-faq.xml
兩處,皆有提供超連結到那兩個檔案。- 作業中所說的 "adds back links (to the table of contents)" 指的是:所產生 HTML 文件的本文中,於各段落之後,皆會有 "[Table of Contents]" 的字樣,提供超連結到該段落在「目次表」("Table of Contents")中的位置。例如:所產生的檔案
qaml-faq.html
之中, "A.1. What is a FAQ?" 該段落之後的 "[Table of Contents]",以 <a href="#toc-a1"> ... </a> 的方式,連結回到目次表。
Answer:要從檔案 xml10points.xml 產生 "Table of Contents" 時,不知道如何排出兩層的 "A.1. XML is for structuring data", "A.2. XML looks a bit like HTML" 等標題目次。
好吧!那就參考以下的程式片段:
<xsl:template match="body" mode="toc"> <hr/> <div class="toc"> <h2 class="toc">Table of Contents</h2> <xsl:for-each select="section"> <h4><a name="toc-{@id}" href="#{@id}"> <xsl:if test="../@autonum='yes'"> <!-- Do the autonumbering if my parent element says so. --> <xsl:number count="section" format="A."/><xsl:text> </xsl:text> </xsl:if> <xsl:value-of select="title"/></a></h4> <xsl:for-each select="section"> <!-- Dealing with section elements inside section elements. --> <a name="toc-{@id}" href="#{@id}"> <xsl:choose> <xsl:when test="../../@autonum='yes' and ../@autonum='yes'"> <!-- Both my grandparent and my parent want me to do autonumbering. --> <xsl:number level="multiple" count="qna|section" format="A.1."/> <xsl:text> </xsl:text> </xsl:when> <xsl:when test="../@autonum='yes'"> <!-- My parent wants me to do autonumbering but my grandparent does not. --> <xsl:number count="qna|section" format="1."/> <xsl:text> </xsl:text> </xsl:when> </xsl:choose> <xsl:value-of select="title"/></a><br/> </xsl:for-each> <xsl:for-each select="qna"> ... <!-- What to do with qna elements? --> </xsl:for-each> </xsl:for-each> </div> <hr/> </xsl:template>