Code Monkey home page Code Monkey logo

emftriple's People

Contributors

ghillairet avatar szarnyasg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

emftriple's Issues

ETripleResource save should mark the resource content as saved

The save method on ETripleResource translates its contents onto triples and send those to the RDF store.
Currently, when the save method is called, there is no mechanism that look at already saved objects, thus it always translate and save the all object graph.
Solutions:

  • Turn saved objects into proxies, then when save is called again, only non proxy objects are translated and store.
  • Test if object already exists in the RDF store.

Not a valid (absolute) URI Exception when trying to save to File

Hello,

when trying to save the resource I encounter following exception:

Exception in thread "main" java.lang.IllegalArgumentException: Not a valid (absolute) URI: my.rdf#1
at org.openrdf.model.impl.URIImpl.setURIString(URIImpl.java:79)
at org.openrdf.model.impl.URIImpl.<init>(URIImpl.java:68)
at org.eclipselabs.emftriple.sesame.map.Extensions.toURI(Extensions.java:40)
at org.eclipselabs.emftriple.sesame.map.Extensions.toURI(Extensions.java:34)
at org.eclipselabs.emftriple.sesame.map.Serializer.createTypeStatement(Serializer.java:76)
at org.eclipselabs.emftriple.sesame.map.Serializer.to(Serializer.java:51)
at org.eclipselabs.emftriple.sesame.map.Serializer$2.apply(Serializer.java:39)
at org.eclipselabs.emftriple.sesame.map.Serializer$2.apply(Serializer.java:1)
at org.eclipse.xtext.xbase.lib.IteratorExtensions.forEach(IteratorExtensions.java:362)
at org.eclipse.xtext.xbase.lib.IterableExtensions.forEach(IterableExtensions.java:331)
at org.eclipselabs.emftriple.sesame.map.Serializer.to(Serializer.java:42)
at org.eclipselabs.emftriple.sesame.map.EObjectMapper.to(EObjectMapper.java:37)
at org.eclipselabs.emftriple.sesame.map.EObjectMapper.to(EObjectMapper.java:19)
at org.eclipselabs.emftriple.sesame.resource.RDFResource.doSave(RDFResource.java:60)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:1430)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:999)
at org.eclipselabs.emftriple.example.Main.test(Main.java:97)

The model is the one from:

emftriple/examples/org.eclipselabs.emftriple.examples.basic/model/model.ecore

This is my code (copied from the git README):

Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("*", new RDFResourceFactory());
ResourceSet resourceSet = new ResourceSetImpl();
Resource r = resourceSet.createResource(URI.createURI("my.rdf"));
Parent b = ModelFactory.eINSTANCE.createParent();
b.setId("1");
b.setName("Parent1");
r.getContents().add(b);
r.save(null);

The import statements are:

package org.eclipselabs.emftriple.example;

import java.io.IOException;

import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.xmi.XMIResource;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
import org.eclipselabs.emftriple.example.model.Child;
import org.eclipselabs.emftriple.example.model.ModelFactory;
import org.eclipselabs.emftriple.example.model.ModelPackage;
import org.eclipselabs.emftriple.example.model.Parent;
import org.eclipselabs.emftriple.sesame.handlers.RepositoryHandler;
import org.eclipselabs.emftriple.sesame.resource.RDFResourceFactory;
import org.eclipselabs.emftriple.sesame.resource.TTLResource;
import org.eclipselabs.emftriple.sesame.resource.TTLResourceFactory;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.sail.memory.MemoryStore;

I tried with different URI formats and absolute paths, but I seem to have a problem when saving to a file.

Update wiki

Update wiki pages on the eclipselabs site:

  • How to use annotations on emf model
  • Explain limitations with blank nodes
  • Detail Query

URI issue in the README example

The example in the README (Sesame, Jena) throws an exception for both implementation:

Sesame:

Exception in thread "main" java.lang.IllegalArgumentException: Not a valid (absolute) URI: my.rdf#/
    at org.openrdf.model.impl.URIImpl.setURIString(URIImpl.java:79)
    at org.openrdf.model.impl.URIImpl.<init>(URIImpl.java:68)
    at org.eclipselabs.emftriple.sesame.map.Extensions.toURI(Extensions.java:37)
    at org.eclipselabs.emftriple.sesame.map.Extensions.toURI(Extensions.java:32)
    at org.eclipselabs.emftriple.sesame.map.Serializer.createTypeStatement(Serializer.java:72)
    at org.eclipselabs.emftriple.sesame.map.Serializer.to(Serializer.java:45)
    at org.eclipselabs.emftriple.sesame.map.Serializer$1.accept(Serializer.java:33)
    at org.eclipselabs.emftriple.sesame.map.Serializer$1.accept(Serializer.java:1)
    at java.lang.Iterable.forEach(Iterable.java:75)
    at org.eclipselabs.emftriple.sesame.map.Serializer.to(Serializer.java:36)
    at org.eclipselabs.emftriple.sesame.map.EObjectMapper.to(EObjectMapper.java:34)
    at org.eclipselabs.emftriple.sesame.map.EObjectMapper.to(EObjectMapper.java:19)
    at org.eclipselabs.emftriple.sesame.resource.RDFResource.doSave(RDFResource.java:58)
    at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:1430)
    at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:999)
    at org.eclipselabs.emftriples.examples.maven.EMFTripleExample.main(EMFTripleExample.java:27)

Jena:

Exception in thread "main" com.hp.hpl.jena.shared.BadURIException: Only well-formed absolute URIrefs can be included in RDF/XML output: <my.rdf#/> Code: 57/REQUIRED_COMPONENT_MISSING in SCHEME: A component that is required by the scheme is missing.
    at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.checkURI(BaseXMLWriter.java:820)
    at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.relativize(BaseXMLWriter.java:797)
    at com.hp.hpl.jena.xmloutput.impl.Basic.writeResourceId(Basic.java:144)
    at com.hp.hpl.jena.xmloutput.impl.Basic.writeDescriptionHeader(Basic.java:92)
    at com.hp.hpl.jena.xmloutput.impl.Basic.writeRDFStatements(Basic.java:84)
    at com.hp.hpl.jena.xmloutput.impl.Basic.writeRDFStatements(Basic.java:74)
    at com.hp.hpl.jena.xmloutput.impl.Basic.writeBody(Basic.java:48)
    at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.writeXMLBody(BaseXMLWriter.java:492)
    at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:464)
    at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:450)
    at com.hp.hpl.jena.rdf.model.impl.ModelCom.write(ModelCom.java:347)
    at org.eclipselabs.emftriple.jena.io.RDFWriter.writeXML(RDFWriter.java:47)
    at org.eclipselabs.emftriple.jena.io.RDFWriter.write(RDFWriter.java:28)
    at org.eclipselabs.emftriple.jena.resource.RDFResource.write(RDFResource.java:67)
    at org.eclipselabs.emftriple.jena.resource.RDFResource.doSave(RDFResource.java:58)
    at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:1430)
    at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:999)
    at org.eclipselabs.emftriples.examples.maven.sesame.EMFTripleExample.main(EMFTripleExample.java:26)

To fix this, I changed the my.rdf URI to a file URI file:///tmp/my.rdf:

final Resource r = resourceSet.createResource(URI.createURI("file:///tmp/my.rdf"));

This runs fine for both.

Sesame:

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

<rdf:Description rdf:about="file:///tmp/my.rdf#/">
    <rdf:type rdf:resource="http://www.eclipselabs.org/emf/junit#//Book"/>
    <title xmlns="http://www.eclipselabs.org/emf/junit#//Book/" rdf:datatype="http://www.w3.org/2001/XMLSchema#string">The Book</title>
    <tags xmlns="http://www.eclipselabs.org/emf/junit#//Book/" rdf:datatype="http://www.w3.org/2001/XMLSchema#string">SciFI</tags>
    <tags xmlns="http://www.eclipselabs.org/emf/junit#//Book/" rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Fantasy</tags>
