#! <?xml version="1.0" encoding="UTF-8" ?>
#! <WORKSPACE
#    
#    
#    Command-line to run this workspace:
#    
#    
#    E:\FME2017\fme.exe C:\Users\Willy\Desktop\prototype.fmw
#          --SourceDataset_XML "C:\Users\Willy\Desktop\test.xml"
#    
#    
#!   FME_DOCUMENT_PRIORGUID="a5a037c2-205e-42f5-8b05-a62d3e37b300,b4996225-5705-4559-9e5b-b6f51dd0c0de,e5025d3e-e5cc-4279-923c-f48e0ba4f57c"
#!   SHOW_ANNOTATIONS="true"
#!   LAST_SAVE_BUILD="FME(R) 2017.1.0.0 (20170731 - Build 17539 - WIN64)"
#!   BEGIN_PYTHON=""
#!   USAGE=""
#!   MARKDOWN_DESCRIPTION=""
#!   FME_STROKE_MAX_DEVIATION="0"
#!   USE_MARKDOWN=""
#!   DESTINATION_ROUTING_FILE=""
#!   DOC_TOP_LEFT="-153.128 -231.252"
#!   END_PYTHON=""
#!   FME_SERVER_SERVICES=""
#!   TERMINATE_REJECTED="YES"
#!   VIEW_POSITION="-256.253 100.001"
#!   MAX_LOG_FEATURES="200"
#!   MULTI_WRITER_DATASET_ORDER="BY_ID"
#!   SOURCE_ROUTING_FILE=""
#!   PASSWORD=""
#!   LOG_FILE=""
#!   TITLE=""
#!   DOC_EXTENTS="2468.64 1e-05"
#!   FME_GEOMETRY_HANDLING="Enhanced"
#!   LOG_MAX_RECORDED_FEATURES="200"
#!   FME_BUILD_NUM="17539"
#!   SOURCE="NONE"
#!   SHOW_INFO_NODES="true"
#!   FME_REPROJECTION_ENGINE="FME"
#!   FME_DOCUMENT_GUID="a6e515a0-7244-48e9-a5a4-fce486f3eae7"
#!   HISTORY=""
#!   DESTINATION="NONE"
#!   WORKSPACE_VERSION="1"
#!   END_TCL=""
#!   EXPLICIT_BOOKMARK_ORDER="false"
#!   REDIRECT_TERMINATORS="NONE"
#!   FME_IMPLICIT_CSMAP_REPROJECTION_MODE="Auto"
#!   LAST_SAVE_DATE="2019-03-14T00:41:33"
#!   PYTHON_COMPATIBILITY="27"
#!   IGNORE_READER_FAILURE="No"
#!   WARN_INVALID_XFORM_PARAM="Yes"
#!   ZOOM_SCALE="100"
#!   DESCRIPTION=""
#!   MARKDOWN_USAGE=""
#!   CATEGORY=""
#!   ATTR_TYPE_ENCODING="SDF"
#!   BEGIN_TCL=""
#! >
#! <DATASETS>
#! <DATASET
#!   IS_SOURCE="true"
#!   ROLE="READER"
#!   FORMAT="XML"
#!   DATASET="$(SourceDataset_XML)"
#!   KEYWORD="XML_1"
#!   MULTI_GEOM_ALLOWED="false"
#!   ATTR_MAX_LENGTH="0"
#!   ATTR_CASE="ANY"
#!   ALLOWED_FEAT_TYPES=""
#!   WRITE_DEFS="true"
#!   DEFLINE_TEMPLATE=""
#!   DEFLINE_ATTRS="true"
#!   EXPOSABLE_ATTRS="fme_text_string xml_char(50) multi_reader_id xml_int32 fme_dataset xml_char(50) fme_primary_axis xml_real64 multi_reader_type xml_char(50) xml_type xml_char(50) multi_reader_keyword xml_char(50) fme_text_size xml_real64 fme_secondary_axis xml_real64 fme_fill_color xml_char(50) fme_type xml_char(50) fme_sweep_angle xml_real64 fme_start_angle xml_real64 fme_geometry fme_char(50) fme_color xml_char(50) fme_rotation xml_real64 multi_reader_full_id xml_int32 fme_feature_type xml_char(50) fme_basename xml_char(50)"
#!   DEFLINE_PARMS=""
#!   ATTR_INDEX_TYPES=""
#!   ATTR_NAME_INVALID_CHARS=""
#!   SUPPORTS_FEATURE_TYPE_FANOUT="true"
#!   ENABLED="true"
#!   DYNAMIC_FEATURE_TYPES_LIST_ON_MERGE="true"
#!   DATASET_TYPE="FILE_OR_URL"
#!   GENERATE_FME_BUILD_NUM="17539"
#!   START_FEATURE=""
#!   COORDSYS=""
#!   MAX_FEATURES=""
#!   MIN_FEATURES=""
#!   FEATURE_TYPES=""
#!   MAX_FEATURES_PER_FEATURE_TYPE=""
#! >
#! <METAFILE_PARAMETER
#!   NAME="NETWORK_AUTHENTICATION"
#!   VALUE="YES"
#! />
#! <METAFILE_PARAMETER
#!   NAME="DATASET_NAME"
#!   VALUE="xml file"
#! />
#! <METAFILE_PARAMETER
#!   NAME="READER_DATASET_HINT"
#!   VALUE="Select the XML file(s)"
#! />
#! <METAFILE_PARAMETER
#!   NAME="WRITER_DATASET_HINT"
#!   VALUE="Specify a name for the XML file"
#! />
#! <METAFILE_PARAMETER
#!   NAME="NETWORK_PROXY"
#!   VALUE="NO"
#! />
#! <METAFILE_PARAMETER
#!   NAME="ADVANCED_PARMS"
#!   VALUE="XML_IN_VALIDATE_XFMAP XML_IN_VALIDATE_DATASET XML_OUT_TABLES_ROOT_ELEMENT XML_OUT_XML_NAMESPACE_DECLARATIONS XML_OUT_WRAP_TABLES XML_OUT_SUPPRESS_XML_DOCUMENT XML_OUT_SUPPRESS_XSD_DOCUMENT XML_OUT_GENERATE_ROW_ID XML_OUT_OUTPUT_ENCODING"
#! />
#! <METAFILE_PARAMETER
#!   NAME="MIME_TYPE"
#!   VALUE="application/XML"
#! />
#! </DATASET>
#! </DATASETS>
#! <DATA_TYPES>
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_char(width)"
#!   FME_TYPE="fme_varchar(width)"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_char(width)"
#!   FME_TYPE="fme_varbinary(width)"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_char(width)"
#!   FME_TYPE="fme_char(width)"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_char(width)"
#!   FME_TYPE="fme_binary(width)"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_buffer"
#!   FME_TYPE="fme_buffer"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_buffer"
#!   FME_TYPE="fme_binarybuffer"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_buffer"
#!   FME_TYPE="fme_json"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_xml"
#!   FME_TYPE="fme_xml"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_datetime"
#!   FME_TYPE="fme_buffer"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_date"
#!   FME_TYPE="fme_buffer"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_time"
#!   FME_TYPE="fme_buffer"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_int64"
#!   FME_TYPE="fme_int64"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_uint64"
#!   FME_TYPE="fme_uint64"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_int32"
#!   FME_TYPE="fme_int32"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_uint32"
#!   FME_TYPE="fme_uint32"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_int16"
#!   FME_TYPE="fme_int16"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_uint16"
#!   FME_TYPE="fme_uint16"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_byte"
#!   FME_TYPE="fme_int8"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_ubyte"
#!   FME_TYPE="fme_uint8"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_real32"
#!   FME_TYPE="fme_real32"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_real64"
#!   FME_TYPE="fme_real64"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_decimal(width,decimal)"
#!   FME_TYPE="fme_decimal(width,decimal)"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_boolean"
#!   FME_TYPE="fme_boolean"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_char(20)"
#!   FME_TYPE="fme_datetime"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_char(8)"
#!   FME_TYPE="fme_date"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_char(12)"
#!   FME_TYPE="fme_time"
#!   FORMAT="XML"
#! />
#! <DATA_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_geometry"
#!   FME_TYPE="fme_buffer"
#!   FORMAT="XML"
#! />
#! </DATA_TYPES>
#! <GEOM_TYPES>
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_no_geom"
#!   FME_TYPE="fme_no_geom"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_point"
#!   FME_TYPE="fme_point"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_line"
#!   FME_TYPE="fme_line"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_area"
#!   FME_TYPE="fme_area"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_aggregate"
#!   FME_TYPE="fme_collection"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_text"
#!   FME_TYPE="fme_text"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_area"
#!   FME_TYPE="fme_ellipse"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_area"
#!   FME_TYPE="fme_rectangle"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_area"
#!   FME_TYPE="fme_rounded_rectangle"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_arc"
#!   FME_TYPE="fme_arc"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_surface"
#!   FME_TYPE="fme_surface"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_solid"
#!   FME_TYPE="fme_solid"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_mesh"
#!   FME_TYPE="fme_surface"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_raster"
#!   FME_TYPE="fme_no_geom"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_area"
#!   FME_TYPE="fme_raster"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_area"
#!   FME_TYPE="fme_point_cloud"
#!   FORMAT="XML"
#! />
#! <GEOM_TYPE
#!   IS_SOURCE="true"
#!   FORMAT_TYPE="xml_no_geom"
#!   FME_TYPE="fme_feature_table"
#!   FORMAT="XML"
#! />
#! </GEOM_TYPES>
#! <FEATURE_TYPES>
#! <FEATURE_TYPE
#!   IS_SOURCE="true"
#!   NODE_NAME="TemplateRule"
#!   FEATURE_TYPE_NAME=""
#!   FEATURE_TYPE_NAME_QUALIFIER=""
#!   IS_EDITABLE="false"
#!   IDENTIFIER="2"
#!   FEAT_GEOMTYPE="xml_no_geom"
#!   POSITION="-153.128 -231.252"
#!   BOUNDING_RECT="-153.128 -231.252 -1 -1"
#!   ORDER="5e+14"
#!   COLLAPSED="true"
#!   KEYWORD="XML_1"
#!   PARMS_EDITED="true"
#!   ENABLED="true"
#!   HIDDEN_USER_ATTRS=""
#!   MERGE_FILTER=""
#!   MERGE_FILTER_TYPE="FILTER_TYPE_GLOB"
#!   MERGE_FILTER_CASE_SENSITIVE="true"
#!   DYNAMIC_SCHEMA="false"
#! >
#!     <FEAT_ATTRIBUTE ATTR_NAME="Concept.name" ATTR_TYPE="xml_char(26)" ATTR_HAS_PORT="true" ATTR_VALUE=""/>
#!     <FEAT_ATTRIBUTE ATTR_NAME="Concept.override" ATTR_TYPE="xml_char(6)" ATTR_HAS_PORT="true" ATTR_VALUE=""/>
#!     <FEAT_ATTRIBUTE ATTR_NAME="Concept.status" ATTR_TYPE="xml_char(7)" ATTR_HAS_PORT="true" ATTR_VALUE=""/>
#!     <FEAT_ATTRIBUTE ATTR_NAME="Concept.uuid" ATTR_TYPE="xml_char(37)" ATTR_HAS_PORT="true" ATTR_VALUE=""/>
#!     <FEAT_ATTRIBUTE ATTR_NAME="TemplateRule" ATTR_TYPE="xml_char(1)" ATTR_HAS_PORT="true" ATTR_VALUE=""/>
#!     <FEAT_ATTRIBUTE ATTR_NAME="TemplateRule.Parameters" ATTR_TYPE="xml_char(57)" ATTR_HAS_PORT="true" ATTR_VALUE=""/>
#!     <FEAT_ATTRIBUTE ATTR_NAME="TemplateRules.operator" ATTR_TYPE="xml_char(4)" ATTR_HAS_PORT="true" ATTR_VALUE=""/>
#!     <FEAT_ATTRIBUTE ATTR_NAME="xml_fragment" ATTR_TYPE="xml_xml" ATTR_HAS_PORT="true" ATTR_VALUE=""/>
#!     <FEAT_ATTRIBUTE ATTR_NAME="xml_id" ATTR_TYPE="xml_char(24)" ATTR_HAS_PORT="true" ATTR_VALUE=""/>
#!     <FEAT_ATTRIBUTE ATTR_NAME="xml_matched_element" ATTR_TYPE="xml_char(13)" ATTR_HAS_PORT="true" ATTR_VALUE=""/>
#!     <FEAT_ATTRIBUTE ATTR_NAME="xml_parent_child_pos" ATTR_TYPE="xml_char(1)" ATTR_HAS_PORT="true" ATTR_VALUE=""/>
#!     <FEAT_ATTRIBUTE ATTR_NAME="xml_parent_id" ATTR_TYPE="xml_char(1)" ATTR_HAS_PORT="true" ATTR_VALUE=""/>
#! </FEATURE_TYPE>
#! </FEATURE_TYPES>
#! <FMESERVER>
#! </FMESERVER>
#! <GLOBAL_PARAMETERS>
#! <GLOBAL_PARAMETER
#!   GUI_LINE="GUI MULTIFILE SourceDataset_XML XML/GML/Compressed_XML_Files(*.xml;*.gml;*.gz)|*.xml;*.gml;*.gz|XML_Files(*.xml)|*.xml|GML_Files(*.gml)|*.gml|Compressed_XML_Files(*.gz)|*.gz|All_Files(*)|* Source XML File(s):"
#!   DEFAULT_VALUE="$(FME_MF_DIR)test.xml"
#!   IS_STAND_ALONE="false"
#! />
#! </GLOBAL_PARAMETERS>
#! <COMMENTS>
#! </COMMENTS>
#! <CONSTANTS>
#! </CONSTANTS>
#! <BOOKMARKS>
#! </BOOKMARKS>
#! <TRANSFORMERS>
#! <TRANSFORMER
#!   IDENTIFIER="4"
#!   TYPE="Aggregator"
#!   VERSION="14"
#!   POSITION="452.129 -231.252"
#!   BOUNDING_RECT="452.129 -231.252 -1 -1"
#!   ORDER="5e+14"
#!   PARMS_EDITED="true"
#!   ENABLED="true"
#!   LAST_PARM_EDIT="17539"
#! >
#!     <OUTPUT_FEAT NAME="AGGREGATE"/>
#!     <FEAT_COLLAPSED COLLAPSED="0"/>
#!     <XFORM_ATTR ATTR_NAME="Concept.name" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="TemplateRule" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="TemplateRule.Parameters" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="Concept.override" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="Concept.status" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="Concept.uuid" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="TemplateRules.operator" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="xml_fragment" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="xml_id" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="xml_matched_element" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="xml_parent_child_pos" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="xml_parent_id" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_PARM PARM_NAME="LIST_ATTRS_TO_INCLUDE_MODE" PARM_VALUE="&lt;Unused&gt;"/>
#!     <XFORM_PARM PARM_NAME="ASSEMBLE_ONE_LEVEL_GROUP" PARM_VALUE="FME_DISCLOSURE_OPEN"/>
#!     <XFORM_PARM PARM_NAME="PARAMETERS_GROUP" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="GENERATE_LIST_GROUP" PARM_VALUE="NO"/>
#!     <XFORM_PARM PARM_NAME="CHILD_ID_ATTR" PARM_VALUE="&lt;Unused&gt;"/>
#!     <XFORM_PARM PARM_NAME="ATTR_ACCUM_GROUP" PARM_VALUE="FME_DISCLOSURE_OPEN"/>
#!     <XFORM_PARM PARM_NAME="MODE" PARM_VALUE="Geometry - Assemble One Level"/>
#!     <XFORM_PARM PARM_NAME="ASSEMBLE_HIERARCHY_GROUP" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="TRANSFORMER_GROUP" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="LIST_ATTRS_TO_INCLUDE" PARM_VALUE="&lt;Unused&gt;"/>
#!     <XFORM_PARM PARM_NAME="GROUP_BY" PARM_VALUE="Concept.name"/>
#!     <XFORM_PARM PARM_NAME="LIST_NAME" PARM_VALUE="&lt;Unused&gt;"/>
#!     <XFORM_PARM PARM_NAME="PARENT_ID_ATTR" PARM_VALUE="&lt;Unused&gt;"/>
#!     <XFORM_PARM PARM_NAME="ATTR_TO_TRAIT" PARM_VALUE="&lt;Unused&gt;"/>
#!     <XFORM_PARM PARM_NAME="ID_ATTR" PARM_VALUE="&lt;Unused&gt;"/>
#!     <XFORM_PARM PARM_NAME="ACCUM_ATTRS_NAME" PARM_VALUE="Use Attributes From One Feature"/>
#!     <XFORM_PARM PARM_NAME="AV" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="Aggregator"/>
#!     <XFORM_PARM PARM_NAME="SUM" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="GEOM_NAME_FIELD" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="AGGREGATE_TYPE" PARM_VALUE="Homogeneous Collection (If Possible)"/>
#!     <XFORM_PARM PARM_NAME="WEIGHT" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="COUNT_ATTR" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="ID_SELECTION" PARM_VALUE="&lt;Unused&gt;"/>
#!     <XFORM_PARM PARM_NAME="CONCAT_ATTRS" PARM_VALUE="TemplateRule TemplateRule.Parameters"/>
#!     <XFORM_PARM PARM_NAME="SEP" PARM_VALUE="&lt;comma&gt;&lt;space&gt;"/>
#!     <XFORM_PARM PARM_NAME="ORDERED" PARM_VALUE="No"/>
#!     <XFORM_PARM PARM_NAME="PRESERVE_ID" PARM_VALUE="&lt;Unused&gt;"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#!   IDENTIFIER="11"
#!   TYPE="StringReplacer"
#!   VERSION="4"
#!   POSITION="1127.14 -231.252"
#!   BOUNDING_RECT="1127.14 -231.252 -1 -1"
#!   ORDER="5e+14"
#!   PARMS_EDITED="true"
#!   ENABLED="true"
#!   LAST_PARM_EDIT="17539"
#! >
#!     <OUTPUT_FEAT NAME="OUTPUT"/>
#!     <FEAT_COLLAPSED COLLAPSED="0"/>
#!     <XFORM_ATTR ATTR_NAME="Concept.name" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="TemplateRule" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="TemplateRule.Parameters" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="Concept.override" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="Concept.status" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="Concept.uuid" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="TemplateRules.operator" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="xml_fragment" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="xml_id" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="xml_matched_element" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="xml_parent_child_pos" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="xml_parent_id" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_PARM PARM_NAME="CASE" PARM_VALUE="YES"/>
#!     <XFORM_PARM PARM_NAME="NO_MATCH" PARM_VALUE="_FME_NO_OP_"/>
#!     <XFORM_PARM PARM_NAME="REPLACE_TEXT" PARM_VALUE="&lt;at&gt;Value&lt;openparen&gt;TemplateRules.operator&lt;closeparen&gt;"/>
#!     <XFORM_PARM PARM_NAME="PARAMETERS_GROUP" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="NO_MATCH_GROUP" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="SRC_ATTRS" PARM_VALUE="TemplateRule.Parameters"/>
#!     <XFORM_PARM PARM_NAME="TRANSFORMER_GROUP" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="FIND_TEXT" PARM_VALUE="&lt;comma&gt;"/>
#!     <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="StringReplacer"/>
#!     <XFORM_PARM PARM_NAME="REGEXP" PARM_VALUE="YES"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#!   IDENTIFIER="8"
#!   TYPE="AttributeKeeper"
#!   VERSION="3"
#!   POSITION="1758.39 -231.252"
#!   BOUNDING_RECT="1758.39 -231.252 -1 -1"
#!   ORDER="5e+14"
#!   PARMS_EDITED="true"
#!   ENABLED="true"
#!   LAST_PARM_EDIT="17539"
#! >
#!     <OUTPUT_FEAT NAME="OUTPUT"/>
#!     <FEAT_COLLAPSED COLLAPSED="0"/>
#!     <XFORM_ATTR ATTR_NAME="Concept.name" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_ATTR ATTR_NAME="TemplateRule.Parameters" IS_USER_CREATED="false" FEAT_INDEX="0" />
#!     <XFORM_PARM PARM_NAME="PARAMETERS_GROUP" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="KEEP_LIST" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="KEEP_ATTRS" PARM_VALUE="Concept.name,TemplateRule.Parameters"/>
#!     <XFORM_PARM PARM_NAME="TRANSFORMER_GROUP" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="AttributeKeeper"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#!   IDENTIFIER="15"
#!   TYPE="Inspector"
#!   VERSION="5"
#!   POSITION="2315.52 -231.252"
#!   BOUNDING_RECT="2315.52 -231.252 -1 -1"
#!   ORDER="5e+14"
#!   PARMS_EDITED="true"
#!   ENABLED="true"
#!   LAST_PARM_EDIT="17539"
#! >
#!     <XFORM_PARM PARM_NAME="AREA_COLOR" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="PEN_COLOR" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="THINNER_MAX_NUM_POINTS" PARM_VALUE="&lt;Unused&gt;"/>
#!     <XFORM_PARM PARM_NAME="RASTER_NUM_COLS" PARM_VALUE="&lt;Unused&gt;"/>
#!     <XFORM_PARM PARM_NAME="POINTCLOUD_GROUP" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="VECTOR_GROUP" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="RASTER_GROUP" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="RASTER_START_COL" PARM_VALUE="&lt;Unused&gt;"/>
#!     <XFORM_PARM PARM_NAME="THINNER_INTERVAL" PARM_VALUE="&lt;Unused&gt;"/>
#!     <XFORM_PARM PARM_NAME="RASTER_START_ROW" PARM_VALUE="&lt;Unused&gt;"/>
#!     <XFORM_PARM PARM_NAME="TACKATTRS" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="THINNER_TYPE_DISPLAY" PARM_VALUE="No Thinning"/>
#!     <XFORM_PARM PARM_NAME="RASTER_VISUALIZATION_OPTION" PARM_VALUE="No Reduction"/>
#!     <XFORM_PARM PARM_NAME="TRANSFORMER_GROUP" PARM_VALUE=""/>
#!     <XFORM_PARM PARM_NAME="RASTER_NUM_ROWS" PARM_VALUE="&lt;Unused&gt;"/>
#!     <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="AttributeKeeper_Output"/>
#! </TRANSFORMER>
#! </TRANSFORMERS>
#! <FEAT_LINKS>
#! <FEAT_LINK
#!   IDENTIFIER="17"
#!   SOURCE_NODE="2"
#!   TARGET_NODE="4"
#!   SOURCE_PORT_DESC="-1"
#!   TARGET_PORT_DESC="fi 0 "
#!   ENABLED="true"
#!   EXECUTION_IDX="0"
#!   HIDDEN="false"
#!   EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#!   IDENTIFIER="14"
#!   SOURCE_NODE="4"
#!   TARGET_NODE="11"
#!   SOURCE_PORT_DESC="fo 0 AGGREGATE"
#!   TARGET_PORT_DESC="fi 0 "
#!   ENABLED="true"
#!   EXECUTION_IDX="0"
#!   HIDDEN="false"
#!   EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#!   IDENTIFIER="16"
#!   SOURCE_NODE="8"
#!   TARGET_NODE="15"
#!   SOURCE_PORT_DESC="fo 0 OUTPUT"
#!   TARGET_PORT_DESC="fi 0 "
#!   ENABLED="true"
#!   EXECUTION_IDX="0"
#!   HIDDEN="false"
#!   EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#!   IDENTIFIER="9"
#!   SOURCE_NODE="11"
#!   TARGET_NODE="8"
#!   SOURCE_PORT_DESC="fo 0 OUTPUT"
#!   TARGET_PORT_DESC="fi 0 "
#!   ENABLED="true"
#!   EXECUTION_IDX="0"
#!   HIDDEN="false"
#!   EXTRA_POINTS=""
#! />
#! </FEAT_LINKS>
#! <BREAKPOINTS>
#! </BREAKPOINTS>
#! <ATTR_LINKS>
#! </ATTR_LINKS>
#! <SUBDOCUMENTS>
#! </SUBDOCUMENTS>
#! <LOOKUP_TABLES>
#! </LOOKUP_TABLES>
#! </WORKSPACE>
FME_PYTHON_VERSION 27
GUI IGNORE SourceDataset_XML_1,XML_IN_XFMAP_FEATURE_PATHS_STRUCTURE_XML_1,XML_IN_XFMAP_XML_1,XML_IN_XRS_XML_1,XML_IN_CONTINUE_ON_GEOM_ERROR_XML_1,XML_IN_EXPOSE_ATTRS_GROUP_XML_1,XML_IN_SEARCH_ENVELOPE_MINX_XML_1,XML_IN_SEARCH_ENVELOPE_MINY_XML_1,XML_IN_SEARCH_ENVELOPE_MAXX_XML_1,XML_IN_SEARCH_ENVELOPE_MAXY_XML_1,XML_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_XML_1,XML_IN_CLIP_TO_ENVELOPE_XML_1,XML_IN_ADVANCED_XML_1,XML_IN_VALIDATE_XFMAP_XML_1,XML_IN_VALIDATE_DATASET_XML_1,XML_IN_NETWORK_AUTHENTICATION_XML_1,XFMAP_FEATURE_PATHS_XML_1
DEFAULT_MACRO SourceDataset_XML $(FME_MF_DIR)test.xml
GUI MULTIFILE SourceDataset_XML XML/GML/Compressed_XML_Files(*.xml;*.gml;*.gz)|*.xml;*.gml;*.gz|XML_Files(*.xml)|*.xml|GML_Files(*.gml)|*.gml|Compressed_XML_Files(*.gz)|*.gz|All_Files(*)|* Source XML File(s):
INCLUDE [ if {{$(SourceDataset_XML)} == {}} { puts_real {Parameter 'SourceDataset_XML' must be given a value.}; exit 1; }; ]
#! START_HEADER
#! START_WB_HEADER
READER_TYPE XML
READER_KEYWORD XML_1
READER_GEN_DIRECTIVES XFMAP_FEATURE_PATHS,ConceptRoot<lt>solidus<gt>Concept<lt>solidus<gt>TemplateRules<lt>solidus<gt>TemplateRule,XRS,,CLIP_TO_ENVELOPE,NO,XML_EXPOSE_FORMAT_ATTRS,,SEARCH_ENVELOPE_MAXX,0,SEARCH_ENVELOPE_COORDINATE_SYSTEM,,_MERGE_SCHEMAS,YES,XFMAP_FEATURE_PATHS_EXCEPT,,ADVANCED,FME_DISCLOSURE_OPEN,VALIDATE_XFMAP,no,XFMAP,,SEARCH_ENVELOPE_MAXY,0,FILE_TYPE,Feature<space>Paths,USE_SEARCH_ENVELOPE,NO,VALIDATE_DATASET,no,SEARCH_ENVELOPE_MINY,0,SEARCH_ENVELOPE_MINX,0,XFMAP_FEATURE_PATHS_SUB_FRAGMENTS,,EXPOSE_ATTRS_GROUP,,CONTINUE_ON_GEOM_ERROR,no,MAX_SCHEMA_SCAN_FEATURES,,XFMAP_FEATURE_PATHS_STRUCTURE,<lt>lf<gt><lt>lt<gt>structure<lt>space<gt>separator=<lt>quote<gt>.<lt>quote<gt><lt>space<gt>map-empty-elements=<lt>quote<gt>yes<lt>quote<gt><lt>space<gt>matched-prefix=<lt>quote<gt>attributes<lt>quote<gt><lt>space<gt>matched-attributes=<lt>quote<gt>yes<lt>quote<gt><lt>space<gt>cardinality=<lt>quote<gt>+<lt>opencurly<gt>?<lt>closecurly<gt><lt>quote<gt><lt>space<gt>structure-prefix=<lt>quote<gt><lt>quote<gt><lt>space<gt>child-position-attribute=<lt>quote<gt><lt>quote<gt><lt>space<gt>except-expression=<lt>quote<gt><lt>quote<gt><lt>space<gt>ui-mode=<lt>quote<gt>basic<lt>quote<gt><lt>space<gt>matched-ancestor-attributes=<lt>quote<gt>parent<lt>space<gt>grandparent<lt>quote<gt><lt>solidus<gt><lt>gt<gt><lt>lf<gt>

