Code Monkey home page Code Monkey logo

witsml21parser's Introduction

witsml21parser

A fast, robust and portable Witsml 2.1 to BSON parser

Features

  • Fast
  • Robust
  • Portable (NodeJS | Java/Kotlin | PHP (in development) | Python 3)
  • Low dependency libraries.
  • No Garbage Collector on parsing
  • Low memory allocation/reallocation
  • Optimized for C/C++ applications

Before you install

Before you install you need to check these tools:

A Linux based OS
Python >= 3.8 (For Python 3 application)
Python 3 development API (for Python 3 application)
gcc >= 9.4.0
cmake >= 3.16.3
make >= 4.2.1
git >= 2.25.1
execstack >= 1.0 (for Java application)
Java SDK development API (for Java application)
Node JS >= v16.20.2 API (for Node JS)

Downloading

git clone https://github.com/devfabiosilva/witsml21parser.git

Compiling

witsml21parser needs libbson library to be compiled. For first time compiling you need to download and compile dependencies first.

There are two static dependencies:

  • libbson
  • WITSML 2.1 - ETP validation schemas C code

- Compiling libbson third-party library

make install_bson

For multi-threading fast compiling use -jN option e.g:

make -j12 install_bson

- WITSML 2.1 - ETP validation schemas C code

make pre pre_shared

For multi-threading fast compiling use -jN option e.g:

make -j12 pre pre_shared

- Compiling WITSML 2.1 to BSON parser

After compiling libbson third-party library and WITSML 2.1 - ETP validation schemas C code just type:

make

For multi-threading fast compiling use -jN option e.g:

make -j12

Executing

Just type:

./cws <FILE_NAME>

E.g:

./cws BhaRun.xml

It will convert BhaRun.xml to BhaRun.bson file

- Compiling WITSML 2.1 to BSON parser for Java/Kotlin

To compile native library for Java/Kotlin just type:

make jni

For multi-threading fast compiling use -jN option e.g:

make -j12 jni

Executing Java WITSML 2.1 to BSON parser

Before you run your code you MUST set native library environment.

  • Go to Java sources folder
  • Execute shell script:
source env.sh
  • Open with your favorite IDE and run Java code here
  • Run Tests and Aplication

SAMPLE APP jwitsml21cmd-1.0.jar

This app shows how to use WITSML 2.1 BSON parser in Java/Kotlin

Before use

You need to compile JNI

cd <WITSML 2.1 BSON PARSER PROJECT FOLDER>/
make jni

File libjwitsmlparser21.so must be in root project folder.

Compile Java library with maven

cd <WITSML 2.1 BSON PARSER PROJECT FOLDER>/Java/library
mvn -U clean install

Running

cd <WITSML 2.1 BSON PARSER PROJECT FOLDER>/Java/sampleApp
source env.sh
java -jar jwitsml21cmd-1.0.jar <WITSML 2.1 XML FILES>

Examples

java -jar jwitsml21cmd-1.0.jar ../../examples/xmls/OpsReport.xml
Welcome to WITSML 2.1 parser

========================
Opening ../../examples/xmls/OpsReport.xml
Instance name: jWITSMLParser 2.1 - (0x7f599422ab40)
Saving to file OpsReport.json
Saving to file OpsReport.bson

Statistics for "../../examples/xmls/OpsReport.xml":
        {arrays=60, booleans=22, costs=9, dateTime=73, doubles=28, enums=55, long64s=47, measures=382, memoryUsed=3160, strings=463, total=1139}
java -jar jwitsml21cmd-1.0.jar ../../examples/xmls/OpsReport.xml ../../examples/xmls/Risk.xml
Welcome to WITSML 2.1 parser

========================
Opening ../../examples/xmls/OpsReport.xml
Instance name: jWITSMLParser 2.1 - (0x7fe87424aba0)
Saving to file OpsReport.json
Saving to file OpsReport.bson

Statistics for "../../examples/xmls/OpsReport.xml":
        {arrays=60, booleans=22, costs=9, dateTime=73, doubles=28, enums=55, long64s=47, measures=382, memoryUsed=4532, strings=463, total=1139}

========================
Opening ../../examples/xmls/Risk.xml
Instance name: jWITSMLParser 2.1 - (0x7fe8742a8b30)
Saving to file Risk.json
Saving to file Risk.bson

Statistics for "../../examples/xmls/Risk.xml":
        {arrays=12, dateTime=17, enums=14, long64s=9, measures=18, strings=106, total=176}

Executing NodeJS (>=v16.20.2) WITSML 2.1 to BSON parser

Before use (first time only)

You need to compile JS WITSML 2.1 to BSON parser

In your root witsml21parser folder

make nodejs && cd $(pwd)/NodeJS && source env.sh

Running

In your NodeJS folder:

node app.js

Executing Python 3 WITSML 2.1 to BSON parser

Before use (first time only)

You need to compile PyWITSML 2.1 to BSON parser

In your root witsml21parser folder

make py && cd $(pwd)/Python && source env.sh

Running

In your Python folder:

python3 witsml21parser.py

BENCHMARKS

Primary benchmarks in Java had been shown that WITSML 1.4.1.1 parsing objects are 56 % faster than JAXB in Java application.

JAXB only parses XML objects and store their values in respective Java objects. In other hand, WITSML BSON parser not only parses XML objects in C structs but it creates BSON objects, adds objects to BSON, serializes it and parses it to Java native byte object.

But wait! How is WITSML BSON parser faster than JAXB doing more stuffs?

Answer is simple.

  • Less allocation/reallocation in memory
  • Referencing objects instead create and copy
  • gSoap optimization on parsing XML to C structs. See some interesting GENIVIA articles here
  • Recycled alloc'd memory
  • Low memory usage
  • Only two library dependency (gSoap and libbson)
  • No garbage collector on parsing objects

SIGNING KEY

Keys for signature:

[email protected] fingerprint: 6E21 A6B6 E1A4 6580 CA00 FA54 1077 26E9 14B9 16A2

LICENSES

This project is fully open source and MIT license.

WARNING

WITSML 2.1 BSON parser needs library with different licenses.

See version.json for details.

DONATIONS

Any donation is welcome.

Consider any amount of donation in BITCOIN: 1JUzcSh3vsBCRji5n5rJsbHQfW3hYrNAW4

Thank you :)

witsml21parser's People

Contributors

devfabiosilva avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.