use
5.008;
our
$VERSION
=
'0.100'
;
sub
new
{
my
(
$class
,
$element
,
$context
) =
@_
;
my
$cache
=
$context
->cache;
return
$cache
->get(
$context
,
$element
,
$class
)
if
defined
$cache
&&
$cache
->get(
$context
,
$element
,
$class
);
my
$self
= {
'element'
=>
$element
,
'context'
=>
$context
,
'cache'
=>
$cache
,
'id'
=>
$context
->make_bnode(
$element
) ,
};
bless
$self
,
$class
;
my
$clone
=
$element
->cloneNode(1);
$self
->_expand_patterns(
$clone
);
$self
->_simple_parse(
$clone
);
$cache
->set(
$context
,
$element
,
$class
,
$self
)
if
defined
$cache
;
return
$self
;
}
sub
format_signature
{
return
{
'root'
=>
'hrecipe'
,
'classes'
=> [
[
'fn'
,
'1'
],
[
'ingredient'
,
'+'
],
[
'yield'
,
'?'
],
[
'instructions'
,
'H?'
],
[
'duration'
,
'D*'
],
[
'photo'
,
'u*'
],
[
'summary'
,
'?'
],
[
'author'
,
'M*'
, {
embedded
=>
'hCard !person'
}],
[
'published'
,
'd?'
],
[
'nutrition'
,
'*'
],
],
'options'
=> {
'rel-tag'
=>
'tag'
,
},
'rdf:type'
=> [
"${lr}Recipe"
] ,
'rdf:property'
=> {
'fn'
=> {
'literal'
=> [
"${rdfs}label"
] } ,
'yield'
=> {
'literal'
=> [
"${lr}servings"
] } ,
'duration'
=> {
'literal'
=> [
"${lr}time"
] } ,
'summary'
=> {
'literal'
=> [
"${rdfs}comment"
] } ,
'nutrition'
=> {
'literal'
=> [
"${lr}dietaryInformation"
] } ,
},
};
}
sub
add_to_model
{
my
$self
=
shift
;
my
$model
=
shift
;
$self
->_simple_rdf(
$model
);
my
$i
= 0;
foreach
my
$ingredient
(@{
$self
->data->{
'ingredient'
} })
{
$model
->add_statement(RDF::Trine::Statement->new(
$self
->id(1),
RDF::Trine::Node::Resource->new(
"${lr}ingredient"
),
$self
->id(1,
"ingredient.${i}"
),
));
$model
->add_statement(RDF::Trine::Statement->new(
$self
->id(1,
"ingredient.${i}"
),
RDF::Trine::Node::Resource->new(
"${lr}IngredientPortion"
),
));
$model
->add_statement(RDF::Trine::Statement->new(
$self
->id(1,
"ingredient.${i}"
),
RDF::Trine::Node::Resource->new(
"${rdfs}label"
),
$self
->_make_literal(
$ingredient
),
));
$i
++;
}
foreach
my
$author
(@{
$self
->data->{
'author'
} })
{
$model
->add_statement(RDF::Trine::Statement->new(
$self
->id(1),
$author
->id(1,
"holder"
),
));
$author
->add_to_model(
$model
);
}
return
$self
;
}
sub
profiles
{
my
$class
=
shift
;
}
1;