</rdf:Description>

</rdf:RDF>

Jena:

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:j.0="http://www.eclipselabs.org/emf/junit#//Book/"
    xmlns:j.1="http://www.eclipselabs.org/emf/junit#//" > 
  <rdf:Description rdf:about="file:///tmp/my.rdf#/">
    <j.0:tags>Fantasy</j.0:tags>
    <j.0:tags>SciFI</j.0:tags>
    <j.0:title>The Book</j.0:title>
    <rdf:type rdf:resource="http://www.eclipselabs.org/emf/junit#//Book"/>
  </rdf:Description>
</rdf:RDF>

The latter is very similar to the output suggested in the README, the main difference is (of course) the URI in the rdf:about attribute.

Should this be fixed in the README or the implementation?

dependency issue

I'm getting the following error message, caused by adding EMFTriple to my project:

Bundle was not resolved because of a uses contraint violation.
org.osgi.service.resolver.ResolutionException: Uses constraint violation. Unable to resolve resource com.intel.sam [osgi.identity; osgi.identity="com.intel.sam"; type="osgi.bundle"; version:Version="1.8.0.qualifier"; singleton:="true"] because it is exposed to package 'javax.annotation' from resources javax.annotation [osgi.identity; osgi.identity="javax.annotation"; type="osgi.bundle"; version:Version="1.2.0.v201401042248"] and org.eclipse.osgi [osgi.identity; osgi.identity="org.eclipse.osgi"; type="osgi.bundle"; version:Version="3.10.102.v20160118-1700"; singleton:="true"] via two dependency chains.

Chain 1:
com.intel.sam [osgi.identity; osgi.identity="com.intel.sam"; type="osgi.bundle"; version:Version="1.8.0.qualifier"; singleton:="true"]
import: (&(osgi.wiring.package=javax.annotation)(version>=1.0.0))
|
export: osgi.wiring.package: javax.annotation
javax.annotation [osgi.identity; osgi.identity="javax.annotation"; type="osgi.bundle"; version:Version="1.2.0.v201401042248"]

Chain 2:
com.intel.sam [osgi.identity; osgi.identity="com.intel.sam"; type="osgi.bundle"; version:Version="1.8.0.qualifier"; singleton:="true"]
require: (&(osgi.wiring.bundle=org.eclipselabs.emftriple)(bundle-version>=1.1.0))
|
provide: osgi.wiring.bundle; bundle-version:Version="1.1.0.201601171849"; osgi.wiring.bundle="org.eclipselabs.emftriple"
com.google.guava [osgi.identity; osgi.identity="com.google.guava"; type="osgi.bundle"; version:Version="15.0.0.v201403281430"]
import: (osgi.wiring.package=javax.annotation)
|
export: osgi.wiring.package: javax.annotation
org.eclipse.osgi [osgi.identity; osgi.identity="org.eclipse.osgi"; type="osgi.bundle"; version:Version="3.10.102.v20160118-1700"; singleton:="true"]

I'm kind of puzzled, and not even sure how I have to parse this error. Somehow it seems to be related to java.annotation versions or com.google.guava

Any help is highly appreciated.

Cheers,
Rudi

IllegalArgumentException when trying to store a model

I have a rather complex Ecore model which I'm trying to serialize to RDF with emftriple.
The storage method is according to the one found in the the README.
Upon calling resource.getContents().add(model); I get the following exception:

Exception in thread "main" java.lang.IllegalArgumentException: The datatype 'EFeatureMapEntry' is not a valid classifier
at org.eclipse.emf.ecore.impl.EcoreFactoryImpl.convertToString(EcoreFactoryImpl.java:221)
at org.eclipse.emf.ecore.util.EcoreUtil.convertToString(EcoreUtil.java:3495)
at org.eclipselabs.emftriple.sesame.map.Extensions.toLiteral(Extensions.java:48)
at org.eclipselabs.emftriple.sesame.map.Extensions.add(Extensions.java:58)
at org.eclipselabs.emftriple.sesame.map.Serializer$5.apply(Serializer.java:114)
at org.eclipse.xtext.xbase.lib.IteratorExtensions.forEach(IteratorExtensions.java:362)
at org.eclipse.xtext.xbase.lib.IterableExtensions.forEach(IterableExtensions.java:331)
at org.eclipselabs.emftriple.sesame.map.Serializer.serialize(Serializer.java:117)
at org.eclipselabs.emftriple.sesame.map.Serializer.access$0(Serializer.java:86)
at org.eclipselabs.emftriple.sesame.map.Serializer$3.apply(Serializer.java:56)
at org.eclipselabs.emftriple.sesame.map.Serializer$3.apply(Serializer.java:1)
at org.eclipse.xtext.xbase.lib.IteratorExtensions.forEach(IteratorExtensions.java:362)
at org.eclipse.xtext.xbase.lib.IterableExtensions.forEach(IterableExtensions.java:331)
at org.eclipselabs.emftriple.sesame.map.Serializer.to(Serializer.java:59)
at org.eclipselabs.emftriple.sesame.map.Serializer.serializeOne(Serializer.java:173)
at org.eclipselabs.emftriple.sesame.map.Serializer.serialize(Serializer.java:160)
at org.eclipselabs.emftriple.sesame.map.Serializer.access$1(Serializer.java:127)
at org.eclipselabs.emftriple.sesame.map.Serializer$4.apply(Serializer.java:64)
at org.eclipselabs.emftriple.sesame.map.Serializer$4.apply(Serializer.java:1)
at org.eclipse.xtext.xbase.lib.IteratorExtensions.forEach(IteratorExtensions.java:362)
at org.eclipse.xtext.xbase.lib.IterableExtensions.forEach(IterableExtensions.java:331)
at org.eclipselabs.emftriple.sesame.map.Serializer.to(Serializer.java:67)
at org.eclipselabs.emftriple.sesame.map.Serializer$2.apply(Serializer.java:39)
at org.eclipselabs.emftriple.sesame.map.Serializer$2.apply(Serializer.java:1)
at org.eclipse.xtext.xbase.lib.IteratorExtensions.forEach(IteratorExtensions.java:362)
at org.eclipse.xtext.xbase.lib.IterableExtensions.forEach(IterableExtensions.java:331)
at org.eclipselabs.emftriple.sesame.map.Serializer.to(Serializer.java:42)
at org.eclipselabs.emftriple.sesame.map.EObjectMapper.to(EObjectMapper.java:37)
at org.eclipselabs.emftriple.sesame.map.EObjectMapper.to(EObjectMapper.java:19)
at org.eclipselabs.emftriple.sesame.resource.RDFResource.doSave(RDFResource.java:60)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:1430)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:999)
at Model2RDF.saveModel(Model2RDF.java:76)
at Model2RDF.main(Model2RDF.java:39)

Maven does not work with the new p2 repository

For some strange reason, the p2 repository does not work from Maven. I noticed that you published a new version of EMFJson (ghillairet/p2@7d5c122), and this replaced the (compositeContent|compositeArtifacts).xml files with (compositeContent|compositeArtifacts).jar files (which contain the respective XML files). The JAR files seem fine and the repository contains dependencies required for building EMFTriple. However, Maven throws the following exception while building EMFTriple:

 Unable to read repository at http://ghillairet.github.com/p2. No repository found at http://ghillairet.github.com/p2/releases/emfjson/0.14.0. -> [Help 1]
