import javax.xml.namespace.QName;\r
\r
import org.simantics.utils.datastructures.BijectionMap;\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.LocalComplexType;\r
import org.w3._2001.xmlschema.LocalSimpleType;\r
import org.w3._2001.xmlschema.NamedAttributeGroup;\r
-import org.w3._2001.xmlschema.OpenAttrs;\r
import org.w3._2001.xmlschema.Restriction;\r
import org.w3._2001.xmlschema.Schema;\r
import org.w3._2001.xmlschema.SimpleType;\r
String commentTag = "//";\r
\r
Schema schema;\r
- \r
+ String ontologyUri;\r
String className;\r
\r
SchemaConverter converter;\r
\r
PrintWriter writer = null;\r
\r
- public String getClassName() {\r
- return className;\r
- }\r
\r
- public void createOntology(Schema schema, SchemaConverter converter) throws FileNotFoundException {\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
}\r
\r
protected void handle(Schema schema) {\r
- String ontologyName = schema.getTargetNamespace();\r
- if (ontologyName == null) {\r
- ontologyName = converter.getSchemaFile().getName();\r
- \r
- int index = ontologyName.lastIndexOf(".");\r
- if (index > 0)\r
- ontologyName = ontologyName.substring(0, index);\r
- } \r
- if (!ontologyName.startsWith("http"))\r
- ontologyName = "http://" + ontologyName;\r
- String parts[] = ontologyName.split("/");\r
+ String parts[] = ontologyUri.split("/");\r
String name = parts[parts.length-1];\r
ontRoot = name.substring(0, Math.min(3, name.length())).toUpperCase();\r
- String version = schema.getVersion();\r
- if (version == null)\r
- version = "1.0";\r
- \r
- name = name.replaceAll("\\.", "_");\r
- className = converter.getPluginName() + "." + name;\r
- \r
+\r
for (String s : converter.getHeader()) {\r
writer.println(commentTag + " " + s); \r
}\r
writer.println();\r
writer.println("L0 = <http://www.simantics.org/Layer0-1.1>");\r
+ writer.println("XML = <http://www.simantics.org/XML-1.0>");\r
writer.println();\r
- writer.println(ontRoot + " = <" + ontologyName +"-"+ version+"> : L0.Ontology");\r
+ writer.println(ontRoot + " = <" + ontologyUri +"> : L0.Ontology");\r
writer.println(" @L0.new");\r
writer.println(" L0.HasResourceClass \"" + className +"\"");\r
writer.println();\r
writer.println();\r
\r
ontRoot += ".";\r
- // TODO : these could be created in separate base ontology.\r
- writer.println(commentTag + " Built-in types");\r
- writer.println();\r
- writer.println(ontRoot+"XML : L0.Library");\r
- writer.println(ontRoot+"XML.hasAttribute <R L0.HasProperty");\r
- writer.println(ontRoot+"XML.hasID <R "+ontRoot+"XML.hasAttribute : L0.FunctionalRelation");\r
- writer.println(" --> L0.String");\r
- writer.println(ontRoot+"XML.ComplexType <T L0.Entity");\r
- writer.println(ontRoot+"XML.hasComplexType <R L0.IsComposedOf");\r
- writer.println(ontRoot+"XML.AttributeGroup <T L0.Entity");\r
- writer.println(ontRoot+"XML.Element <T L0.Entity");\r
- writer.println(ontRoot+"XML.hasElement <R L0.IsComposedOf");\r
- writer.println(ontRoot+"XML.ElementList <T L0.List");\r
- writer.println(ontRoot+"XML.hasElementList <R L0.IsComposedOf");\r
- writer.println(ontRoot+"XML.hasOriginalElementList <R " + ontRoot+"XML.hasElementList");\r
- writer.println(ontRoot+"XML.hasReference <R L0.IsRelatedTo");\r
- writer.println(ontRoot+"XML.hasExternalReference <R L0.IsRelatedTo");\r
- writer.println(" L0.InverseOf " + ontRoot+"XML.externalReferenceOf <R L0.IsRelatedTo");\r
- writer.println();\r
writer.println(ontRoot+"ComplexTypes : L0.Library");\r
writer.println(ontRoot+"AttributeGroups : L0.Library");\r
writer.println();\r
return ontType;\r
else if (isComplexTypeRef(qtype.getLocalPart()))\r
return ontRoot+getComplexTypePrefix()+qtype.getLocalPart();\r
+ else if (isSimpleTypeRef(qtype.getLocalPart()))\r
+ return ontRoot+qtype.getLocalPart();\r
else if (isElementRef(qtype.getLocalPart()))\r
return ontRoot+qtype.getLocalPart();\r
else if (qtype.getPrefix() != null && qtype.getPrefix().length() > 0) {\r
}\r
\r
\r
- public static String getComplexTypePrefix() {\r
+ public String getComplexTypePrefix() {\r
return "ComplexTypes.";\r
}\r
\r
- public static String getAttributeGroupPrefix() {\r
+ public String getAttributeGroupPrefix() {\r
return "AttributeGroups.";\r
}\r
\r
break;\r
}\r
}\r
- String relationName = ontRoot+getName(parent)+".has"+name;\r
+ String relationName = getName(parent)+".has"+name;\r
writer.print(relationName);\r
\r
List<String> types = new ArrayList<String>();\r
}\r
if (type == null) {\r
SchemaObject obj = getWithName(parent, refType.getLocalPart());\r
- types.add(ontRoot+getName(obj,"has"));\r
+ types.add(getName(obj,"has"));\r
} \r
}\r
if (types.size() > 0) {\r
writer.print(" <R " + type);\r
}\r
} else {\r
- writer.print(" <R " + ontRoot+"XML.hasElement");\r
+ writer.print(" <R XML.hasElement");\r
}\r
\r
writer.println();\r
}\r
}\r
if (!single) {\r
- writer.println(ontRoot+name+ "List <T "+ontRoot+"XML.ElementList");\r
+ writer.println(ontRoot+name+ "List <T XML.ElementList");\r
if (types.size() == 0) {\r
- writer.println(relationName+ "List <R "+ontRoot+"XML.hasElementList : L0.FunctionalRelation");\r
+ writer.println(relationName+ "List <R XML.hasElementList : L0.FunctionalRelation");\r
} else {\r
writer.print(relationName+ "List");\r
for (String type : types) {\r
\r
\r
@Override\r
- protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, boolean reference, String refName, QName refType) {\r
- String type = getL0TypeFromPrimitiveType(refType);\r
- SchemaObject obj = null;\r
- if (type == null) {\r
- obj = getWithName(parent, refType.getLocalPart());\r
+ protected 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
+ if (refName == null)\r
+ refName = eObj.getName();\r
+ } else {\r
+ referenceType = element.getElement().getRef();\r
+ if (refName == null)\r
+ refName = referenceType.getLocalPart();\r
+ }\r
+ String type = getL0TypeFromPrimitiveType(referenceType);\r
+ SchemaObject obj = null;\r
+ if (type == null) {\r
+ obj = getWithName(parent, referenceType.getLocalPart());\r
+ \r
+ writer.println(getName(parent)+".has"+refName + " <R " + getName(obj,"has"));\r
+ writer.println(" --> " + getName(obj));\r
+ } else {\r
+ writer.println(getName(parent)+".has"+refName + " <R XML.hasElement");\r
+ writer.println(" --> " + getType(referenceType));\r
+ }\r
\r
- writer.println(ontRoot+getName(parent)+".has"+refName + " <R " + ontRoot+ getName(obj,"has"));\r
- writer.println(" --> " + ontRoot+getName(obj));\r
+ if (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
+ writer.println(getName(parent)+".has"+refName + "List <R " + getName(obj,"has")+"List : L0.FunctionalRelation");\r
+ } else {\r
+ writer.println(getName(parent)+"."+refName + "List <T XML.ElementList");\r
+ writer.println(getName(parent)+".has"+refName + "List <R XML.hasElementList : L0.FunctionalRelation"); \r
+ }\r
+ }\r
} else {\r
- writer.println(ontRoot+getName(parent)+".has"+refName + " <R " + ontRoot+"XML.hasElement");\r
- writer.println(" --> " + getType(refType));\r
- }\r
- \r
- if (useElementList(parent, indicator,element, reference, refName, refType)) {\r
+ Element attrs = element.getElement();\r
+ SchemaObject obj = getWithObj(parent, attrs);\r
+ if (refName == null)\r
+ refName = obj.getName();\r
\r
- if (type == null) {\r
- writer.println(ontRoot+getName(parent)+"."+refName + "List <T " + ontRoot+"XML.ElementList");\r
- writer.println(ontRoot+getName(parent)+".has"+refName + "List <R " + ontRoot+getName(obj,"has")+"List : L0.FunctionalRelation");\r
- } else {\r
- writer.println(ontRoot+getName(parent)+"."+refName + "List <T " + ontRoot+"XML.ElementList");\r
- writer.println(ontRoot+getName(parent)+".has"+refName + "List <R " + ontRoot+"XML.hasElementList : L0.FunctionalRelation"); \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
+ 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
- protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, boolean reference, String refName, OpenAttrs attrs) {\r
- SchemaObject obj = getWithObj(parent, attrs);\r
- writer.println(ontRoot+getName(parent)+".has"+refName + " <R " + ontRoot+ getName(obj,"has"));\r
- writer.println(" --> " + ontRoot+getName(obj));\r
- if (useElementList(parent, indicator,element, reference, refName, new QName(obj.getName()))) {\r
- writer.println(ontRoot+getName(parent)+"."+refName + "List <T " + ontRoot+"XML.ElementList");\r
- writer.println(ontRoot+getName(parent)+".has"+refName + "List <R " + ontRoot+getName(obj,"has")+"List : L0.FunctionalRelation");\r
- }\r
+ \r
}\r
\r
@Override\r
if (name != null) {\r
relationName = ontRoot+"has"+name;\r
if (parent != null)\r
- relationName = ontRoot+getName(parent)+".has"+name;\r
- relationType = ontRoot+"XML.hasAttribute";\r
+ relationName = getName(parent)+".has"+name;\r
+ relationType = "XML.hasAttribute";\r
}\r
else if (ref != null && parent != null) {\r
- relationName = ontRoot+getName(parent)+".has"+ref.getLocalPart();\r
+ relationName = getName(parent)+".has"+ref.getLocalPart();\r
relationType = ontRoot+"has"+ref.getLocalPart();\r
} else {\r
throw new RuntimeException();\r
if (ontType != null) {\r
id = getTypeEntry(primitiveType).id;\r
if (id)\r
- relationType = ontRoot+"XML.hasID";\r
+ relationType = "XML.hasID";\r
} else {\r
\r
}\r
protected void handle(SchemaObject parent, AttributeGroup attributeGroup) {\r
if (parent == null) {\r
NamedAttributeGroup group = (NamedAttributeGroup)attributeGroup;\r
- writer.println(ontRoot+getAttributeGroupPrefix()+group.getName()+ " <T " + ontRoot +"XML.AttributeGroup");\r
+ writer.println(ontRoot+getAttributeGroupPrefix()+group.getName()+ " <T XML.AttributeGroup");\r
SchemaObject obj = new SchemaObject(parent,attributeGroup);\r
for (Annotated annotated : group.getAttributeOrAttributeGroup()) {\r
if (annotated instanceof Attribute) {\r
}\r
}\r
} else {\r
- writer.println(ontRoot+getName(parent) +" L0.Inherits " + ontRoot + getAttributeGroupPrefix() + attributeGroup.getRef().getLocalPart());\r
+ writer.println(getName(parent) +" L0.Inherits " + ontRoot + getAttributeGroupPrefix() + attributeGroup.getRef().getLocalPart());\r
}\r
\r
}\r
protected void handleSimpleType(SchemaObject parent, SchemaObject simpleTypeObj) {\r
SimpleType simpleType = simpleTypeObj.getSimpleType();\r
String name = simpleType.getName();\r
- Restriction restriction = simpleType.getRestriction();\r
- if (restriction == null || simpleType.getUnion() != null || simpleType.getId() != null)\r
- throw new RuntimeException();\r
- QName base = restriction.getBase();\r
\r
- String relationName = ontRoot+"has"+name;\r
- if (parent != null)\r
- relationName = ontRoot+getName(parent)+".has"+name;\r
- \r
- writer.println(relationName+ " <R "+ontRoot+"XML.hasAttribute : L0.FunctionalRelation");\r
- \r
- String ontType = getL0Type(base);\r
- writer.println(" --> " + ontType);\r
+ org.w3._2001.xmlschema.List list = simpleType.getList();\r
+ if (list != null) {\r
+ // TODO : process restriction in lists\r
+ String relationName = ontRoot+"has"+name;\r
+ if (parent != null)\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
+ 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
+ }\r
}\r
\r
@Override\r
protected void handleComplexType(SchemaObject topLevelComplexType) {\r
String name = getName(topLevelComplexType);\r
- if (name.contains("Pcurve"))\r
- System.out.println();\r
-// if (parent != null)\r
-// name = parent +"_"+name;\r
+// if (topLevelComplexType.getName().equals("Reference"))\r
+// System.out.println();\r
\r
- String relationName = ontRoot+getName(topLevelComplexType,"has");//ontRoot+"has"+name;\r
+ String relationName = getName(topLevelComplexType,"has");//ontRoot+"has"+name;\r
\r
- writer.println(relationName+ " <R "+ontRoot+"XML.hasComplexType");\r
- writer.println(relationName+ "List <R "+ontRoot+"XML.hasElementList");\r
+ writer.println(relationName+ " <R XML.hasComplexType");\r
+ writer.println(relationName+ "List <R XML.hasElementList");\r
//writer.println(" --> " + ontRoot+getComplexTypePrefix()+name);\r
- writer.println(" --> " + ontRoot+name);\r
+ writer.println(" --> " + name);\r
writer.println();\r
- String baseType = ontRoot+"XML.ComplexType";\r
-\r
- QName base = getComplexTypeBase(topLevelComplexType.getComplexType());\r
- if (base != null) {\r
- baseType = getType(base);\r
- }\r
- base = getSimpleTypeBase(topLevelComplexType.getSimpleType());\r
- if (base != null) {\r
- baseType = getType(base);\r
+// String baseType = "XML.ComplexType";\r
+//\r
+// QName base = getComplexTypeBase(topLevelComplexType.getComplexType());\r
+// if (base != null) {\r
+// baseType = getType(base);\r
+// }\r
+// base = getSimpleTypeBase(topLevelComplexType.getSimpleType());\r
+// if (base != null) {\r
+// baseType = getType(base);\r
+// }\r
+ Inheritance inheritance = getInheritance(topLevelComplexType);\r
+ \r
+// writer.println(name+ " <T "+baseType);\r
+ \r
+ if(inheritance.type == InheritanceType.AtomicType) {\r
+ writer.println(name+ " <T "+inheritance.baseClass + " <T "+inheritance.atomicType.l0Type);\r
+ } else {\r
+ writer.println(name+ " <T "+inheritance.baseClass);\r
}\r
- //writer.println(ontRoot+getComplexTypePrefix()+name+ " <T "+baseType);\r
- writer.println(ontRoot+name+ " <T "+baseType);\r
+// if (!baseType.equals(inheritance.baseClass))\r
+// System.out.println();\r
super.handleComplexType(topLevelComplexType);\r
writer.println();\r
}\r
protected void handleElement(SchemaObject elementObj) {\r
Element element = elementObj.getElement();\r
String name = getName(elementObj);//element.getName();\r
-\r
-// if (parent != null)\r
-// name = parent +"_"+name;\r
\r
- String type = ontRoot+"XML.Element";\r
+ if ("Text".equals(name))\r
+ System.out.println();\r
+ \r
+ String type = "XML.Element";\r
Set<String> types = new LinkedHashSet<String>();\r
if (element.getType() != null) {\r
types.add(getType(element.getType()));\r
type += " <T " + t;\r
}\r
\r
- String relationName = ontRoot+getName(elementObj,"has");//ontRoot+"has"+name;\r
+ String relationName = getName(elementObj,"has");//ontRoot+"has"+name;\r
// if (elementObj.getParent() != null) {\r
// //relationName = ontRoot+getComplexTypePrefix()+"has"+name.substring(getComplexTypePrefix().length());\r
// relationName = ontRoot+getName(elementObj.getParent()) + "has"+element.getName();\r
// }\r
- writer.println(relationName+ " <R "+ontRoot+"XML.hasElement");\r
- writer.println(relationName+ "List <R "+ontRoot+"XML.hasElementList");\r
+ writer.println(relationName+ " <R XML.hasElement");\r
+ writer.println(relationName+ "List <R XML.hasElementList");\r
\r
- writer.println(ontRoot+name+ " <T "+type);\r
+ writer.println(name+ " <T "+type);\r
\r
LocalComplexType complexType = element.getComplexType();\r
LocalSimpleType simpleType = element.getSimpleType();\r
List<IDReference> references = getIDReferences(element);\r
\r
for (IDReference ref : references) {\r
- writer.println(ontRoot+name+"."+ref.getReference().getName()+ " <R " +ontRoot+"XML.hasReference");\r
+ writer.println(name+"."+ref.getReference().getName()+ " <R XML.hasReference");\r
}\r
\r
writer.println();\r
}\r
\r
- public static String getName(SchemaObject obj) {\r
+ @Override\r
+ protected String getBaseClass(ObjectType type) {\r
+ if (type == ObjectType.ELEMENT)\r
+ return "XML.Element";\r
+ if (type == ObjectType.COMPLEX_TYPE)\r
+ return "XML.ComplexType";\r
+ throw new RuntimeException("ObjectType " + type + " has no base class");\r
+ }\r
+ \r
+ public String getName(SchemaObject obj) {\r
if (obj.getParent() == null) {\r
switch (obj.getType()) {\r
case COMPLEX_TYPE:\r
- return getComplexTypePrefix()+obj.getName();\r
+ return ontRoot+getComplexTypePrefix()+obj.getName();\r
case ELEMENT:\r
- return obj.getName();\r
+ return ontRoot+obj.getName();\r
case ATTRIBUTE_GROUP:\r
- return getAttributeGroupPrefix()+obj.getName();\r
+ return ontRoot+getAttributeGroupPrefix()+obj.getName();\r
case SIMPLE_TYPE:\r
- return obj.getName();\r
+ return ontRoot+obj.getName();\r
}\r
} else {\r
SchemaObject o = obj;\r
name = name.substring(0, name.length()-1);\r
switch (prev.getType()) {\r
case COMPLEX_TYPE:\r
- return getComplexTypePrefix()+name;\r
+ return ontRoot+getComplexTypePrefix()+name;\r
case ELEMENT:\r
- return name;\r
+ return ontRoot+name;\r
case ATTRIBUTE_GROUP:\r
- return getAttributeGroupPrefix()+name;\r
+ return ontRoot+getAttributeGroupPrefix()+name;\r
case SIMPLE_TYPE:\r
- return name;\r
+ return ontRoot+name;\r
}\r
}\r
throw new RuntimeException();\r
\r
}\r
\r
- public static String getName(SchemaObject obj, String rel) {\r
+ public String getName(SchemaObject obj, String rel) {\r
if (obj.getParent() == null) {\r
switch (obj.getType()) {\r
case COMPLEX_TYPE:\r
- return getComplexTypePrefix()+rel+obj.getName();\r
+ return ontRoot+getComplexTypePrefix()+rel+obj.getName();\r
case ELEMENT:\r
- return rel+obj.getName();\r
+ return ontRoot+rel+obj.getName();\r
case ATTRIBUTE_GROUP:\r
- return getAttributeGroupPrefix()+rel+obj.getName();\r
+ return ontRoot+getAttributeGroupPrefix()+rel+obj.getName();\r
case SIMPLE_TYPE:\r
- return rel+obj.getName();\r
+ return ontRoot+rel+obj.getName();\r
}\r
} else {\r
SchemaObject o = obj;\r
name = name.substring(0, name.length()-1);\r
switch (prev.getType()) {\r
case COMPLEX_TYPE:\r
- return getComplexTypePrefix()+rel+name;\r
+ return ontRoot+getComplexTypePrefix()+rel+name;\r
case ELEMENT:\r
- return rel+name;\r
+ return ontRoot+rel+name;\r
case ATTRIBUTE_GROUP:\r
- return getAttributeGroupPrefix()+rel+name;\r
+ return ontRoot+getAttributeGroupPrefix()+rel+name;\r
case SIMPLE_TYPE:\r
- return rel+name;\r
+ return ontRoot+rel+name;\r
}\r
}\r
throw new RuntimeException();\r