XML File Format for Imported Fasteners

Your fastener data must conform to the XML schema definition (XSD) shown here.

This page discusses:

See Also
Importing Fasteners

XML Format

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="fasteners">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="rootProduct" minOccurs="0" maxOccurs="1"/>
                <xsd:element ref="partMapping" minOccurs="0" maxOccurs="1"/>
                <xsd:element ref="transform" minOccurs="0" maxOccurs="1"/>
                <xsd:element ref="units" minOccurs="1" maxOccurs="1"/>
                <xsd:element ref="pointFastenerGroup" minOccurs="1" maxOccurs="unbounded"/>
				<xsd:element ref="lineFastenerGroup" minOccurs="1" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
	
    <xsd:element name="rootProduct">
        <xsd:complexType>
            <xsd:attribute name="name" type="xsd:string" use="required"/>
        </xsd:complexType>
    </xsd:element>
	
    <xsd:element name="partMapping">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="part" minOccurs="1" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
	
    <xsd:element name="part">
        <xsd:complexType>
            <xsd:attribute name="id" type="xsd:string" use="optional"/>
            <xsd:attribute name="occurrencePath" type="xsd:string" use="optional"/>
            <xsd:attribute name="featurePublication" type="xsd:string" use="optional"/>
			<xsd:attribute name="meshPart" type="xsd:string" use="optional"/>
        </xsd:complexType>
    </xsd:element>
	
    <xsd:element name="transform">
        <xsd:complexType>
            <xsd:attribute name="origin" type="xsd:string" use="required"/>
            <xsd:attribute name="axis1" type="xsd:string" use="required"/>
            <xsd:attribute name="axis2" type="xsd:string" use="required"/>
            <xsd:attribute name="axis3" type="xsd:string" use="required"/>
        </xsd:complexType>
    </xsd:element>
	
    <xsd:simpleType name="lengthUnits">
        <xsd:restriction base="xsd:token">
            <xsd:enumeration value="mm"/>
            <xsd:enumeration value="m"/>
            <xsd:enumeration value="cm"/>
            <xsd:enumeration value="km"/>
            <xsd:enumeration value="in"/>
            <xsd:enumeration value="ft"/>
            <xsd:enumeration value="micron"/>
            <xsd:enumeration value="yard"/>
            <xsd:enumeration value="mile"/>
            <xsd:enumeration value="nm"/>
            <xsd:enumeration value="hm"/>
        </xsd:restriction>
    </xsd:simpleType>
	
    <xsd:element name="units">
        <xsd:complexType>
            <xsd:attribute name="length" type="lengthUnits" use="required"/>
        </xsd:complexType>
    </xsd:element>

    <xsd:simpleType name="couplingType">
        <xsd:restriction base="xsd:token">
            <xsd:enumeration value="Distributing"/>
            <xsd:enumeration value="Kinematic"/>
        </xsd:restriction>
    </xsd:simpleType>
	
    <xsd:simpleType name="structure">
        <xsd:restriction base="xsd:token">
            <xsd:enumeration value="Rigid"/>
            <xsd:enumeration value="Coupling"/>
            <xsd:enumeration value="Solid hex"/>
            <xsd:enumeration value="Beam"/>
            <xsd:enumeration value="Shell"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:element name="pointFastenerGroup">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="part" minOccurs="1" maxOccurs="10"/>
                <xsd:element ref="material" minOccurs="0" maxOccurs="1"/>
                <xsd:element ref="point" minOccurs="1" maxOccurs="unbounded"/>
				<xsd:element ref="pointFastenerConstruct" minOccurs="0" maxOccurs="1"/>
            </xsd:sequence>
            <xsd:attribute name="id" type="xsd:string" use="required"/>
            <xsd:attribute name="diameter" type="xsd:double" use="optional"/>
        </xsd:complexType>
    </xsd:element>
	
	<xsd:element name="lineFastenerGroup">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="part" minOccurs="1" maxOccurs="10"/>
                <xsd:element ref="material" minOccurs="0" maxOccurs="1"/>
                <xsd:element ref="line" minOccurs="1" maxOccurs="unbounded"/>
				<xsd:element ref="lineFastenerConstruct" minOccurs="0" maxOccurs="1"/>
            </xsd:sequence>
            <xsd:attribute name="id" type="xsd:string" use="required"/>
            <xsd:attribute name="width" type="xsd:double" use="optional"/>
        </xsd:complexType>
    </xsd:element>
	
    <xsd:element name="point">
        <xsd:complexType>
            <xsd:attribute name="id" type="xsd:string" use="required"/>
            <xsd:attribute name="location" type="xsd:string" use="optional"/>
        </xsd:complexType>
    </xsd:element>
	
    <xsd:element name="material">
        <xsd:complexType>
            <xsd:attribute name="id" type="xsd:string"/>
        </xsd:complexType>
    </xsd:element>
	
	<xsd:element name="line">
        <xsd:complexType>
            <xsd:attribute name="id" type="xsd:string" use="required"/>
            <xsd:attribute name="pathType" type="xsd:string" use="required"/>
			<xsd:attribute name="linePath" type="xsd:string" use="optional"/>
			<xsd:sequence>
				<xsd:element ref="point" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
        </xsd:complexType>
    </xsd:element>
	
	<xsd:element name="constructs">
       <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="pointFastenerConstruct" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element ref="lineFastenerConstruct" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
	
	
	
	<xsd:element name="pointFastenerConstruct">
        <xsd:complexType>
			<xsd:attribute name="id" type="xsd:string" use="required"/>
            <xsd:attribute name="structure" type="xsd:string" use="required"/>
            <xsd:attribute name="couplingType" type="xsd:string" use="required"/>
            <xsd:attribute name="maximumProjectionDistance" type="xsd:double" use="optional"/>
			<xsd:attribute name="maximumAngle" type="xsd:double" use="optional"/>
			<xsd:attribute name="maximumAngleBetweenAdjacentFaces" type="xsd:double" use="optional"/>
			<xsd:attribute name="adjustTolerance" type="xsd:double" use="optional"/>
        </xsd:complexType>
    </xsd:element>
	
	<xsd:element name="lineFastenerConstruct">
        <xsd:complexType>
			<xsd:attribute name="id" type="xsd:string" use="required"/>
            <xsd:attribute name="structure" type="xsd:string" use="required"/>
            <xsd:attribute name="couplingType" type="xsd:string" use="required"/>
            <xsd:attribute name="maximumProjectionDistance" type="xsd:string" use="optional"/>
			<xsd:attribute name="maximumAngle" type="xsd:string" use="optional"/>
			<xsd:attribute name="height" type="xsd:string" use="optional"/>
			<xsd:attribute name="spacing" type="xsd:string" use="required"/>
			<xsd:attribute name="numberOfElementsAlongWidth" type="xsd:double" use="optional"/>
			<xsd:attribute name="numberOfLayers" type="xsd:double" use="optional"/>
        </xsd:complexType>
    </xsd:element>	

