Chủ Nhật, 10 tháng 8, 2014

Using Validator to validate in XML

Tạo một project mới với tên Module 10.1 sau đó tạo ra một file xml với tên là tomcat-users.xml như dưới đây:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="admin" password="" roles="admin,manager"/>
</tomcat-users>

Sau đó tạo ra một file xsl với tên tomcat-users-validation.xsl như dưới đây.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="tomcat-users">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="role">
          <xs:complexType>
            <xs:attribute name="rolename" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
        <xs:element maxOccurs="unbounded" name="user">
          <xs:complexType>
            <xs:attribute name="username" type="xs:string" use="required" />
            <xs:attribute name="password" type="xs:string" use="required" />
            <xs:attribute name="roles" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Sau đó là hàm main:

public static void main(String[] args) {
        try {
            DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document doc = parser.parse(new File("tomcat-users.xml"));
            
            SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Source schemaFile = new StreamSource(new File("tomcat-users-validation.xsd"));
            Schema schema = factory.newSchema(schemaFile);
            Validator validator = schema.newValidator();
            
            validator.validate(new DOMSource(doc));
            System.out.println("Document file is valid!");
        } catch (ParserConfigurationException | SAXException | IOException ex) {
            Logger.getLogger(Module101_DomValidattion.class.getName()).log(Level.SEVERE, null, ex);
        }
    }


Module 10.2

Ta tạo một application với tên là Module 10.2 và copy file xml ở ví dụ trước như dưới đây:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="admin" password="" roles="admin,manager"/>
</tomcat-users>

Tiếp đó tạo ra một file xsl như dưới với tên tomcat-users-validation-2.xsl :

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="tomcat-users">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="role">
          <xs:complexType>
            <xs:attribute name="rolename" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
        <xs:element maxOccurs="unbounded" name="user">
          <xs:complexType>
            <xs:attribute name="username" type="xs:string" use="required" />
            <xs:attribute name="password" type="xs:string" use="required" />
            <xs:attribute name="roles" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


Tiếp đó là code ở hàm main:

public static void main(String[] args) {
        try {
            InputSource is = new InputSource(new BufferedReader(new FileReader("tomcat-users.xml")));
            
            SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Source schemaFile = new StreamSource(new File("tomcat-users-validation-2.xsd"));
            Schema schema = factory.newSchema(schemaFile); 
            Validator validator = schema.newValidator();
            
            validator.validate(new SAXSource(is));
            System.out.println("Validated by SAX, document is valid!");
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Module102_SAXValidation.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SAXException | IOException ex) {
            Logger.getLogger(Module102_SAXValidation.class.getName()).log(Level.SEVERE, null, ex);
        }
    }



Nhận xét. 

Không cần khai viết nhiều mã lệnh khi thực thi, chỉ cần một file xsl để thực hiện validate cho dữ liệu của file xml.

Using XPath

Đầu tiên ta tạo một project với tên Using XPath sau đó tạo ra một file xml như dưới đây.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<EmployeeList   xmlns="http://annmgc00523.blogspot.com/"
                xmlns:tr="http://annmgc00523.blogspot.com/trainee"> // tr ở đây là kí hiệu  tiền tố của namespace.
    <tr:Employee>
        <tr:Name>nguyen van0</tr:Name>
        <Address>address1</Address>
    </tr:Employee>
    <tr:Employee>
        <Name>nguyen van1</Name>
        <Address>address1</Address>
    </tr:Employee>
    <tr:Employee>
        <Name>nguyen van3</Name>
        <Address>address3</Address>
    </tr:Employee>
    <tr:Employee>
        <Name>nguyen van4</Name>
        <Address>address4</Address>
    </tr:Employee>
    <tr:Employee>
        <Name>nguyen van5</Name>
        <Address>address5</Address>
    </tr:Employee>
    
</EmployeeList>

