mlhim-specs-dev team mailing list archive
-
mlhim-specs-dev team
-
Mailing list archive
-
Message #00733
[Branch ~cdd-dev/cdd/trunk] Rev 259: Added a test template and working on the code generator for CCD schemas.
------------------------------------------------------------
revno: 259
committer: Timothy W. Cook <timothywayne.cook@xxxxxxxxx>
branch nick: cdd
timestamp: Mon 2012-09-17 21:49:33 -0300
message:
Added a test template and working on the code generator for CCD schemas.
removed:
src/xls2ccd/examples/MLHIM_Std_Template/.~lock.MLHIM_Std_Template-xls2ccd.xls#
added:
src/xls2ccd/examples/TestTemplate/
src/xls2ccd/examples/TestTemplate/MLHIM_Std_Template-Tests.xls
modified:
src/xls2ccd/examples/MLHIM_Std_Template/MLHIM_Std_Template-xls2ccd.xls
src/xls2ccd/mlhim2RM.py
src/xls2ccd/xls2ccd.py
--
lp:cdd
https://code.launchpad.net/~cdd-dev/cdd/trunk
Your team MLHIM Specifications Developers is subscribed to branch lp:cdd.
To unsubscribe from this branch go to https://code.launchpad.net/~cdd-dev/cdd/trunk/+edit-subscription
=== removed file 'src/xls2ccd/examples/MLHIM_Std_Template/.~lock.MLHIM_Std_Template-xls2ccd.xls#'
--- src/xls2ccd/examples/MLHIM_Std_Template/.~lock.MLHIM_Std_Template-xls2ccd.xls# 2012-09-15 22:10:45 +0000
+++ src/xls2ccd/examples/MLHIM_Std_Template/.~lock.MLHIM_Std_Template-xls2ccd.xls# 1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
-Tim Cook,tim,tim-Inspiron-1525,15.09.2012 18:17,file:///home/tim/.config/libreoffice/3;
\ No newline at end of file
=== modified file 'src/xls2ccd/examples/MLHIM_Std_Template/MLHIM_Std_Template-xls2ccd.xls'
Binary files src/xls2ccd/examples/MLHIM_Std_Template/MLHIM_Std_Template-xls2ccd.xls 2012-09-15 22:10:45 +0000 and src/xls2ccd/examples/MLHIM_Std_Template/MLHIM_Std_Template-xls2ccd.xls 2012-09-18 00:49:33 +0000 differ
=== added directory 'src/xls2ccd/examples/TestTemplate'
=== added file 'src/xls2ccd/examples/TestTemplate/MLHIM_Std_Template-Tests.xls'
Binary files src/xls2ccd/examples/TestTemplate/MLHIM_Std_Template-Tests.xls 1970-01-01 00:00:00 +0000 and src/xls2ccd/examples/TestTemplate/MLHIM_Std_Template-Tests.xls 2012-09-18 00:49:33 +0000 differ
=== modified file 'src/xls2ccd/mlhim2RM.py'
--- src/xls2ccd/mlhim2RM.py 2012-09-15 22:10:45 +0000
+++ src/xls2ccd/mlhim2RM.py 2012-09-18 00:49:33 +0000
@@ -190,5 +190,315 @@
elements["workflow-id"] = ["unbounded","0","xs:string","","",[],"docs"]
return (complexTypes,elements)
-
+#====================================================================
+
+def getDvCodedStringType(data_name, ct_name, docs, indent,ta,tn,tv,tc,cs):
+ """
+ data_name - string to use for data_name
+ ct_name - uuid string for complexType.name
+ docs - string for documentation
+ indent - number of spaces to indent first line
+ ta - list of terminology abbreviated names
+ tn - list of terminology names
+ tv - list of terminology versions
+ tc - list of terminology codes
+ cs - list of code strings
+
+ An implementation typically only exposes the code string (enumerations for DvString-dv). It then associates the same index position for each of the other elements. We use 'cs' to set the length of all the lists just in case they are different lengths. If 'cs' is longer than one of the others then an exception will be raised and the CCD will not be completed.
+ """
+ if not indent: indent = 0
+
+ padding = (' ').rjust(indent)
+
+ dt_str = '\n\n'+padding.rjust(indent) + ("<xs:complexType name='ct-"+ct_name+"'>\n")
+ dt_str += padding.rjust(indent+2) + ("<xs:complexContent>\n")
+ dt_str += padding.rjust(indent+4) + ("<xs:restriction base='mlhim2:DvCodedStringType'>\n")
+ dt_str += padding.rjust(indent+6) + ("<xs:sequence>\n")
+ #DvAny
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='data-name' type='xs:string' fixed='"+data_name+"'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' ref='mlhim2:ExceptionalValue'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-time-begin' type='xs:dateTime'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-time-end' type='xs:dateTime'/>\n")
+ #DvCodedString
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='DvString-dv'>\n")
+
+ dt_str += padding.rjust(indent+10) + ("<xs:annotation>\n")
+ dt_str += padding.rjust(indent+12) + ("<xs:documentation>\n")
+ dt_str += padding.rjust(indent+12) + (docs + "\n")
+ dt_str += padding.rjust(indent+12) + ("</xs:documentation>\n")
+ dt_str += padding.rjust(indent+10) + ("</xs:annotation>\n")
+
+ dt_str += padding.rjust(indent+10) + ("<xs:simpleType>\n")
+ dt_str += padding.rjust(indent+12) + ("<xs:restriction base='xs:string'>\n")
+ for n in range(len(cs)):
+ dt_str += padding.rjust(indent+14) + ("<xs:enumeration value='"+cs[0]+"'/>\n")
+
+ dt_str += padding.rjust(indent+12) + ("</xs:restriction>\n")
+ dt_str += padding.rjust(indent+10) + ("</xs:simpleType>\n")
+
+ dt_str += padding.rjust(indent+8) + ("</xs:element>\n")
+
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='terminology-abbrev'>\n")
+ dt_str += padding.rjust(indent+10) + ("<xs:simpleType>\n")
+ dt_str += padding.rjust(indent+12) + ("<xs:restriction base='xs:string'>\n")
+ for n in range(0,len(cs)):
+ dt_str += padding.rjust(indent+14) + ("<xs:enumeration value='"+ta[n]+"'/>\n")
+ dt_str += padding.rjust(indent+12) + ("</xs:restriction>\n")
+ dt_str += padding.rjust(indent+10) + ("</xs:simpleType>\n")
+ dt_str += padding.rjust(indent+8) + ("</xs:element>\n")
+
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='terminology-name'>\n")
+ dt_str += padding.rjust(indent+10) + ("<xs:annotation>\n")
+ dt_str += padding.rjust(indent+12) + ("<xs:documentation>\n")
+ dt_str += padding.rjust(indent+12) + (docs + "\n")
+ dt_str += padding.rjust(indent+12) + ("</xs:documentation>\n")
+ dt_str += padding.rjust(indent+10) + ("</xs:annotation>\n")
+ dt_str += padding.rjust(indent+10) + ("<xs:simpleType>\n")
+ dt_str += padding.rjust(indent+12) + ("<xs:restriction base='xs:string'>\n")
+ for n in range(0,len(cs)):
+ dt_str += padding.rjust(indent+14) + ("<xs:enumeration value='"+tn[n]+"'/>\n")
+ dt_str += padding.rjust(indent+12) + ("</xs:restriction>\n")
+ dt_str += padding.rjust(indent+10) + ("</xs:simpleType>\n")
+ dt_str += padding.rjust(indent+8) + ("</xs:element>\n")
+
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='terminology-version'>\n")
+ dt_str += padding.rjust(indent+10) + ("<xs:simpleType>\n")
+ dt_str += padding.rjust(indent+12) + ("<xs:restriction base='xs:string'>\n")
+ for n in range(0,len(cs)):
+ dt_str += padding.rjust(indent+14) + ("<xs:enumeration value='"+tv[n]+"'/>\n")
+ dt_str += padding.rjust(indent+12) + ("</xs:restriction>\n")
+ dt_str += padding.rjust(indent+10) + ("</xs:simpleType>\n")
+ dt_str += padding.rjust(indent+8) + ("</xs:element>\n")
+
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='terminology-code'>\n")
+ dt_str += padding.rjust(indent+10) + ("<xs:simpleType>\n")
+ dt_str += padding.rjust(indent+12) + ("<xs:restriction base='xs:string'>\n")
+ for n in range(0,len(cs)):
+ dt_str += padding.rjust(indent+14) + ("<xs:enumeration value='"+tc[n]+"'/>\n")
+ dt_str += padding.rjust(indent+12) + ("</xs:restriction>\n")
+ dt_str += padding.rjust(indent+10) + ("</xs:simpleType>\n")
+ dt_str += padding.rjust(indent+8) + ("</xs:element>\n")
+
+ dt_str += padding.rjust(indent+8) + ("</xs:sequence>\n")
+ dt_str += padding.rjust(indent+6) + ("</xs:restriction>\n")
+ dt_str += padding.rjust(indent+4) + ("</xs:complexContent>\n")
+ dt_str += padding.rjust(indent+2) + ("</xs:complexType>\n")
+
+ return dt_str
+
+
+
+
+
+
+def getDvCountType(data_name, ct_name, uom, docs, indent=0):
+ """
+ data_name - string to use for data_name
+ ct_name - uuid string for complexType.name
+ uom - list of units value(s)
+ docs - string for documentation
+ indent - number of spaces to indent first line
+ """
+ padding = ('').rjust(indent)
+
+ dt_str = '\n\n'+padding.rjust(indent) + ("<xs:complexType name='ct-"+ct_name+"'>\n")
+ dt_str += padding.rjust(indent+2) + ("<xs:complexContent>\n")
+ dt_str += padding.rjust(indent+4) + ("<xs:restriction base='mlhim2:DvCountType'>\n")
+ dt_str += padding.rjust(indent+6) + ("<xs:sequence>\n")
+ #DvAny
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='data-name' type='xs:string' fixed='"+data_name+"'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' ref='mlhim2:ExceptionalValue'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-time-begin' type='xs:dateTime'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-time-end' type='xs:dateTime'/>\n")
+ #DvOrdered
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' ref='mlhim2:normal-range'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='unbounded' minOccurs='0' ref='mlhim2:other-reference-ranges'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='normal-status' type='xs:string'/>\n")
+ #DvQuantified
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='magnitude' type='xs:decimal'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='min-magnitude' type='xs:decimal'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='max-magnitude' type='xs:decimal'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='magnitude-status' type='xs:string'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='error' type='xs:int' default='0'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='accuracy' type='xs:int' default='0'/>\n")
+ #DvCount
+ if not uom:
+ dt_str += padding.rjust(indent+10) + ("<xs:element maxOccurs='1' minOccurs='1' name='DvCount-units' type='xs:string'>\n")
+ elif len(uom) == 1:
+ dt_str += padding.rjust(indent+10) + ("<xs:element maxOccurs='1' minOccurs='1' name='DvCount-units' type='xs:string' fixed='"+uom[0]+"'>\n")
+ else:
+ dt_str += padding.rjust(indent+10) + ("<xs:element maxOccurs='1' minOccurs='1' name='DvCount-units'>\n")
+ dt_str += padding.rjust(indent+12) + ("<xs:annotation>\n")
+ dt_str += padding.rjust(indent+14) + ("<xs:documentation>\n")
+ dt_str += padding.rjust(indent+14) + (docs + "\n")
+ dt_str += padding.rjust(indent+14) + ("</xs:documentation>\n")
+ dt_str += padding.rjust(indent+12) + ("</xs:annotation>\n")
+ if len(uom) > 1:
+ dt_str += padding.rjust(indent+12) + ("<xs:simpleType>\n")
+ dt_str += padding.rjust(indent+14) + ("<xs:restriction base='xs:string'>\n")
+ for n in range(len(uom)):
+ dt_str += padding.rjust(indent+16) + ("<xs:enumeration value='"+uom[n]+"'/>\n")
+ dt_str += padding.rjust(indent+14) + ("</xs:restriction>\n")
+ dt_str += padding.rjust(indent+12) + ("</xs:simpleType>\n")
+ dt_str += padding.rjust(indent+10) + ("</xs:element>\n")
+ dt_str += padding.rjust(indent+8) + ("</xs:sequence>\n")
+ dt_str += padding.rjust(indent+6) + ("</xs:restriction>\n")
+ dt_str += padding.rjust(indent+4) + ("</xs:complexContent>\n")
+ dt_str += padding.rjust(indent+2) + ("</xs:complexType>\n")
+
+ return dt_str
+
+
+
+def getDvDateType(data_name, ct_name, default, docs, indent=0):
+ """
+ data_name - string to use for data_name
+ ct_name - uuid string for complexType.name
+ default - an optional default value
+ docs - string for documentation
+ indent - number of spaces to indent first line
+ """
+ if default:
+ default = " default='"+default+"' "
+ else:
+ default = ''
+ padding = ('').rjust(indent)
+
+ dt_str = '\n\n'+padding.rjust(indent) + ("<xs:complexType name='ct-"+ct_name+"'>\n")
+ dt_str += padding.rjust(indent+2) + ("<xs:complexContent>\n")
+ dt_str += padding.rjust(indent+4) + ("<xs:restriction base='mlhim2:DvDateType'>\n")
+ dt_str += padding.rjust(indent+6) + ("<xs:sequence>\n")
+ #DvAny
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='data-name' type='xs:string' fixed='"+data_name+"'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' ref='mlhim2:ExceptionalValue'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-time-begin' type='xs:dateTime'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-time-end' type='xs:dateTime'/>\n")
+ #DvOrdered
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' ref='mlhim2:normal-range'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='unbounded' minOccurs='0' ref='mlhim2:other-reference-ranges'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='normal-status' type='xs:string'/>\n")
+
+ #DvDate
+ dt_str += padding.rjust(indent+10) + ("<xs:element maxOccurs='1' minOccurs='1' name='DvDate-dv' type='xs:date' "+default+">\n")
+ dt_str += padding.rjust(indent+12) + ("<xs:annotation>\n")
+ dt_str += padding.rjust(indent+14) + ("<xs:documentation>\n")
+ dt_str += padding.rjust(indent+14) + (docs + "\n")
+ dt_str += padding.rjust(indent+14) + ("</xs:documentation>\n")
+ dt_str += padding.rjust(indent+12) + ("</xs:annotation>\n")
+ dt_str += padding.rjust(indent+10) + ("</xs:element>\n")
+ dt_str += padding.rjust(indent+8) + ("</xs:sequence>\n")
+ dt_str += padding.rjust(indent+6) + ("</xs:restriction>\n")
+ dt_str += padding.rjust(indent+4) + ("</xs:complexContent>\n")
+ dt_str += padding.rjust(indent+2) + ("</xs:complexType>\n")
+
+ return dt_str
+
+
+
+
+def getDvStringType(data_name, ct_name, default, docs, indent=0, enumList=None):
+ """
+ data_name - string to use for data_name
+ ct_name - uuid string for complexType.name
+ default - an optional default string value
+ docs - string for documentation
+ indent - number of spaces to indent first line
+ enumList - a list of enumerations with doc strings as a tuple
+ """
+ if default:
+ default = " default='"+default+"' "
+ else:
+ default = ''
+ padding = ('').rjust(indent)
+
+ dt_str = '\n\n'+padding.rjust(indent) + ("<xs:complexType name='ct-"+ct_name+"'>\n")
+ dt_str += padding.rjust(indent+2) + ("<xs:complexContent>\n")
+ dt_str += padding.rjust(indent+4) + ("<xs:restriction base='mlhim2:DvStringType'>\n")
+ dt_str += padding.rjust(indent+6) + ("<xs:sequence>\n")
+ #DvAny
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='data-name' type='xs:string' fixed='"+data_name+"'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' ref='mlhim2:ExceptionalValue'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-time-begin' type='xs:dateTime'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-time-end' type='xs:dateTime'/>\n")
+ #DvString
+ if enumList: # if enums, do not include type
+ dt_str += padding.rjust(indent+10) + ("<xs:element maxOccurs='1' minOccurs='1' name='DvString-dv' "+default+">\n")
+ else:
+ dt_str += padding.rjust(indent+10) + ("<xs:element maxOccurs='1' minOccurs='1' name='DvString-dv' type='xs:string' "+default+">\n")
+ dt_str += padding.rjust(indent+12) + ("<xs:annotation>\n")
+ dt_str += padding.rjust(indent+14) + ("<xs:documentation>\n")
+ dt_str += padding.rjust(indent+14) + (docs + "\n")
+ dt_str += padding.rjust(indent+14) + ("</xs:documentation>\n")
+ dt_str += padding.rjust(indent+12) + ("</xs:annotation>\n")
+
+ # Enumerations
+ if enumList:
+ dt_str += padding.rjust(indent+12) + ("<xs:simpleType>\n")
+ dt_str += padding.rjust(indent+14) + ("<xs:restriction base='xs:string'>\n")
+ for n in range(len(enumList)):
+ dt_str += padding.rjust(indent+16) + ("<xs:enumeration value='"+enumList[n][0]+"'>\n")
+ dt_str += padding.rjust(indent+16) + ("<xs:annotation>\n")
+ dt_str += padding.rjust(indent+18) + ("<xs:documentation>\n")
+ dt_str += padding.rjust(indent+18) + (enumList[n][0]+"\n")
+ dt_str += padding.rjust(indent+18) + ("</xs:documentation>\n")
+ dt_str += padding.rjust(indent+16) + ("</xs:annotation>\n")
+ dt_str += padding.rjust(indent+16) + ("</xs:enumeration>\n")
+
+ dt_str += padding.rjust(indent+14) + ("</xs:restriction>\n")
+ dt_str += padding.rjust(indent+12) + ("</xs:simpleType>\n")
+
+ dt_str += padding.rjust(indent+10) + ("</xs:element>\n")
+ dt_str += padding.rjust(indent+8) + ("</xs:sequence>\n")
+ dt_str += padding.rjust(indent+6) + ("</xs:restriction>\n")
+ dt_str += padding.rjust(indent+4) + ("</xs:complexContent>\n")
+ dt_str += padding.rjust(indent+2) + ("</xs:complexType>\n")
+
+ return dt_str
+
+
+
+
+
+
+def getDvTimeType(data_name, ct_name, default, docs, indent=0):
+ """
+ data_name - string to use for data_name
+ ct_name - uuid string for complexType.name
+ default - an optional default value
+ docs - string for documentation
+ indent - number of spaces to indent first line
+ """
+ if default:
+ default = " default='"+default+"' "
+ else:
+ default = ''
+ padding = ('').rjust(indent)
+
+ dt_str = '\n\n'+padding.rjust(indent) + ("<xs:complexType name='ct-"+ct_name+"'>\n")
+ dt_str += padding.rjust(indent+2) + ("<xs:complexContent>\n")
+ dt_str += padding.rjust(indent+4) + ("<xs:restriction base='mlhim2:DvTimeType'>\n")
+ dt_str += padding.rjust(indent+6) + ("<xs:sequence>\n")
+ #DvAny
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' name='data-name' type='xs:string' fixed='"+data_name+"'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' ref='mlhim2:ExceptionalValue'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-time-begin' type='xs:dateTime'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-time-end' type='xs:dateTime'/>\n")
+ #DvOrdered
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' ref='mlhim2:normal-range'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='unbounded' minOccurs='0' ref='mlhim2:other-reference-ranges'/>\n")
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='normal-status' type='xs:string'/>\n")
+
+ dt_str += padding.rjust(indent+10) + ("<xs:element maxOccurs='1' minOccurs='1' name='DvTime-dv' type='xs:time' "+default+">\n")
+ dt_str += padding.rjust(indent+12) + ("<xs:annotation>\n")
+ dt_str += padding.rjust(indent+14) + ("<xs:documentation>\n")
+ dt_str += padding.rjust(indent+14) + (docs + "\n")
+ dt_str += padding.rjust(indent+14) + ("</xs:documentation>\n")
+ dt_str += padding.rjust(indent+12) + ("</xs:annotation>\n")
+ dt_str += padding.rjust(indent+10) + ("</xs:element>\n")
+ dt_str += padding.rjust(indent+8) + ("</xs:sequence>\n")
+ dt_str += padding.rjust(indent+6) + ("</xs:restriction>\n")
+ dt_str += padding.rjust(indent+4) + ("</xs:complexContent>\n")
+ dt_str += padding.rjust(indent+2) + ("</xs:complexType>\n")
+
+ return dt_str
=== modified file 'src/xls2ccd/xls2ccd.py'
--- src/xls2ccd/xls2ccd.py 2012-09-15 22:10:45 +0000
+++ src/xls2ccd/xls2ccd.py 2012-09-18 00:49:33 +0000
@@ -16,7 +16,7 @@
import time
from xlrd import open_workbook
-from mlhim2RM import get_map
+import mlhim2RM
try:
xlsfile = sys.argv[1]
@@ -34,8 +34,15 @@
ccd_catalog = open('ccd_catalog.txt', 'a')
ccd_catalog.write('\n====== Appended: ' + str("%d-%d-%d %d:%d" % (n.tm_year, n.tm_mon, n.tm_mday, n.tm_hour, n.tm_min)) +' ======\n')
-complexTypes = get_map()[0].keys()
-elements = get_map()[1].keys()
+complexTypes = mlhim2RM.get_map()[0].keys()
+elements = mlhim2RM.get_map()[1].keys()
+
+ufile = open('uuid_list.txt','a')
+ufile.write('UUIDs for use in complexType and element names:\n')
+for x in range(0,20):
+ ufile.write('\n'+str(uuid.uuid4()))
+
+ufile.close()
xsd = ".xsd"
@@ -47,12 +54,16 @@
values = []
for col in range(s.ncols):
values.append(s.cell(row,col).value)
- if values[9]: #title
+ if values[9]: #title, must be unique
currkey = values[9]
- ccd_dict[currkey] = [values[0],values[1],values[2],values[3],values[4],values[5],values[6],values[7],values[8],values[9],values[10],values[11],values[12],values[13],values[14],values[15],values[16]]
+ ccd_dict[currkey] = [values[0],values[1],values[2],values[3],values[4],values[5],values[6],values[7],values[8],values[9],values[10],values[11],values[12],values[13],values[14],values[15],values[16],[],[],[]] # New Entry values
elif currkey:
- if values[17]:
- ccd_dict[currkey].append((values[17],values[18],values[19]))
+ if values[17]: #DvString Enumerations
+ ccd_dict[currkey][17].append((values[17],values[18],values[19]))
+ if values[20]: #DvCodedString Codes
+ ccd_dict[currkey][18].append((values[20],values[21],values[22],values[23],values[24]))
+ if values[25]: #DvBoolean true/false values
+ ccd_dict[currkey][19].append((values[25],values[26]))
for k in ccd_dict.keys():
size = len(ccd_dict[k])
@@ -73,15 +84,19 @@
#ccd setup
ccd_id = "ccd-"+str(uuid.uuid4())
- #Display Format Hint
- if not ccd_dict[k][16]:
- ccd_dict[k][16] = " Not Defined"
-
# Is the datatype a valid MLHIM Type?
if ccd_dict[k][14] not in complexTypes:
ccd_id = "UnknownType-"+ccd_id
+ print "Could not validate type: " + ccd_dict[k][14]
+ continue
+
+
ccdct = "ct-"+str(uuid.uuid4())
+ #Display Format Hint
+ if not ccd_dict[k][16]:
+ ccd_dict[k][16] = " Not Defined"
+
#MLHIM ElementType
e_id = str(uuid.uuid4())
ect = "ct-"+ e_id # complexType
@@ -115,9 +130,19 @@
resource_format = "text/xml"
identifier = ccd_id
+
+
+ if ccd_dict[k][15]:
+ uom = ccd_dict[k][15].split(';')
+ else:
+ uom = []
+
data_name = title.replace('&', '&').replace('<', '<').replace('>', '>').replace("'", ''').replace('"', '"')
+
dt = ccd_dict[k][14]
+ dt_docs = ccd_dict[k][10].replace('&', '&').replace('<', '<').replace('>', '>').replace("'", ''').replace('"', '"')
+
xsd_file = open(schema,'w')
xsd_file.write("""<?xml version="1.0" encoding="UTF-8"?>
@@ -165,147 +190,83 @@
<xs:complexContent>
<xs:restriction base="mlhim2:CCDType">
<xs:sequence>
- <xs:element minOccurs="1" maxOccurs="1" ref="mlhim2:"""+e_el+""""/>
+ <xs:element maxOccurs="1" minOccurs="1" ref="mlhim2:"""+e_el+""""/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
-
<xs:element name='"""+e_el+"""' substitutionGroup="mlhim2:definition" type='mlhim2:"""+ect+"""'/>
+
<xs:complexType name='"""+ect+"""'>
<xs:complexContent>
<xs:restriction base="mlhim2:ElementType">
<xs:sequence>
- <xs:element minOccurs="1" maxOccurs="1" ref="mlhim2:"""+d_el+""""/>
- </xs:sequence>
- </xs:restriction>
- </xs:complexContent>
- </xs:complexType>
-
- <xs:element name='"""+d_el+"""' substitutionGroup="mlhim2:Element-dv" type='mlhim2:"""+dct+"""'/>""")
-
-
- if dt == "DvDateType":
- xsd_file.write("""
- <xs:complexType name='"""+dct+"""'>
- <xs:complexContent>
- <xs:restriction base="mlhim2:DvDateType">
- <xs:sequence>
- <xs:element name="data-name" minOccurs="1" maxOccurs="1" type="xs:string" fixed='"""+data_name+"""'/>
- <xs:element name="DvDate-dv" minOccurs="1" maxOccurs="1" type="xs:date">
- <xs:annotation>
- <xs:documentation>
- Display Format: """ + ccd_dict[k][16] + """
- </xs:documentation>
- </xs:annotation>
- </xs:element>
- </xs:sequence>
- </xs:restriction>
- </xs:complexContent>
- </xs:complexType>
- """)
+ <xs:element maxOccurs="1" minOccurs="1" ref="mlhim2:"""+d_el+""""/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name='el-"""+d_id+"""' substitutionGroup="mlhim2:Element-dv" type='mlhim2:ct-"""+d_id+"""'/>""")
+
+
+ if dt == "DvBooleanType":
+ default = None
+ indent = 4
+ print "DvBooleanType: ",ccd_dict[k]
+
+ elif dt == "DvCountType":
+ default = None
+ indent = 4
+ xsd_file.write(mlhim2RM.getDvCountType(data_name, d_id, uom, dt_docs, indent))
+
+ elif dt == "DvDateType":
+ default = None
+ indent = 4
+ xsd_file.write(mlhim2RM.getDvDateType(data_name, d_id, default, dt_docs, indent))
+
elif dt == "DvTimeType":
- xsd_file.write("""
- <xs:complexType name='"""+dct+"""'>
- <xs:complexContent>
- <xs:restriction base="mlhim2:DvTimeType">
- <xs:sequence>
- <xs:element name="data-name" minOccurs="1" maxOccurs="1" type="xs:string" fixed='"""+data_name+"""'/>
- <xs:element name="DvTime-dv" minOccurs="1" maxOccurs="1" type="xs:time">
- <xs:annotation>
- <xs:documentation>
- Display Format: """ +ccd_dict[k][16] + """
- </xs:documentation>
- </xs:annotation>
- </xs:element>
- </xs:sequence>
- </xs:restriction>
- </xs:complexContent>
- </xs:complexType>
- """)
-
- elif dt == "DvCountType":
- xsd_file.write("""
- <xs:complexType name='"""+dct+"""'>
- <xs:complexContent>
- <xs:restriction base="mlhim2:DvCountType">
- <xs:sequence>
- <xs:element name="data-name" minOccurs="1" maxOccurs="1" type="xs:string" fixed='"""+data_name+"""'/>
- <xs:element name="magnitude" minOccurs="1" maxOccurs="1" type="xs:decimal"/>
- <xs:element name="error" default="0" minOccurs="1" maxOccurs="1" type="xs:int"/>
- <xs:element name="accuracy" default="0" minOccurs="1" maxOccurs="1" type="xs:int"/>
- <xs:element maxOccurs="1" minOccurs="1" name="DvCount-units" type="xs:string">
- <xs:annotation>
- <xs:documentation>
- Display Format: """ +ccd_dict[k][16] + """
- </xs:documentation>
- </xs:annotation>
- </xs:element>
- </xs:sequence>
- </xs:restriction>
- </xs:complexContent>
- </xs:complexType>
- """)
-
- elif len(ccd_dict[k]) > 17:
- xsd_file.write("""
- <xs:complexType name='"""+dct+"""'>
- <xs:complexContent>
- <xs:restriction base="mlhim2:DvStringType">
- <xs:sequence>
- <xs:element name="data-name" minOccurs="1" maxOccurs="1" type="xs:string" fixed='"""+data_name+"""'/>
- <xs:element name="DvString-dv" minOccurs="1" maxOccurs="1">
- <xs:annotation>
- <xs:documentation>
- Display Format: """ +ccd_dict[k][16] + """
- </xs:documentation>
- </xs:annotation>
- <xs:simpleType>
- <xs:restriction base="xs:string">
- """)
- for n in range(17, len(ccd_dict[k])):
- enum = (ccd_dict[k][n][0]).replace('&', '&').replace('<', '<').replace('>', '>').replace("'", ''').replace('"', '"')
- adoc = (ccd_dict[k][n][1]).replace('&', '&').replace('<', '<').replace('>', '>').replace("'", ''').replace('"', '"')
- adoc += " : " + (ccd_dict[k][n][2]).replace('&', '&').replace('<', '<').replace('>', '>').replace("'", ''').replace('"', '"')
- adoc.replace("&","&")
- xsd_file.write(""" <xs:enumeration value='"""+enum+"""'>
- <xs:annotation>
- <xs:documentation>
- """ + adoc + """
- </xs:documentation>
- </xs:annotation>
- </xs:enumeration>\n""")
- xsd_file.write(""" </xs:restriction>
- </xs:simpleType>
- </xs:element>
- </xs:sequence>
- </xs:restriction>
- </xs:complexContent>
- </xs:complexType>
- """)
-
+ default = None
+ indent = 4
+ xsd_file.write(mlhim2RM.getDvTimeType(data_name, d_id, default, dt_docs, indent))
+
+
+ #elif dt == "DvQuantityType":
+ #default = None
+ #indent = 4
+ #xsd_file.write(mlhim2RM.getDvQuantityType(data_name, d_id, uom, dt_docs, indent))
+
+ elif dt =="DvCodedStringType":
+ ta=[]
+ tn=[]
+ tv=[]
+ tc=[]
+ cs=[]
+ for n in range(0,len(ccd_dict[k][18])): #Code Sets
+ ta.append(ccd_dict[k][18][n][0])
+ tn.append(ccd_dict[k][18][n][1])
+ tv.append(ccd_dict[k][18][n][2])
+ tc.append(ccd_dict[k][18][n][3])
+ cs.append(ccd_dict[k][18][n][4])
+ indent = 4
+ xsd_file.write(mlhim2RM.getDvCodedStringType(data_name, d_id, dt_docs, indent,ta,tn,tv,tc,cs))
+
+
+ elif dt =="DvStringType":
+ if ccd_dict[k][17]: # Enumerations?
+ enumList = []
+ for n in range(0, len( ccd_dict[k][17])):
+ enumList.append(((ccd_dict[k][17][n][0]).replace('&', '&').replace('<', '<').replace('>', '>').replace("'", ''').replace('"', '"'),(ccd_dict[k][17][n][1]).replace('&', '&').replace('<', '<').replace('>', '>').replace("'", ''').replace('"', '"') + " : " + (ccd_dict[k][17][n][2]).replace('&', '&').replace('<', '<').replace('>', '>').replace("'", ''').replace('"', '"')))
+ else:
+ enumList = None
+
+ default = None
+ indent = 4
+ xsd_file.write(mlhim2RM.getDvStringType(data_name, d_id, default, dt_docs, indent,enumList))
else:
-
- xsd_file.write("""
- <xs:complexType name='"""+dct+"""'>
- <xs:complexContent>
- <xs:restriction base="mlhim2:DvStringType">
- <xs:sequence>
- <xs:element name="data-name" minOccurs="1" maxOccurs="1" type="xs:string" fixed='"""+data_name+"""'/>
- <xs:element name="DvString-dv" minOccurs="1" maxOccurs="1" type="xs:string">
- <xs:annotation>
- <xs:documentation>
- Display Format: """ +ccd_dict[k][16] + """
- </xs:documentation>
- </xs:annotation>
- </xs:element>
- </xs:sequence>
- </xs:restriction>
- </xs:complexContent>
- </xs:complexType>
- """)
+ xsd_file.write("\n\n\n<!-- ***** DataType Not Yet Implemented: " +dt+ " ***** -->\n\n")
+ xsd_file.write(repr(ccd_dict[k]))
xsd_file.write("""
</xs:schema>""")