package XML::Validator::Schema::ElementRefNode; use strict; use warnings; use base 'XML::Validator::Schema::ElementNode'; use XML::Validator::Schema::Util qw(_err _attr); use Carp qw(croak); =head1 NAME XML::Validator::Schema::ElementRefNode - an element reference node =head1 DESCRIPTION This is an internal module used by XML::Validator::Schema to represent an element reference node. =cut sub parse { my ($pkg, $data) = @_; my $self = $pkg->new(); my $ref = _attr($data, 'ref'); croak("Why did you create an ElementRefNode if you didn't have a ref?") unless $ref; $self->{unresolved_ref} = 1; $self->name($ref); my $name = _attr($data, 'name'); _err("Found with illegal combination of 'ref' and 'name' ". "attributes.") if $name; my $type_name = _attr($data, 'type'); _err("Found with illegal combination of 'ref' and 'type' ". "attributes.") if $type_name; my $min = _attr($data, 'minOccurs'); $min = 1 unless defined $min; _err("Invalid value for minOccurs '$min' found in .") unless $min =~ /^\d+$/; $self->{min} = $min; my $max = _attr($data, 'maxOccurs'); $max = 1 unless defined $max; _err("Invalid value for maxOccurs '$max' found in .") unless $max =~ /^\d+$/ or $max eq 'unbounded'; $self->{max} = $max; return $self; } 1;