A Java implementation of schema.org data structure.
(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
(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.
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)));
}
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":"誰か"}}
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.
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"
}
kyojoLib is the web framework natively supports the data structure of schema.org.
Short examples found here.
- 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.
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.