« October 2007 | صÙ?حه اصلی | December 2007 »

ايجاد محتواي دايناميك XML با ليستي از Item ها

November 28, 2007 12:52 PM

در ادامه مطلب قبلي باز هم به توليد XML با محتواي دايناميك مي پردازيم. اين بار محتواي �?ايل XML را توسط ليست آيتم هايي كه در يك Java bean تعري�? شده، ايجاد مي كنيم. براي اين كار دو كلاس به نام هاي Item و Inventory ايجاد مي نماييم.
محتواي �?ايل Item.java چنين است:

package beans;

public class Item implements java.io.Serializable {
    private String name;
    private float price;
    
    public Item(String name , float price) {
        this.name = name;
        this.price = price;
    }
    public String getName() {return name;}
    public float getPrice() {return price;}
}

محتواي ï¿½?ايل Inventory.java Ú†Ù†ÙŠÙ† Ø§Ø³Øª:

package beans;

import java.util.Iterator;
import java.util.Vector;

public class Inventory implements java.io.Serializable {
    private Vector items = new Vector();
    
    public Inventory() {
        items.addElement(new Item("LCD",(float)200000.0));
        items.addElement(new Item("Laptop",(float)1000000.0));
    }
    
    public Iterator getItems() {
        return items.iterator();
    }
}

توجه ÙƒÙ†ÙŠØ¯ ÙƒÙ‡ Ø¯Ø± Ø§ÙŠÙ†Ø¬Ø§ Ù…حتويات Ù„يست items Ø§Ø² ÙƒÙ„اس Inventory بصورت Ø«Ø§Ø¨Øª Ù…قداردهي Ø´Ø¯Ù‡ Ø§Ù†Ø¯. Ø§ÙŠÙ† Ù„يست Ù…ÙŠ ØªÙˆØ§Ù†Ø¯ Ø§Ø² Ø±ÙˆÙŠ ÙŠÙƒ Ù…نبع Ø¯Ø§Ø¯Ù‡ Ù‚ابل ØªØºÙŠÙŠØ± Ù…قداردهي Ø´ÙˆØ¯.
سرانجام Ù…شخصات ï¿½?ايل inventory.jsp Ø¨Ø¯ÙŠÙ† ØµÙˆØ±Øª Ø§Ø³Øª:

<%@page contentType="text/xml"%>
<%@page pageEncoding="UTF-8"%>
<%@ page import="beans.Inventory,beans.Item" %>

<jsp:useBean id="inventory" class="beans.Inventory" scope="page" />
<% 
    java.util.Iterator it = inventory.getItems();
    Item item = null;
%>

<?xml version="1.0" encoding="UTF-8"?>
<inventory>
    <% while (it.hasNext()) { 
        item = (Item)it.next(); %>
    <item>
        <name><%= item.getName() %></name>
        <price><%= item.getPrice() %></price>
    </item>
    <% } %>  
</inventory>

با اجراي اين �?ايل jsp روي Browser خود يك ساختار XML را مشاهده خواهيد نمود كه محتويات آن، ليست همه آيتم هاي تعري�? شده در كلاس Inventory است.

منبع : �?صل 11 كتاب Advanced JavaServer Pages

mahyar_ev | 12:52 PM | Comment(s)(0)

ساخت XML با محتوای داینامیک توسط jsp

ساختار Ø§Ø³ØªØ§Ù†Ø¯Ø§Ø±Ø¯ Ùˆ Ø´Ù†Ø§Ø®ØªÙ‡ Ø´Ø¯Ù‡ ØªØ± ÙŠÚ© ï¿½?ايل jsp Ù…شابه ÙŠÚ© ï¿½?ايل html Ø§Ø³Øª Ú©Ù‡ Ø¯Ø± Ù…يان ØªÚ¯ Ù‡Ø§ÙŠ Ø¢Ù† Ù…ÙŠ ØªÙˆØ§Ù† ØªÚ¯ Ù‡Ø§ÙŠ jsp Ø±Ø§ Ù†ÙŠØ² Ø¨Ù‡ Ú©Ø§Ø± Ø¨Ø±Ø¯. Ù…ثال:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<html>
    <head>
        <title>JSP Page in HTML format</title>
    </head>
    <body>
<% out.println("This is a jsp in html format.");    %>
    </body>
</html>