WRITER_TYPE NULL
WRITER_KEYWORD NULL_DEST
NULL_DEST_DATASET null
#! END_WB_HEADER

#! START_WB_HEADER
MACRO WB_KEYWORD "XML_1"
#! END_WB_HEADER
#! START_SOURCE_HEADER XML XML_1
# ============================================================================
# The following GUI line prompts for the XML file
# The dataset this mapping file was generated from was:
#! END_SOURCE_HEADER
#! START_WB_HEADER
DEFAULT_MACRO SourceDataset
INCLUDE [ if {{$(SourceDataset)} != ""} {                        \
 puts {DEFAULT_MACRO SourceDataset_XML_1 $(SourceDataset)}     \
 } ]
#! END_WB_HEADER
#! START_SOURCE_HEADER XML XML_1
DEFAULT_MACRO SourceDataset_XML_1 $(SourceDataset_XML)
GUI MULTIFILE SourceDataset_XML_1 XML/GML/Compressed_XML_Files(*.xml;*.gml;*.gz)|*.xml;*.gml;*.gz|XML_Files(*.xml)|*.xml|GML_Files(*.gml)|*.gml|Compressed_XML_Files(*.gz)|*.gz|All_Files(*)|* Source XML File(s):
# ============================================================================
#
# ============================================================================
# Include the deaggregate factory that will break XML aggregrate
# into simpler features
XML_1_PIPELINE "$(FME_HOME)/pipeline/xml_read.fmi"
# =================================================================
# =================================================================
DEFAULT_MACRO XML_IN_XFMAP_FEATURE_PATHS_EXCEPT_XML_1 
XML_1_XFMAP_FEATURE_PATHS_EXCEPT "$(XML_IN_XFMAP_FEATURE_PATHS_EXCEPT_XML_1)"
# =================================================================
# NOTE: Any changes made should be made to XMLFlattener, XMLFragmenter and XML Reader metafile
DEFAULT_MACRO XML_IN_XFMAP_FEATURE_PATHS_STRUCTURE_XML_1 <lf><lt>structure<space>separator=<quote>.<quote><space>map-empty-elements=<quote>yes<quote><space>matched-prefix=<quote>attributes<quote><space>matched-attributes=<quote>yes<quote><space>cardinality=<quote>+<opencurly>?<closecurly><quote><space>structure-prefix=<quote><quote><space>child-position-attribute=<quote><quote><space>except-expression=<quote><quote><space>ui-mode=<quote>basic<quote><space>matched-ancestor-attributes=<quote>parent<space>grandparent<quote><solidus><gt><lf>
XML_1_XFMAP_FEATURE_PATHS_STRUCTURE "$(XML_IN_XFMAP_FEATURE_PATHS_STRUCTURE_XML_1)"
GUI OPTIONAL XML_FLATTEN_OPTIONS XML_IN_XFMAP_FEATURE_PATHS_STRUCTURE_XML_1 Flatten Options:
# =================================================================
# NOTE: Any changes made should be made to XMLFlattener, XMLFragmenter and XML Reader metafile
DEFAULT_MACRO XML_IN_XFMAP_FEATURE_PATHS_SUB_FRAGMENTS_XML_1 
XML_1_XFMAP_FEATURE_PATHS_SUB_FRAGMENTS "$(XML_IN_XFMAP_FEATURE_PATHS_SUB_FRAGMENTS_XML_1)"
# =================================================================
DEFAULT_MACRO XML_IN_XFMAP_XML_1 
XML_1_XFMAP "$(XML_IN_XFMAP_XML_1)"
GUI OPTIONAL MULTIFILE XML_IN_XFMAP_XML_1 XML_Map_File(*.xmp;*.xml)|*.xmp;*.xml|All_Files(*)|* xfMap File:
# =================================================================
DEFAULT_MACRO XML_IN_XRS_XML_1 
XML_1_XRS "$(XML_IN_XRS_XML_1)"
GUI OPTIONAL FILENAME_MUSTEXIST XML_IN_XRS_XML_1 XRS_File(*.xml;*.xrs)|*.xml;*.xrs|All_Files(*)|* XRS File:
# =================================================================
DEFAULT_MACRO XML_IN_CONTINUE_ON_GEOM_ERROR_XML_1 no
XML_1_CONTINUE_ON_GEOM_ERROR "$(XML_IN_CONTINUE_ON_GEOM_ERROR_XML_1)"
GUI CHOICE XML_IN_CONTINUE_ON_GEOM_ERROR_XML_1 yes%no Continue on Geometry Error:
DEFAULT_MACRO XML_IN_EXPOSE_ATTRS_GROUP_XML_1 
XML_1_EXPOSE_ATTRS_GROUP "$(XML_IN_EXPOSE_ATTRS_GROUP_XML_1)"
GUI OPTIONAL DISCLOSUREGROUP XML_IN_EXPOSE_ATTRS_GROUP_XML_1 XML_IN_XML_EXPOSE_FORMAT_ATTRS Schema Attributes
# Include this file in source setting section to add external search envelope processing
# Zero as a default means we don't do any search -- this makes workbench happier
# ===========================================================================
DEFAULT_MACRO XML_IN_SEARCH_ENVELOPE_MINX_XML_1 0
XML_1_SEARCH_ENVELOPE "$(XML_IN_SEARCH_ENVELOPE_MINX_XML_1)"
GUI OPTIONAL FLOAT XML_IN_SEARCH_ENVELOPE_MINX_XML_1 Minimum X:
# ===========================================================================
DEFAULT_MACRO XML_IN_SEARCH_ENVELOPE_MINY_XML_1 0
XML_1_SEARCH_ENVELOPE "$(XML_IN_SEARCH_ENVELOPE_MINY_XML_1)"
GUI OPTIONAL FLOAT XML_IN_SEARCH_ENVELOPE_MINY_XML_1 Minimum Y:
# ===========================================================================
DEFAULT_MACRO XML_IN_SEARCH_ENVELOPE_MAXX_XML_1 0
XML_1_SEARCH_ENVELOPE "$(XML_IN_SEARCH_ENVELOPE_MAXX_XML_1)"
GUI OPTIONAL FLOAT XML_IN_SEARCH_ENVELOPE_MAXX_XML_1 Maximum X:
# ===========================================================================
DEFAULT_MACRO XML_IN_SEARCH_ENVELOPE_MAXY_XML_1 0
XML_1_SEARCH_ENVELOPE "$(XML_IN_SEARCH_ENVELOPE_MAXY_XML_1)"
GUI OPTIONAL FLOAT XML_IN_SEARCH_ENVELOPE_MAXY_XML_1 Maximum Y:
# ===========================================================================
DEFAULT_MACRO XML_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_XML_1 
XML_1_SEARCH_ENVELOPE "$(XML_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_XML_1)"
GUI OPTIONAL COORDSYS XML_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_XML_1 Search Envelope Coordinate System:
# ===========================================================================
# BUG18999: We now have a soft clip to fall back on like native spatial index
# thus we are reintroducing the clip to envelop as an option for users.
# Defualt to soft clip as per the existing database readers we are emulating
DEFAULT_MACRO XML_IN_CLIP_TO_ENVELOPE_XML_1 NO
XML_1_CLIP_TO_ENVELOPE "$(XML_IN_CLIP_TO_ENVELOPE_XML_1)"
GUI OPTIONAL CHECKBOX XML_IN_CLIP_TO_ENVELOPE_XML_1 YES%NO Clip to Search Envelope
DEFAULT_MACRO XML_IN_ADVANCED_XML_1 
GUI OPTIONAL DISCLOSUREGROUP XML_IN_ADVANCED_XML_1 XML_IN_VALIDATE_XFMAP_XML_1%XML_IN_VALIDATE_DATASET_XML_1 Advanced
# ============================================================================
# This specifies whether the xfMap document should be validated against its
# DTD file. If set to 'auto', the xfMap document will only be validated if
# its DTD file is available.
DEFAULT_MACRO XML_IN_VALIDATE_XFMAP_XML_1 no
XML_1_VALIDATE_XFMAP "$(XML_IN_VALIDATE_XFMAP_XML_1)"
GUI CHOICE XML_IN_VALIDATE_XFMAP_XML_1 yes%no%auto Validate XML Map File
# ============================================================================
# This specifies whether the XML dataset should be validated against its
# DTD file. If set to 'auto', the XML document will only be validated if
# its DTD file is available.
DEFAULT_MACRO XML_IN_VALIDATE_DATASET_XML_1 no
XML_1_VALIDATE_DATASET "$(XML_IN_VALIDATE_DATASET_XML_1)"
GUI CHOICE XML_IN_VALIDATE_DATASET_XML_1 yes%no%auto Validate XML Dataset File
# ===========================================================================
DEFAULT_MACRO XML_IN_NETWORK_AUTHENTICATION_XML_1 
XML_1_NETWORK_AUTHENTICATION "$(XML_IN_NETWORK_AUTHENTICATION_XML_1)"
GUI OPTIONAL AUTHENTICATOR XML_IN_NETWORK_AUTHENTICATION_XML_1 CONTAINER%GROUP%CONTAINER_TITLE%"Network Authentication"%PROMPT_TYPE%NETWORK Network Authentication
# ===========================================================================
DEFAULT_MACRO XML_IN_ATTRIBUTE_READING_XML_1 ALL
XML_1_ATTRIBUTE_READING "$(XML_IN_ATTRIBUTE_READING_XML_1)"
DEFAULT_MACRO XFMAP_FEATURE_PATHS_XML_1 ConceptRoot<solidus>Concept<solidus>TemplateRules<solidus>TemplateRule
GUI OPTIONAL STRING_ENCODED XFMAP_FEATURE_PATHS_XML_1 Elements to Match:
XML_1_XFMAP_FEATURE_PATHS $(XFMAP_FEATURE_PATHS_XML_1)
XML_1_DATASET "$(SourceDataset_XML_1)"
#! END_SOURCE_HEADER
#! START_WB_HEADER
#! END_WB_HEADER

#! END_HEADER

LOG_FILENAME "$(FME_MF_DIR)prototype.log"
LOG_APPEND NO
LOG_MAX_FEATURES 200
LOG_MAX_RECORDED_FEATURES 200
FME_REPROJECTION_ENGINE FME
FME_IMPLICIT_CSMAP_REPROJECTION_MODE Auto
FME_GEOMETRY_HANDLING Enhanced
FME_STROKE_MAX_DEVIATION 0
LOG_FILTER_MASK -1
DEFAULT_MACRO DATASET_KEYWORD_XML_1 XML_1
# -------------------------------------------------------------------------

XML_1_READER_META_ATTRIBUTES fme_feature_type

# -------------------------------------------------------------------------

MULTI_READER_CONTINUE_ON_READER_FAILURE No

# -------------------------------------------------------------------------

MACRO WORKSPACE_NAME prototype
MACRO FME_VIEWER_APP fmedatainspector
# -------------------------------------------------------------------------

INCLUDE [ if {[info exists env(FME_TEMP)] && [file isdirectory $env(FME_TEMP)]} {set gVisualizerTemp $env(FME_TEMP)}  elseif {[info exists env(TEMP)] && [file isdirectory $env(TEMP)]}  {set gVisualizerTemp $env(TEMP)}  elseif { $tcl_platform(platform) == "unix" } {set gVisualizerTemp "/tmp"} else {set gVisualizerTemp c:};  regsub -all {[ ,&]} {$(WORKSPACE_NAME)} {_} wsname; set gVisualizerTemp $gVisualizerTemp/${wsname}_[clock format [clock seconds] -format %H%M%S];  puts "MACRO WORKSPACE_TEMP_DIR $gVisualizerTemp"; 
MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/inspector.ffs
MACRO VISUALIZER_SCHEMA_FILE $(WORKSPACE_TEMP_DIR)/inspector.fsc
MACRO VISUALIZER_CREATE_SPATIAL_INDEX YES
# -------------------------------------------------------------------------
XML_1_DEF TemplateRule   Concept.name                 xml_char(26)   Concept.override             xml_char(6)   Concept.status               xml_char(7)   Concept.uuid                 xml_char(37)   TemplateRule                 xml_char(1)   TemplateRule.Parameters      xml_char(57)   TemplateRules.operator       xml_char(4)   xml_fragment                 xml_xml   xml_id                       xml_char(24)   xml_matched_element          xml_char(13)   xml_parent_child_pos         xml_char(1)   xml_parent_id                xml_char(1)
# -------------------------------------------------------------------------

FACTORY_DEF * RoutingFactory   FACTORY_NAME "Router and Unexpected Input Remover"   COMMAND_PARM_EVALUATION SINGLE_PASS   MULTI_READER_KEYWORD XML_1   INPUT FEATURE_TYPE *    ROUTE XML XML_1::TemplateRule TO FME_GENERIC ::TemplateRule ALIAS_GEOMETRY    MERGE_INPUT Yes   OUTPUT ROUTED FEATURE_TYPE *
XML_1_MERGE_DEF XML_1::TemplateRule EXACT TemplateRule
# -------------------------------------------------------------------------

FACTORY_DEF * TeeFactory    FACTORY_NAME "TemplateRule (XML_1) Splitter"    INPUT FEATURE_TYPE TemplateRule    OUTPUT FEATURE_TYPE TemplateRule_XML_1
DEFAULT_MACRO WB_CURRENT_CONTEXT
# -------------------------------------------------------------------------

DEFAULT_MACRO Aggregator_BREAK_ATTR
INCLUDE [if {"No" == "Yes"} {puts {MACRO Aggregator_BREAK_ATTR BREAK_BEFORE_FIELD_CHANGE Concept.name} }]
FACTORY_DEF {*} AggregateFactory    FACTORY_NAME Aggregator    INPUT  FEATURE_TYPE TemplateRule_XML_1    MODE ONE_LEVEL    GROUP_BY Concept.name    $(Aggregator_BREAK_ATTR)    REMOVE_GEOMETRY NO    ACCUMULATE_ATTRIBUTES One    LIST_ATTRS_TO_INCLUDE { <Unused> }    LIST_ATTRS_TO_INCLUDE_MODE <Unused>    CONCATENATE_FIELDS TemplateRule TemplateRule.Parameters    SEPARATOR <comma><space>    PRODUCE_MULTIS YES    OUTPUT AGGREGATE FEATURE_TYPE Aggregator_AGGREGATE

# -------------------------------------------------------------------------

MACRO casemac
INCLUDE [ if { {YES} == {NO} } { puts {MACRO casemac -nocase}} ]
Tcl2 proc StringReplacer_f264f0e2_4080_4506_8140_6029ba68d2b19_replacer { findText replaceText invalidValue} {     set attrs [split \"TemplateRule.Parameters\" {,}];     set findValue [FME_DecodeText $findText];     set replaceValue [FME_DecodeText $replaceText];     foreach attr $attrs {       set attrVal [FME_GetAttribute $attr];       set noMatch true;       if {{YES} == {YES}} {         set newAttrVal [FME_ReplaceRegex $(casemac) $findValue $attrVal $replaceValue];       } else {         set newAttrVal [string map $(casemac) [list $findValue $replaceValue] $attrVal];       };       if { $newAttrVal ne $attrVal } {         set noMatch false;         FME_SetAttribute $attr $newAttrVal;       };       if {$noMatch} {          if { $invalidValue == {FME_NULL_VALUE} } {             FME_SetAttributeNull $attr;          } elseif { $invalidValue != {_FME_NO_OP_} }  {             FME_SetAttribute $attr [FME_DecodeText $invalidValue];          };       };     }; }
FACTORY_DEF * TeeFactory    FACTORY_NAME StringReplacer    INPUT  FEATURE_TYPE Aggregator_AGGREGATE    OUTPUT FEATURE_TYPE StringReplacer_OUTPUT         @Tcl2("StringReplacer_f264f0e2_4080_4506_8140_6029ba68d2b19_replacer {<comma>} {@EvaluateExpression(FDIV,STRING_ENCODED,<at>Value<openparen>TemplateRules.operator<closeparen>,StringReplacer)} {_FME_NO_OP_}")

# -------------------------------------------------------------------------

INCLUDE [    set macroLine "MACRO AttributeKeeper_3f532692_99cc_4de3_bfbe_9d6ca344c74a8_LIST_EXP ";    foreach attr [split ""] {       set attr [FME_DecodeText $attr];       set attr [regsub "{}$" $attr "{}.*"];       set attr [regsub -all "{}" $attr "\\{\[0-9\]+\\}"];       append macroLine ",^$attr$";    };    puts $macroLine; ]

FACTORY_DEF * TeeFactory    FACTORY_NAME AttributeKeeper    INPUT  FEATURE_TYPE StringReplacer_OUTPUT    OUTPUT FEATURE_TYPE AttributeKeeper_OUTPUT        @KeepAttributes(fme_encoded,Concept.name,TemplateRule.Parameters,fme_pcre_match,"^fme_$(AttributeKeeper_3f532692_99cc_4de3_bfbe_9d6ca344c74a8_LIST_EXP)")

# -------------------------------------------------------------------------

# Assumption is that the workspace temp dir has been already set and created.  See controldefs.cpp - ControlDefs::writeVisualizerTempDir
DEFAULT_MACRO WORKSPACE_TEMP_DIR
FACTORY_DEF * InspectorFactory    FACTORY_NAME AttributeKeeper_Output_Prepper    COMMAND_PARM_EVALUATION SINGLE_PASS    INPUT  FEATURE_TYPE AttributeKeeper_OUTPUT    GROUP_ATTRIBUTE __inspector_feature_type_attr__    GROUP_BY    GROUP_ATTRIBUTE_PREFIX AttributeKeeper_Output    RASTER_REDUCTION NoReduction    POINT_CLOUD_REDUCTION NO_THINNING    OUTPUT RESULT FEATURE_TYPE __viewme__
# Now route all the features into the recorder, changing their
# feature type to the transformer name so that they view nicely

DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs
DEFAULT_MACRO VISUALIZER_CREATE_SPATIAL_INDEX NO
# [PR#45549] The Data Inspector will limit the maximum number of features
# it reads on WIN32, so we will correspondingly limit the number of
# features we record here using the MAX_FEATURES_TO_RECORD directive.

FACTORY_DEF * RecorderFactory    FACTORY_NAME AttributeKeeper_Output_Recorder    COMMAND_PARM_EVALUATION SINGLE_PASS    INPUT FEATURE_TYPE __viewme__       _wb_termination_feature Yes       @FeatureType(TERMINATOR_@Value(_wb_termination_xformer))    INPUT FEATURE_TYPE __viewme__       @FeatureType(@Value(__inspector_feature_type_attr__))       @RemoveAttributes(__inspector_feature_type_attr__)    FEATURE_FILE "$(VISUALIZER_FEATURE_FILE)"    STORE_SCANNED_SCHEMA YES    CREATE_SPATIAL_INDEX "$(VISUALIZER_CREATE_SPATIAL_INDEX)"    INSPECTOR "$(VISUALIZER_CREATE_SPATIAL_INDEX)"    FSC_SCHEMA Concept.name,varchar<openparen>255<closeparen>,TemplateRule.Parameters,varchar<openparen>255<closeparen>    MODE RECORD    STORE_SCANNED_METADATA    RECORD_DIRECTLY_TO_DISK YES    MAX_FEATURES_TO_RECORD WIN32 2000000

# -------------------------------------------------------------------------

FACTORY_DEF * RoutingFactory FACTORY_NAME "Destination Feature Type Routing Correlator"   COMMAND_PARM_EVALUATION SINGLE_PASS   INPUT FEATURE_TYPE *   FEATURE_TYPE_ATTRIBUTE __wb_out_feat_type__   OUTPUT ROUTED FEATURE_TYPE *    OUTPUT NOT_ROUTED FEATURE_TYPE __nuke_me__ @Tcl2("FME_StatMessage 818059 [FME_GetAttribute fme_template_feature_type] 818060 818061 fme_warn")
# -------------------------------------------------------------------------

FACTORY_DEF * TeeFactory   FACTORY_NAME "Final Output Nuker"   INPUT FEATURE_TYPE __nuke_me__

# -------------------------------------------------------------------------

FACTORY_DEF * CreationFactory   CREATE_AT_END   OUTPUT FEATURE_TYPE __NUKEME__   @TCL("if [file exists {$(WORKSPACE_TEMP_DIR)}] {set files [glob -nocomplain -directory  {$(WORKSPACE_TEMP_DIR)} -tails *.ffs];   if {[llength $files] == 1} {    set theFile {$(WORKSPACE_TEMP_DIR)/};   append theFile [lindex $files 0];   eval FME_Execute System \173\042$(FME_HOME_UNIX)/fmedatainspector\042 --visualizer --single-application --delete-on-close --no-source-prompt -f FFS $theFile & \175;  } elseif { [llength $files] == 0 } {  catch { file delete -force {$(WORKSPACE_TEMP_DIR)} };  } else {  set filesNoExt {}; set lastfile {}; foreach {fileName} [lsort $files] { set fileNoExt [string trimright $fileName {.ffs}]; if [regexp {(.*)_[0-9]*$} $fileNoExt wholething fileNoExtBase] {  if { $fileNoExtBase == $lastfile } { continue } }; set lastfile $fileNoExt; lappend filesNoExt $fileNoExt };  eval FME_Execute System \173\042$(FME_HOME_UNIX)/fmedatainspector\042 --visualizer --single-application --delete-on-close --no-source-prompt -d {$(WORKSPACE_TEMP_DIR)} -a ffs -f FFS $filesNoExt & \175; }; }; ")
FACTORY_DEF * TeeFactory   INPUT FEATURE_TYPE __NUKEME__