</xsd:schema>

Sample File

A sample XML file is shown below. Elements (tags) and attributes in italics are optional.

<fasteners xmlns="sma:fastener">
   <rootProduct name="Skateboard"/> 
   <!-- This is the optional product specification. All objects created will be aggregated under this product, 
        and all coordinates are assumed to be with respect to this product-->
   <partMapping> 
   <!-- This section allows mapping of part occurrence paths to optional IDs that can be used in the weld 
        definitions instead of specifying the occurrence paths every time-->
      <part id="1" occurrencePath=""/>
      <part id="2" occurrencePath="Wheel-axle.1!axle"/>
      <part id="3" occurrencePath="Wheel-axle.1!wheel.1"/>
      <part id="4" occurrencePath="Wheel-axle.1!wheel.2"/>
      <part id="5" occurrencePath="Wheel-axle.2!axle"/>
      <part id="6" occurrencePath="Wheel-axle.2!wheel.1"/>
      <part id="7" occurrencePath="Wheel-axle.2!wheel.2"/>
   </partMapping>
   <transform origin="3.0, 0.0, 0.0" axis1="0.0, 1.0, 0.0" axis2="-1.0, 0.0, 0.0" axis3="0.0, 0.0, 1.0"/>
   <!-- Optional transform data applied to all coordinates-->
   <units length="mm"/> <!-- Required, but we can possibly have a default-->
   <pointFastenerGroup id="1234" diameter="0.1">
      <part id="5" featurePublication="FastenerSupport"/> <!-- Refers to mapped ID from the part mapping entries-->
      <part occurrencePath="Wheel-axle.2!wheel.1"/> <!-- Uses occurrence path directly-->
      <material id="Steel"/>
      <point id="101" location="1.0, 2.0, 3.0" orientation="1.0, 1.0, 1.0"/> <!-- orientation is a vector -->
      <point id="102" location="2.0, 3.0, 4.0"/>
	  <pointFastenerConstruct id="PFC1"/>
   </pointFastenerGroup>
   <pointFastenerGroup id="1235" diameter="0.2">
      <part id="2"/>
      <part id="3"/>
      <part id="4"/>
      <point id="101" location="1.0, 2.0, 3.0" orientation="2.0, 1.0, 2.0"/>
      <point id="102" location="2.0, 3.0, 4.0"/>
	  <!-- No point fastener construct defined : the UI defined point fastener template will be used -->
   </pointFastenerGroup>
   <lineFastenerGroup id="1236" width="0.2">
      <part id="1" meshPart="Board"/> <!-- Refers to mesh part in product -->
      <part id="2"/>
	  <material id="Material_1236"/>
      <line id="1" pathType="label" linePath="Skateboard!Line.1"/>
	  <lineFastenerConstruct id="LFC1"/>
   </lineFastenerGroup>
   <lineFastenerGroup id="1237" width="0.2">
      <part id="1" meshPart="Board"/>
      <part id="5"/>
	  <material id="Material_1236"/>
      <line id="2" pathType="Points">
      <point id="103" location="5.0, 6.0, 7.0"/>
      <point id="104" location="6.0, 6.0, 7.0"/>
      <point id="105" location="7.0, 6.0, 7.0"/>
      <point id="106" location="8.0, 6.0, 7.0"/>
      <point id="107" location="9.0, 6.0, 7.0"/>
    </line>
	<!-- No point fastener construct defined : the UI defined line fastener template will be used -->
   </lineFastenerGroup>
   <constructs>
    <pointFastenerConstruct id="PFC1" structure="Rigid" couplingType="Kinematic"/>
    <lineFastenerConstruct  id="LFC1" structure="Solid hex" couplingType="Kinematic" spacing="0.005"/>
  </constructs>
</fasteners>