Khai báo ở hàm main: 

   public static void main(String[] args) {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setNamespaceAware(true);
            DocumentBuilder builder = factory.newDocumentBuilder();

            Document doc = builder.parse(new File("D:\\NetBean\\Module9\\src\\Employee.xml"));
            NamespaceContext ctx = new NamespaceContext() {

                @Override
                public String getNamespaceURI(String prefix) {
                    String uri = "";
                    if (prefix.equals("tr")) {
                        uri = "http://annmgc00523.blogspot.com/trainee";
                    }
                    return uri;
                }

                @Override
                public String getPrefix(String string) {
                    return null;
                }

                @Override
                public Iterator getPrefixes(String string) {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
            };
            String xpathLink = "//tr:Employee";
            XPathFactory xpathFactory = XPathFactory.newInstance();
            XPath xp = xpathFactory.newXPath();
            xp.setNamespaceContext(ctx);

            NodeList nl = (NodeList) xp.evaluate(xpathLink, doc, XPathConstants.NODESET);
            System.out.println("Số kết quả: " + nl.getLength());
            
            for (int i = 0; i < nl.getLength(); i++) {
                System.out.println(nl.item(i).getTextContent());
            }
            
            
        } catch (XPathExpressionException ex) {
            Logger.getLogger(Module9.class.getName()).log(Level.SEVERE, null, ex);

        } catch (SAXException | IOException | ParserConfigurationException ex) {
            Logger.getLogger(Module9.class.getName()).log(Level.SEVERE, null, ex);
        }

    }


Nhận xét: 

XPath tương đối phức tạp trong mảng khai báo và sử dụng,
Phải viết nhiều code

Use TrAX to transform XML Document.

Tạo một project với tên UsingTrAXToTransformXML
Sau đó ta tạo một file xsl với tên OrderProcessing như dưới:

<?xml version="1.0" encoding="UTF-8"?>

<!--
    Document   : OrderProcessing.xsl
    Created on : August 10, 2014, 3:04 PM
    Author     : Nguyen Minh An
    Description:
        Purpose of transformation follows.
-->

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>
    <xsl:template match="/">
        <html>
            <head>
                <title>OrderProcessing.xsl</title>
            </head>
            <body>
                <table border="1">
                    <tr>
                        <td>Name</td>
                        <td>Address</td>
                    </tr>
                    <xsl:apply-templates></xsl:apply-templates>
                </table>
            </body>
        </html>
    </xsl:template>
    
    <xsl:template match="EmployeeList">
        <xsl:apply-templates select="Employee">
            <xsl:sort select="Name" order="ascending" data-type="text" />
        </xsl:apply-templates>
    </xsl:template>
    <xsl:template match="Employee">
        <tr>
            <td>
                <xsl:value-of select="Name"/>
            </td>
            <td>
                <xsl:value-of select="Address"/>
            </td>
        </tr>
    </xsl:template>

</xsl:stylesheet>

Tiếp đó tạo ra một file xml như dưới:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<EmployeeList>
    <Employee>
        <Name>nguyen van0</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van1</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van2</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van3</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van4</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van5</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van6</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van7</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van8</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van9</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van10</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van11</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van12</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van13</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van14</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van15</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van16</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van17</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van18</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van19</Name>
        <Address>address1</Address>
    </Employee>
</EmployeeList>

Tiếp đó ở hàm main ta khai báo như sau:

public static void main(String[] args) {
        try {
            String orderProcessing = "D:\\NetBean\\Module 8\\src\\OrderProcessing.xsl";
            String employee = "D:\\NetBean\\Module 8\\src\\Employee.xml";
            String resultHtml = "D:\\NetBean\\Module 8\\src\\Result.html";

            StreamSource sourceStyle = new StreamSource(orderProcessing);
            StreamSource sourceXML = new StreamSource(employee);
            StreamResult result = new StreamResult(new FileOutputStream(resultHtml));

            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transform = factory.newTransformer(sourceStyle);

            transform.transform(sourceXML, result);
        } catch (TransformerException | FileNotFoundException ex) {
            Logger.getLogger(Module8.class.getName()).log(Level.SEVERE, null, ex);

        }

    }

Sau khi chạy ta được kết quả như sau:


Thứ Bảy, 9 tháng 8, 2014

Apply XQuery

Đầu tiên ta khởi tạo một project với tên Applying XQuery.

