10.1.3.3.3. VitFormat

This module implements the val XML file format and is designed so as to decouple the XML format and the calculation API.

The purpose of each XmlObjectAdaptator sub-classes is to serve as a bidirectional adaptor between the XML format and the API.

Valentina File Format Concept

  • all entities which are referenced later in the file are identified by a unique positive integer over the file, usually incremented from 1.
  • a file contains one or several “pieces”
    • pieces correspond to independent scopes, one cannot access calculations of another piece
    • pieces share the same referential, usually the root point of a piece is placed next to the previous piece
  • a piece has “calculations” and “details”
    • a calculations corresponds to a point, a segment, or a Bézier curve …
    • a detail corresponds to a garment piece defined by segments and curves
    • one can define several details within a piece
class Patro.FileFormat.Valentina.VitFormat.AlongLinePoint(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.PointLinePropertiesMixin, Patro.FileFormat.Valentina.VitFormat.FirstSecondPointMixin, Patro.FileFormat.Valentina.VitFormat.LengthMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, StringAttribute name, IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, ColorAttribute line_color, StrokeStyleAttribute line_style, StringAttribute name, IntAttribute first_point, IntAttribute second_point, StringAttribute length, StringAttribute name]
__operation__

alias of Patro.Pattern.SketchOperation.AlongLinePoint

__type__ = 'alongLine'
first_point
id
length
line_color
line_style
mx
my
name
second_point
class Patro.FileFormat.Valentina.VitFormat.AngleMixin[source]

Bases: object

__attributes__ = (StringAttribute angle,)
class Patro.FileFormat.Valentina.VitFormat.BasePointMixin[source]

Bases: object

__attributes__ = (IntAttribute base_point,)
class Patro.FileFormat.Valentina.VitFormat.BissectorPoint(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.PointLinePropertiesMixin, Patro.FileFormat.Valentina.VitFormat.FirstSecondThirdPointMixin, Patro.FileFormat.Valentina.VitFormat.LengthMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, StringAttribute name, IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, ColorAttribute line_color, StrokeStyleAttribute line_style, StringAttribute name, IntAttribute first_point, IntAttribute second_point, IntAttribute third_point, StringAttribute length, StringAttribute name]
__type__ = 'bisector'
first_point
id
length
line_color
line_style
mx
my
name
second_point
third_point
class Patro.FileFormat.Valentina.VitFormat.CalculationMixin[source]

Bases: object

__attributes__ = (IntAttribute id,)
__operation__ = None
call_operation_function(sketch, kwargs)[source]
classmethod from_operation()[source]
to_operation(sketch)[source]
class Patro.FileFormat.Valentina.VitFormat.CalculationTypeMixin[source]

Bases: Patro.FileFormat.Valentina.VitFormat.CalculationMixin

to_xml()[source]
class Patro.FileFormat.Valentina.VitFormat.ColorAttribute(py_attribute, xml_attribute=None, default=None)[source]

Bases: Patro.Common.Xml.Objectivity.Attribute

__COLORS__ = ('black', 'blue', 'cornflowerblue', 'darkBlue', 'darkGreen', 'darkRed', 'darkviolet', 'deeppink', 'deepskyblue', 'goldenrod', 'green', 'lightsalmon', 'lime', 'mediumseagreen', 'orange', 'violet', 'yellow')
classmethod from_xml(value)[source]

Convert a value from XML to Python

