隨筆-7  評論-15  文章-0  trackbacks-0
            2009年10月7日
          Quartz特點:
          ?? Quartz能嵌入到任何獨立的應用中運行。
          ?? Quartz能在應用服務器或者Servlet容器中實例化,并且能夠參與XA事務。
          ?? Quartz能夠以獨立的方式運行(在它自己的Java虛擬機中),可以通過RMI使用Quartz。
          ?? Quartz可以被實例化為獨立程序的集群(有負載均衡和容錯能力)。
          Job Scheduling(任務日程安排)
          任務在給定的觸發器(Trigger)觸發時執行。觸發器可以通過幾乎以下所有形式的組合方式進行創建:
          ?? 在一天中的任意時刻(可以精確到毫秒)。
          ?? 一周中特定的一些天。
          ?? 一個月中特定的一些天。
          ?? 一年中特定的一些天
          ?? 不在日歷列表中注冊的一些天(比如節假日)。
          ?? 循環特定的次數。
          ?? 循環到特定的時間。
          ?? 無限循環。
          ?? 按照一定的時間間隔循環。
          Job Execution(任務執行)
          • 任務是任何實現簡單Job接口的Java 類,這樣開發者能夠執行任何完成他們工作的任務。
          • 任務類的實例可以由Quartz實例化,也可以由你的程序框架實例化。
          當觸發器被觸發時,日程管理器將會通知某個或者多個實現了JobListener 或TriggerListener的對象(監聽器可以是簡單的Java對象,或者EJBs,或者JMS消息發布器,等等)。這些監聽器在任務執行完畢后也會接到通知。
          • 任務被完成后,他們會返回一個“任務完成碼(JobCompletionCode)”,這個“任務完成碼”告知日程管理器任務執行的結果是成功還是失敗。日程管理器會根據成功或者失敗碼來采取措施,比如:立即重新執行任務。
          Job Persistence(任務持久化)
          • Quartz設計中包括了一個JobStore接口,這樣,實現這個接口的Job類可以以多種機制實現Job的存儲。
          • 通過使用JDBCJobStore,所有的Jobs和Triggers被配置為“non-volatile”(不輕快)的方式。即,通過JDBC存儲在關系數據庫中。
          • 通過使用RAMJobStore,所有Jobs和Triggers被存儲在RAM。因此,在程序執行中沒有被持久化,但這種方式的優點就是不需要外部數據庫。
          Transactions(事務)
          • Quartz通過JobStoreCMT(JDBCJobStore的一個子類)可參與JTA事務。
          • Quartz可以管理JTA事務(開始或者提交事務)。
          Clustering(集群)
          • Fail-over.(容錯)
          • Load balancing.(負載均衡)
          Listeners & Plug-Ins(監聽器及插件)
          • 應用可以通過實現一個或者多個監聽器接口來實現捕捉日程事件,以監視或控制任務/觸發器的行為。
          • 可以通過插件的機制來擴展Quartz 的功能。例如:記錄任務執行歷史的日志,或者從文件中載入任務和觸發器的定義。
          posted @ 2009-10-22 23:21 腳踏實地 閱讀(1093) | 評論 (0)編輯 收藏
          xquery語法
          posted @ 2009-10-07 17:51 腳踏實地 閱讀(291) | 評論 (0)編輯 收藏
           

          一些基本的語法規則:

          ·         XQuery對大小寫敏感

          ·         XQuery的元素、屬性以及變量必須是合法的XML名稱。

          ·         XQuery字符串值可使用單引號或雙引號。

          ·         XQuery變量由“$”并跟隨一個名稱來進行定義,舉例,$bookstore

          ·         XQuery注釋被(:和:)分割,舉例,(: XQuery 注釋 :)

          XQuery 條件表達式

          "If-Then-Else"可以在XQuery中使用。

          請看下面的例子:

          for $x in doc("books.xml")/bookstore/book

          return if ($x/@category="CHILDREN")

           then <child>{data($x/title)}</child>

           else <adult>{data($x/title)}</adult>

          請注意"If-Then-Else"的語法:if表達式后的圓括號是必需的。else也是必需的,不過僅僅寫“else ()”也是可以的。

          上面的例子的結果:

          <adult>Everyday Italian</adult>

          <child>Harry Potter</child>

          <adult>Learning XML</adult>

          <adult>XQuery Kick Start</adult>


           

          XQuery 比較

          XQuery中,有兩種方法來比較值。
           

          1.  通用比較:=, !=, <, <=, >, >=

           

          2. 值的比較:eq、ne、lt、le、gt、ge

           

          請看下面的XQuery表達式:

          $bookstore//book/@q > 10

          如果q屬性的值大于10,上面的表達式的返回值為true

          $bookstore//book/@q gt 10

          如果僅返回一個q,且它的值大于10,那么表達式返回true。如果不止一個q被返回,則會發生錯誤。

           

          向結果添加元素和屬性

          正如在前面一節看到的,我們可以在結果中引用輸入文件中的元素和屬性:

          for $x in doc("books.xml")/bookstore/book/title

          order by $x

          return $x

          上面的XQuery表達式會在結果中引用title元素和lang屬性,就像這樣:

          <title lang="en">Everyday Italian</title>

          <title lang="en">Harry Potter</title>

          <title lang="en">Learning XML</title>

          <title lang="en">XQuery Kick Start</title>

          以上XQuery表達式返回title元素的方式和它們在輸入文檔中被描述的方式的相同的。

          現在我們要向結果添加我們自己的元素和屬性!

          添加HTML元素和文本

          現在,我們要向結果添加HTML元素。我們會把結果放在一個HTML列表中 - Now, we want to add some HTML elements to the result. We will put the result in an HTML list - together with some text:

          <html>

          <body>

          <h1>Bookstore</h1>

          <ul>

          {

          for $x in doc("books.xml")/bookstore/book

          order by $x/title

          return <li>{data($x/title)}. Category: {data($x/@category)}</li>>

          }

          </ul>

          </body>

          </html

          以上XQuery表達式會生成下面的結果:    

          <html>

          <body>

          <h1>Bookstore</h1>

          <ul>

          <li>Everyday Italian. Category: COOKING</li>

          <li>Harry Potter. Category: CHILDREN</li>

          <li>Learning XML. Category: WEB</li>

          <li>XQuery Kick Start. Category: WEB</li>

          </ul>

          </body>

          </html>

           

          選擇和過濾元素

          正如在前面的章節看到的,我們使用路徑表達式或FLWOR表達式來選去和過濾元素。

          請看下面的FLWOR表達式:

          for $x in doc("books.xml")/bookstore/book

          where $x/price>30

          order by $x/title

          return $x/title

          for

          (可選) 向每個由in表達式返回的項目捆綁一個變量

          let

          (可選)

          where

          (可選) 設定一個條件

          order by

          (可選) 設定結果的排列順序

          return

          規定在結果中返回的內容

          for 語句

          for語句可將變量捆綁到由in表達式返回的每個項目。for可產生迭代。在同一個FLWOR表達式中可存在多重for語句。

          如需在一個for語句中循環指定的次數,您可使用關鍵詞to:     

          for $x in (1 to 5)

          return <test>{$x}</test>

          結果:

          <test>1</test>

          <test>2</test>

          <test>3</test>

          <test>4</test>

          <test>5</test>

          關鍵詞at可被用來計算迭代:

          for $x at $i in doc("books.xml")/bookstore/book/title

          return <book>{$i}. {data($x)}</book>

          結果:

          <book>1. Everyday Italian</book>

          <book>2. Harry Potter</book>

          <book>3. XQuery Kick Start</book>

          <book>4. Learning XML</book>

          在for語句中同樣允許多個in表達式。請使用逗號來分割每一個in表達式:

          for $x in (10,20), $y in (100,200)

          return <test>x={$x} and y={$y}</test>

          結果:

          <test>x=10 and y=100</test>

          <test>x=10 and y=200</test>

          <test>x=20 and y=100</test>

          <test>x=20 and y=200</test>

           

          let 語句

          let語句可完成變量分配,并可避免多次重復相同的表達式。let語句不回導致迭代。

          let $x := (1 to 5)

          return <test>{$x}</test>   

          結果   

          <test>1 2 3 4 5</test>   

          where 語句

          where語句用于為結果設定一個或多個條件(criteria)。

          where $x/price>30 and $x/price<100

          order by 語句

          order by語句用于規定結果的排序次序。此處,我們要根據category和title來對結果進行排序:

          for $x in doc("books.xml")/bookstore/book

          order by $x/@category, $x/title

          return $x/title

          結果:

          <title lang="en">Harry Potter</title>

          <title lang="en">Everyday Italian</title>

          <title lang="en">Learning XML</title>

          <title lang="en">XQuery Kick Start</title>

          return 語句:

              

          return語句規定要返回的內容。

          for $x in doc("books.xml")/bookstore/book

          return $x/title

          結果:

          <title lang="en">Everyday Italian</title>

          <title lang="en">Harry Potter</title>

          <title lang="en">XQuery Kick Start</title>

          <title lang="en">Learning XML</title>

          posted @ 2009-10-07 17:46 腳踏實地 閱讀(1618) | 評論 (1)編輯 收藏
           

          在介紹語法的時候,例子中使用的XML文檔是"books.xml":

          <?xml version="1.0" encoding="ISO-8859-1"?>
          <bookstore>
          <book category="COOKING">
                      <title lang="en">Everyday Italian</title>
                      <author>Giada De Laurentiis</author>
                      <year>2005</year>
                      <price>30.00</price>
          </book>

          <book category="CHILDREN">
                      <title lang="en">Harry Potter</title>
                      <author>J K. Rowling</author>
                      <year>2005</year>
                      <price>29.99</price>
          </book>
          <book category="WEB">
                      <title lang="en">XQuery Kick Start</title>
                      <author>James McGovern</author>
                      <author>Per Bothner</author>
                      <author>Kurt Cagle</author>
                      <author>James Linn</author>
                      <author>Vaidyanathan Nagarajan</author>
                      <year>2003</year>
                      <price>49.99</price>
          </book>
          <book category="WEB">
                      <title lang="en">Learning XML</title>
                      <author>Erik T. Ray</author>
                      <year>2003</year>
                      <price>39.95</price>
          </book>
          </bookstore>


           

           

          一、函數

          XQuery使用函數來提取XML文檔中的數據。

          doc()用于打開"books.xml"文件:

          doc("books.xml")


          二、路徑表達式

          XQuery使用路徑表達式在XML文檔中通過元素進行導航。

          下面的路徑表達式用于在"books.xml"文件中選取所有的title元素:

          doc("books.xml")/bookstore/book/title

          (/bookstore選取bookstore元素,/book選取bookstore元素下的所有book元素,而/title選取每個book元素下的所有title元素)

          上面的XQuery可提取以下數據:

          <title lang="en">Everyday Italian</title>

          <title lang="en">Harry Potter</title>

          <title lang="en">XQuery Kick Start</title>

          <title lang="en">Learning XML</title>

          三、謂語

          XQuery使用謂語來限定從XML文檔所提取的數據。

          下面的謂語用于選取bookstore元素下的所有book元素,并且所選取的book元素下的price元素的值必須小于30:

          doc("books.xml")/bookstore/book[price<30]

          上面的XQuery可提取到下面的數據:

          <book category="CHILDREN">

                      <title lang="en">Harry Potter</title>

                      <author>J K. Rowling</author>

                      <year>2005</year>

                      <price>29.99</price>

          </book>

          四、使用FLWOR"books.xml"選取節點
           

          FLWOR是"For, Let, Where, Order by, Return"的只取首字母縮寫。

          for語句把bookstore元素下的所有book元素提取到名為$x的變量中。

          where語句選取了price元素值大于30book元素。

          order by語句定義了排序次序。將根據title元素進行排序。

          return語句規定返回什么內容。在此返回的是title元素。

           

          請看下面這個路徑表達式:

          doc("books.xml")/bookstore/book[price>30]/title

          上面這個表達式可選取bookstore元素下的book元素下所有的title元素,并且其中的price元素的值必須大于30。

          下面這個FLWOR表達式所選取的數據和上面的路徑表達式是相同的:

          for $x in doc("books.xml")/bookstore/book

          where $x/price>30

          return $x/title

          結果是:

          <title lang="en">XQuery Kick Start</title>

          <title lang="en">Learning XML</title>

          通過FLWOR,您可以對結果進行排序:

          for $x in doc("books.xml")/bookstore/book

          where $x/price>30

          order by $x/title

          return $x/title


          上面的XQuery表達式的結果:

          <title lang="en">Learning XML</title>

          <title lang="en">XQuery Kick Start</title>



          在一個HTML列表中提交結果

          請看下面的XQuery FLWOR表達式:

          for $x in doc("books.xml")/bookstore/book/title

          order by $x

          return $x

          上面的表達式會選取bookstore元素下的book元素下的所有title元素,并以字母順序返回title元素。

          現在,我們希望使用HTML列表列出我們的書店中所有的書目。我們向FLWOR表達式添加<ul>和<li>標簽:

          <ul>

          {

          for $x in doc("books.xml")/bookstore/book/title

          order by $x

          return <li>{$x}</li>

          }

          </ul>

          以上代碼的結果:

          <ul>

          <li><title lang="en">Everyday Italian</title></li>

          <li><title lang="en">Harry Potter</title></li>

          <li><title lang="en">Learning XML</title></li>

          <li><title lang="en">XQuery Kick Start</title></li>

          </ul>

          現在我們希望去除title元素,而僅僅顯示title元素內的數據。

          <ul>

          {

          for $x in doc("books.xml")/bookstore/book/title

          order by $x

          return <li>{data($x)}</li>

          }

          </ul>

          結果將是一個HTML列表:

          <ul>

          <li>Everyday Italian</li>

          <li>Harry Potter</li>

          <li>Learning XML</li>

          <li>XQuery Kick Start</li>

          </ul>

          posted @ 2009-10-07 17:26 腳踏實地 閱讀(369) | 評論 (0)編輯 收藏

          一、使用eclipse新建一個java project
          二、把saxon的jar包放入classpath(我用的jar包是saxon9ee.jar)
          三、新建package,然后新建一個xml文件(cd_catalog.xml),其內容如下:
          <?xml version="1.0" encoding="ISO-8859-1"?>
              <CATALOG>
                   <CD>
                        <TITLE>Empire Burlesque</TITLE>
                        <ARTIST>Bob Dylan</ARTIST>
                        <COUNTRY>USA</COUNTRY>
                         <COMPANY>Columbia</COMPANY>
                        <PRICE>10.90</PRICE>
                        <YEAR>1985</YEAR>
                   </CD>
                   <CD>
                        <TITLE>Hide your heart</TITLE>
                        <ARTIST>Bonnie Tyler</ARTIST>
                        <COUNTRY>UK</COUNTRY>
                        <COMPANY>CBS Records</COMPANY>
                        <PRICE>9.90</PRICE>
                        <YEAR>1988</YEAR>
                   </CD>
                   <CD>
                        <TITLE>Greatest Hits</TITLE>
                        <ARTIST>Dolly Parton</ARTIST>
                        <COUNTRY>USA</COUNTRY>
                        <COMPANY>RCA</COMPANY>
                        <PRICE>9.90</PRICE>
                        <YEAR>1982</YEAR>
                   </CD>
                   <CD>
                        <TITLE>Still got the blues</TITLE>
                        <ARTIST>Gary Moore</ARTIST>
                        <COUNTRY>UK</COUNTRY>
                        <COMPANY>Virgin records</COMPANY>
                        <PRICE>10.20</PRICE>
                        <YEAR>1990</YEAR>
                   </CD>
                   <CD>
                        <TITLE>Eros</TITLE>
                        <ARTIST>Eros Ramazzotti</ARTIST>
                        <COUNTRY>EU</COUNTRY>
                        <COMPANY>BMG</COMPANY>
                        <PRICE>9.90</PRICE>
                        <YEAR>1997</YEAR>
                   </CD>
                   <CD>
                        <TITLE>One night only</TITLE>
                        <ARTIST>Bee Gees</ARTIST>
                        <COUNTRY>UK</COUNTRY>
                        <COMPANY>Polydor</COMPANY>
                        <PRICE>10.90</PRICE>
                        <YEAR>1998</YEAR>
                   </CD>
                   <CD>
                        <TITLE>Sylvias Mother</TITLE>
                        <ARTIST>Dr.Hook</ARTIST>
                        <COUNTRY>UK</COUNTRY>
                        <COMPANY>CBS</COMPANY>
                        <PRICE>8.10</PRICE>
                        <YEAR>1973</YEAR>
                   </CD>
                   <CD>
                          <TITLE>Maggie May</TITLE>
                        <ARTIST>Rod Stewart</ARTIST>
                        <COUNTRY>UK</COUNTRY>
                        <COMPANY>Pickwick</COMPANY>
                        <PRICE>8.50</PRICE>
                        <YEAR>1990</YEAR>
                   </CD>
                   <CD>
                         <TITLE>Romanza</TITLE>
                        <ARTIST>Andrea Bocelli</ARTIST>
                        <COUNTRY>EU</COUNTRY>
                        <COMPANY>Polydor</COMPANY>
                        <PRICE>10.80</PRICE>
                        <YEAR>1996</YEAR>
                 </CD>
                   <CD>
                        <TITLE>When a man loves a woman</TITLE>
                        <ARTIST>Percy Sledge</ARTIST>
                        <COUNTRY>USA</COUNTRY>
                        <COMPANY>Atlantic</COMPANY>
                        <PRICE>8.70</PRICE>
                        <YEAR>1987</YEAR>
                   </CD>
             </CATALOG>
                  
          四、新建一個java class(XqueryTest.java)

          import java.io.IOException;
          import java.util.Properties;

          import javax.xml.parsers.DocumentBuilder;
          import javax.xml.parsers.DocumentBuilderFactory;
          import javax.xml.parsers.ParserConfigurationException;
          import javax.xml.transform.OutputKeys;
          import javax.xml.transform.Transformer;
          import javax.xml.transform.TransformerConfigurationException;
          import javax.xml.transform.TransformerException;
          import javax.xml.transform.TransformerFactory;
          import javax.xml.transform.dom.DOMSource;
          import javax.xml.transform.stream.StreamResult;

          import org.w3c.dom.Document;
          import org.xml.sax.SAXException;

          import net.sf.saxon.Configuration;
          import net.sf.saxon.dom.*;
          import net.sf.saxon.query.DynamicQueryContext;
          import net.sf.saxon.query.StaticQueryContext;
          import net.sf.saxon.query.XQueryExpression;
          import net.sf.saxon.trans.XPathException;

          public class XqueryTest {
           /**
            * 執行查詢
            */
           public static void select(){
            //文件
            String fileString = "src/study/xquery/cd_catalog.xml";
            //查詢語句
            String query = " for $s in //CD/TITLE "
              + " return $s";
            //生產文檔對象
            Document document = getDocument(fileString);
            Configuration configuration = new Configuration();
            StaticQueryContext context = new StaticQueryContext(configuration, false);
            //查詢表達式對象
            XQueryExpression expression = null;
            try {
             expression = context.compileQuery(query);
             DynamicQueryContext context2 = new DynamicQueryContext(configuration);
             context2.setContextItem(new DocumentWrapper(document,null,configuration));
             
             final Properties props = new Properties();
                      props.setProperty(OutputKeys.METHOD, "xml");
                      props.setProperty(OutputKeys.INDENT, "yes");
                      //執行查詢,并輸出查詢結果
                      expression.run(context2, new StreamResult(System.out), props);
            } catch (XPathException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
            }
            
           }
           /**
            * 生產文檔對象
            *
            * @param xml   文件名
            * @return
            */
           public static Document getDocument(String xml){
            DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder;
            Document document = null;
            try {
             builder = builderFactory.newDocumentBuilder();
             document = builder.parse(xml);
            } catch (ParserConfigurationException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
            } catch (SAXException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
            } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
            }
            document.normalize();
            return document;
           }
           /**
            * 輸入生成的文檔內容
            *
            * @param doc
            */
           public static void output(Document doc){
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = null;
            try {
             transformer = factory.newTransformer();
             Properties properties = transformer.getOutputProperties();
             properties.setProperty(OutputKeys.INDENT, "yes");
                      properties.setProperty(OutputKeys.ENCODING, "GB2312");
                      properties.setProperty(OutputKeys.METHOD, "xml");
                      properties.setProperty(OutputKeys.VERSION, "1.0");
                      transformer.setOutputProperties(properties);
                     
                      DOMSource source = new DOMSource(doc);
                      StreamResult result = new StreamResult(System.out);
                      transformer.transform(source, result);
             
            } catch (TransformerConfigurationException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
            } catch (TransformerException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
            }
           }
           public static void main(String[] args) {
            select();
           }
          }


          五、運行結果
          <?xml version="1.0" encoding="UTF-8"?>
          <TITLE>Empire Burlesque</TITLE>
          <TITLE>Hide your heart</TITLE>
          <TITLE>Greatest Hits</TITLE>
          <TITLE>Still got the blues</TITLE>
          <TITLE>Eros</TITLE>
          <TITLE>One night only</TITLE>
          <TITLE>Sylvias Mother</TITLE>
          <TITLE>Maggie May</TITLE>
          <TITLE>Romanza</TITLE>
          <TITLE>When a man loves a woman</TITLE>
          posted @ 2009-10-07 17:14 腳踏實地 閱讀(1184) | 評論 (0)編輯 收藏

                  要使用xquery進行查詢,需要一個xquery的處理器,在此我們使用saxon處理器。
                Saxon是一個內存處理器。無論使用XSLT還是XQuery,Saxon被設計來處理在內存中裝配好的源。

              用法:
              1.下載saxon壓縮包
                  http://saxon.sourceforge.net/   
              只需要里面的jar包
              2.jdk1.4以上即可
          posted @ 2009-10-07 16:55 腳踏實地 閱讀(1042) | 評論 (0)編輯 收藏
          主站蜘蛛池模板: 涡阳县| 乐山市| 子长县| 阿合奇县| 正宁县| 慈利县| 横山县| 徐州市| 孝感市| 南岸区| 澄迈县| 泽普县| 荣成市| 西宁市| 吉林省| 洪江市| 门头沟区| 呼和浩特市| 惠水县| 海南省| 克什克腾旗| 临夏县| 阜阳市| 晴隆县| 响水县| 丹阳市| 佛山市| 从化市| 富民县| 高雄市| 石泉县| 宜兰县| 酒泉市| 根河市| 伊宁县| 嵊州市| 尤溪县| 定兴县| 正镶白旗| 顺平县| 安新县|