Tạo ra một file xml với tên tomcat-users.xml như dưới đây:

<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users>
    <role rolename="tomcat"/>
    <role rolename="role1"/>
    <user username="tomcat" password="tomcat" roles="tomcat"/>
    <user username="both" password="tomcat" roles="tomcat,role1"/>
    <user username="role1" password="tomcat" roles="role1"/>
    
    <user password="admin" role="manager-script,admin" username="admin"/>

</tomcat-users>

Trong hàm main ta viết các đoạn mã như dưới đây:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package applyxmlquery;

import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import nu.xom.Builder;
import nu.xom.Document;
import nu.xom.Nodes;
import nu.xom.ParsingException;
import nux.xom.xquery.XQuery;
import nux.xom.xquery.XQueryUtil;

/**
 *
 * @author Nguyen Minh An
 */
public class ApplyXMLQuery {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            Document document = new Builder().build(new File("D:\\NetBean\\ApplyXMLQuery\\src\\tomcat-users.xml"));
            String query = "//tomcat-users//user";
            Nodes nodes = XQueryUtil.xquery(document, query);
            for (int i = 0; i < nodes.size(); i++) {
                System.out.println("Username: " + nodes.get(i).toXML());
            }
        } catch (ParsingException | IOException ex) {
            Logger.getLogger(ApplyXMLQuery.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
}

Và kết quả:

run:
<user username="tomcat" password="tomcat" roles="tomcat" />
<user username="both" password="tomcat" roles="tomcat,role1" />
<user username="role1" password="tomcat" roles="role1" />
<user password="admin" role="manager-script,admin" username="admin" />
BUILD SUCCESSFUL (total time: 0 seconds)

Nhận xét:
- Không phải viết nhiều code.
- Câu lệnh truy vấn dễ dàng.
- Dễ hiểu trong việc đọc các dòng lệnh.
- Có thể truy vấn để lấy ra thông tin nhanh chóng


Miêu tả cơ sở dữ liệu XML, các loại của nó và việc mapping xml schema với database schema

I. XML là một database tuyệt vời.

- Trước hết thì ta nên hiểu thế nào là một database (cơ sở dữ liệu): Cơ sở dữ liệu là một nơi dùng để lưu thông tin và nó hỗ trợ việc truy, xuất dữ liệu.

- Với XML ta có thể lưu trữ vô vàn thông tin dưới dạng thẻ. Ngoài ra nó còn hỗ trợ hệ cơ sở dữ liệu quan hệ bởi vì nó có các định dạng, các dàng buộc thay vì các mối quan hệ giữa các bảng trong Database.

- Trong Java ta có thể truy xuất dữ liệu trong XML cực kì đơn giản với DOM và SAX với một tốc độ rất nhanh.

- XML là ngôn ngữ thông dịch và nó có thể chạy được trên tất cả các nền tảng, vì thế nó rất hữu dụng.

- Ta có thể chuyển đổi dữ liệu từ XML sang định dạng khác khá đơn giản với chi phí thấp.

II. Các loại cơ sở dữ liệu XML.

a. XML - enabled.

- Loại này một là có thể map XML với cấu trúc cơ sở dữ liệu truyền thống (như cơ sở dữ liệu quan hệ) nó chấp nhận XML như một input và render XML như một output, hay gần đây nhất là nó hỗ trợ các kiểu XML trong cơ sở dữ liệu quan hệ.

b. Native XML

- Mô hình nội bộ các database như vậy phụ thuộc vào XML và sử dụng các tài liệu XML như một đơn vị nền tảng của việc lưu trữ, tuy nhiên không cần thiết phải lưu trữ trong một mẫu các file văn bản.

III. Ưu điểm của việc sử dụng XML database.

XML database cung cấp ngôn ngữ truy vấn, lưu trữ và giao diện lập trình như các cơ sở dữ liệu khác.

Nó có thể dễ dàng chạy trên mọi nơi, vì nó là một ngôn ngữ đa nên tảng.

Nó miêu tả thông tin một cách vô cùng cụ thể nên không cần phải khai báo bất cứ cái gì thêm.

Nó lưu trữ dữ liệu dưới dạng các nút (nodes).

Nó cho phép việc lồng và trùng lặp dữ liệu.

IV. Tổ chức dữ liệu XML.

a. Data Centric Documents

Trong một tài liệu data-centric, một tài liệu XML được sử dụng như một nơi lưu trữ dành cho dữ liệu mà được cấu trúc và xuất hiện trong một Regular Order, một ví dụ cho một XML  data-centric là Simple Object Access Protocol.

Document-Centric Documents: Tệp tin XML không có cấu trúc chặt chẽ như Data-Centric Documents mà có thêm những thứ khác như tài liệu HTML vân vân.

V. Object

- Các thông tin trong tài liệu XML được lưu trữ dưới dạng các nodes.

- Một node có thể dễ dàng chuyển đổi thành một object.

- Có các thư viện để biến đổi tài liệu XML sang object và ngược lại

VI. Cơ sở dữ liệu quan hệ XML.

Một cơ sở dữ liệu quan hệ là một bộ sưu tập các bảng mà chứa dữ liệu như các bản ghi.
Các bản ghi được cấu tổ chức bởi một tập hợp các trường. Mỗi trường có một tên và giá trị
Bạn có thể sử dụng truy vấn để nhận về và thay đổi dữ liệu trong một bảng. Một tài liệu XML có thể được xem như một cơ sở dữ liệu quan hệ bởi vì nó sử dụng cùng các kĩ thuật của cơ 
sở dữ liệu quan hệ để lưu trữ dữ liệu.

Trong tài liệu Document.
- Các nút tài liệu được xem như một cơ sở dữ liệu

- Các nút thành phần được xem như các bảng trong cơ sở dữ liệu

- Một nút thành phần đi theo cùng với các nút con của loại nút dữ liệu của nó được xem như các trường trong một bảng.

- Các nút con của một nốt thành phần được xem như bảng ghi của một bảng.'

- Khi không có trường node trong tài liệu XML thì được coi là null.


VII. Native XML Database.

Tính năng của native xml database:

- Cho phép lưu trữ dữ liệu trong định dang xml.

- Cho phép truy vấn đối với dữ liệu của các collection.

- Cung cấp ngôn ngữ truy vấn để truy cập dữ liệu

- Cho phép việc cập nhật dữ liệu trong collections.
IIIX. Mapping document schema to database schema

a. Table-Based Mapping



Ưu điểm của table-based mapping
việc matching cấu trúc của bảng rất dễ dang.
việc viết mã lệnh đơn giản.
truy cập dữ liệu nhanh.

Nhượng điểm.
nó làm việc trong một phần nhỏ của một tài liệu xml.
nó không thể mở rộng cấu trúc vật lý của một tài liệu xml.

b. Object Mapping



Như bảng trên ta thấy thì việc mapping giữa XML Document với Object vô cùng đơn giản.


Thứ Tư, 6 tháng 8, 2014

Use TreeWalker To Read XML File

Ta sẽ tạo một project với tên module6, tiếp đó tạo ra một file xml như dưới đây với tên Employee.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><EmployeeList>
    <Employee>
        <Name>nguyen van0</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van1</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van2</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van3</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van4</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van5</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van6</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van7</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van8</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van9</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van10</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van11</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van12</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van13</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van14</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van15</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van16</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van17</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van18</Name>
        <Address>address1</Address>
    </Employee>
    <Employee>
        <Name>nguyen van19</Name>
        <Address>address1</Address>
    </Employee>
</EmployeeList>

Ở trang lớp chứa hàm main chúng ta viết các câu lệnh như dưới đây:

package module6;

import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.traversal.DocumentTraversal;
import org.w3c.dom.traversal.NodeFilter;
import org.w3c.dom.traversal.TreeWalker;
import org.xml.sax.SAXException;

/**
 *
 * @author Nguyen Minh An
 */
public class Module6 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();

            if (!builder.getDOMImplementation().hasFeature("traversal", "2.0")) {
                System.out.println("Traversal 2.0 is required");
                System.exit(-1);
            }

            Document document = builder.parse(new File("D:\\NetBean\\Module6\\src\\Employee.xml"));

            DocumentTraversal traversal = (DocumentTraversal) document;
            TreeWalker tw = traversal.createTreeWalker(document, NodeFilter.SHOW_ALL, null, true);
            
            Node node = tw.nextNode();
            
            while (node != null) {                
                if ("Name".equals(node.getNodeName())) {
                    System.out.println(node.getTextContent());
                }
                if ("Address".equals(node.getNodeName())) {
                    System.out.println(node.getTextContent());
                }
                node = tw.nextNode();
            }
            
        } catch (SAXException | IOException | ParserConfigurationException ex) {
            Logger.getLogger(Module6.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

}

Thứ Hai, 4 tháng 8, 2014

Tản mạn xung quanh việc "HỌC"

Vấn đề ở quê tôi.

Xưa nay các ông bố bà mẹ ở quê tôi vẫn thường nói với con cái của họ rằng: "CON NÊN HỌC ĐI ĐỂ THÀNH NGƯỜI, ĐỂ THÀNH CÔNG, ĐỂ THÀNH ĐẠT VÀ ĐỂ THÀNH RẤT NHIỀU THỨ NỮA ?" .

Vâng. Nghe những lời khuyên này có vẻ rất trân thành và bổ ích đối với mỗi người con, người cháu và có lẽ rằng chúng ta nên hết sức lắng nghe. Thế nhưng ở đây tôi xin đặt ra một vấn đề rằng: "HỌC" có phải lúc nào cũng là tốt, có phải "HỌC " cái gì cũng là tốt, và phải học thế nào mới là tốt, học để làm gì và học như thế nào để trở nên tốt?

Thực trạng quê tôi

Ở quê tôi bọn trẻ con ngay từ khi biết nhận thức đã được "bơm" vào đầu ý nghĩa của việc học. Những bác nông dân ở quê tôi (bao gồm cả bố tôi, mẹ tôi), những người quanh năm gắn bó với ruộng đồng, với cây lúa thì họ luôn luôn coi việc học của con cái mình là một niềm tự hào, một niềm hãnh diện vô vàn. Họ nghĩ rằng việc con cái mình dành được những con điểm cao trong quá trình học tập ở trường là một điều gì đó vô cùng đáng để vui sướng, để tưởng thưởng, và còn để là một câu nói đầy tự hào về con cái mình trong các cuộc "buôn dưa lê, bán dưa chuột" với hàng xóm.

Quan điểm chung của người dân quê tôi

Tôi nhớ rằng khi còn là một học sinh cấp ba, tôi có một niềm đam mê vô hạn đối với điện và vật lý, tôi có thể ngồi cả ngày chỉ với vài cục pin, một hai cái "mô tơ bé xíu" và một số thứ linh tinh như dây điện, keo con voi, bìa cứng. Tôi vui mừng nhảy cẫng lên khi lắp được một cái bảng điện và thấy bóng đèn được điều khiển theo động tác bật tắt của công tắc do tôi lắp đặt, hay là những lần làm cho cái "mô tơ bé xíu " nó quay chong chóng, tôi đã từng có ý định rất tuyệt vời đó là tự mình làm một chiếc ván trượt chạy bằng động cơ điện, khi đó tôi có thể đi chơi ở những nơi tôi thích mà không cần phải đi bộ hay đi xe đạp, để không phải hành hạ đôi chân của mình nhằm thoả mãn cái tính thích đi chơi, khám phá những địa điểm mới.

 Thế nhưng khi tôi tự mình mày mò, tự mình lắp đặt những cái đó, tự mang ra "thử nghiệm" thì bố tôi nói rằng đó là sự "nghịch ngợm thiếu thông minh". Theo bố tôi việc học là phải chăm chỉ cắp sách tới trường và về nhà cấm được nghịch ngợm cái gì ngoài ngồi bàn học với sách, vở và bút. Bây giờ khi khi đã có nhận thức riêng của bản thân thì tôi đặt ra câu hỏi rằng: "Những người mà nghĩ ra, chứng minh được những định lý, định nghĩa, công thức đầu tiên thì họ lấy những cái đó từ đâu..? "

Những người dân ở quê tôi, họ vẫn thường đề cao sự quan trọng của giáo viên và dạy chúng tôi rằng phải tôn trọng giáo viên, những người mang đến cho mình những tri thức một cách tuyệt đối, nói cái gì cũng là đúng và không được phép cãi hay tranh luận với giáo viên trong mọi trường hợp. Họ coi việc tranh luận với giáo viên là một việc làm hết sức "ngu xuẩn" và đầy "tự đại". Thế nếu không có những người tự mình tìm tòi, nghiên cứu từ những điều sơ đẳng, sơ khai nhất thì bây giờ làm gì có những thứ đó cho tôi học và nếu như mình có ý kiến quan điểm riêng trái ngược với giáo viên mà lại không được phép mang nó ra để tranh luận thì làm sao có thể hiểu được vấn đề một cách sâu sắc.

Đến hiện giờ bố tôi vẫn đề cao cái việc bắt học sinh "Quỳ đầu gối trên tổ kiến", "Quỳ trên sỏi" là một việc làm hoàn toàn đúng đắn và giúp cho học sinh biết sợ mà vươn lên. Ông vẫn cho rằng chỉ có như vậy mới đạo tạo nên được những nhân tài, những con người theo đúng nghĩa (cái mà bố tôi gọi là "Nên người").  Thế liệu rằng quan điểm này đúng hay sai?

Quan điểm trên đúng hay sai?

Theo ý kiến của bản thân tôi thì con người ta sinh ra ai cũng thích những lời nói dịu dàng, ấm áp chứ chẳng ai thích những lời quát mắng, chửi bới hay bị đánh đập, con người ta chỉ thực sự làm một việc nào đó bằng 100% năng suất và 200% sự nhiệt tình khi tâm trạng của người ta thực sự tốt và đầy hứng khởi. Liệu rằng khi bị quỳ trên tổ kiến, hay đánh đập có làm cho những học sinh cảm phục và quyết tâm học tập với một thái độ đầy nhiệt huyết không? hay những cái đó chỉ khiến cho bọn chúng, những đứa học sinh với nhận thức còn hạn chế thêm thù oán, ghét bỏ, chán chê với thầy cô giáo chúng và từ đó ghét luôn cả môn mà họ dạy. Những người được cho là tài giỏi và nên người theo cách giáo dục cũ mà bố tôi cho rằng nó đào tạo ra nhân tài thì được thể hiện ở dưới đây với số sáng chế của Việt Nam còn ở những nước như Nhật Bản,  Anh áp dụng quan điểm mà bố tôi cho là lệch lạc được thể hiện ở bảng dưới đây.




Giáo viên nên là những người thầy/cô tuyệt vời

Theo bản thân tôi thì chúng ta không thể nào giỏi một cách thật sự trong một lĩnh vực nào đó nếu như chúng ta không tự mình học hỏi một cách có ý thức với thời gian khoảng vài nghìn giờ bởi vì sao ư? Bởi vì chỉ khi chúng ta tự học thì bộ não của chúng ta mới có thể hiểu một cách tường tận vấn đề mà mình đang học, đang gặp phải. Vậy thầy, cô đóng vài trò như thế nào? Tôi nghĩ rằng trong việc tự mình học hỏi, tìm tòi chắc chắn sẽ gặp phải những khúc mắc, những trở ngại cả về kiến thức cũng như tâm lý. Có thể chỉ vì gặp một vấn đề với độ nan giải khác nhau mà sẽ dẫn đến sự bỏ cuộc theo tính cách của từng người. Vậy thì giáo viên những người mang trọng trách cao cả sẽ là người tìm ra hướng giải quyết cho những khó khăn đó cùng với những học trò của mình, tìm về niềm cảm hứng bất tận của việc khám phá và học hỏi những kiến thức mới và truyền chúng cho những học trò còn non dại.

Giáo dục liệu có giết chết sự sáng tạo của mỗi một con người?


Quy tắc 10.000h.




Luận điểm ở phía dưới: