2019年11月28日 星期四

JavaScript基本知識-Event事件

JavaScript的事件處理器

事件處理程序可用於處理和驗證用戶輸入,用戶操作和瀏覽器操作:
  • 每次頁面加載時應該做的事情
  • 關閉頁面時應該做的事情
  • 用戶單擊按鈕時應執行的操作
  • 用戶輸入數據時應驗證的內容
  • 和更多 ...
可以使用許多不同的方法來使JavaScript處理事件:
  • HTML事件屬性可以直接執行JavaScript代碼
  • HTML事件屬性可以調用JavaScript函數
  • 您可以將自己的事件處理函數分配給HTML元素
  • 您可以防止事件被發送或處理
  • 和更多 ...

常見的HTML事件列表:
EventDescription
onchangeAn HTML element has been changed
onclickThe user clicks an HTML element
onmouseoverThe user moves the mouse over an HTML element
onmouseoutThe user moves the mouse away from an HTML element
onkeydownThe user pushes a keyboard key
onloadThe browser has finished loading the page
單引號:Single quotes
<element event='some JavaScript'>
雙引號:Double quotes
<element event="some JavaScript">

2019年11月23日 星期六

Java StAX學習與建構2/2

IntelliJ 開發環境建置

IntelliJ IDEA是一種商業化銷售的Java整合式開發環境(Integrated Development Environment,IDE)工具軟體,由JetBrains軟體公司(前稱為IntelliJ)開發,提供Apache 2.0開放式授權的社區版本以及專有軟體的商業版本,開發者可選擇其所需來下載使用(維基百科)。
版主考慮使用此IDE開發工具,主要原因是為建立與建RestfulServer模組,此模組可用於任意數據源創建FHIR服務器端點,而數據源也可以是自己設計的Database或現有臨床系統,RestfulServer也可以在不依賴任何外部Database的情況下運行,但是也可以配置為使用Oracle,Postgres等安裝。此篇我們須先完成所需要的建置環境後,再接續完成最重要的RestfulServer安裝與連線測試。


  • IDEA下載路徑與安裝指令

  1. 首先進入到IntelliJ IDEA官網,選則Linux的ultimate下載。
  2. 下載完成後解壓縮到opt目录:sudo tar -zxvf ideaIU-2018.2.2cd.tar.gz -C /opt
  3. 切換到idea的bin目錄:cd /opt /idea-IU-182.4129.33/bin
  4. 運行idea.sh:./idea.sh







2019年11月19日 星期二

JavaScript基本知識-2

JavaScript的物件種類

JavaScript物件種類可分為三大類;

  • 內建物件,物件除了有屬性與方法之外,有些還具有父繼承子的關係。
  • BOM(Browser Object Model)的物件,是將瀏覽器的元素物件化,根據BOM規格化控制瀏覽器各元件的動作。
  • DOM(Document Object Model)的物件,將HTML及XML標記的文件當作JavaScript物件來處理。
物件示意ObjectPropertiesMethods

car.name = Fiat

car.model = 500

car.weight = 850kg

car.color = white

car.start()

car.drive()

car.brake()

car.stop()
物件意義如同圖所示
所有汽車都具有相同的屬性,但是每個汽車的屬性值都不同。
所有汽車都有相同的方法,但是方法是 在不同的時間進行的
  1. 物件也可以具有方法
  2. 方法是可以對對象執行的動作
  3. 方法存儲在屬性中作為函數定義

  • 內建物件;

指的就是日期、時間、字串及函式等包含在JavaScript規格中的基本物件。

  • BOM物件;

要存取下層物件時,需使用點運算子「.」,例如顯示網頁部分寫成「window.document」,指定BOM物件時,可以省略最上層的Window物件。

  • DOM物件

此物件擔任連結JavaScript與HTML角色。DOM是以document為頂點的樹狀結構所構成,構成樹狀結構的元素(element)及屬性(attribute),我們稱之為節點(node),在JavaScript中利用document的方法來取得節點的集合,並對其進行操作。各節點透過3個方法進行存取;
  • 以ID屬性名稱存取:document.getElementById(id 屬性名稱);
  • 以NAME屬性名稱存取:document.getElementByName(name 屬性名稱);
  • 以HTML的元素名稱存取:document.getElementByTagNmae(元素名稱);
name屬性及HTML的元素名稱,在HTML中會有多個存在。故從getElementByName()方法與getElementByTagName()方法名稱當中的複數形「Elements」即可瞭解,這兩個方法會傳回多個物件,因此用存取陣列的方式「0」開始的索引編號進行存取。要注意的是,「–」刪節號的屬性無法直接在JavaScript中進行處理,故將刪節號之後的字母改為大寫,並將「–」刪節號移除進行設定。

  • This關鍵字
在函數定義中,this指的是函數的“owner”。

在下面的示例中,this person 物件ownerfullName功能。

換句話說,this.firstName表示此對象屬性firstName。


2019年11月18日 星期一

JavaScript基本知識-1

JavaScript學習

JavaScript(通常縮寫為JS)是一種進階的、直譯程式語言是用來網頁上做出動態內容的腳本語言,也是前端工程師需要學會的程式語言之一JavaScript是一門基於原型、函式先行的語言,是一門多範式的語言,它支援物件導向編程,指令式程式設計隨著最新的HTML5CSS3語言標準的推行它還可用於遊戲、桌面和行動應用程式的開發和在伺服器端網路環境執行,如Node.js。如果單靠HTML和CSS是無法產生動態網頁的,在後續學習中將會學習如何使用JavaScript來DOM(Document Object Model)動態存取HTML及XML籤內容延伸到針對FHIR標籤內容來編輯元素、屬性和節點。有關此章節說明與應用可參考國外W3C School網站學習與模擬測試。



  • JavaScript是Web開發人員必須學會的三種語言之一
    • HTML定義網頁內容
    • CSS指定網頁的佈局
    • 使用JavaScript編寫網頁行為

  • JavaScript在網頁中崁入有三種方法
    • 寫在<script>標籤之間
    • 寫在HTML標籤之間
    • 寫在外部的JavaScript檔案中
      • <script>標籤之間範例;
                                     <script type ="text/javascript">
                                      //<![CDATA
                                        window.alert("Hello!");
                                      //]]>
                                      </script>
      • 利用HTML標籤之事件處理器的範例
                                <input type="button" value="請按一下" onclick="alert('按鈕啟動');"/>
      • 寫在外部JavaScript檔案中,提醒使用外部檔案中文等英數文字、符號以外的字元時,文字編碼要與HTML檔案相符,若不同可以藉由charsetcharset屬性來設定。

  • JavaScript的撰寫規則

    • 可以在多個不同瀏覽器使用但必須確認效果都相同
    • 在HTML中的位置可須分三處
      • <head>標籤之間程式會用到事件的處理動作
      • <body>標籤之間程式在讀入<body>標籤內元素後執行處理動作
      • HTML標籤的事件處理器
    • 標識符是名稱。在JavaScript中,標識符用於命名變量(以及關鍵字,函數和標籤)。在大多數編程語言中,法定名稱的規則幾乎相同。在JavaScript中,第一個字符必須是字母,下劃線(_)或美元符號($)。後續字符可以是字母,數字,下劃線或美元符號。
    • JavaScript區分大小寫
    • 在每個可執行語句的末尾添加分號;請務必養成習慣
    • JavaScript會忽略多個空格
    • JavaScript語句可以在大括號{...}中的代碼塊中分組在一起。
    • JavaScript關鍵字如下圖所示
       
    KeywordDescription
    breakTerminates a switch or a loop
    continueJumps out of a loop and starts at the top
    debuggerStops the execution of JavaScript, and calls (if available) the debugging function
    do ... whileExecutes a block of statements, and repeats the block, while a condition is true
    forMarks a block of statements to be executed, as long as a condition is true
    functionDeclares a function
    if ... elseMarks a block of statements to be executed, depending on a condition
    returnExits a function
    switchMarks a block of statements to be executed, depending on different cases
    try ... catchImplements error handling to a block of statements
    varDeclares a variable
  • JavaScript禁止使用的規則
    • 使用半形英數文字及「ˍ」(底線)、「$」(錢號)
    • 名稱的第1個字為數字
    • JavaScript的保留字
    • JavaScript保留字
      break
      case
      catch
      continue
      default
      delete
      do
      else
      finally
      for
      function
      if
      in
      instanceof
      new
      return
      typeof
      this
      throw
      try
      with



      未來預定保留字
      abstract
      boolean
      byte
      char
      class
      const
      debugger
      double
      enum
      export
      extends
      final
      float
      goto
      implement
      import
      int
      interface
      long
      native
      package
      private
      protected
      public
      short
      static
      super
      synchronized
      throws
      transient
      volatile



2019年11月10日 星期日

Java StAX學習與建構1/2


StAX使用說明

StAX規範定義了API的許多例子:

  • 資料綁定
  • 解組XML文檔
  • 編組XML文檔
  • 並行文件處理
  • 無線通信
  • 簡單對象訪問協議(SOAP)消息處理
  • 解析簡單的可預測結構
  • 解析具有前向引用的圖形表示
  • 解析Web服務描述語言(WSDL)
  • 虛擬數據源
  • 查看存儲在數據庫中的XML數據
  • 查看通過XML數據綁定創建的Java對像中的數據
  • 將DOM樹作為事件流進行導航
  • 解析特定的XML詞彙表
  • 流水線XML處理

StAX與其他JAXP API進行比較:

StAX不如TrAX或JDOM強大或靈活,但也不需要那麼多的內存或處理器負載就可以使用,並且StAX在許多情況下都可以勝過基於DOM的API。在StAX和SAX之間進行最接近的比較,正是在這裡StAX提供了許多情況下都有益的功能。其中一些包括:
  • 啟用StAX的客戶端通常比SAX客戶端更易於編碼。儘管可以說SAX解析器在編寫上稍微容易一些,但StAX解析器代碼可以更小,並且客戶端與解析器進行交互所必需的代碼也更簡單。
  • StAX是雙向API,這意味著它可以讀取和寫入XML文檔。SAX是只讀的,因此如果要編寫XML文檔,則需要另一個API。
  • SAX是推式API,而StAX是拉式。上面概述的推式和拉式API之間的權衡在這裡適用。
FeatureStAXSAXDOMTrAX
API TypePull, streamingPush, streamingIn memory treeXSLT Rule
Ease of UseHighMediumHighMedium
XPath CapabilityNoNoYesYes
CPU and Memory EfficiencyGoodGoodVariesVaries
Forward OnlyYesYesNoNo
Read XMLYesYesYesYes
Write XMLYesNoYesYes
Create, Read, Update, DeleteNoNoYesNo

環境設置

為了使用StAX的解析器,應該準備好stax.jar在應用程序的類路徑中。官方網站範例說明,下載 stax-1.2.0.jar.

以下是StAX API的功能

  • 讀取XML文件從上到下,認識構成一個結構完整的XML文檔的標記
  • 令牌是以相同的順序進行處理,它們出現在文檔中
  • 報告應用程序,因為解析器遇到標記的特性
  • 應用程序提供了一個“事件”讀取器充當了事件,以獲得所需信息的迭代器和迭代。可另一個讀取器是“光標”充當一個指向XML節點。
  • 由於事件被識彆,XML元素可以從事件對象進行檢索,並且可以進一步處理。

XMLEventReader類

因為在解析XML文檔時該類提供可用於迭代事件事件迭代器
  • StartElement asStartElement() - 用於檢索值和元素的屬性。
  • EndElement asEndElement() - 調用元件的端部。
  • Characters asCharacters() - 可用於獲得字符,例如一個CDATA,空白等。

XMLEventWriter類

此接口指定創建事件的方法。
  • add(Event event) - 添加包含元素XML事件。

XMLStreamReader Class

因為在解析XML文檔時該類提供可用於迭代事件事件迭代器
  • int next() - 用於檢索下一個事件。
  • boolean hasNext() - 用於檢查其他事件的存在與否
  • String getText() - 用於獲取一個元素的文本
  • String getLocalName() - 用於獲取一個元素的名稱

XMLStreamWriter類