class Patro.FileFormat.Valentina.VitFormat.Detail(modeling, *args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.MxMyMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [FloatAttribute mx, FloatAttribute my, IntAttribute id, IntAttribute version, BoolAttribute forbidFlipping, IntAttribute width, BoolAttribute united, StringAttribute name, BoolAttribute inLayout, BoolAttribute seamAllowance]
__init__(modeling, *args, **kwargs)[source]

Initialize self. See help(type(self)) for accurate signature.

append_node(node)[source]
forbidFlipping
id
inLayout
iter_on_nodes()[source]
mx
my
name
seamAllowance
united
version
width
class Patro.FileFormat.Valentina.VitFormat.DetailData(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.HeightWidthMixin, Patro.FileFormat.Valentina.VitFormat.MxMyMixin, Patro.FileFormat.Valentina.VitFormat.FontSizeMixin, Patro.FileFormat.Valentina.VitFormat.VisibleRotationMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute height, IntAttribute width, FloatAttribute mx, FloatAttribute my, IntAttribute fontSize, BoolAttribute visible, IntAttribute rotation, StringAttribute letter]
fontSize
height
letter
mx
my
rotation
visible
width
class Patro.FileFormat.Valentina.VitFormat.DetailGrainline(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.MxMyMixin, Patro.FileFormat.Valentina.VitFormat.VisibleRotationMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [FloatAttribute mx, FloatAttribute my, BoolAttribute visible, IntAttribute rotation, IntAttribute arrows, IntAttribute length]
arrows
length
mx
my
rotation
visible
class Patro.FileFormat.Valentina.VitFormat.DetailNode(*args, **kwargs)[source]

Bases: Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute object_id, StringAttribute type, BoolAttribute reverse]
object_id
reverse
type
class Patro.FileFormat.Valentina.VitFormat.DetailPatternInfo(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.HeightWidthMixin, Patro.FileFormat.Valentina.VitFormat.MxMyMixin, Patro.FileFormat.Valentina.VitFormat.FontSizeMixin, Patro.FileFormat.Valentina.VitFormat.VisibleRotationMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute height, IntAttribute width, FloatAttribute mx, FloatAttribute my, IntAttribute fontSize, BoolAttribute visible, IntAttribute rotation, IntAttribute height, IntAttribute width]
fontSize
height
mx
my
rotation
visible
width
class Patro.FileFormat.Valentina.VitFormat.EndLinePoint(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.PointLinePropertiesMixin, Patro.FileFormat.Valentina.VitFormat.BasePointMixin, Patro.FileFormat.Valentina.VitFormat.LengthAngleMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, StringAttribute name, IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, ColorAttribute line_color, StrokeStyleAttribute line_style, StringAttribute name, IntAttribute base_point, StringAttribute length, StringAttribute angle, StringAttribute length, StringAttribute name]
__operation__

alias of Patro.Pattern.SketchOperation.EndLinePoint

__type__ = 'endLine'
angle
base_point
id
length
line_color
line_style
mx
my
name
class Patro.FileFormat.Valentina.VitFormat.FirstSecondPointMixin[source]

Bases: object

__attributes__ = (IntAttribute first_point, IntAttribute second_point)
class Patro.FileFormat.Valentina.VitFormat.FirstSecondThirdPointMixin[source]

Bases: Patro.FileFormat.Valentina.VitFormat.FirstSecondPointMixin

__attributes__ = (IntAttribute third_point,)
class Patro.FileFormat.Valentina.VitFormat.FontSizeMixin[source]

Bases: object

__attributes__ = (IntAttribute fontSize,)
class Patro.FileFormat.Valentina.VitFormat.HeightPoint(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.PointLinePropertiesMixin, Patro.FileFormat.Valentina.VitFormat.BasePointMixin, Patro.FileFormat.Valentina.VitFormat.Line1Mixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, StringAttribute name, IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, ColorAttribute line_color, StrokeStyleAttribute line_style, StringAttribute name, IntAttribute base_point, IntAttribute point1_line1, IntAttribute point2_line1, StringAttribute name]
__type__ = 'height'
base_point
id
line_color
line_style
mx
my
name
point1_line1
point2_line1
class Patro.FileFormat.Valentina.VitFormat.HeightWidthMixin[source]

Bases: object

__attributes__ = (IntAttribute height, IntAttribute width)
class Patro.FileFormat.Valentina.VitFormat.LengthAngleMixin[source]

Bases: Patro.FileFormat.Valentina.VitFormat.LengthMixin, Patro.FileFormat.Valentina.VitFormat.AngleMixin

class Patro.FileFormat.Valentina.VitFormat.LengthMixin[source]

Bases: object

__attributes__ = (StringAttribute length,)
class Patro.FileFormat.Valentina.VitFormat.Line(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.CalculationMixin, Patro.FileFormat.Valentina.VitFormat.LinePropertiesMixin, Patro.FileFormat.Valentina.VitFormat.FirstSecondPointMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute id, ColorAttribute line_color, StrokeStyleAttribute line_style, IntAttribute first_point, IntAttribute second_point, IntAttribute id]
__operation__

alias of Patro.Pattern.SketchOperation.Line

__tag__ = 'line'
first_point
classmethod from_operation(operation)[source]
id
line_color
line_style
second_point
to_operation(sketch)[source]
class Patro.FileFormat.Valentina.VitFormat.Line12Mixin[source]

Bases: Patro.FileFormat.Valentina.VitFormat.Line1Mixin, Patro.FileFormat.Valentina.VitFormat.Line2Mixin

class Patro.FileFormat.Valentina.VitFormat.Line1Mixin[source]

Bases: object

__attributes__ = (IntAttribute point1_line1, IntAttribute point2_line1)
class Patro.FileFormat.Valentina.VitFormat.Line2Mixin[source]

Bases: object

__attributes__ = (IntAttribute point1_line2, IntAttribute point2_line2)
class Patro.FileFormat.Valentina.VitFormat.LineIntersectAxisPoint(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.PointLinePropertiesMixin, Patro.FileFormat.Valentina.VitFormat.BasePointMixin, Patro.FileFormat.Valentina.VitFormat.Line1Mixin, Patro.FileFormat.Valentina.VitFormat.AngleMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, StringAttribute name, IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, ColorAttribute line_color, StrokeStyleAttribute line_style, StringAttribute name, IntAttribute base_point, IntAttribute point1_line1, IntAttribute point2_line1, StringAttribute angle, StringAttribute name]
__type__ = 'lineIntersectAxis'
angle
base_point
id
line_color
line_style
mx
my
name
point1_line1
point2_line1
class Patro.FileFormat.Valentina.VitFormat.LineIntersectPoint(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.PointMixin, Patro.FileFormat.Valentina.VitFormat.Line12Mixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, StringAttribute name, IntAttribute point1_line1, IntAttribute point2_line1, IntAttribute point1_line2, IntAttribute point2_line2, IntAttribute point1_line1, IntAttribute point2_line1, StringAttribute name]
__operation__

alias of Patro.Pattern.SketchOperation.LineIntersectPoint

__type__ = 'lineIntersect'
id
mx
my
name
point1_line1
point1_line2
point2_line1
point2_line2
class Patro.FileFormat.Valentina.VitFormat.LinePropertiesMixin[source]

Bases: object

__attributes__ = (ColorAttribute line_color, StrokeStyleAttribute line_style)
class Patro.FileFormat.Valentina.VitFormat.ModelingItemMixin[source]

Bases: object

__attributes__ = (IntAttribute id, IntAttribute object_id, StringAttribute type, BoolAttribute in_use)
class Patro.FileFormat.Valentina.VitFormat.ModelingPoint(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.ModelingItemMixin, Patro.FileFormat.Valentina.VitFormat.MxMyMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute id, IntAttribute object_id, StringAttribute type, BoolAttribute in_use, FloatAttribute mx, FloatAttribute my, IntAttribute id, IntAttribute object_id, StringAttribute type, BoolAttribute in_use]
id
in_use
mx
my
object_id
type
class Patro.FileFormat.Valentina.VitFormat.ModelingSpline(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.ModelingItemMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute id, IntAttribute object_id, StringAttribute type, BoolAttribute in_use, IntAttribute id, IntAttribute object_id, StringAttribute type, BoolAttribute in_use]
id
in_use
object_id
type
class Patro.FileFormat.Valentina.VitFormat.MxMyMixin[source]

Bases: object

__attributes__ = (FloatAttribute mx, FloatAttribute my)
class Patro.FileFormat.Valentina.VitFormat.NormalPoint(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.PointLinePropertiesMixin, Patro.FileFormat.Valentina.VitFormat.FirstSecondPointMixin, Patro.FileFormat.Valentina.VitFormat.LengthAngleMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, StringAttribute name, IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, ColorAttribute line_color, StrokeStyleAttribute line_style, StringAttribute name, IntAttribute first_point, IntAttribute second_point, StringAttribute length, StringAttribute angle, StringAttribute length, StringAttribute name]
__operation__

alias of Patro.Pattern.SketchOperation.NormalPoint

__type__ = 'normal'
angle
first_point
id
length
line_color
line_style
mx
my
name
second_point
class Patro.FileFormat.Valentina.VitFormat.Point[source]

Bases: object

__TYPES__ = {'alongLine': <class 'Patro.FileFormat.Valentina.VitFormat.AlongLinePoint'>, 'bisector': None, 'curveIntersectAxis': None, 'cutArc': None, 'cutSpline': None, 'cutSplinePath': None, 'endLine': <class 'Patro.FileFormat.Valentina.VitFormat.EndLinePoint'>, 'height': None, 'lineIntersect': <class 'Patro.FileFormat.Valentina.VitFormat.LineIntersectPoint'>, 'lineIntersectAxis': None, 'normal': <class 'Patro.FileFormat.Valentina.VitFormat.NormalPoint'>, 'pointFromArcAndTangent': None, 'pointFromCircleAndTangent': None, 'pointOfContact': None, 'pointOfIntersection': <class 'Patro.FileFormat.Valentina.VitFormat.PointOfIntersection'>, 'pointOfIntersectionArcs': None, 'pointOfIntersectionCircles': None, 'pointOfIntersectionCurves': None, 'shoulder': None, 'single': <class 'Patro.FileFormat.Valentina.VitFormat.SinglePoint'>, 'triangle': None, 'trueDarts': None}
class Patro.FileFormat.Valentina.VitFormat.PointLinePropertiesMixin[source]

Bases: Patro.FileFormat.Valentina.VitFormat.PointMixin, Patro.FileFormat.Valentina.VitFormat.LinePropertiesMixin

class Patro.FileFormat.Valentina.VitFormat.PointMixin[source]

Bases: Patro.FileFormat.Valentina.VitFormat.CalculationTypeMixin, Patro.FileFormat.Valentina.VitFormat.MxMyMixin

__attributes__ = (StringAttribute name,)
__tag__ = 'point'
classmethod from_operation(operation)[source]
to_operation(sketch)[source]
class Patro.FileFormat.Valentina.VitFormat.PointOfIntersection(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.PointMixin, Patro.FileFormat.Valentina.VitFormat.FirstSecondPointMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, StringAttribute name, IntAttribute first_point, IntAttribute second_point, StringAttribute name]
__operation__

alias of Patro.Pattern.SketchOperation.PointOfIntersection

__type__ = 'pointOfIntersection'
first_point
id
mx
my
name
second_point
class Patro.FileFormat.Valentina.VitFormat.ShoulderPoint(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.PointLinePropertiesMixin, Patro.FileFormat.Valentina.VitFormat.Line1Mixin, Patro.FileFormat.Valentina.VitFormat.LengthMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, StringAttribute name, IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, ColorAttribute line_color, StrokeStyleAttribute line_style, StringAttribute name, IntAttribute point1_line1, IntAttribute point2_line1, StringAttribute length, IntAttribute shoulder_point]
__type__ = 'shoulder'
id
length
line_color
line_style
mx
my
name
point1_line1
point2_line1
shoulder_point
class Patro.FileFormat.Valentina.VitFormat.SimpleInteractiveSpline(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.SplineMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute id, IntAttribute id, IntAttribute id, IntAttribute id, IntAttribute first_point, IntAttribute second_point, StringAttribute length1, StringAttribute length2, StringAttribute angle1, StringAttribute angle2, StringAttribute line_color]
__operation__

alias of Patro.Pattern.SketchOperation.SimpleInteractiveSpline

__type__ = 'simpleInteractive'
angle1
angle2
first_point
classmethod from_operation(operation)[source]
id
length1
length2
line_color
second_point
to_operation(sketch)[source]
class Patro.FileFormat.Valentina.VitFormat.SinglePoint(*args, **kwargs)[source]

Bases: Patro.FileFormat.Valentina.VitFormat.PointMixin, Patro.FileFormat.Valentina.VitFormat.XyMixin, Patro.Common.Xml.Objectivity.XmlObjectAdaptator

__attributes__ = [IntAttribute id, IntAttribute id, IntAttribute id, FloatAttribute mx, FloatAttribute my, StringAttribute name, StringAttribute x, StringAttribute y, StringAttribute name]
__operation__

alias of Patro.Pattern.SketchOperation.SinglePoint

__type__ = 'single'
id
mx
my
name
x
y
class Patro.FileFormat.Valentina.VitFormat.Spline[source]

Bases: object

__TYPES__ = {'cubicBezier': None, 'cubicBezierPath': None, 'pathInteractive': None, 'simpleInteractive': <class 'Patro.FileFormat.Valentina.VitFormat.SimpleInteractiveSpline'>}
class Patro.FileFormat.Valentina.VitFormat.SplineMixin[source]

Bases: Patro.FileFormat.Valentina.VitFormat.CalculationTypeMixin

__tag__ = 'spline'
class Patro.FileFormat.Valentina.VitFormat.StrokeStyleAttribute(py_attribute, xml_attribute=None, default=None)[source]

Bases: Patro.Common.Xml.Objectivity.Attribute

__STROKE_STYLE__ = {'dashDotDotLine': <StrokeStyle.DashDotDotLine: 6>, 'dashDotLine': <StrokeStyle.DashDotLine: 5>, 'dashLine': <StrokeStyle.DashLine: 3>, 'dotLine': <StrokeStyle.DotLine: 4>, 'hair': <StrokeStyle.SolidLine: 2>, 'none': <StrokeStyle.NoPen: 1>, <StrokeStyle.DashDotDotLine: 6>: 'dashDotDotLine', <StrokeStyle.DashDotLine: 5>: 'dashDotLine', <StrokeStyle.DashLine: 3>: 'dashLine', <StrokeStyle.DotLine: 4>: 'dotLine', <StrokeStyle.SolidLine: 2>: 'hair', <StrokeStyle.NoPen: 1>: 'none'}
__TO_STROKE_STYLE__ = {<StrokeStyle.DashDotDotLine: 6>: 'dashDotDotLine', <StrokeStyle.DashDotLine: 5>: 'dashDotLine', <StrokeStyle.DashLine: 3>: 'dashLine', <StrokeStyle.DotLine: 4>: 'dotLine', <StrokeStyle.SolidLine: 2>: 'hair', <StrokeStyle.NoPen: 1>: 'none'}
classmethod from_xml(value)[source]

Convert a value from XML to Python

class Patro.FileFormat.Valentina.VitFormat.ValentinaBuiltInVariables[source]

Bases: object

angle1 = 'Angle1'
angle1_arc = 'Angle1ARC_'
angle1_elarc = 'Angle1ELARC_'
angle1_spl = 'Angle1SPL_'
angle1_spl_path = 'Angle1SplPath'
angle2 = 'Angle2'
angle2_arc = 'Angle2ARC_'
angle2_elarc = 'Angle2ELARC_'
angle2_spl = 'Angle2SPL_'
angle2_spl_path = 'Angle2SplPath'
angle_line = 'AngleLine_'
arc = 'ARC_'
c1_length = 'C1Length'
c1_length_spl = 'C1LengthSPL_'
c1_length_spl_path = 'C1LengthSplPath'
c2_length = 'C2Length'
c2_length_spl = 'C2LengthSPL_'
c2_length_spl_path = 'C2LengthSplPath'
current_length = 'CurrentLength'
current_seam_allowance = 'CurrentSeamAllowance'
elarc = 'ELARC_'
increment = 'Increment_'
line = 'Line_'
measurement = 'M_'
radius = 'Radius'
radius1_elarc = 'Radius1ELARC_'
radius2_elarc = 'Radius2ELARC_'
radius_arc = 'RadiusARC_'
rotation = 'Rotation'
rotation_elarc = 'RotationELARC_'
seg = 'Seg_'
spl = 'SPL_'
spl_path = 'SplPath'
class Patro.FileFormat.Valentina.VitFormat.VisibleRotationMixin[source]

Bases: object

__attributes__ = (BoolAttribute visible, IntAttribute rotation)
class Patro.FileFormat.Valentina.VitFormat.XyMixin[source]

Bases: object

__attributes__ = (StringAttribute x, StringAttribute y)