Tuesday 6 October 2015

PRAKTIKUM DOM (2)

Jika di bab  sebelumnya dibahas cara memanfaatkan DOM untuk mengakses dokumen  XML,  bab  ini  akan  membahas  pemakaian  DOM  untuk  menguji dokumen XML dengan skema DTD dan XSD, serta menampilkan dokumen XML dengan XSL

1  Validasi dokumen XML dengan DTD

Diketahui file product.xml sebagai berikut

<PRODUCTDETAILS>
<PRODUCT>
<PRODID> P001 </PRODID>
<PRODNAME> Beras </PRODNAME>
<PRICE> 5000 </PRICE>
</PRODUCT>
<PRODUCT>
<PRODID> P002 </PRODID>
<PRODNAME> Jagung </PRODNAME>
<PRICE> 4000 </PRICE>
</PRODUCT>
<PRODUCT>
<PRODID>P004</PRODID>
<PRODNAME>Kacang Tanah</PRODNAME>
<PRICE>4000</PRICE>
</PRODUCT>
</PRODUCTDETAILS>

File DTD-nya, product.dtd sebagai berikut:

<!ELEMENT PRODUCTDETAILS (PRODUCT)+>
<!ELEMENT PRODUCT (PRODID, PRODNAME, PRICE)>
<!ELEMENT PRODID (#PCDATA)>
<!ELEMENT PRODNAME (#PCDATA)>
<!ELEMENT PRICE (#PCDATA)>

Bagaimana membuktikan product.xml sesuai dengan skema yang dibuat dalam product.dtd menggunakan DOM?

Objek DOMDocument dan ParseError dibutuhkan untuk memvalidasi dokumen XML terhadap DTD . Ketikkan kode berikut di Notepad dan simpan sebagai CekXMLDTD.htm.

<html>
<head> <title>Penguji XML DTD</title>



<script Language="javascript">
var transformedwindow;

function doValidate()
{
if ((document.frmTransform.TxtXMLFileName.value).length == 0)
{
alert("Maaf, File XML kosong");
return;
}

var xmldoc= new ActiveXObject("Msxml2.DOMDocument.4.0");
xmldoc.validateOnParse = true;
//dengan true berarti akan divalidasi dengan DTD atau XSD

xmldoc.load(document.frmTransform.TxtXMLFileName.value);
//load dokumen XML yang diminta masukan.

var error=xmldoc.parseError;
//barangkali ada error.

transformedwindow=window.open('Hasil.html', '_new', 'location=0, status=1, toolbar=0, menuBar=0, srollBars=0, directories=0,resizable=0,width=600,height=600');

if(error!="")
{

transformedwindow.document.write('<HTML><TITLE>Chek XML DTD</Title><BODY><P><b>Error Validating the document</b></p><br>');
//Buat pesan

transformedwindow.document.write('<b>Error URL:
</b><br>' + error.url + '<br>');
//Tulis Error URL.

transformedwindow.document.write('<b>Error Line:
</b><br>' + error.line + '<br>');
//Tulis nomor baris yang salah




transformedwindow.document.write('<b>Error Position:
</b><br>' + error.linepos + '<br>');
//Tulis posisi kesalahan

transformedwindow.document.write('<b>Error Reason:
</b><br>' + error.reason + '<br>');
//Tulis alasan kesalahan


transformedwindow.document.write('</BODY></HTML>');
}
else
{

transformedwindow.document.write('<HTML><TITLE>Chek XML DTD </Title><BODY><b>Tidak ada kesalahan </b><br>');
//Tulis pesan


transformedwindow.document.write('</BODY></HTML>');
}
}

function doReset()
{
/* document.frmTransform.TxtXMLFileName.value=""; if (!(typeof transformedwindow == "undefined")) transformedwindow.close();
*/
}

</script>
</head>
<body bgcolor="#6699CC" text="#FFFFFF">
<p>&nbsp;</p>

<p align="center"><font face="Verdana, Arial, Helvetica, sans- serif"><b><u>Penguji XML DTD



</u></b></font></p>
<p>&nbsp;</p>
<form name="frmTransform" method="post" action="">
<table width="75%" border="0" align="center">
<tr>
<td width="31%">
<div align="center"><b>File XML:</b></div>
</td>
<td width="18%">
<input type="text" name="TxtXMLFileName">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2"></font>
</td>
<td width="10%">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<a href="#" onClick="javascript:doValidate()">Cek</a>
<!--buat link Validate memanggil fungsi dovalidate() jika di-clicked-->
</font>

</td>
<td width="41%">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<a href="#" onClick="javascript:doReset()">Reset</a>
</font>
</td>
</tr>
<tr>
<td width="31%"> </td>
<td colspan="3"> </td>
</tr>
<tr>
<td colspan="4">
<div align="left"></div>
<div align="left"></div>
</td>
</tr>
</table>
<p>&nbsp;</p>
<p>&nbsp; </p>
<p>&nbsp; </p>



<p> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"> </font></p>
</form>
</body>
</html>

Untuk menjalankan program di atas, bukalah CekXMLDTD.htm dalam browser web. Ketikkan product.xml di teks fieldnya dan klik button Cek”. Jika ada error, rinciannya : nomor baris, alasan, dan posisinya ditampilkan. Jika benar, pesan Tidak ada kesalahan” akan ditampilkan.

Berikut adalah contoh masukan product.xml” untuk program di atas.

Dan hasilnya :

Validasi dokumen XML dengan XSD

Diketahui file product.xml seperti di atas. Dan file product.xsd sebagai berikut.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="PRODUCTDETAILS" type="prdata"/>
<xsd:complexType name="prdata" maxOccurs=”unbounded”>
<xsd:sequence>
<xsd:element name="PRODUCT" type="prdt"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="prdt">
<xsd:sequence>
<xsd:element name="PRODID" type="xsd:string"/>
<xsd:element name="PRODNAME" type="xsd:string"/>
<xsd:element name="PRICE" type="xsd:positiveInteger"/>
</xsd:sequence>



</xsd:complexType>
</xsd:schema>

Bagaimana membuktikan product.xml sesuai dengan skema yang dibuat dalam product.xsd menggunakan DOM? Kode berikut CekXMLXSD.html dapat digunakan untuk memvalidasi XML berdasarkan XSD.

<html>
<head>
<title>Penguji XML XSD</title>
</head>
<body bgcolor="#6699CC" text="#FFFFFF" vLink="Yellow" >
<script Language="javascript"> var transformedwindow; function doValidate()
{
if((document.frmTransform.TxtXMLFileName.value).length == 0)
{
alert("Maaf, file XML kosong.");
return;
}

if((document.frmTransform.TxtXSDFileName.value).length ==0)
{
alert("Maaf, file XSD kosong");
return;
}

var xmlDoc = new
ActiveXObject("Msxml2.FreeThreadedDomDocument.4.0"); xmlDoc.async = false; xmlDoc.load(document.frmTransform.TxtXMLFileName.value); var namespace=xmlDoc.documentElement.namespaceURI;

xmlDoc.validateOnParse=true;
var xsdschemacache = new
ActiveXObject("Msxml2.XMLSchemaCache.4.0");
xsdschemacache.add(namespace,document.frmTransform.TxtXSDFil eName.value);
xmlDoc.schemas=xsdschemacache;



xmlDoc.load(document.frmTransform.TxtXMLFileName.value); var error=xmlDoc.parseError; transformedwindow=window.open('Hasil.html','_new','location=0,st
atus=1,toolbar=0,menuBar=0,scrollBars=0,directories=0,resizable=0,width=6
00,height=600');

if(error!="")
{

transformedwindow.document.write('<HTML><TITLE>Penguji Skema</Title><BODY><P><b>Kesalahan saat validasi dokumen</b></p><br>');
transformedwindow.document.write('<b>Error
URL:</b><br>' + error.url + '<br>');
transformedwindow.document.write('<b>Error
Line:</b><br>' + error.line + '<br>');
transformedwindow.document.write('<b>Error
Position:</b><br>' + error.linepos + '<br>');
transformedwindow.document.write('<b>Error
Reason:</b><br>' + error.reason + '<br>');

transformedwindow.document.write('</BODY></HTML>');
}
else
{

transformedwindow.document.write('<HTML><TITLE>Penguji
Skema</Title><BODY><b>Tidak ada kesalahan </b><br>');

transformedwindow.document.write('</BODY></HTML>');
}
}

function doReset()
{
document.frmTransform.TxtXSDFileName.value=""; document.frmTransform.TxtXMLFileName.value=""; if (!(typeof transformedwindow == "undefined"))
transformedwindow.close();
}



</script>
<p>&nbsp;</p>
<p align="center"><font face="Verdana, Arial, Helvetica,
sans-serif"><b><u>Penguji XML - XSD </u></b></font></p>
<p>&nbsp;</p>
<form name="frmTransform" method="post" action="">
<table width="75%" border="0" align="center">
<tr>
<td>
<div align="center"><b>File XML:</b></div>
</td>

<td>
<input type="text" name="TxtXMLFileName">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2"><a href="#" onclick="javascript:doValidate()">Check</a></font>
</td>
</tr>
<tr>
<td>
<div align="center"><b>File XSD:</b></div>
</td>
<td>
<input type="text" name="TxtXSDFileName">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2"><a
href="#" onclick="javascript:doReset()">Reset</a></font>
</td>
</tr>
<tr>
<td colspan="2">
<div align="left"></div>
<div align="left"></div>
</td>
</tr>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>



<p>&nbsp;</p>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
</font></p>
</form>
</body>
</html>

Pastikan product.xml dan product.xsd berada di folder yang sama dengan file program ini. Berikut adalah contoh masukan product.xml dan product.xsd.


Dan hasilnya adalah pesan form “Tidak ada kesalahan.


Menampilkan XML dengan XSL

Diketahui file productTable.xsl sebagai berikut:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="pink">
<tr>





</tr>

<th>Product ID</th>
<th>Product Name</th>
<th>Price</th>

<xsl:for-each select="PRODUCTDETAILS/PRODUCT">
<tr>
<td><xsl:value-of select="PRODID"/></td>
<td><xsl:value-of select="PRODNAME"/></td>
<td><xsl:value-of select="PRICE"/></td>



</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Jika product.xml ditampilkan menggunakan productTable.xsl akan menghasilkan tampilan berikut.

Diketahui juga file productList.xsl sebagai berikut:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>

<body>

<xsl:for-each select="PRODUCTDETAILS/PRODUCT">
<li><xsl:value-of select="PRODID"/></li>
<li><xsl:value-of select="PRODNAME"/></li>









</html>




</body>

<li><xsl:value-of select="PRICE"/></li>
<br></br>
</xsl:for-each>

</xsl:template>
</xsl:stylesheet>

Jika product.xml ditampilkan menggunakan productList.xsl akan menghasilkan tampilan berikut.

Bagaimana menampilkan product.xml dalam bentuk tabel atau list (dapat dipilih dari halaman HTML) melalui DOM? Kita buat dokumen HTML berisi dua frame, frame atas untuk menampilkan hasil, frame bawah untuk menampilkan pilihan.

File frameAtas.html digunakan untuk mengisi frame atas.

<html>
<head>
<title>Hasil XSL</title>



</head>
<body bgcolor="#FFFFFF">
</body>
</html>

File frameBawah.html untuk menampilkan pilihan.
<html>
<head>
<title>Pilihan</title>
<script language="javascript">
function displayTable()
{
document.VIEW.optList.checked=false;
document.VIEW.optReset.checked=false;
var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0");
var xslDoc = new
ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
var xslProc; xslDoc.async = false; xslDoc.load("productTable.xsl"); xslt.stylesheet = xslDoc;
var xmlDoc = new
ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
xmlDoc.async = false; xmlDoc.load("product.xml"); xslProc = xslt.createProcessor(); xslProc.input = xmlDoc; xslProc.transform();
//alert(xslProc.output);
parent.TOP.document.write(xslProc.output);
}

function displayList()
{
document.VIEW.optTable.checked=false;
document.VIEW.optReset.checked=false;
var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0");
var xslDoc = new ActiveXObject
("Msxml2.FreeThreadedDOMDocument.4.0");
var xslProc;



xslDoc.async = false; xslDoc.load("productList.xsl"); xslt.stylesheet = xslDoc;
var xmlDoc = new ActiveXObject
("Msxml2.FreeThreadedDOMDocument.4.0"); xmlDoc.async = false; xmlDoc.load("product.xml");
xslProc = xslt.createProcessor(); xslProc.input = xmlDoc; xslProc.transform();
parent.TOP.document.write(xslProc.output);
}

function displayReset()
{
parent.TOP.document.location="frameAtas.html"; document.VIEW.optList.checked=false; document.VIEW.optTable.checked=false;
}
</script>
</head>
<body bgcolor="#FFFFFF">
<form name="VIEW" method="post" action>
<p>
<input type="radio" name="optTable" value="radiobutton" onClick="javascript:displayTable();">
Tampilan Tabel XML
<input type="radio" name="optList" value="radiobutton" onClick="javascript:displayList();">
Tampilan List XML
<input type="radio" name="optReset" value="radiobutton" onClick="javascript:displayReset();">
Reset
</p>
</form>
</body>
</html>



Fungsi displayTable() menampilkan XML dalam bentuk tabel, displayList() menampilkan XML dalam bentuk List,  displayReset() mengosongkan frameAtas.
File Utama.html berikut digunakan untuk membuat halaman utama.

<html>
<head>
<title>Utama</title>
</head>
<frameset rows="85%,103*" cols="*">
<frame name="TOP" scrolling="AUTO" src="frameAtas.html" noresize frameborder="NO">
<frame name="BOTTOM" src="frameBawah.html" scrolling="NO" noresize frameborder="NO">
</frameset>
</html>

Jika dijalankan hasilnya adalah ada pilihan untuk menampilkan dalam bentuk
Tabel atau List di bawah.
Jika tampilan tabel dipilih, maka akan dihasilkan tampilan berikut.
Jika tampilan list dipilih, maka akan dihasilkan tampilan berikut.