此接口指定創建事件的方法
  • writeStartElement(String localName) - 加入定名稱開始元素。
  • writeEndElement(String localName) - 添加指定名稱的結束元素。
  • writeAttribute(String localName, String value) - 編寫屬性到元素






StAX Factory Classes


XMLInputFactoryXMLOutputFactoryXMLEventFactory,使您可以定義和配置XML流讀取器,流寫入器和事件類的實現實例。
  1. Use the javax.xml.stream.XMLInputFactory system property.
  1. Use the lib/xml.stream.properties file in the Java SE platform's Java Runtime Environment (JRE) directory.
  1. Use the Services API, if available, to determine the classname by looking in the META-INF/services/javax.xml.stream.XMLInputFactory files in JAR files available to the JRE.
  1. Use the platform default XMLInputFactory instance.


Deriving from JAXP, the XMLInputFactory.newInstance method determines the specific XMLInputFactory implementation class to load by using the following lookup procedure:

After getting a reference to an appropriate XMLInputFactory, an application can use the factory to configure and create stream instances. The following table lists the properties supported by XMLInputFactory. See the StAX specification for a more detailed listing.

javax.xml.stream.XMLInputFactory Properties
PropertyDescription
isValidatingTurns on implementation-specific validation.
isCoalescing(Required) Requires the processor to coalesce adjacent character data.
isNamespaceAwareTurns off namespace support. All implementations must support namespaces. Support for non-namespace-aware documents is optional.
isReplacingEntityReferences(Required) Requires the processor to replace internal entity references with their replacement value and report them as characters or the set of events that describe the entity.
isSupportingExternalEntities(Required) Requires the processor to resolve external parsed entities.
reporter(Required) Sets and gets the implementation of the XMLReporter interface.
resolver(Required) Sets and gets the implementation of the XMLResolver interface.
allocator(Required) Sets and gets the implementation of the XMLEventAllocator interface.

2019年11月9日 星期六

Fhirbase公測伺服-測試篇2/2



業務規則查詢

現在,當我們知道如何使用基本的JSONB運算符時,讓我們編寫範例查詢以獲取一些有用的數據。假設我們正在開發一個EHR系統,該系統需要在某些屏幕上顯示高危患者列表。高風險標準如下:
  1. 年齡> 45歲
  2. 前吸煙者或活躍吸煙者

範例寫了一個查詢吸煙者的觀察結果。對其進行修改,使其包括過去的吸煙者:實施第三個條件後,讓我們將此查詢與一個患者表結合起來以實現第一個和第二個條件:

SELECT DISTINCT(p.id), p.resource#>'{name,0}'
FROM patient p
JOIN observation o ON o.resource#>>'{subject,id}' = p.id
WHERE (o.resource @> '{"code": {"coding": [{"code": "72166-2"}]}}'::jsonb)
-- LOINC: Smoking status
AND ((o.resource @> '{"value": {"CodeableConcept": { "coding": [{"code": "449868002"}]}}}') 
-- SNOMED: Current every day smoker
OR (o.resource @> '{"value": {"CodeableConcept": { "coding": [{"code": "8517006"}]}}}')) 
-- SNOMED: Former smoker
 AND (extract(year from age(now(), (p.resource->>'birthDate')::date)) > 45) -- patient's age > 45
 AND (p.resource->>'gender' = 'male'); -- patient gender is male
在此對語法解釋一下如何取出年齡部分,(p.resource->>'birthDate')為其強制轉換為PostgreSQL的DATE類型。::datePatient.birthDate,並將DATE類型接受FHIR格式的日期。函式age(DATE, DATE)返回一個INTERVAL值,該值表示兩個時間戳之間的時間距離,取回患者的年齡。age(NOW(), (p.resource->>'birthDate')::date)>45
令人驚訝的是,我們剛剛發現60名高危患者。並不難,對吧?


ACCESS資料成功轉換SQlite方法

最近忙於系統開發研究,今日來談一下有朋友很有才華自行利用ACCESS開發了CRM(客戶關係管理)系統,但僅限於個人使用考量目前大量使用者成長與需求,洽詢我是否能技術支援同時給了我ACCESS檔案參考,但因電腦OFFICE沒有ACCESS可開啟.accdb檔案,相信有許多微軟OFF...