import javax.xml.namespace.QName;\r
\r
import org.simantics.utils.datastructures.BijectionMap;\r
+import org.simantics.xml.sax.SchemaConversionBase.Inheritance;\r
+import org.simantics.xml.sax.SchemaConversionBase.InheritanceType;\r
+import org.simantics.xml.sax.SchemaConversionBase.RefType;\r
import org.simantics.xml.sax.SchemaObject.ObjectType;\r
import org.simantics.xml.sax.configuration.AttributeComposition;\r
-import org.simantics.xml.sax.configuration.Configuration;\r
import org.simantics.xml.sax.configuration.IDReference;\r
import org.w3._2001.xmlschema.Annotated;\r
import org.w3._2001.xmlschema.Attribute;\r
import org.w3._2001.xmlschema.LocalComplexType;\r
import org.w3._2001.xmlschema.LocalSimpleType;\r
import org.w3._2001.xmlschema.NamedAttributeGroup;\r
+import org.w3._2001.xmlschema.NamedGroup;\r
import org.w3._2001.xmlschema.Restriction;\r
import org.w3._2001.xmlschema.Schema;\r
import org.w3._2001.xmlschema.SimpleType;\r
-import org.w3._2001.xmlschema.TopLevelAttribute;\r
\r
-public class OntologyGenerator extends SchemaConversionBase {\r
+//public class OntologyGenerator extends SchemaConversionBase {\r
+public class OntologyGenerator implements SchemaConversionComponent {\r
+ SchemaConversionBase base;\r
\r
- public OntologyGenerator(Configuration configuration) {\r
- super(configuration);\r
+ public OntologyGenerator(SchemaConverter converter, SchemaConversionBase base) {\r
+ this.base = base;\r
+ this.converter = converter;\r
+ this.schema = base.schema;\r
+ this.ontologyUri = base.ontologyURI;\r
+ this.className = base.className; \r
}\r
\r
String ontRoot = "ONT.";\r
\r
PrintWriter writer = null;\r
\r
- \r
- \r
- \r
- \r
- public void createOntology(Schema schema, String ontologyName, String className, SchemaConverter converter) throws FileNotFoundException {\r
- this.schema = schema;\r
- this.converter = converter;\r
- this.ontologyUri = ontologyName;\r
- this.className = className;\r
- \r
-// for (OpenAttrs attrs : schema.getIncludeOrImportOrRedefine()) {\r
-// if (attrs instanceof Annotation) {\r
-// Annotation ann = (Annotation)attrs;\r
-// for (Object o : ann.getAppinfoOrDocumentation()) {\r
-// if (o instanceof Documentation) {\r
-// Documentation doc = (Documentation)o;\r
-// } else if (o instanceof Appinfo) {\r
-// Appinfo info = (Appinfo)o;\r
-// }\r
-// }\r
-// }\r
-// }\r
- \r
- \r
+ public void createOntology() throws FileNotFoundException {\r
StringWriter stringWriter = null;\r
if (converter.getOntologyFile() == null) {\r
stringWriter = new StringWriter();\r
writer = new PrintWriter(converter.getOntologyFile());\r
}\r
\r
- handle(schema);\r
+ handle();\r
\r
writer.flush();\r
writer.close();\r
System.out.println(stringWriter.toString());\r
}\r
\r
- protected void handle(Schema schema) {\r
- String parts[] = ontologyUri.split("/");\r
- String name = parts[parts.length-1];\r
- ontRoot = name.substring(0, Math.min(3, name.length())).toUpperCase();\r
+ protected void handle() {\r
+ ontRoot = converter.shortName;\r
\r
for (String s : converter.getHeader()) {\r
writer.println(commentTag + " " + s); \r
writer.println(commentTag + " Interpreted from schema");\r
writer.println();\r
\r
- super.handle(schema);\r
+ base.handle(this);\r
}\r
\r
protected String getType(QName qtype) {\r
- String ontType = getL0TypeFromPrimitiveType(qtype);\r
+ String ontType = base.getL0TypeFromPrimitiveType(qtype);\r
if (ontType != null)\r
return ontType;\r
- else if (isComplexTypeRef(qtype.getLocalPart()))\r
+ else if (base.isComplexTypeRef(qtype.getLocalPart()))\r
return ontRoot+getComplexTypePrefix()+qtype.getLocalPart();\r
- else if (isSimpleTypeRef(qtype.getLocalPart()))\r
+ else if (base.isSimpleTypeRef(qtype.getLocalPart()))\r
return ontRoot+qtype.getLocalPart();\r
- else if (isElementRef(qtype.getLocalPart()))\r
+ else if (base.isElementRef(qtype.getLocalPart()))\r
return ontRoot+qtype.getLocalPart();\r
else if (qtype.getPrefix() != null && qtype.getPrefix().length() > 0) {\r
return ontRoot+qtype.getPrefix()+qtype.getLocalPart();\r
throw new RuntimeException("Reference to unknown type " + qtype.getLocalPart());\r
}\r
\r
- @Override\r
- protected void handle(TopLevelAttribute topLevelAttribute) {\r
- super.handle(topLevelAttribute);\r
- writer.println();\r
- }\r
- \r
- @Override\r
- protected void handleSimpleType(SchemaObject topLevelSimpleType) {\r
- super.handleSimpleType(topLevelSimpleType);\r
- writer.println();\r
- }\r
- \r
- \r
public String getComplexTypePrefix() {\r
return "ComplexTypes.";\r
}\r
return "AttributeGroups.";\r
}\r
\r
- @Override\r
- protected void handle(SchemaObject parent, SchemaElement indicator, List<SchemaElement> elements) {\r
- if (indicator.getType() == SchemaElement.ElementType.SEQUENCE || (indicator.getType() == SchemaElement.ElementType.CHOICE && indicator.getRestriction().many())) {\r
- for (SchemaElement e : elements) {\r
- handle(parent, indicator, e);\r
- }\r
- } else if (indicator.getType() == SchemaElement.ElementType.CHOICE) {\r
- String name = getChoiceName(elements);\r
- boolean single = true;\r
- for (SchemaElement e : elements) {\r
- if (e.getRestriction().many()) {\r
- single = false;\r
- break;\r
- }\r
+ public void handleChoice(SchemaObject parent, SchemaElement indicator, java.util.List<SchemaElement> elements, String name) {\r
+ boolean single = true;\r
+ for (SchemaElement e : elements) {\r
+ if (e.getRestriction().many()) {\r
+ single = false;\r
+ break;\r
}\r
- String relationName = getName(parent)+".has"+name;\r
- writer.print(relationName);\r
+ }\r
+ String relationName = getName(parent)+".has"+name;\r
+ writer.print(relationName);\r
+ \r
+ List<String> types = new ArrayList<String>();\r
+ for (SchemaElement e : elements) {\r
+ Element localElement = e.getElement();\r
+ QName refType = null;\r
+ String type = null;\r
\r
- List<String> types = new ArrayList<String>();\r
- for (SchemaElement e : elements) {\r
- Element localElement = e.getElement();\r
- QName refType = null;\r
- String type = null;\r
- \r
- if (localElement.getName() != null) {\r
- refType = localElement.getType();\r
- type = getL0TypeFromPrimitiveType(refType); \r
- } else if (localElement.getRef() != null) {\r
- refType = localElement.getRef();\r
- type = getL0TypeFromPrimitiveType(refType);\r
- }\r
- if (type == null) {\r
- SchemaObject obj = getWithName(parent, refType.getLocalPart());\r
- types.add(getName(obj,"has"));\r
- } \r
+ if (localElement.getName() != null) {\r
+ refType = localElement.getType();\r
+ type = base.getL0TypeFromPrimitiveType(refType); \r
+ } else if (localElement.getRef() != null) {\r
+ refType = localElement.getRef();\r
+ type = base.getL0TypeFromPrimitiveType(refType);\r
}\r
- if (types.size() > 0) {\r
- for (String type : types) {\r
- writer.print(" <R " + type);\r
- }\r
- } else {\r
- writer.print(" <R XML.hasElement");\r
+ if (type == null) {\r
+ SchemaObject obj = base.getWithName(parent, refType.getLocalPart());\r
+ types.add(getName(obj,"has"));\r
+ } \r
+ }\r
+ if (types.size() > 0) {\r
+ for (String type : types) {\r
+ writer.print(" <R " + type);\r
}\r
- \r
- writer.println();\r
- \r
- for (SchemaElement e : elements) {\r
- Element localElement = e.getElement();\r
- QName refType = null;\r
- String type = null;\r
- if (localElement.getName() != null) {\r
- refType = localElement.getType();\r
- type = getType(refType); \r
- } else if (localElement.getRef() != null) {\r
- refType = localElement.getRef();\r
- type = getType(refType);\r
- }\r
- if (type != null) {\r
- writer.println(" --> " + type);\r
- }\r
+ } else {\r
+ writer.print(" <R XML.hasElement");\r
+ }\r
+ \r
+ writer.println();\r
+ \r
+ for (SchemaElement e : elements) {\r
+ Element localElement = e.getElement();\r
+ QName refType = null;\r
+ String type = null;\r
+ if (localElement.getName() != null) {\r
+ refType = localElement.getType();\r
+ type = getType(refType); \r
+ } else if (localElement.getRef() != null) {\r
+ refType = localElement.getRef();\r
+ type = getType(refType);\r
}\r
- if (!single) {\r
- writer.println(ontRoot+name+ "List <T XML.ElementList");\r
- if (types.size() == 0) {\r
- writer.println(relationName+ "List <R XML.hasElementList : L0.FunctionalRelation");\r
- } else {\r
- writer.print(relationName+ "List");\r
- for (String type : types) {\r
- writer.print(" <R " + type+"List");\r
- }\r
- writer.println(" : L0.FunctionalRelation");\r
+ if (type != null) {\r
+ writer.println(" --> " + type);\r
+ }\r
+ }\r
+ if (!single) {\r
+ writer.println(ontRoot+name+ "List <T XML.ElementList");\r
+ if (types.size() == 0) {\r
+ writer.println(relationName+ "List <R XML.hasElementList : L0.FunctionalRelation");\r
+ } else {\r
+ writer.print(relationName+ "List");\r
+ for (String type : types) {\r
+ writer.print(" <R " + type+"List");\r
}\r
- writer.println(" --> " + ontRoot+name+"List");\r
+ writer.println(" : L0.FunctionalRelation");\r
}\r
+ writer.println(" --> " + ontRoot+name+"List");\r
}\r
- \r
- }\r
+ };\r
\r
\r
\r
@Override\r
- protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType refType) {\r
+ public void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType refType) {\r
if (refType != refType.Element) {\r
QName referenceType = null;\r
if (refType == RefType.Type) {\r
referenceType = element.getElement().getType();\r
//refName = element.getElement().getName()\r
- SchemaObject eObj = elements.get(element.getElement());\r
+ SchemaObject eObj = base.elements.get(element.getElement());\r
if (refName == null)\r
refName = eObj.getName();\r
} else {\r
if (refName == null)\r
refName = referenceType.getLocalPart();\r
}\r
- String type = getL0TypeFromPrimitiveType(referenceType);\r
+ String type = base.getL0TypeFromPrimitiveType(referenceType);\r
SchemaObject obj = null;\r
if (type == null) {\r
- obj = getWithName(parent, referenceType.getLocalPart());\r
+ obj = base.getWithName(parent, referenceType.getLocalPart());\r
\r
writer.println(getName(parent)+".has"+refName + " <R " + getName(obj,"has"));\r
writer.println(" --> " + getName(obj));\r
writer.println(" --> " + getType(referenceType));\r
}\r
\r
- if (useElementList(parent, indicator,element, refType == RefType.Reference, refName, referenceType)) {\r
+ if (base.useElementList(parent, indicator,element, refType == RefType.Reference, refName, referenceType)) {\r
\r
if (type == null) {\r
writer.println(getName(parent)+"."+refName + "List <T XML.ElementList");\r
}\r
} else {\r
Element attrs = element.getElement();\r
- SchemaObject obj = getWithObj(parent, attrs);\r
+ SchemaObject obj = base.getWithObj(parent, attrs);\r
if (refName == null)\r
refName = obj.getName();\r
\r
writer.println(getName(parent)+".has"+refName + " <R " + getName(obj,"has"));\r
writer.println(" --> " + getName(obj));\r
- if (useElementList(parent, indicator,element, false, refName, new QName(obj.getName()))) {\r
+ if (base.useElementList(parent, indicator,element, false, refName, new QName(obj.getName()))) {\r
writer.println(getName(parent)+"."+refName + "List <T XML.ElementList");\r
writer.println(getName(parent)+".has"+refName + "List <R " + getName(obj,"has")+"List : L0.FunctionalRelation");\r
}\r
}\r
\r
@Override\r
- protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement any) {\r
+ public void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement any) {\r
+ \r
+ }\r
+ \r
+ @Override\r
+ public void handle(SchemaObject parent, NamedGroup attribute) {\r
+ // TODO Auto-generated method stub\r
\r
}\r
\r
@Override\r
- protected void handle(SchemaObject parent, Attribute attribute) {\r
+ public void handle(SchemaObject parent, Attribute attribute) {\r
String name = attribute.getName();\r
QName primitiveType = attribute.getType();\r
LocalSimpleType simpleType = attribute.getSimpleType();\r
boolean id = false;\r
String ontType = null;\r
if (primitiveType != null) {\r
- ontType = getL0TypeFromPrimitiveType(primitiveType);\r
+ ontType = base.getL0TypeFromPrimitiveType(primitiveType);\r
if (ontType != null) {\r
- id = getTypeEntry(primitiveType).id;\r
+ id = base.getTypeEntry(primitiveType).id;\r
if (id)\r
relationType = "XML.hasID";\r
} else {\r
QName base = restriction.getBase();\r
\r
\r
- ontType = getL0TypeFromPrimitiveType(base);\r
+ ontType = this.base.getL0TypeFromPrimitiveType(base);\r
\r
// for (Object facetWrap : restriction.getFacets()) {\r
// JAXBElement<?> element = (JAXBElement<?>)facetWrap;\r
}\r
\r
@Override\r
- protected void handleAttributes(SchemaObject simpleTypeObj) {\r
+ public void handleAttributes(SchemaObject simpleTypeObj) {\r
// SchemaObject parent = simpleTypeObj.getParent();\r
// SimpleType simpleType = simpleTypeObj.getSimpleType();\r
// Restriction restriction = simpleType.getRestriction();\r
}\r
\r
@Override\r
- protected void handle(SchemaObject parent, AttributeGroup attributeGroup) {\r
+ public void handle(SchemaObject parent, AttributeGroup attributeGroup) {\r
if (parent == null) {\r
NamedAttributeGroup group = (NamedAttributeGroup)attributeGroup;\r
writer.println(ontRoot+getAttributeGroupPrefix()+group.getName()+ " <T XML.AttributeGroup");\r
//handle(getAttributeGroupPrefix()+group.getName(),(Attribute)annotated);\r
handle(obj,(Attribute)annotated);\r
} else if (annotated instanceof AttributeGroup) {\r
- throw new RuntimeException("Cannot handle nested attribute groups");\r
+ handle(obj,(AttributeGroup)annotated);\r
+ //throw new RuntimeException("Cannot handle nested attribute groups");\r
}\r
}\r
} else {\r
}\r
\r
@Override\r
- protected void handleAttributeComposition(SchemaObject parent, AttributeComposition composition, BijectionMap<org.simantics.xml.sax.configuration.Attribute, Annotated> attributes) {\r
+ public void handleAttributeComposition(SchemaObject parent, AttributeComposition composition, BijectionMap<org.simantics.xml.sax.configuration.Attribute, Annotated> attributes) {\r
Attribute compositionAttribute = new Attribute();\r
compositionAttribute.setName(composition.getName());\r
- QName type = new QName(CONVERSION_NS, composition.getType());\r
+ QName type = new QName(SchemaConversionBase.CONVERSION_NS, composition.getType());\r
compositionAttribute.setType(type);\r
handle(parent, compositionAttribute);\r
}\r
\r
@Override\r
- protected void handleSimpleType(SchemaObject parent, SchemaObject simpleTypeObj) {\r
+ public void handleSimpleType(SchemaObject parent, SchemaObject simpleTypeObj) {\r
SimpleType simpleType = simpleTypeObj.getSimpleType();\r
String name = simpleType.getName();\r
\r
relationName = getName(parent)+".has"+name;\r
writer.println(relationName+ " <R XML.hasAttribute : L0.FunctionalRelation");\r
\r
- String ontType = getL0Type(new QName(SCHEMA_NS, "string"));\r
+ String ontType = base.getL0Type(new QName(SchemaConversionBase.SCHEMA_NS, "string"));\r
writer.println(" --> " + ontType);\r
} else {\r
- Restriction restriction = simpleType.getRestriction();\r
- if (restriction == null || simpleType.getUnion() != null || simpleType.getId() != null)\r
- throw new RuntimeException(simpleType.getName() + " restriction error");\r
- QName base = restriction.getBase();\r
- \r
String relationName = ontRoot+"has"+name;\r
if (parent != null)\r
relationName = getName(parent)+".has"+name;\r
\r
writer.println(relationName+ " <R XML.hasAttribute : L0.FunctionalRelation");\r
\r
- String ontType = getL0Type(base);\r
- writer.println(" --> " + ontType);\r
+ QName base = this.base.getSimpleTypeBase(simpleType);\r
+ Inheritance inheritance = new Inheritance("");\r
+ this.base.getAtomicTypeInheritance(base, inheritance);\r
+ if (inheritance.atomicType == null)\r
+ throw new RuntimeException("Could not locate atomic type for SimpleType " + simpleType.getName());\r
+ writer.println(" --> " + inheritance.atomicType.l0Type);\r
+ \r
+// Restriction restriction = simpleType.getRestriction();\r
+// if (restriction != null) {\r
+// \r
+// QName base = restriction.getBase();\r
+// String ontType = getL0Type(base);\r
+// writer.println(" --> " + ontType);\r
+// } else if (simpleType.getId() != null) {\r
+// throw new RuntimeException(simpleType.getName() + " restriction error");\r
+// } else if (simpleType.getUnion() != null) {\r
+// Union union = simpleType.getUnion();\r
+// String ontType = null;\r
+// if (union.getMemberTypes().size() > 0) {\r
+// for (QName type : union.getMemberTypes()) {\r
+// String sType = null;\r
+// TypeEntry entry = getTypeEntry(type);\r
+// if (entry == null) {\r
+// SchemaObject obj = simpleTypeName.get(type.getLocalPart());\r
+// Inheritance inheritance = new Inheritance("");\r
+// getAtomicTypeInheritance(type, obj, inheritance);\r
+// sType = inheritance.atomicType.l0Type;\r
+// } else {\r
+// sType = entry.l0Type;\r
+// }\r
+// if (ontType == null)\r
+// ontType = sType;\r
+// else if (!ontType.equals(sType))\r
+// throw new RuntimeException(simpleType.getName() + " union has incompatible member types");\r
+// }\r
+// } else {\r
+// if (union.getSimpleType().size() == 0)\r
+// throw new RuntimeException(simpleType.getName() + " union error");\r
+// for (SimpleType s : union.getSimpleType()) {\r
+// if (restriction == null)\r
+// restriction = s.getRestriction();\r
+// else {\r
+// Restriction r = s.getRestriction();\r
+// if (!r.getBase().equals(restriction.getBase()))\r
+// throw new RuntimeException(simpleType.getName() + " union has incompatible restriction bases");\r
+// }\r
+// }\r
+// QName base = restriction.getBase();\r
+// ontType = getL0Type(base);\r
+// }\r
+// writer.println(" --> " + ontType);\r
+// } else {\r
+// throw new RuntimeException(simpleType.getName() + " restriction error");\r
+// }\r
+ \r
}\r
}\r
\r
@Override\r
- protected void handleComplexType(SchemaObject topLevelComplexType) {\r
+ public void handleComplexType(SchemaObject topLevelComplexType) {\r
String name = getName(topLevelComplexType);\r
// if (topLevelComplexType.getName().equals("Reference"))\r
// System.out.println();\r
// if (base != null) {\r
// baseType = getType(base);\r
// }\r
- Inheritance inheritance = getInheritance(topLevelComplexType);\r
+ Inheritance inheritance = base.getInheritance(topLevelComplexType);\r
\r
// writer.println(name+ " <T "+baseType);\r
\r
}\r
// if (!baseType.equals(inheritance.baseClass))\r
// System.out.println();\r
- super.handleComplexType(topLevelComplexType);\r
+ //super.handleComplexType(topLevelComplexType);\r
+ base.handleComplexTypeAttributes(topLevelComplexType);\r
+ base.handleComplexTypeExtension(topLevelComplexType);\r
+ base.handleExtensionAttributes(topLevelComplexType);\r
writer.println();\r
}\r
\r
@Override\r
- protected void handleElement(SchemaObject elementObj) {\r
+ public void handleElement(SchemaObject elementObj) {\r
Element element = elementObj.getElement();\r
String name = getName(elementObj);//element.getName();\r
\r
if (element.getType() != null) {\r
types.add(getType(element.getType()));\r
}\r
- QName base = getElementBase(element);\r
+ QName base = this.base.getElementBase(element);\r
if (base != null) {\r
- if (base.getNamespaceURI().equals(SCHEMA_NS)) {\r
- String l0Type = getL0Type(base);\r
+ if (base.getNamespaceURI().equals(SchemaConversionBase.SCHEMA_NS)) {\r
+ String l0Type = this.base.getL0Type(base);\r
if (l0Type == null)\r
throw new RuntimeException("Cannot get L0 type for " + base.getLocalPart());\r
types.add(l0Type);\r
- } else if (isElementRef(base.getLocalPart()))\r
+ } else if (this.base.isElementRef(base.getLocalPart()))\r
types.add(ontRoot+base.getLocalPart());\r
else\r
types.add(ontRoot+getComplexTypePrefix()+base.getLocalPart());\r
}\r
QName substitution = element.getSubstitutionGroup();\r
if (substitution != null) {\r
- if (isElementRef(substitution.getLocalPart()))\r
+ if (this.base.isElementRef(substitution.getLocalPart()))\r
types.add(ontRoot+substitution.getLocalPart());\r
else\r
types.add( ontRoot+getComplexTypePrefix()+substitution.getLocalPart());\r
LocalSimpleType simpleType = element.getSimpleType();\r
\r
if (complexType != null) {\r
- SchemaObject complexTypeObj = complexTypes.get(complexType);\r
- handleElementComplexTypeAttributes(complexTypeObj);\r
- handleComplexTypeExtension(complexTypeObj);\r
+ SchemaObject complexTypeObj = this.base.complexTypes.get(complexType);\r
+ this.base.handleElementComplexTypeAttributes(complexTypeObj);\r
+ this.base.handleComplexTypeExtension(complexTypeObj);\r
} else if (simpleType != null) {\r
- SchemaObject simpleTypeObj = simpleTypes.get(simpleType);\r
- handleElementSimpleTypeAttributes(simpleTypeObj);\r
+ SchemaObject simpleTypeObj = this.base.simpleTypes.get(simpleType);\r
+ this.base.handleElementSimpleTypeAttributes(simpleTypeObj);\r
}\r
\r
- List<IDReference> references = getIDReferences(element);\r
+ List<IDReference> references = this.base.getIDReferences(element);\r
\r
for (IDReference ref : references) {\r
writer.println(name+"."+ref.getReference().getName()+ " <R XML.hasReference");\r
}\r
\r
@Override\r
- protected String getBaseClass(ObjectType type) {\r
+ public String getBaseClass(ObjectType type) {\r
if (type == ObjectType.ELEMENT)\r
return "XML.Element";\r
if (type == ObjectType.COMPLEX_TYPE)\r
throw new RuntimeException("ObjectType " + type + " has no base class");\r
}\r
\r
+ @Override\r
public String getName(SchemaObject obj) {\r
if (obj.getParent() == null) {\r
switch (obj.getType()) {\r