Code Monkey home page Code Monkey logo

schemaorg's Introduction

schemaOrg

Overview

A Java implementation of schema.org data structure.

Class and Property types mapping

(schema.org's) class types mapped like

http://schema.org/Person
org.kyojo.schemaorg.m3n4.core.Clazz$Person

Property types mapped like

http://schema.org/author
org.kyojo.schemaorg.m3n4.core.Container$Author

These are interfaces and have each entity classes like

org.kyojo.schemaorg.m3n4.core.impl.PERSON
org.kyojo.schemaorg.m3n4.core.impl.AUTHOR

Class and Property types field possession

(schema.org's) class types has fields of (schema.org's) property types in the singular object.

org.kyojo.schemaorg.m3n4.core.Clazz$CreativeWork
    public Container.Author getAuthor();
    public void setAuthor(Container.Author author);

Property types has fields of class types in the List object.

org.kyojo.schemaorg.m3n4.core.Container$Author
    public Clazz.Person getPerson();
    public void setPerson(Clazz.Person person);
    public List<Clazz.Person> getPersonList();
    public void setPersonList(List<Clazz.Person> personList);
    public boolean hasPerson();

Just like above, property types are accessed with getter/setter methods, and class types with 5 kinds of methods.

Main constructors

General class type's entity classes has at least 2 constructors, no arguments and one String. If one String given, it is interpreted as a name property given.

    public PERSON() {
    }

    public PERSON(String string) {
        setName(new NAME(new TEXT(string)));
    }

Dedicated JSON builder

org.kyojo.schemaorg.SimpleJsonBuilder is the JSON builder for JSONizing schemeOrg objects. It is added some functions internally no other general JSON builders provide, but enough available as a simple JSON builder for any purpose.

CreativeWork creativeWork = new CREATIVE_WORK();
Author author = new AUTHOR(new PERSON("誰か"));
creativeWork.setAuthor(author);
System.out.println(SimpleJsonBuilder.toJson(creativeWork));
System.out.println(SimpleJsonBuilder.toJsonLd(creativeWork, CreativeWork.class));

Results:

{"author":{"person":{"name":{"text":"誰か"}}}}
{"@context":"http:\/\/schema.org","@type":"CreativeWork","author":{"@context":"http:\/\/schema.org","@type":"Person","name":"誰か"}}

Sample source

GSON assumed for deserialization

The deserialization JSONized schemaOrg objects is GSON use assumed. The correspondence list of interfaces and deserializers is written in org.kyojo.schemaorg.m3n4.gson.GsonTypeAdapters.properties. Load and register by GsonBuilder calling registerTypeAdapter() method.

JSON structure analyzing utility class

org.kyojo.schemaorg.SimpleJsonWalker is the utility class for analyzing JSON structure. It realize the formatting JSON and the conversion JSON-LD to JSON. If this JSON-LD is the data structure of schema.org, the converted JSON is deserializable to a schemaOrg object.

JSON-LD:

{
    "@context": "http://schema.org",
    "@type": "NewsArticle",
    "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "https://google.com/article"
    },
    "headline": "Article headline",
    "image": [
        "https://example.com/photos/1x1/photo.jpg",
        "https://example.com/photos/4x3/photo.jpg",
        "https://example.com/photos/16x9/photo.jpg"
    ],
    "datePublished": "2015-02-05",
    "dateModified": "2015-02-05T09:20:00+08:00",
    "author": {
        "@type": "Person",
        "name": "John Doe"
    },
    "publisher": {
        "@type": "Organization",
        "name": "Google",
        "logo": {
            "@type": "ImageObject",
            "url": "https://google.com/logo.jpg"
        }
    },
    "description": "A most wonderful article"
}
Map<String, JsonLdThingStringGiven> thingStrModeMap = new HashMap<>();
thingStrModeMap.put("url", JsonLdThingStringGiven.AS_URL);
thingStrModeMap.put("image", JsonLdThingStringGiven.AS_URL);
thingStrModeMap.put("item", JsonLdThingStringGiven.AS_THING_IDENTIFIER_URL);
Map<String, String> jsonLdRootMap = new HashMap<>();
String json1 = SimpleJsonWalker.jsonLdToJson(jsonLd, jsonLdRootMap,
        thingStrModeMap, JsonLdAtIdStringGiven.AS_AUTO);
String json2 = SimpleJsonWalker.formatJson(json1, "\t");
System.out.println(json2);

Results:

{
    "datePublished" : "2015-02-05",
    "image" : {
        "url" : [
            "https://example.com/photos/1x1/photo.jpg",
            "https://example.com/photos/4x3/photo.jpg",
            "https://example.com/photos/16x9/photo.jpg"
        ]
    },
    "author" : {
        "person" : {
            "name" : "John Doe"
        }
    },
    "publisher" : {
        "organization" : {
            "name" : "Google",
            "logo" : {
                "imageObject" : {
                    "url" : {
                        "url" : "https://google.com/logo.jpg"
                    }
                }
            }
        }
    },
    "description" : "A most wonderful article",
    "dateModified" : "2015-02-05T09:20:00+08:00",
    "mainEntityOfPage" : {
        "webPage" : {
            "identifier" : {
                "url" : "https:\/\/google.com\/article"
            }
        }
    },
    "headline" : "Article headline"
}

Sample source

Web framework integration

kyojoLib is the web framework natively supports the data structure of schema.org.

Short examples found here.

Included Projects

  • schemaOrgWork - The generator of the following 4 projects classes source codes.
  • schemaOrgImpl - The implementation classes. (ordinary use)
  • schemaOrgGson - GSON deserializers for schemaOrgImpl.
  • schemaOrgDoma - schemaOrgImpl added Doma domain class use features.
  • schemaOrgDomaConv - Converters for schemaOrgDoma.

Maven Repository

There are two level of detail implementations full and digest. The full implementation is not suitable for realtime processing. The digest implementation is also provided, extracted important classes for general purpose.

schemaorg's People

Contributors

nagaikenshin avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

amithall

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.