import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.util.ArrayDeque;
+import java.util.Deque;
+import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
writer.println();
writer.println();
+ Set<SchemaConverter> children = new HashSet<>();
+ Deque<SchemaConverter> stack = new ArrayDeque<>();
+ stack.addAll(converter.getSubConverters());
+ while (!stack.isEmpty()) {
+ SchemaConverter sc = stack.pop();
+ if (children.contains(sc))
+ continue;
+ children.add(sc);
+ stack.addAll(sc.getSubConverters());
+ }
+ children.remove(converter);
+ for (SchemaConverter sc : children) {
+ writer.println(sc.shortName + " = <" + sc.ontologyUri +">");
+ }
+
+ writer.println();
+
ontRoot += ".";
writer.println(ontRoot+"SimpleTypes : L0.Library");
writer.println(ontRoot+"ComplexTypes : L0.Library");
writer.println();
writer.println(commentTag + " Interpreted from schema");
writer.println();
+
+
base.handle(this);
}
writer.println();
if (!single) {
- String elementListType = getName(parent) + "." + name + "List";
+ String elementListType = getName(parent) + "." + name + "_List";
writer.println(elementListType + " <T XML.ElementList");
- writer.println(relationName + "List <R XML.hasElementList : L0.FunctionalRelation");
+ writer.println(relationName + "_List <R XML.hasElementList : L0.FunctionalRelation");
writer.println(" --> " + elementListType);
}
} else {
referenceType = element.getElement().getRef();
if (refName == null)
- refName = referenceType.getLocalPart();
+ refName = base.getName(referenceType);
}
String type = base.getL0TypeFromPrimitiveType(referenceType);
SchemaObject obj = null;
if (type == null) {
writer.println(getName(parent)+"."+refName + "List <T XML.ElementList");
- writer.println(getName(parent)+".has"+refName + "List <R " + getName(obj,"has")+"List : L0.FunctionalRelation");
+ writer.println(getName(parent)+".has"+refName + "_List <R " + getName(obj,"has")+"_List : L0.FunctionalRelation");
} else {
- writer.println(getName(parent)+"."+refName + "List <T XML.ElementList");
- writer.println(getName(parent)+".has"+refName + "List <R XML.hasElementList : L0.FunctionalRelation");
+ writer.println(getName(parent)+"."+refName + "_List <T XML.ElementList");
+ writer.println(getName(parent)+".has"+refName + "_List <R XML.hasElementList : L0.FunctionalRelation");
}
}
} else {
writer.println();
writer.println(" --> " + getName(obj));
if (base.useElementList(parent, indicator,element, false, refName, new QName(obj.getName()))) {
- writer.println(getName(parent)+"."+refName + "List <T XML.ElementList");
- writer.println(getName(parent)+".has"+refName + "List <R " + getName(obj,"has")+"List : L0.FunctionalRelation");
+ writer.println(getName(parent)+"."+refName + "_List <T XML.ElementList");
+ writer.println(getName(parent)+".has"+refName + "_List <R " + getName(obj,"has")+"_List : L0.FunctionalRelation");
}
}
@Override
public void handle(SchemaObject parent, Attribute attribute) {
- String name = attribute.getName();
+ String name = base.getName(attribute);
QName primitiveType = attribute.getType();
LocalSimpleType simpleType = attribute.getSimpleType();
QName ref = attribute.getRef();
relationType = "XML.hasAttribute";
}
else if (ref != null && parent != null) {
- relationName = getName(parent)+".has"+ref.getLocalPart();
- relationType = ontRoot+"has"+ref.getLocalPart();
+ relationName = getName(parent)+".has"+base.getName(ref);
+ relationType = converter.getShortName(ref.getNamespaceURI())+".has"+base.getName(ref);
} else {
throw new RuntimeException();
}
if (parent == null) {
NamedAttributeGroup group = (NamedAttributeGroup)attributeGroup;
writer.println(ontRoot+getAttributeGroupPrefix()+group.getName()+ " <T XML.AttributeGroup");
- SchemaObject obj = new SchemaObject(parent,attributeGroup);
+ SchemaObject obj = new SchemaObject(base,parent,attributeGroup);
for (Annotated annotated : group.getAttributeOrAttributeGroup()) {
if (annotated instanceof Attribute) {
//handle(getAttributeGroupPrefix()+group.getName(),(Attribute)annotated);
}
}
} else {
- writer.println(getName(parent) +" L0.Inherits " + ontRoot + getAttributeGroupPrefix() + attributeGroup.getRef().getLocalPart());
+ writer.println(getName(parent) +" L0.Inherits " + ontRoot + getAttributeGroupPrefix() + base.getName(attributeGroup.getRef()));
}
}
// writer.println(name+ " <T "+baseType);
// Type definition
+ if (inheritance.additionalClass != null) {
+ writer.println(name+ " <T " + inheritance.baseClass + " <T " + inheritance.additionalClass);
+ } else if (inheritance.atomicType != null){
+ writer.println(name+ " <T " + inheritance.baseClass + " <T " + inheritance.atomicType.l0Type);
+ } else {
writer.println(name+ " <T " + inheritance.baseClass);
- writer.println(name + "List <T XML.ElementList");
+ }
+ writer.println(name + "_List <T XML.ElementList");
// Access relations
String relationName = getName(topLevelComplexType,"has");
writer.println(relationName+ " <R XML.hasComplexType");
writer.println(" --> " + name);
- writer.println(relationName+ "List <R XML.hasElementList");
- writer.println(" --> " + name + "List");
+ writer.println(relationName+ "_List <R XML.hasElementList");
+ writer.println(" --> " + name + "_List");
writer.println();
// Attributes
Element element = elementObj.getElement();
String name = getName(elementObj);//element.getName();
- if ("Text".equals(name))
+ if (name.contains("Canvas"))
System.out.println();
String type = "XML.Element";
throw new RuntimeException("Cannot get L0 type for " + base.getLocalPart());
types.add(l0Type);
} else if (this.base.isElementRef(base.getLocalPart()))
- types.add(ontRoot+base.getLocalPart());
+ types.add(ontRoot+this.base.getName(base));
else
- types.add(ontRoot+getComplexTypePrefix()+base.getLocalPart());
+ types.add(ontRoot+getComplexTypePrefix()+this.base.getName(base));
}
QName substitution = element.getSubstitutionGroup();
if (substitution != null) {
if (this.base.isElementRef(substitution.getLocalPart()))
- types.add(ontRoot+substitution.getLocalPart());
+ types.add(ontRoot+this.base.getName(substitution));
else
- types.add( ontRoot+getComplexTypePrefix()+substitution.getLocalPart());
+ types.add( ontRoot+getComplexTypePrefix()+this.base.getName(substitution));
}
for (String t : types) {
type += " <T " + t;
// relationName = ontRoot+getName(elementObj.getParent()) + "has"+element.getName();
// }
writer.println(relationName+ " <R XML.hasElement");
- writer.println(relationName+ "List <R XML.hasElementList");
+ writer.println(relationName+ "_List <R XML.hasElementList");
writer.println(name+ " <T "+type);
throw new RuntimeException("ObjectType " + type + " has no base class");
}
+
@Override
public String getName(SchemaObject obj) {
if (obj.getParent() == null) {
switch (obj.getType()) {
case COMPLEX_TYPE:
- return ontRoot+getComplexTypePrefix()+obj.getName();
+ //return ontRoot+getComplexTypePrefix()+obj.getName();
+ return obj.getLibShortName()+"."+getComplexTypePrefix()+obj.getName();
case ELEMENT:
- return ontRoot+obj.getName();
+ //return ontRoot+obj.getName();
+ return obj.getLibShortName()+"."+obj.getName();
case ATTRIBUTE_GROUP:
- return ontRoot+getAttributeGroupPrefix()+obj.getName();
+ //return ontRoot+getAttributeGroupPrefix()+obj.getName();
+ return obj.getLibShortName()+"."+getAttributeGroupPrefix()+obj.getName();
case SIMPLE_TYPE:
- return ontRoot+getSimpleTypePrefix()+obj.getName();
+ //return ontRoot+getSimpleTypePrefix()+obj.getName();
+ return obj.getLibShortName()+"."+getSimpleTypePrefix()+obj.getName();
}
} else {
SchemaObject o = obj;
name = name.substring(0, name.length()-1);
switch (prev.getType()) {
case COMPLEX_TYPE:
- return ontRoot+getComplexTypePrefix()+name;
+ //return ontRoot+getComplexTypePrefix()+name;
+ return obj.getLibShortName()+"."+getComplexTypePrefix()+name;
case ELEMENT:
- return ontRoot+name;
+ //return ontRoot+name;
+ return obj.getLibShortName()+"."+name;
case ATTRIBUTE_GROUP:
- return ontRoot+getAttributeGroupPrefix()+name;
+ //return ontRoot+getAttributeGroupPrefix()+name;
+ return obj.getLibShortName()+"."+getAttributeGroupPrefix()+name;
case SIMPLE_TYPE:
- return ontRoot+getSimpleTypePrefix()+name;
+ //return ontRoot+getSimpleTypePrefix()+name;
+ return obj.getLibShortName()+"."+getSimpleTypePrefix()+name;
}
}
throw new RuntimeException();
public String getName(SchemaObject parent, SchemaElement e, String rel) {
QName ref = e.getElement().getRef();
if (ref != null) {
- return converter.getShortName(ref.getNamespaceURI()) + rel + ref.getLocalPart();
+ return converter.getShortName(ref.getNamespaceURI()) + rel + base.getName(ref);
}
else {
return getName(parent, "") + "." + rel + e.getElement().getName();
if (obj.getParent() == null) {
switch (obj.getType()) {
case COMPLEX_TYPE:
- return ontRoot+getComplexTypePrefix()+rel+obj.getName();
+ return obj.getLibShortName()+"."+getComplexTypePrefix()+rel+obj.getName();
case ELEMENT:
- return ontRoot+rel+obj.getName();
+ return obj.getLibShortName()+"."+rel+obj.getName();
case ATTRIBUTE_GROUP:
- return ontRoot+getAttributeGroupPrefix()+rel+obj.getName();
+ return obj.getLibShortName()+"."+getAttributeGroupPrefix()+rel+obj.getName();
case SIMPLE_TYPE:
- return ontRoot+getSimpleTypePrefix()+rel+obj.getName();
+ return obj.getLibShortName()+"."+getSimpleTypePrefix()+rel+obj.getName();
+ case ATTRIBUTE:
+ return obj.getLibShortName()+"."+rel+obj.getName();
}
} else {
SchemaObject o = obj;
name = name.substring(0, name.length()-1);
switch (prev.getType()) {
case COMPLEX_TYPE:
- return ontRoot+getComplexTypePrefix()+rel+name;
+ return obj.getLibShortName()+"."+getComplexTypePrefix()+rel+name;
case ELEMENT:
- return ontRoot+rel+name;
+ return obj.getLibShortName()+"."+rel+name;
case ATTRIBUTE_GROUP:
- return ontRoot+getAttributeGroupPrefix()+rel+name;
+ return obj.getLibShortName()+"."+getAttributeGroupPrefix()+rel+name;
case SIMPLE_TYPE:
- return ontRoot+getSimpleTypePrefix()+rel+name;
+ return obj.getLibShortName()+"."+getSimpleTypePrefix()+rel+name;
+ case ATTRIBUTE:
+ return obj.getLibShortName()+"."+rel+obj.getName();
}
}
throw new RuntimeException();