/*
* This software is Copyright 2005,2006,2007,2008 Langdale Consultants.
* Langdale Consultants can be contacted at: http://www.langdale.com.au
*/
package au.com.langdale.profiles;
import au.com.langdale.cim.CIMS;
import au.com.langdale.kena.OntModel;
import au.com.langdale.kena.Resource;
import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.vocabulary.RDFS;
/**
* A <code>SchemaGenerator</code> for creating a <i>legacy RDFS</i> model from
* a profile model.
*/
public class RDFSGenerator extends RDFSBasedGenerator {
public RDFSGenerator(OntModel profileModel, OntModel backgroundModel, boolean preserveNamespaces, boolean withInverses) {
super(profileModel, backgroundModel, preserveNamespaces, withInverses);
result.setNsPrefix("cims", CIMS.NS);
}
@Override
protected void emitHeader(String uri, String label, String comment) {
}
@Override
protected void emitClass(String uri, String base) {
emit(uri, RDFS.Class);
}
@Override
protected void emitDatatype(String uri, String xsdtype) {
emit(uri, RDFS.Class);
}
@Override
protected void emitObjectProperty(String uri, String base, String domain, String range, boolean required, boolean functional) {
Resource prop = emit(uri, RDF.Property);
emitCardinality(prop, required, functional);
emit( uri, RDFS.domain, domain);
emit( uri, RDFS.range, range);
}
private void emitCardinality(Resource prop, boolean required,
boolean functional) {
Resource card;
if(functional) {
if(required)
card = CIMS.M1;
else
card = CIMS.M0_1;
}
else {
if(required)
card = CIMS.M1_n;
else
card = CIMS.M0_n;
}
result.add(prop, CIMS.multiplicity, card);
}
@Override
protected void emitInverse(String uri, String iuri) {
emit(uri, CIMS.inverseRoleName, iuri);
}
@Override
protected void emitDatatypeProperty(String uri, String base, String domain, String type, String xsdtype, boolean required) {
Resource prop = emit(uri, RDF.Property);
emitCardinality(prop, required, true);
emit( uri, RDFS.domain, domain);
emit( uri, CIMS.dataType, type != null? type: xsdtype);
}
@Override
protected void emitDefinedBy(String uri, String container) {
emit(uri, CIMS.belongsToCategory, container);
}
@Override
protected void emitPackage(String uri) {
emit(uri, CIMS.ClassCategory);
}
@Override
protected void emitStereotype(String uri, String stereo) {
emit(uri, CIMS.stereotype, stereo);
}
@Override
protected void emitBaseStereotype(String uri, String stereo) {
emitStereotype(uri, stereo);
}
@Override
protected void emitRestriction(String uri, String domain, String range) {
// ignored
}
@Override
protected void emitRestriction(String uri, String domain, boolean required, boolean functional) {
// ignored
}
}