IranIT.info Articles
عنوان Cocoon 2
نويسندههادى صبوحى تاريخ ارسال 05/05/1381 نام قسمت فناورى
معرفي

Cocoon بخشي از پروژه xml در سازمان Apache است. در حال حاضر آخرين نسخه ارايه شده نسخه شماره 2 آن است و در اين مقاله توضيحات ارايه شده، براي اين نسخه است. از اين پس در اين مقاله با نام C2 به آن ارجاع مي دهيم.

C2 چهارچوبي بسيار انعطاف پذير براي انتشار صفحات وب ارايه مي نمايد. اين سيستم از اجزايي تشکيل يافته که تنها يک اينترفيس دارند و آن xml است. به اين معني که هر جزء يک سند xml را بعنوان ورودي دريافت کرده و سندي xml به عنوان خروجي توليد مي کند. به همين خاطر C2 را يک چهارچوب انتشار وب بر اساس xml مي‌نامند.

با يک بررسي اجمالي بر تکنولوژيهاي مشابه نقاط اشتراک و تمايز اين چهارچوب را نشان مي دهيم. امروزه براي انتشار صفحات بر روي وب معمولا از يکي از تکنولوژيهاي معروف زير استفاده مي شود:
  • html: ساده ترين فرم انتشار در وب است. صفحات يک وب سايت بصورت ايستا بفرم html کدگذاري شده و انتشار مي يابند.
  • ASP ،PHP،JSP: سه نمونه از معروفترين تکنولوژيهايي است که براي انتشار صفحات وب بصورت ديناميک بکار برده مي شود. گذشته از اختلافهاي آنها، هر سه امکاناتي فراهم کرده که يک برنامه در سرور اجرا شده تا يک خروجي html را بصورت ديناميک توليد کند. در اينها معمولا کد برنامه و کدهاي html با هم ترکيب مي شوند.
  • Servlet: يک کلاس در زبان جاوا است که در سرور اجرا مي گردد. در اين کلاس از دستورات println براي خروجي يک html استفاده مي شود.

  • برخي از مزايا و معايب هر يک ازاين تکنولوژيها که به بحث اين مقاله مربوط مي شود را مي توان در زير خلاصه کرد:

    تكنولوژي مزايا معايب
    HTML
  • سادگي
  • عدم نياز به برنامه‌نويسي
  • عدم امكان توليد صفحات بصورت ديناميك
  • تركيب محتوي و قالب‌بندي
  • ASP, PHP, JSP
  • توليد ديناميک صفحات
  • برنامه نويسي بفرم Scripting
  • ترکيب محتوا، قالب بندي و منطق برنامه
  • Servlet
  • توليد ديناميک صفحات
  • کارايي
  • سختي کدگذاري html در دستورات println
  • ترکيب محتوا، قالب بندي و منطق برنامه

  • نقطه تمايز C2 و تکنولوژيهاي بالا در اين است که سعي مي کند سه عنصر محتوا، قالب بندي و منطق برنامه(Logic) را از يکديگر جدا سازد. براي اين منظورC2 ازxml بعنوان اساس انتشار صفحات وب استفاده مي کند. بعنوان آشنايي مقدماتي از طرز کار آن، مي توان بطور خيلي ساده شده توليد يک صفحه وب را درC2 بصورت زير خلاصه کرد. توليد يک صفحه از يک سند شروع مي شود. اين سند مي تواند يک سند ايستا ي ذخيره شده در يک فايل xml يا سندي که بصورت پويا بوسيله يک برنامه توليد مي شود، باشد. بر روي اين سند تبديلاتي صورت مي پذيرد تا نهايتا به يک سند html (يا هر خروجي دلخواه) تبديل شود. در ادامه اين مقاله توضيحات دقيقتري ارائه مي شود.
    براي فهم طرز کار C2، نياز به دانستن برخي از مفاهيم اساسي است که در اينجا بصورت خيلي مختصر بدانها اشاره مي شود. براي آشنايي جزيي تر با هر يک از آنها لطفا ارجاعات ارائه شده را نگاه کنيد:
  • XML : يک markup language است که در آن مي توان از متون و Tagها براي ارايه يک سند استفاده نمود. برخلاف html که داراي Tagهاي ثابت و استانداردي است، درxml مي توان Tagهاي دلخواه را استفاده نمود. همچنين در اينجا هر Tag بايستي با يک Tag متناظر بسته شود. به همين خاطر xml يک فرم خوش ساخت دارد. مثالي از يک سند xml که براي يک کتاب ايجاد شده در زير آورده شده است:

  • 
    <?xml version=”1.0”>
    <book id=”123”>
     <author name=”xyz”/>
     <title>XML publishing with xml</title>
    
     <publish-date><year>2002</year><month>7</month><day>15</day></publish-date>
    </book>
    
    
    امروزه استفاده از xml بسيار متداول و متنوع است. در هر حال بيشترين استفاده از آن در يکپارچه سازي سيستم ها و خصوصا در توليد کاربردهاي بر اساس وب است.

  • مدل SAX براي پردازش سندهاي xml : يکي از دو مدل معروف و استاندارد براي پردازش xmlهاست. مدل ديگر بنام DOM معروف است. بطور خلاصه يک پردازنده براساس مدل SAX يک سند را در يک پيمايش، پردازش مي کند. به اين معني که با برخورد به هر يک از Tagها و عناصر ديگر در يک سند (مثل متن ، فاصله هاي اضافي و غيره) آنرا به اطلاع برنامه کاربردي مي رساند (بوسيله eventهاي استاندارد). درحاليکه يک پردازندهDOM ابتدا يک مدل از سند در حافظه توليد کرده و آنگاه برنامه کاربردي مي تواند بصورت دلخواه به هريک از اجزا آن سند دسترسي داشته باشد. بديهي است که از لحاظ ميزان حافظه مصرفي و سرعت پردازش SAX نسبت بهDOM داراي مزيت است.
  • XSL : يک نوع xmlاست که در آن دستوراتي براي تبديل و فرمت گذاري يک سندxml قرار مي گيرد. به اين ترتيب يک پردازنده مي‌تواند يک سندxml وxsl را دريافت کرده، و با بکارگيري دستورات ارايه شده درxsl سندxml را به يک خروجيxml تبديل کند.



  • C2 چيست؟ C2 يك چهارچوب XML Publishing است. اين جمله چه معني دارد؟
    C2 يك پايگاه داده كه محتوي XML را ذخيره كند يا يك سرويس دهنده J2EE كه امكانات يك Web Server را براي ارايه محتوي فراهم مي‌كند، نيست. بلكه از لحاظ معماري بين اين دو لايه قرارمي‌گيرد. C2 چهارچوبي براي پردازش محتوي است. پردازش محتوي از طريق يك رشته پشت سرهم يا از يك ترتيبي از اجزا انجام مي‌شود. اين ترتيب توسط طراح تعيين‌مي‌گردد. مانند خطوط لوله (pipelines) در سيستم عامل يونيکس،2c از ايده خط لوله براي ترکيب اجزاء استفاده مي کند.

    مثال‌هاي ساده :
    با يك مورد ساده شروع مي‌كنيم. يك سند XML در يك فايل با نام file.xml ذخيره شده است كه با يك XSL Stylesheet به نام stylesheet.xsl پردازش‌شده و بصورت HTML ارايه مي‌شود. يك خط لوله مناسب براي اين كار در شكل 1 نمايش داده شده است.



    شكل 1
    تمامي خطوط لوله توسط يك توليد کننده(Generator) شروع مي‌شود. در شكل 1 توليد کننده از طريق سيستم فايل، فايلي را خوانده و آن را به يك رشته اي از events SAX تبديل مي‌كند. جزء مياني، كه در اين مورد يك مبدل (XSL (Transformer است، Tagهاي نمايشي HTML را اعمال مي کند. البته در اين قسمت هم اين جزء يكXML دريافت كرده و يكXML ايجادمي‌كند. در پايان جزء پاياني، يك سريال کننده Serializer))، رشته را خاتمه‌داده و خروجي را به شكل HTTP ارايه مي‌نمايد. اين خط لوله 3 قسمتي تقريبا در تمامي صفحات يك سايت اعمال مي‌گردد. اين مثال ممكن است بسيار بديهي به نظر برسد، زيرا دو قسمت از سه قسمت خط، براي شروع‌كردن و پايان‌دادن به خط لوله است، اما به هر حال ساده‌ترين وضعيت را نشان مي‌دهد.



    شكل 2
    شكل 2 يك وضعيت متداول را نمايش مي‌دهد. صفحات شامل هر دو شكل ثابت و همچنين پوياي داده كه از يك پايگاه داده گرفته مي‌شود، هستند. جزء جديدي كه اينجا معرفي شده، SQL مبدل است. دستورات SQL قرارگرفته در سند XML اصلي، پردازش شده و نتيجه آن به خروجي اضافه مي شود. براي مثال، اگر سند مبدا (file.xml) بصورت زير باشد :
    
    <guest-list>
      <sql:execute-query>
        <sql:query>
          SELECT CONCAT(lastName, ', ', firstName) as name, age
              FROM guest WHERE status = ARRIVING;
        </sql:query>
    
      </sql:execute-query>
    </guest-list>
    
    
    يك خروجي ممكن از SQL مبدل بصورت زير است :
    
    <guest-list>
      <row-set>
        <row>
    
          <name>Bush, George</name>
          <age>56</age>
        </row>
        <row>
          <name>Jackson, Michael</name>
    
          <age>42</age>
        </row>
        <row>
          <name>Einstein, Albert</name>
          <age>105</age>
    
        </row>
      </row-set>
    </guest-list>
    
    
    اصلي‌ترين مزيت معماري در اينجا، تبديل فايل مبدا به يك سند كاري منطقي بسيار فشرده است. نيازي به نگراني در مورد اتصال به بانک اطلاعاتي و انجام مراحل لازم براي اجراي Query از بانک اطلاعاتي نيست. اين کارها را مبدل انجام مي دهد. لذا برنامه ساز مي تواند بر روي منطق کاربرد تمرکز داشته و در نتيجه کارايي اش افزايش مي يابد.
    به عنوان مثالي ديگر، يك پايگاه داده محلي را در نظر بگيريد كه شامل ليستي از اقلام است كه مي‌خواهيم نرخ فروش فعلي آنها را بدست آوريم. اين قسمت مي تواند بخشي از يك portal مانند Yahoo باشد. اين مساله مي‌تواند توسط يك خط لوله چند جزيي مانند شكل 3 انجام شود :



    شكل 3
    قطعات XML ورودي به مبدل SOAP ممكن است مانند زير باشد:
    
    <soap:query url="http://www.mystock.org:8080">
      <soap:body>
        <getStockPrice>
          <stockName>IBM</stockName>
          <stockName>HWQ</stockName>
    
          <stockName>BEA</sockName>
        </getStockPrice>
      </soap:body>
    </soap:query>
    
    
    در اين مثال، توجه كنيد كه يك XSL مبدل مياني براي آماده‌سازي خروجي SQL مبدل به شكل مورد نياز براي SOAP مبدل استفاده‌شده‌است. همانطويکه در اين مثال ديده مي شود، XSL مي‌تواند براي انواع گوناگوني از وظايف، بسيار فراتر از نمايش HTML بكار برده‌شود.

    طرز کار C2 بطور خلاصه
    همان‌طور كه گفته شد، سه جزء بنيادي در C2 وجود دارد.
    اول : توليدکنندهها براي ساخت يك رشته XML SAX استفاده مي‌شوند. اين رشته مي‌تواند از يك فايل بر روي فايل سيستم محلي، يك BLOB از XML در يك پايگاه داده، از يك سيستم ديگر و يا هر جاي ديگر باشد.
    دوم : مبدلها مسؤول تغيير دادن رشته XML هستند كه مي‌توانند مبدلهايي مانند XSL، SQL، SOAP، LDAP و يا موارد تعريف شده توسط برنامه ساز باشند. ويژگي اصلي، گرفتن يك رشته XML و ارايه يك رشته XML است.
    در پايان : سريال کننده ها كه مسؤول خاتمه رشته XML و ارايه محتوي به يك شكل مناسب هستند. معمولا خروجي HTTP است، اما مي‌تواند يك شكل گرافيكي، نوشتن در يك فايل سيستم، و يا در عمل هر چيز ديگري باشد.

    نقشه سايت (Sitemap)
    خطوط لوله C2 توسط يک فايل مخصوص بنام Sitemap تعريف مي‌شوند، كه در فايل sitemap.xmap ذخيره مي گردد. قطعه اصلي Sitemap براي مثال شكل 3 مي تواند بصورت زير باشد :
    
    <map:match="*.html">
      <map:generate src="file.xml"/>
    
      <map:transformer type="sql">
        <map:parameter name="use-connection" value="mydatabase"/>
      </map:transformer>
      <map:transformer type="xsl" src="format-adjust.xsl"/>
      <map:transformer type="soap" url="soap://www.stockquote.com"/>
      <map:transformer type="xsl" src="html-presentation.xsl"/>
    
      <map:serializer type="html"/>
    </map:match>
    
    
    ايده نقشه سايت در نسخه 2 اضافه شده و يکي از تغييرات مهم در آن به حساب مي آيد. مزيت آن اين است که براحتي و با قابليت انعطاف بالايي مي توان نحوه پاسخگويي به يک درخواست را تعريف و به صورت دلخواه تغيير داد.

    خلاصه :
    C2 مفهوم پردازش خطي را پياده‌سازي مي‌كند. اجزا موجود C2 توانايي دسترسي به پايگاه‌هاي داده رابطه‌اي و XML، همچنين ارتباط به LDAP و ساخت تصاوير گرافيكي را دارند. مي‌توان منتظر اجزايي با توانايي ساخت و دريافت پيام‌هاي SOAP و ebXML، سريال‌كننده‌هاي قرارداد SNMP، اجزا فراهم‌ساز COM و EJB/RMI و يا در كل اجزا با انجام وظايف ديگر براي مسايل كاري مهم بود.
    Cocoon مثالي از يك نرم‌افزار هدايت شده توسط XML، يك معماري كه دامنه دانش كاري بصورت XML گرفته‌مي‌شود و اين XML نرم‌افزار با روند كلي را راهبري مي‌كند. اجزا XSL و مبدل SQL مثال‌هاي روشني هستند. سازندگان نرم‌افزار تنها نياز دارند كه راه‌حل نرم‌افزار را بصورت زبان XML بيان كرده و قادر به استفاده از اجزا ديگران نيز هستند.
    مرجع :
    http://xml.apache.org/cocoon