اما ÙŠÚ© ï¿½?ايل jsp Ù…ÙŠ ØªÙˆØ§Ù†Ø¯ ï¿½?رمت XML Ù†ÙŠØ² Ø¯Ø§Ø´ØªÙ‡ Ø¨Ø§Ø´Ø¯. Ø¨Ù‡ Ø§ÙŠÙ† ØªØ±ØªÙŠØ¨ Ù…ÙŠ ØªÙˆØ§Ù† Ø®Ø±ÙˆØ¬ÙŠ XML Ø¯Ø§ÙŠÙ†Ø§Ù…ÙŠÚ© ØªÙˆÙ„يد Ù†Ù…ود. Ù…ثال:

<%@page contentType="text/xml"%>
<%@page pageEncoding="UTF-8"%>

<?xml version="1.0" encoding="UTF-8"?>
<documnet>
    <date>
        <%= new java.util.Date() %>
    </date>
</documnet>

نکته 1: ØªÙˆØ¬Ù‡ Ú©Ù†ÙŠØ¯ Ú©Ù‡ Ø¯Ø± Ù‡Ø± Ø¯Ùˆ Ø­Ø§Ù„ت Ù¾Ø³ÙˆÙ†Ø¯ ï¿½?ايل Ø¨Ø§ÙŠØ¯ jsp Ø¨Ø§Ø´Ø¯.
نکته 2: Ø¨Ù‡ Øªï¿½?اوت Ù…قدار contentType Ø¯Ø± Ø¯Ùˆ Ù…ثال Ø¯Ù‚ت Ú©Ù†ÙŠØ¯.
نکته 3: Ø®Ø±ÙˆØ¬ÙŠ Ù…Ø«Ø§Ù„ Ø§ÙˆÙ„ Ø¯Ø± Browser Øµï¿½?حه Ø§ÙŠ Ø§Ø³Øª Ú©Ù‡ ØªÙ†Ù‡Ø§ Ø¹Ø¨Ø§Ø±Øª "JSP Page in HTML format" Ø¯Ø± Ø¢Ù† Ù†ÙˆØ´ØªÙ‡ Ø´Ø¯Ù‡. Ø§Ù…ا Ø®Ø±ÙˆØ¬ÙŠ Ø¯ÙˆÙ… Ø¨Ù‡ ï¿½?رمت XML Ø§Ø³Øª Ú©Ù‡ Ù…قدار Ø¹Ù†ØµØ± date Ø¢Ù† ØªØ§Ø±ÙŠØ® Ø¬Ø§Ø±ÙŠ Ø³ÙŠØ³ØªÙ… Ø§Ø³Øª.

mahyar_ev | 10:01 AM | Comment(s)(0)

نمايش XML در HTML

November 19, 2007 01:21 PM

چندي پيش در كامنت هاي مطلبي مربوط به XML دوست عزيزم سوالي مطرح نمود كه آن زمان من از روي ناداني جوابي دادم كه گرچه غلط نبود، اما جواب سوال او هم نبود. سوال اين بود كه "چطور مي توان يك �?ايل XML را در ص�?حه html نشان داد". باز حين وب گردي هايم به مثالي برخوردم كه گمان مي كنم جواب سوال اين دوست عزيزم باشد.
�?رض كنيد محتويات �?ايل Products.xml چنين باشد:

<?xml version="1.0"?>

<Products>
    <Item>
        <Name>Coffee Cup Warmer</Name>
        <Number>0001</Number>
        <Description>See Name</Description>
        <Price>15.00</Price>
    </Item>
    <Item>
        <Name>T-Shirt with Wacky NorEaster Logo Large</Name>
        <Number>0004</Number>
        <Description>See Name</Description>
        <Price>21.00</Price>
    </Item>
    <Item>
        <Name>Computer For Linux</Name>
        <Number>0009</Number>
        <Description>With Linux Installed</Description>
        <Price>250.00</Price>
    </Item>
    <Item>
        <Name>Flat LCD Display 14"</Name>
        <Number>0010</Number>
        <Description>Recommended for #0009</Description>
        <Price>387.00</Price>
    </Item>
</Products>

با Ø¯Ø³ØªÙˆØ±Ø§Øª html Ø²ÙŠØ± Ù…ÙŠ ØªÙˆØ§Ù† Ù…حتويات Ø§ÙŠÙ† ï¿½?ايل XML Ø±Ø§ Ø¨ØµÙˆØ±Øª Ø¬Ø¯ÙˆÙ„ÙŠ Ù†Ù…ايش Ø¯Ø§Ø¯:

<HTML>

<HEAD>
    <TITLE>Show XML In Your HTML </TITLE>
</HEAD>
<BODY>
    <XML ID="MyProducts" SRC="Products.xml"></XML>

    <TABLE ID="ProdTable" DATASRC="#MyProducts" BORDER="1">
    <THEAD>
    <TH>
        Item Name/Description
    </TH>
    <TH>
        Item Number
    </TH>
    <TH>
        Price
    </TH>
    </THEAD>

    <TR>
    <TD>
        <B><Span DATAFLD="Name"></SPAN></B><BR>
        <SPAN DATAFLD="Description"></SPAN>
    </TD>
    <TD>
        <SPAN DATAFLD="Number"></SPAN>
    </TD>
    <TD>
        <SPAN DATAFLD="Price"></SPAN>
    </TD>
    </TR>
</TABLE>

</BODY>
</HTML>

اصل Ù…ثال Ø±Ø§ Ù…ÙŠ ØªÙˆØ§Ù†ÙŠØ¯ Ø§ÙŠÙ†Ø¬Ø§ Ø¨Ø¨ÙŠÙ†ÙŠØ¯. 
اميدوارم Ø§ÙŠÙ† Ø¨Ø§Ø± Ø¯ÙŠÚ¯Ø± Ù¾Ø§Ø³Ø® Ø³ÙˆØ§Ù„ Ø±Ø§ Ø¯Ø±Ø³Øª Ø¯Ø§Ø¯Ù‡ Ø¨Ø§Ø´Ù….

mahyar_ev | 01:21 PM | Comment(s)(2)

نامگذاري Java

قبلا جايي خوانده بودم كه نام java از حرÙ? اول نام سه Ù†Ù?ر از اÙ?راد اصلي كه روي آن كار كرده اند، گرÙ?ته شده. همينطور اينكه انتخاب Ù?نجان قهوه بعنوان نماد آن از اين جهت است كه اين نام گذاري در يك كاÙ?ÙŠ شاپ انجام شده. اما در وب گردي هايم در سايت sun به روايت ديگري در اين باره برخوردم. با توجه به اينكه اين مطلب در سايت sun Ú¯Ù?ته شده، قطعا روايت دوم صحيح است. ترجمه روايت اين است:

نام Java در يكي از چندين جلسه brainstorming برگزار شده توسط تيم نرم اÙ?زاري جاوا انتخاب گرديد. هدÙ? ما رسيدن به نامي بود كه نمايانگر ذات اين تكنولوژي Ùˆ پويايي، سرعت، سرزندگي Ùˆ ساير ويژگي هاي اين زبان باشد. Java از ميان پيشنهادهاي بسيار ارائه شده، انتخاب گرديد. Java يك سرنام (acronym) نيست. بلكه اشاره اي است به نوشيدني داغ Ùˆ خوشبويي كه برنامه نويسان بسيار دوست دارند آن را بنوشند.

پ.ن. يكي از معاني Java در اصطلاح عاميانه، قهوه است.

mahyar_ev | 11:21 AM | Comment(s)(0)

يك كد javascript كوچك

November 14, 2007 11:51 AM

براي مطالبي كه در اين وبلاگ مي نويسم ترجيح مي دهم كه خودم Ù?رمت html اش را درست كنم، تا اينكه اين كار را به engine خود اديتور بسپارم. با توجه به اينكه مطالبم اغلب تركيب بخش هاي rigt to left Ùˆ left to right است،‌هميشه بعد از آماده سازي مطالب وقت زيادي از من براي اين كار Ùˆ Ù?رمت بندي html گرÙ?ته مي شود. سخت ترين قسمت كار اين وبلاگ برايم همين است.
براي رهايي از اين كابوس يك javascript كوچك نوشته ام كه كارم را خيلي راحت مي كند و بخش زيادي از كار را اتوماتيك انجام مي دهد. source اش را اينجا مي گذارم. شايد به درد كس ديگري هم خورد. بنا به سليقه خود مي توانيد آن را customize كنيد.

mahyar_ev | 11:51 AM | Comment(s)(1)

ادامه مروري بر DTD

November 4, 2007 03:42 PM

Element ها در DTD

سينتكس Elements
در DTD با سينتكس زير element ها تعري�? مي شوند:

<!ELEMENT element-name category>
يا
<!ELEMENT element-name (element-content)>

Empty Elements
در اين نوع Element ها category برابر EMPTY مقداردهي مي شود:

<!ELEMENT element-name EMPTY>
مثال:
<!ELEMENT br EMPTY>

در XML با توجه به اين DTD تعري�? br بايد چنين باشد:

<br />

Element هاي با Parsed Character Data

<!ELEMENT element-name (#PCDATA)>

Element هاي با هر محتوا
مي توانند هر تركيبي از داده هاي قابل پارس را بپذيرند:

<!ELEMENT element-name ANY>

Element هاي داراي �?رزند

<!ELEMENT element-name (child1)>
يا
<!ELEMENT element-name (child1,child2,…)>
مثال:
<!ELEMENT note (to,from,heading,body)>

�?رزندان به همان ترتيبي كه در تعري�? آمده اند بايد در سند XML ظاهر شوند.
�?رزندان خود مي توانند داراي �?رزند باشند.

تعداد element هاي ممكن
در مثال هاي ذكر شده تا به حال تنها مي توان يك عدد از element را در XML قرار داد.
اگر بخواهيم كه تعداد تكرار يك element را مشخص نماييم از اين �?رمت ها است�?اده مي نماييم:

+ براي يك يا چند ،‌مثل

<!ELEMENT element-name (child-name+)>

* براي ص�?ر يا چند ، مثل

<!ELEMENT element-name (child-name*)>

? براي ص�?ر يا يك ، مثل

<!ELEMENT element-name (child-name?)>

محتواي دو حالتي
تعري�? زير اشاره دارد به اينكه note element داراي يك to، يك from و يك header است، به علاوه يكي از عناصر message يا body (يا message يا body)

<!ELEMENT note (to,from,header,(message|body))>

محتواي تركيبي
تعري�? زير اشاره دارد به اينكه note element داراي ص�?ر يا چند تكرار از Parsed Character data، to، from، header يا message است.

<!ELEMENT note (#PCDATA|to|from|header|message)*>

Attribute ها در DTD
در DTD تعري�? attribute ها با عبارت ATTLIST انجام مي شود. سينتكس آن بدين شكل است:

<!ATTLIST element-name attribute-name attribute-type default-value>
مثل
<!ATTLIST payment type CDATA "check">

كه در XML بدين شكل بايد پياده شود:

<payment type="check" />

لازم به ذكر است كه لازم نيست در سند XML حتما مقدار attribute را مساوي با defalt-value قرار دهيم. بلكه هر مقدار معتبري مطابق با type مشخص شده مي تواند باشد. ولي اگر مقداري به آن نسبت داده نشده باشد، مقدار آن برابر با default-value مي گردد.

به جاي default-value و نه همراه با آن، از سه عبارت REQUIRED# و IMPLIED# و FIXED value# هم مي توانيد است�?اده كنيد. در ادامه اين سه مورد معر�?ي مي شوند.

REQUIRED#
عبارت #REQUIRED مشخص مي كند كه attribute وجودش در عنصر مربوطه الزامي است. مثل

<!ATTLIST person number CDATA #REQUIRED>

از REQUIRED# وقتي است�?اده نماييد كه مقداري بعنوان مقدار پيش �?رض نداريد، اما در عين حال مي خواهيد كه حتما اين attribute وجود داشته باشد.

IMPLIED#
از IMPLIED# وقتي است�?اده كنيد كه مقداري بعنوان default نداريد و همچنين الزامي هم در وجود اين attribute وجود ندارد. مثال:

<!ATTLIST contact fax CDATA #IMPLIED>

FIXED value#
از اين عبارت وقتي است�?اده كنيد كه مي خواهيد attribute يك مقدار مشخص داشته باشد و نويسنده XML نتواند چيز ديگري به جاي آن بنويسد. اگر نويسنده چيز ديگري بنويسد، پارسر XML خطا برميگرداند. مثال:

<!ATTLIST sender company CDATA #FIXED "Microsoft">

Attribute هاي داراي مقداير Enumerated
وقتي كه attribute مقادير مشخصي را مي تواند بپذيرد، اين مقادير در قسمت attribute-type تعري�? مي شوند. مثال:

<!ATTLIST payment type (check|cash) "cash">

لازم به ذكر است كه attribute-type علاوه بر CDATAو enumerated عبارات ديگري را نيز مي تواند بپذيرد. از جمله ID، IDREF، IDREFS، NMTOKEN، NMTOKENS، ENTITY، ENTITIES، NOTATION و xml. براي آشنايي بيشتر با اين موارد به ساير منابع موجود در ارتباط با DTD از جمله مرجع اين نوشته رجوع نماييد:


ENTITY ها در DTD
Entity ها متغيرهايي هستند كه بعنوان shortcut براي برخي متون يا كاراكترهاي ديگر به كار مي روند. Entity به دو صورت internal و external قابل تعري�? است.

تعري�? Entity بصورت internal
سينتكس:

<!ENTITY entity-name "entity-value">
مثال:
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright W3Schools.">

و نحوه است�?اده آنها در XML بدين صورت است:

<author>&writer;&copyright;</author>

توجه كنيد كه قبل از نام entity كاراكتر "&" و بعد از آن ";" مي آيد.

تعري�? Entity بصورت external
سينتكس:

<!ENTITY entity-name SYSTEM "filename/URL">
مثال:
<!ENTITY writer SYSTEM "http://www.w3schools.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3schools.com/entities.dtd">

نحوه است�?اده از external entity مانند internal است.

mahyar_ev | 03:42 PM | Comment(s)(0)

مروري بر DTD

November 3, 2007 02:26 PM

ادامه مروري بر XML را با DTD پي مي گيريم.
DTD وسيله اي براي تعريÙ? بلاك هاي معتبر در سند XML است.
يك DTD مي تواند داخل خود سند XML تعريÙ? شود يا بصورت external از آن باشد.

Internal DTD Declaration:
در اين حالت در قسمت DOCTYPE با سينتكس زير تعريÙ? مي شود:

<!DOCTYPE root-element [element-declarations]>

مثال:

<?xml version="1.0"?>
<!DOCTYPE note [
 <!ELEMENT note (to,from,heading,body)>
 <!ELEMENT to (#PCDATA)>
 <!ELEMENT from (#PCDATA)>
 <!ELEMENT heading (#PCDATA)>
 <!ELEMENT body (#PCDATA)>
]>
<note>
 <to>you</to>
 <from>me</from>
 <heading>Reminder</heading>
 <body>Don't forget</body>
</note>

در اين مثال DOCTYPE note مشخص مي كند كه عنصر root سند note است.

External DTD Declaration:
در قسمت DOCTYPE با سينتكس زير تعريÙ? مي شود:

<!DOCTYPE root-element SYSTEM "filename">

مثال بالا را به صورت external مي بينيم:

<?xml version="1.0"?>
<!DOCTYPE  note SYSTEM "note.dtd">
<note>
 <to>you</to>
 <from>me</from>
 <heading>Reminder</heading>
 <body>Don't forget</body>
</note>

Ùˆ محتواي Ù?ايل note.dtd بدين صورت است:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

دلايل استÙ?اده از DTD
* هر DTD Ù?رمت Ù?ايل XML مربوط به خود را توصيÙ? مي كند.
* اÙ?راد Ùˆ گروه هاي مختلÙ? مي توانند Ù?رمت DTD را بصورت استاندارد براي تبادلات در نظر بگيرند Ùˆ Ù?ايل هاي XML خود را بر اساس آن توليد نمايند.
* application ها نيز مي توانند براي اعتبارسنجي Ù?ايل XML از DTD ها استÙ?اده كنند.

از ديدگاه DTD هر سند XML يا HTML از اجزاي زير تشكيل شده است:
* Elements
* Attributes
* Entities
* PCDATA
* CDATA

در ادامه هر كدام تشريح مي گردند:

Elements
Element ها بلاك هاي اصلي اسناد XML يا HTML هستند. موارد زير مثال هايي از element ها هستند:

<body>some text</body>
<message>some text</message>

Attributes
عبارتند از توضيحات اضاÙ?ÙŠ درباره element ها. در مثال زير img همان element است Ùˆ src يك attribute آن. از آنجا كه خود element محتوايش empty است با "/" بسته مي شود.

<img src="computer.gif" />

Entities
برخي كاراكترها معني خاصي در XML دارند مثل < كه علامت شروع تگ XML است. مشابه آن در HTML عبارت ";nbsp&" است كه به "no-breaking-space" اشاره دارد. ليست آنها در XML بدين شرح است:

&lt;      <
&gt;      >
&amp;      &
&quot;      "
&apos;      '

PCDATA
PCDATAمخÙ?Ù? Parsed Character Data متني است كه توسط Parser قابل parse است.
CDATA
CDATA مخÙ?Ù? Character Data متني است كه توسط parserØŒ parse نمي شود.

mahyar_ev | 02:26 PM | Comment(s)(0)