mlhim-specs-dev team mailing list archive
-
mlhim-specs-dev team
-
Mailing list archive
-
Message #00736
[Branch ~cdd-dev/cdd/trunk] Rev 260: Added DvBoolean and DvQuantity to xls2ccd and to the test cases .xls
------------------------------------------------------------
revno: 260
committer: Timothy W. Cook <timothywayne.cook@xxxxxxxxx>
branch nick: cdd
timestamp: Tue 2012-09-18 14:09:07 -0300
message:
Added DvBoolean and DvQuantity to xls2ccd and to the test cases .xls
modified:
src/xls2ccd/examples/MLHIM_Std_Template/MLHIM_Std_Template-xls2ccd.xls
src/xls2ccd/examples/TestTemplate/MLHIM_Std_Template-Tests.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
=== 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-18 00:49:33 +0000 and src/xls2ccd/examples/MLHIM_Std_Template/MLHIM_Std_Template-xls2ccd.xls 2012-09-18 17:09:07 +0000 differ
=== modified file 'src/xls2ccd/examples/TestTemplate/MLHIM_Std_Template-Tests.xls'
Binary files src/xls2ccd/examples/TestTemplate/MLHIM_Std_Template-Tests.xls 2012-09-18 00:49:33 +0000 and src/xls2ccd/examples/TestTemplate/MLHIM_Std_Template-Tests.xls 2012-09-18 17:09:07 +0000 differ
=== modified file 'src/xls2ccd/mlhim2RM.py'
--- src/xls2ccd/mlhim2RM.py 2012-09-18 00:49:33 +0000
+++ src/xls2ccd/mlhim2RM.py 2012-09-18 17:09:07 +0000
@@ -1,6 +1,9 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
+import uuid
+
+
"""
This map provides the CCD tool developers with RM information to structure the contents of a CCD.
Returns: (complexTypes,elements)
@@ -192,6 +195,74 @@
return (complexTypes,elements)
#====================================================================
+def getDvBooleanType(data_name, ct_name, bool_values, docs, indent=0):
+ """
+ data_name - string to use for data_name
+ ct_name - uuid string for complexType.name
+ bool_values = list of tuples containing the boolean (true,false) value(s)
+ docs - string for documentation
+ indent - number of spaces to indent first line
+ """
+ trues = []
+ falses = []
+ dv = []
+ for n in range(0,len(bool_values)):
+ trues.append(bool_values[n][0])
+ falses.append(bool_values[n][1])
+ dv.append(bool_values[n][0])
+ dv.append(bool_values[n][1])
+
+
+ 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:DvBooleanType'>\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")
+ #DvBoolean
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='0' name='valid-trues'>\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(trues)):
+ dt_str += padding.rjust(indent+16) + ("<xs:enumeration value='"+trues[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='0' name='valid-falses'>\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(falses)):
+ dt_str += padding.rjust(indent+16) + ("<xs:enumeration value='"+falses[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='0' name='DvBoolean-dv'>\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(dv)):
+ dt_str += padding.rjust(indent+16) + ("<xs:enumeration value='"+dv[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 getDvCodedStringType(data_name, ct_name, docs, indent,ta,tn,tv,tc,cs):
"""
data_name - string to use for data_name
@@ -287,10 +358,6 @@
return dt_str
-
-
-
-
def getDvCountType(data_name, ct_name, uom, docs, indent=0):
"""
data_name - string to use for data_name
@@ -393,7 +460,56 @@
return dt_str
-
+def getDvQuantityType(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
+ """
+ if not indent: indent = 0
+
+ padding = ('').rjust(indent)
+ # UUID for DvCodedStringType
+ dcs_id = str(uuid.uuid4())
+
+ 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:DvQuantityType'>\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")
+ #DvQuantity
+ dt_str += padding.rjust(indent+8) + ("<xs:element maxOccurs='1' minOccurs='1' ref='mlhim2:el-"+dcs_id+"'/>\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")
+ dt_str += padding.rjust(indent+2) + ("<xs:element name='el-"+dcs_id+"' substitutionGroup='mlhim2:DvQuantity-units' type='mlhim2:ct-"+dcs_id+"'/>\n\n")
+
+ dt_str += getDvCodedStringType(data_name, dcs_id, docs, indent,ta,tn,tv,tc,cs)
+
+ return dt_str
def getDvStringType(data_name, ct_name, default, docs, indent=0, enumList=None):
@@ -456,10 +572,6 @@
return dt_str
-
-
-
-
def getDvTimeType(data_name, ct_name, default, docs, indent=0):
"""
data_name - string to use for data_name
=== modified file 'src/xls2ccd/xls2ccd.py'
--- src/xls2ccd/xls2ccd.py 2012-09-18 00:49:33 +0000
+++ src/xls2ccd/xls2ccd.py 2012-09-18 17:09:07 +0000
@@ -50,20 +50,26 @@
print 'Sheet:',s.name
print 'Cols.: ',s.ncols
print 'Rows: ', s.nrows
+
+bool_vals = []
+
for row in range(1,s.nrows):
values = []
for col in range(s.ncols):
values.append(s.cell(row,col).value)
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],[],[],[]] # New Entry values
- elif currkey:
+
+ 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
+ else:
if values[17]: #DvString Enumerations
ccd_dict[currkey][17].append((values[17],values[18],values[19]))
- if values[20]: #DvCodedString Codes
+
+ elif 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]))
+ elif values[25] != '': #DvBoolean true/false values
+ bool_vals.append((values[25],values[26]))
+
for k in ccd_dict.keys():
size = len(ccd_dict[k])
@@ -86,9 +92,11 @@
# 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
+ print "The row data is: ",ccd_dict[k]
+ ccd_catalog.write("\n\nCould not validate datatype: " + repr(ccd_dict[k][14]))
+ ccd_catalog.write("\nThe row data is: "+repr(ccd_dict[k]))
+ continue # do not produce a CCD for invalid types
ccdct = "ct-"+str(uuid.uuid4())
@@ -212,7 +220,9 @@
if dt == "DvBooleanType":
default = None
indent = 4
- print "DvBooleanType: ",ccd_dict[k]
+ xsd_file.write(mlhim2RM.getDvBooleanType(data_name, d_id, bool_vals, dt_docs, indent))
+ bool_vals = [] #reset
+
elif dt == "DvCountType":
default = None
@@ -231,10 +241,20 @@
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 == "DvQuantityType":
+ 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.getDvQuantityType(data_name, d_id, dt_docs, indent,ta,tn,tv,tc,cs))
elif dt =="DvCodedStringType":
ta=[]