package XML::Validator::Schema::Attribute; use strict; use warnings; =head1 NAME XML::Validator::Schema::Attribute - an attribute node in a schema object =head1 DESCRIPTION This is an internal module used by XML::Validator::Schema to represent attributes derived from XML Schema documents. =cut use XML::Validator::Schema::Util qw(_attr _err); sub new { my ($pkg, %arg) = @_; my $self = bless \%arg, $pkg; } # create an attribute based on the contents of an element hash sub parse { my ($pkg, $data) = @_; my $self = $pkg->new(); my $name = _attr($data, 'name'); $self->{name} = $name if $name; my $ref = _attr($data, 'ref'); if ($ref) { _err("Illegal combination of 'ref' and 'name' in .") if $name; $self->{unresolved_ref} = 1; $self->{name} = $ref; } _err("Found with neither 'name' nor 'ref'.") unless $name or $ref; my $type_name = _attr($data, 'type'); if ($type_name) { $self->{unresolved_type} = 1; $self->{type_name} = $type_name; } # load use, defaults to optional my $use = _attr($data, 'use') || 'optional'; _err("Invalid 'use' value in : '$use'.") unless $use eq 'optional' or $use eq 'required'; $self->{required} = $use eq 'required' ? 1 : 0; return $self; } 1;