npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@creatureco/concept-ml-parser

v0.3.2

Published

A parser for ConceptML, a language for expressing recursive hyperedges as plain text.

Downloads

26

Readme

@creature/concept-ml-parser

A parser for ConceptML, a language for expressing recursive hyperedges as plain text.

Installation

npm i -s @creatureco/concept-ml-parser
# or
yarn add @creatureco/concept-ml-parser

Usage

import { parseConcepts } from '@creatureco/concept-ml';

const concepts = parseConcepts(`
  john {
    knows {
      c++
      python
      javascript
      typescript
    }
  }
`);

Overview

ConceptML is designed for expressing rich labeled recursive hypergraphs in a way that is simple for people to read and write, yet structured enough for computers to parse.

It was created to be the data format for ConceptEngine, a knowledge graph built on a recursive hypergraph data model.

Terms

We call each labeled hyperedge a concept in ConceptML. A label acts as both value and unique identifier, and each concept is composed of zero, two, or more sub-concepts. A concept with zero sub-concepts is called an atom, with two or more it is called a compound.

ConceptML also includes syntax for describing inline permutations. When the source is parsed, each permutation is unwound into the full expressions it is part of.

Example

<<Concept Engine>> {
  used-for {
    knowledge-graph
    automation
  }
  uses {
    <<ConceptML>> (
      markup-language
    )
  }
}

This would expand to:

<<Concept Engine>> used-for knowledge-graph
<<Concept Engine>> used-for automation
<<Concept Engine>> uses <<ConceptML>>
<<ConceptML>> markup-language

Syntax

Atoms

Examples:

javascript
john-smith
42
1/1/2000

Text Blocks

<<
  Here's a big old text block.
  I can write anything I'd like here.
>>

Compounds

Compounds are sentence-like sequences of two or more concepts. For example:

javascript used-for web-development
john wrote <<I'm starting to understand this ConceptML thing!>>

Embedded Compounds

Concepts are hierarchical, allowing us to express arbitrary layers of meta-relations:

[
  sara liked [
    [john knows javascript] since 1999
  ] at 2021-06-04T00:12:30.145
] from my-social-app

Permutation Syntax

Inline Permutation Blocks

We enclose inline permutations with {}, separated by commas, semicolons or newlines. They can be nested. These are all equivalent:

hello {world, how are you}!

hello {
  world
  how are you
}!

hello {
  world;
  how are you;
}!;

Each of these would parse to:

hello world !
hello how are you !

Parenthetical Permutation Blocks

Permutations enclosed within () generate concepts from the immediately preceding atom or inline permutations plus the block's permutations.

Example:

john (person, male) knows jan (person, female)

This would expand to:

john person
john male
john knows jan
jan person
jan female

We can precede a parenthetical permutation block with an inline permutation block:

{john (male), jan (female)} (person) knows javascript

This would expand to:

john male
jan female
john person
jan person
john knows javascript
jan knows javascript

Next Steps

ConceptEngine provides an API and logic programming over a recursive labeled hypergraph, using ConceptML as its input format.