org.apache.maven.InternalErrorException: Internal error: java.lang.RuntimeException: Failed to load p2 repository with ID 'dependencies' from location http://ghillairet.github.com/p2
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:168)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.lang.RuntimeException: Failed to load p2 repository with ID 'dependencies' from location http://ghillairet.github.com/p2
    at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.loadMetadataRepository(TargetPlatformFactoryImpl.java:302)
    at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.gatherExternalInstallableUnits(TargetPlatformFactoryImpl.java:270)
    at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.createTargetPlatform(TargetPlatformFactoryImpl.java:176)
    at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.createTargetPlatform(TargetPlatformFactoryImpl.java:128)
    at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.createTargetPlatform(TargetPlatformFactoryImpl.java:1)
    at org.eclipse.tycho.p2.manager.ReactorRepositoryManagerImpl.computePreliminaryTargetPlatform(ReactorRepositoryManagerImpl.java:84)
    at org.eclipse.tycho.p2.resolver.P2DependencyResolver.computePreliminaryTargetPlatform(P2DependencyResolver.java:223)
    at org.eclipse.tycho.core.resolver.DefaultTychoResolver.resolveProject(DefaultTychoResolver.java:109)
    at org.eclipse.tycho.core.maven.TychoMavenLifecycleParticipant.afterProjectsRead(TychoMavenLifecycleParticipant.java:95)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:274)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    ... 11 more
Caused by: org.eclipse.equinox.p2.core.ProvisionException: Unable to read repository at http://ghillairet.github.com/p2.
    at org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository.addChild(CompositeMetadataRepository.java:185)
    at org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository.<init>(CompositeMetadataRepository.java:106)
    at org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepositoryFactory.load(CompositeMetadataRepositoryFactory.java:122)
    at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57)
    at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:768)
    at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:668)
    at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96)
    at org.eclipse.tycho.p2.remote.RemoteMetadataRepositoryManager.loadRepository(RemoteMetadataRepositoryManager.java:61)
    at org.eclipse.tycho.p2.remote.RemoteMetadataRepositoryManager.loadRepository(RemoteMetadataRepositoryManager.java:53)
    at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.loadMetadataRepository(TargetPlatformFactoryImpl.java:298)
    ... 21 more
Caused by: org.eclipse.equinox.p2.core.ProvisionException: No repository found at http://ghillairet.github.com/p2/releases/emfjson/0.14.0.
    at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.fail(AbstractRepositoryManager.java:395)
    at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:692)
    at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96)
    at org.eclipse.tycho.p2.remote.RemoteMetadataRepositoryManager.loadRepository(RemoteMetadataRepositoryManager.java:61)
    at org.eclipse.tycho.p2.remote.RemoteMetadataRepositoryManager.loadRepository(RemoteMetadataRepositoryManager.java:53)
    at org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository.addChild(CompositeMetadataRepository.java:166)
    ... 30 more

I tried it with both Maven 3.0.5 and 3.3.9.

Inter-model references

How to handle inter model references?

EMF allows references between objects contained in different resources. Resolution of references is done through EMF proxies URIs. The URI contains the location of the target resource and the location of the target object in that resource.

In emftriple, a resource is a named graph (or simply graph) associated to a rdf store. Inter-model references in emftriple means that proxies should contains the location of the named graph and the location of the object's RDF URI.

Inter-model references should also be used to navigate in the Web of Data by deresolving URIs.

example fails

Execution of example ends in a null pointer exception.

Exception in thread "main" java.lang.NullPointerException
at org.eclipse.emf.ecore.util.EcoreUtil.create(EcoreUtil.java:3247)
at com.emftriple.sail.SailResourceImpl.load(SailResourceImpl.java:94)
at
com.emftriple.resource.ETripleResourceImpl.load(ETripleResourceImpl.java:
101)
at
org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoad(ResourceSetI mpl.java:
255)
at
org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(Resour ceSetImpl.java:
270)
at
org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSet Impl.java:
397)
at com.emftriple.examples.basic.Main.main(Main.java:60)

Proxy URIs are malformed

Proxy URIs should be formed of the URIs of the resource containing the proxy object, and for fragment the URI of the corresponding RDF resource.

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.