--- messaging/manakai/lib/Message/Markup/Atom.dis 2006/08/18 12:26:54 1.11 +++ messaging/manakai/lib/Message/Markup/Atom.dis 2006/12/30 04:42:55 1.21 @@ -43,7 +43,7 @@ @DISCore:author: DISCore|Wakaba @License: license|Perl+MPL @Date: - $Date: 2006/08/18 12:26:54 $ + $Date: 2006/12/30 04:42:55 $ @Require: @@Module: @@ -52,10 +52,6 @@ @@@QName: MDOM|TreeCore @@@WithFor: ManakaiDOM|ManakaiDOMLatest @@Module: - @@@WithFor: ManakaiDOM|ManakaiDOM - @@Module: - @@@WithFor: ManakaiDOM|ManakaiDOMLatest - @@Module: @@@QName: DISlib|DISMarkup @@@WithFor: ManakaiDOM|all @DefaultFor: ManakaiDOM|ManakaiDOMLatest @@ -77,6 +73,8 @@ http://suika.fam.cx/~wakaba/archive/2004/dom/xdt# @DOMMain: http://suika.fam.cx/~wakaba/archive/2004/dom/main# + @domperl: + http://suika.fam.cx/~wakaba/archive/2006/dom/perl/ @dx: http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException# @dxm: @@ -119,6 +117,8 @@ http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/Element/ @test: http://suika.fam.cx/~wakaba/archive/2004/dis/Test# + @thr: + http://purl.org/syndication/thread/1.0 @tx: http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/XML/ @urigen: @@ -252,10 +252,7 @@ @@DISCore:resourceType: @@@@: DISLang|Class @@@ForCheck: ManakaiDOM|ForClass - @@Implement: - @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF - @@@ContentType: DISCore|TFPQNames - @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM + @@Implement: @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF @@@ContentType: DISCore|TFPQNames @@ -270,8 +267,6 @@ @@@@: s|ElementType @@@ForCheck: s|ForML - @@f:implements: AtomFeature10 - ElementTypeBinding: @Name: IFClsDef @ElementType: @@ -291,17 +286,12 @@ @@DISCore:resourceType: @@@@: DISLang|Class @@@ForCheck: ManakaiDOM|ForClass - @@Implement: - @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF - @@@ContentType: DISCore|TFPQNames - @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM + @@Implement: @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF @@@ContentType: DISCore|TFPQNames @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest - @@f:implements: AtomFeature10 - ElementTypeBinding: @Name: IFClsConstructDef @ElementType: @@ -324,10 +314,7 @@ @@DISCore:resourceType: @@@@: DISLang|Class @@@ForCheck: ManakaiDOM|ForClass - @@Implement: - @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF - @@@ContentType: DISCore|TFPQNames - @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM + @@Implement: @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF @@@ContentType: DISCore|TFPQNames @@ -341,7 +328,6 @@ @@@@: mv|ElementContentModel @@@ForCheck: mv|ForCM - @@f:implements: AtomFeature10 ElementTypeBinding: @Name: IFQName @@ -568,6 +554,17 @@ @@enDesc: The Atom DOM, version 1.0. +FeatureDef: + @featureQName: fe|AtomThreading + @QName: AtomThreadingFeature + @FeatureVerDef: + @@QName: AtomThreadingFeature10 + @@Version: 1.0 + @@f:instanceOf: AtomThreadingFeature + @@f:requires: fe|AtomFeature10 + @@enDesc: + The Atom Threading Extension DOM, version 1.0. + ## -- Modules ModuleSetDef: @@ -582,6 +579,7 @@ @mv:targetNamespace: atom| @mv:defaultNamespacePrefix: atom + @mv:systemIdentifierBaseURI: \ ModuleDef: @QName: AtomFeed @@ -661,6 +659,21 @@ @DISCore:resourceType: mv|XMLDTDQNameModule @mv:contains: Atom + +ResourceDef: + @QName: Atom10 + @enLN: Atom 1.0 + @mv:id: atom10 + @For: =ManakaiDOM|ManakaiDOMLatest + @DISCore:resourceType: mv|XMLDTDDriver + + @mv:refers: Atom + + @mv:refers: AtomQName + @mv:refers: AtomDatatypes + @mv:refers: AtomProperties + @mv:refers: AtomEntry + @mv:refers: AtomFeed ElementTypeBinding: @Name: ModuleSetDef @@ -684,36 +697,34 @@ @IFQName: AtomImplementation @ClsQName: ManakaiAtomImplementation - @IFISA: c|DOMImplementation - @ClsISA: c|ManakaiDOMImplementation + @domperl:implementedByObjectsOf: c|DOMImplementation + @domperl:classImplementedByObjectsOf: c|ManakaiDOMImplementation @enDesc: The interface provides convenience methods to create Atom documents. @f:provides: AtomFeature10 + @f:implements: AtomFeature10 @Test: @@QName: AtomImplementation.interface.test @@PerlDef: for my $interface ( , - , , - , - , , ) { $test->id ($interface); $test->assert_true - (->isa ($interface)); + (->isa ($interface)); } @Test: @@QName: ImplementationRegistry.AtomImplementation.1.test @@PerlDef: require Message::Markup::Atom; my $impl = $Message::DOM::ImplementationRegistry - ->get_implementation ({ + ->get_dom_implementation ({ => '1.0', }); @@ -723,7 +734,7 @@ @@PerlDef: require Message::Markup::Atom; my $impl = $Message::DOM::ImplementationRegistry - ->get_implementation ({ + ->get_dom_implementation ({ Core => '3.0', => '1.0', }); @@ -734,7 +745,7 @@ @@PerlDef: require Message::Markup::Atom; my $impl = $Message::DOM::ImplementationRegistry - ->get_implementation ({ + ->get_dom_implementation ({ XML => '3.0', => '1.0', }); @@ -770,7 +781,7 @@ The implementation treate as if an empty string is specified. @@Return: - @@@Type: AtomFeedDocument + @@@Type: AtomDocument @@@enDesc: The newly created Atom Feed Document. @@ -953,7 +964,7 @@ The implementation treate as if an empty string is specified. @@Return: - @@@Type: AtomEntryDocument + @@@Type: AtomDocument @@@enDesc: The newly created Atom Entry Document. @@ -1496,118 +1507,137 @@ attribute should be provided for published and created? } -##AtomImplementation -IFClsDef: - @IFQName: AtomDocument - @ClsQName: ManakaiAtomDocument + @CODE: + @@QName: getReflectAttrNonNegativeIntegerValue + @@enDesc: + {P:: If a DOM attribute is defined to attribute> + of the node , the getter of the attribute + return the value defined by the algorithm: + + {OLI:: If the contains an attribute node whose name + is : + + = If the of the is + one or more sequence of digits (, + , ..., ) optionally + preceding by a , then + the attribute getter return a value + by interpreting the of the + as a decimal number. - @IFISA: Document - @ClsISA: td|ManakaiDOMDocument + } - @s:rootElementType: AnyAtomElement||ManakaiDOM|all + = If a default value is explicitly defined + where this algorithm is referenced, it + return the default value. - @enDesc: - If the feature version - is supported, a object whose 's - , if any, is at least - at the time of creation also - implement the interface. Other - objects also implement - the interface. + = Otherwise, it return a binding-specific + default value, if it is defined by the specification + of the binding, or . - @Test: - @@QName: createDocument.AtomDocument.test - @@PerlDef: - my $impl; - __CODE{tc|createImplForTest:: $impl => $impl}__; - - my $doc = $impl-> - (, 'unknown'); + } - $test->id ('interface'); - $test->assert_isa ($doc, ); -##AtomDocument + {NOTE:: + In Atom Threading Extension , + the and leading s + are prohibitted. + } + @@PerlDef: + __DEEP{ + E: { + $r = $node-> ($namespaceURI, $localName); + if (defined $r) { + if ($r =~ /\A\+?([0-9]+)\z/) { + $r = 0+$1; + last E; + } + } -IFClsDef: - @IFQName: AtomFeedDocument - @ClsQName: ManakaiFeedEntryDocument + $r = $defaultValue; + $r = -1 unless defined $r; + } # E + }__; - @IFISA: AtomDocument - @ClsISA: ManakaiAtomDocument + @CODE: + @@QName: setReflectAttrNonNegativeIntegerValue + @@enDesc: + {P:: If a DOM attribute is defined to attribute> of the node , + the setter of the attribute modify the node as + defined by the algorithm: - @s:rootElementType: - @@@: atom|feed - @@DISCore:stopISARecursive: 1 + = If the given value is or one of binding-specific + default values, if any, as defined by the specification + of the binding, it + remove the attribute node, if any, + from the list of attribute nodes of . - @enDesc: - The interface provides convenience - methods and attributes for an Atom - Feed Document, i.e. representation of an Atom feed. + = Otherwise, it set the + attribute node value to a string representation + of the given value as if + the method were invoked. + The string representation be a decimal + number consist of one or more sequence of digits + (, , ..., ) + any leading . + The be omitted. - If the feature version - is supported, a object whose 's - element type, if any, is at least at - the time of creation also - implement the interface. Other - objects also implement - the interface. + } - @Test: - @@QName: createDocument.AtomFeedDocument.test + {NOTE:: + It might throw an exception. + } @@PerlDef: - my $impl; - __CODE{tc|createImplForTest:: $impl => $impl}__; - - my $doc = $impl-> - (, 'feed'); - - $test->id ('interface'); - $test->assert_isa ($doc, ); -##AtomFeedDocument + __DEEP{ + if (defined $given and $given >= 0) { + $node-> + ($namespaceURI, $localName, 0+$given); + } else { + $node-> ($namespaceURI, $localName); + } + }__; +##AtomImplementation IFClsDef: - @IFQName: AtomEntryDocument - @ClsQName: ManakaiAtomEntryDocument + @IFQName: AtomDocument + @ClsQName: ManakaiAtomDocument - @IFISA: AtomDocument - @ClsISA: ManakaiAtomDocument + @domperl:implementedByObjectsOf: Document + @domperl:classImplementedByObjectsOf: td|ManakaiDOMDocument - @s:rootElementType: - @@@: atom|entry - @@DISCore:stopISARecursive: 1 + @f:implements: AtomFeature10 @enDesc: - The interface provides convenience - methods and attributes for an Atom - Entry Document, i.e. exactly one Atom entry, outside - of the context of an Atom feed. - If the feature version is supported, a object whose 's - element type, if any, is at least at - the time of the creation also - implement the interface. Other - objects also implement - the interface. + , if any, is at least + at the time of creation also + implement the interface. Other + objects also implement + the interface. @Test: - @@QName: createDocument.AtomEntryDocument.test + @@QName: createDocument.AtomDocument.test @@PerlDef: my $impl; __CODE{tc|createImplForTest:: $impl => $impl}__; my $doc = $impl-> - (, 'entry'); + (, 'unknown'); $test->id ('interface'); - $test->assert_isa ($doc, ); -##AtomEntryDocument + $test->assert_isa ($doc, ); +##AtomDocument AGDef: @QName: atomCommonAttributes @enFN: common attributes @mv:attributeTypeGroupName: common + + @mv:refers: Atom @ATDef: @@mv:attributeTypeName: xml|base @@ -1712,6 +1742,7 @@ @IFISA: Element @ClsISA: te|ManakaiDOMElement + @f:implements: AtomFeature10 @s:elementType: AnyAtomElement||ManakaiDOM|all @enDesc: @@ -1737,7 +1768,6 @@ @@PerlDef: for my $interface ( , - , , , , @@ -1781,6 +1811,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -1922,6 +1953,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -2078,6 +2110,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -2185,6 +2218,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -2793,6 +2827,8 @@ (, 'updated'); $updatede-> (scalar time); $r-> ($updatede); + + $self-> ($r); }__; @@Test: @@ -2859,6 +2895,9 @@ $test->assert_num_not_equals (actual_value => $updated->, expected_value => 0); + + $test->id ('parent'); + $test->assert_equals ($ent->, $feed); @@Test: @@@QName: AtomFeedElement.addNewEntry.2.test @@@enDesc: @@ -2903,6 +2942,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -3080,7 +3120,9 @@ $test->assert_num_equals (actual_value => 0+@$list, expected_value => 0); $test->id ('parent'); + my $parent; for ($doc-> (, 'feed')) { + $parent = $_; $_-> ($doc-> (, 'author')); $_-> @@ -3100,7 +3142,9 @@ my $el = $doc-> (, 'entry'); $test->id ('parent'); + my $parent; for ($doc-> (, 'feed')) { + $parent = $_; $_-> ($doc-> (, 'author')); $_-> @@ -3436,6 +3480,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: atomUriCM @@ -3450,6 +3495,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: atomUriCM @@ -3464,8 +3510,11 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 # no common attribs @cm: TextCM + + @mv:refers: Atom ##AtomNameElement IFClsETDef: @@ -3477,8 +3526,11 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 # no common attribs @cm: atomUriCM + + @mv:refers: Atom ##AtomUriElement IFClsETDef: @@ -3490,8 +3542,11 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 # no common attribs @cm: atomEmailAddressCM + + @mv:refers: Atom ##AtomEmailElement IFClsETDef: @@ -3503,6 +3558,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: atomUriCM @@ -3517,6 +3573,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -3526,7 +3583,7 @@ The element either contains or links to the content of the entry. - @Attr: + @ATTR: @@Name: type @@enDesc: The type of the element. @@ -3591,7 +3648,7 @@ $el-> (null); $test->assert_null ($el->); - @Attr: + @ATTR: @@Name: src @@enDesc: The source of the remote content of the element. @@ -3770,6 +3827,8 @@ @IFISA: AtomPersonConstruct @ClsISA: ManakaiAtomPersonConstruct + + @f:implements: AtomFeature10 @mv:refers: PersonAG @mv:elementContentModel: PersonCM @@ -3787,6 +3846,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: undefinedContent @@ -3904,6 +3964,8 @@ @IFISA: AtomPersonConstruct @ClsISA: ManakaiAtomPersonConstruct + + @f:implements: AtomFeature10 @mv:refers: PersonAG @mv:elementContentModel: PersonCM @@ -3922,6 +3984,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -4008,6 +4071,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: undefinedContent @@ -4143,6 +4207,18 @@ of the attribute> of the node. @@Type: DOMString @@Get: + @@@enDesc: + {P:: If the feature + is supported, the attribute getter return + the string when both of the + following conditions are met: + + - The attribute getter would otherwise return . + + - The attribute contains + a string value of . + + } @@@nullCase: @@@@enDesc: If the algorithm returns . @@ -4154,6 +4230,15 @@ $r => $r, $defaultValue => {null}, }__; + + unless (defined $r) { + __DEEP{ + my $rel = $self->; + if (defined $rel and $rel eq ) { + $r = q; + } + }__; + } @@Set: @@@nullCase: @@@@enDesc: @@ -4167,6 +4252,74 @@ $given => $given, }__; + @@Test: + @@@QName: AtomLinkElement.type.!rel.test + @@@PerlDef: + my $doc; + __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__; + + my $el = $doc-> (, 'link'); + + $test->id ('implied'); + my $type0 = $el->; + $test->assert_null ($type0); + + $test->id ('explicit'); + $el-> ('application/atom+xml'); + my $type1 = $el->; + $test->assert_equals ($type1, q); + + $test->id ('different'); + $el-> ('application/xhtml+xml'); + my $type2 = $el->; + $test->assert_equals ($type2, q); + @@Test: + @@@QName: AtomLinkElement.type.rel!=replies.test + @@@PerlDef: + my $doc; + __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__; + + my $el = $doc-> (, 'link'); + + $el-> (); + + $test->id ('implied'); + my $type0 = $el->; + $test->assert_null ($type0); + + $test->id ('explicit'); + $el-> ('application/atom+xml'); + my $type1 = $el->; + $test->assert_equals ($type1, q); + + $test->id ('different'); + $el-> ('application/xhtml+xml'); + my $type2 = $el->; + $test->assert_equals ($type2, q); + @@Test: + @@@QName: AtomLinkElement.type.rel=replies.test + @@@PerlDef: + my $doc; + __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__; + + my $el = $doc-> (, 'link'); + + $el-> (); + + $test->id ('implied'); + my $type0 = $el->; + $test->assert_equals ($type0, q); + + $test->id ('explicit'); + $el-> ('application/atom+xml'); + my $type1 = $el->; + $test->assert_equals ($type1, q); + + $test->id ('different'); + $el-> ('application/xhtml+xml'); + my $type2 = $el->; + $test->assert_equals ($type2, q); + @ATTR: @@Name: hreflang @@enDesc: @@ -4275,6 +4428,8 @@ @IFISA: AtomDateConstruct @ClsISA: ManakaiAtomDateConstruct + + @f:implements: AtomFeature10 @mv:refers: DateAG @mv:elementContentModel: DateCM @@ -4295,6 +4450,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4330,6 +4487,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -4544,6 +4702,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4560,6 +4720,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4576,6 +4738,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4592,6 +4756,8 @@ @IFISA: AtomDateConstruct @ClsISA: ManakaiAtomDateConstruct + + @f:implements: AtomFeature10 @mv:refers: DateAG @mv:elementContentModel: DateCM @@ -4714,3 +4880,445 @@ @cm: dxm|ANY||ManakaiDOM|all @enImplNote: (text | anyForeignElement)* + +## -- Atom Threading Extension [RFC 4685] + +IFClsDef: + @IFQName: AtomEntryElementThread + @ClsQName: ManakaiAtomEntryElementThread + + @ClsISA: ManakaiAtomEntryElement + + @f:implements: AtomThreadingFeature10 + + @enDesc: + If the feature + is supported, any whose element type + is implement the + interface in addition to other appropriate interfaces. + + @Test: + @@QName: AtomEntryElementThread.1.test + @@PerlDef: + my $doc; + __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__; + + my $el = $doc->create_element_ns (, 'entry'); + + $test->id ('interface'); + $test->assert_isa ($el, ); + + $test->id ('feature'); + $test->assert_true ($el->is_supported ( => '1.0')); + + @Attr: + @@Name: threadInReplyToElements + @@enDesc: + A static list of child elements of the node. + @@Type: StaticNodeList + @@Get: + @@@enDesc: + It child element list> + of the node. + @@@PerlDef: + __CODE{returnChildElementList:: + $node => $self, + $namespaceURI => {}, + $localName => 'in-reply-to', + $r => $r, + }__; +##AtomEntryElementThread + +IFClsETDef: + @IFQName: AtomThreadInReplyToElement + @ETQName: thr|in-reply-to + @ETRQName: thr|in-reply-to + @ClsQName: ManakaiAtomThreadInReplyToElement + + @IFISA: AtomDateConstruct + @ClsISA: ManakaiAtomDateConstruct + + @f:implements: AtomThreadingFeature10 + @mv:refers: atomCommonAttributes + + @cm: undefinedContent + + @enDesc: + The element is used to indicate + that an entry is a response to another resource. + + If the entry is a response to multiple resources, + additional element + be used. + + RFC 4685 assigns no significance to the order in which + multiple element appear within + an entry. + + @Test: + @@QName: AtomThreadInReplyToElement.1.test + @@PerlDef: + my $doc; + __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__; + + my $el = $doc->create_element_ns (, 'in-reply-to'); + + $test->id ('interface'); + $test->assert_isa ($el, ); + + $test->id ('feature'); + $test->assert_true ($el->is_supported ( => '1.0')); + + @ATTR: + @@Name: ref + @@enDesc: + The attribute of the element. + + It attribute> of the node. + + The attribute specifies the persistent, + universally unique identifier of the resource being + responded to. The value conform to + the same construction and comparison rules as the + value of the element. Though the IRI + might use a dereferenceable scheme, processors + assume that it can be dereferenced. + + The element contain + a attribute identifying the resource that + is being respnoded to. + + If the resource being responded to does not have a persistent, + universally unique identifier, the publisher assign an + identifier that satisfies all the considerations in Section 4.2.6 of + RFC 4287 for use as the value of the attribute. + In that case, if a representation of the resource can be retrieved + from an IRI that can be used as a valid atom:id value, then this IRI + be used as the value of both the and + attributes. + @@Type: DOMString + @@actualType: DOMURI + @@Get: + @@@nullCase: + @@@@enDesc: + If the algorithm returns . + @@@PerlDef: + __CODE{getReflectAttrURIValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'ref', + $r => $r, + $defaultValue => {null}, + }__; + @@Set: + @@@nullCase: + @@@@enDesc: + Removes the attribute. + @@@NodeReadOnlyError: + @@@PerlDef: + __CODE{setReflectAttrURIValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'ref', + $given => $given, + }__; + + @ATTR: + @@Name: source + @@enDesc: + The attribute of the element. + + It attribute> of the node. + + The attribute be used to specify the IRI + of an Atom Feed or Entry Document containing an + with an value equal to the + value of the attribute. The IRI specified + be dereferenceable. + @@Type: DOMString + @@actualType: DOMURI + @@Get: + @@@nullCase: + @@@@enDesc: + If the algorithm returns . + @@@PerlDef: + __CODE{getReflectAttrURIValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'source', + $r => $r, + $defaultValue => {null}, + }__; + @@Set: + @@@nullCase: + @@@@enDesc: + Removes the attribute. + @@@NodeReadOnlyError: + @@@PerlDef: + __CODE{setReflectAttrURIValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'source', + $given => $given, + }__; + + @ATTR: + @@Name: href + @@enDesc: + The attribute of the element. + + It attribute> of the node. + + The attribute specifies an IRI that may be used + to retrieve a representation of the resource being + responded to. The IRI specified be + dereferenceable. + @@Type: DOMString + @@actualType: DOMURI + @@Get: + @@@nullCase: + @@@@enDesc: + If the algorithm returns . + @@@PerlDef: + __CODE{getReflectAttrURIValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'href', + $r => $r, + $defaultValue => {null}, + }__; + @@Set: + @@@nullCase: + @@@@enDesc: + Removes the attribute. + @@@NodeReadOnlyError: + @@@PerlDef: + __CODE{setReflectAttrURIValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'href', + $given => $given, + }__; + + @ATTR: + @@Name: type + @@enDesc: + The attribute of the element. + + It attribute> of the node. + + The attribute be used to provide + a hint to the client about the media type of the + resource identified by the attribute. + The attribute is only meaningful if a + corresponding attribute is also provided. + @@Type: DOMString + @@Get: + @@@nullCase: + @@@@enDesc: + If the algorithm returns . + @@@PerlDef: + __CODE{getReflectAttrStringValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'type', + $r => $r, + $defaultValue => {null}, + }__; + @@Set: + @@@nullCase: + @@@@enDesc: + Removes the attribute. + @@@NodeReadOnlyError: + @@@PerlDef: + __CODE{setReflectAttrStringValue:: + $node => $self, + $namespaceURI => {null}, + $localName => 'type', + $given => $given, + }__; +##AtomThreadInReplyToElement + +IFClsDef: + @IFQName: AtomLinkElementThread + @ClsQName: ManakaiAtomLinkElementThread + + @ClsISA: ManakaiAtomLinkElement + + @f:implements: AtomThreadingFeature10 + + @enDesc: + An element with a attribute value of + may be used to reference a resource where responses + to an entry may be found. If the attribute of the + is omitted, its value is assumed to be + . + + A link appearing as a child of the + or element indicates that the referenced + resource likely contains responses to any of that + feed's entries. A + link appearing as a child of an element + indicates that the linked resource likely contains responses + specific to that entry. + + If the feature + is supported, any whose element type + is implement the + interface in addition to other appropriate interfaces. + + @Test: + @@QName: AtomLinkElementThread.1.test + @@PerlDef: + my $doc; + __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__; + + my $el = $doc->create_element_ns (, 'link'); + + $test->id ('interface'); + $test->assert_isa ($el, ); + + $test->id ('feature'); + $test->assert_true ($el->is_supported ( => '1.0')); + + @ATTR: + @@Name: threadCount + @@enDesc: + The attribute of the element. + + It attribute> of the node. + + An element using the + attribute value contain + a attribute whose value is a + non-negative integer that provides a hint to clients + as to the total number of replies contained by the + linked resource. The value is advisory and + may not accurately reflect the actual number of replies. + @@Type: idl|long||ManakaiDOM|all + @@Get: + @@@PerlDef: + __CODE{getReflectAttrNonNegativeIntegerValue:: + $node => $self, + $namespaceURI => {}, + $localName => 'count', + $r => $r, + $defaultValue => {null}, + }__; + @@Set: + @@@NodeReadOnlyError: + @@@PerlDef: + __CODE{setReflectAttrNonNegativeIntegerValue:: + $node => $self, + $namespaceURI => {}, + $localName => 'count', + $given => $given, + }__; + + @@Test: + @@@QName: AtomLinkElementThread.threadCount.1.test + @@@PerlDef: + my $doc; + __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__; + + my $link = $doc->create_element_ns (, 'link'); + + $test->id ('default'); + $test->assert_num_equals + (expected_value => -1, + actual_value => + $link->); + + $test->id ('zero'); + $link-> (0); + $test->assert_num_equals + (expected_value => 0, + actual_value => + $link->); + $test->id ('zero.attr'); + $test->assert_equals ($link->get_attribute_ns (, 'count'), '0'); + + $test->id ('one'); + $link-> (1); + $test->assert_num_equals + (expected_value => 1, + actual_value => + $link->); + $test->id ('one.attr'); + $test->assert_equals ($link->get_attribute_ns (, 'count'), '1'); + + $test->id ('10000'); + $link-> (10000); + $test->assert_num_equals + (expected_value => 10000, + actual_value => + $link->); + $test->id ('10000.attr'); + $test->assert_equals ($link->get_attribute_ns (, 'count'), + '10000'); + + $test->id ('+10000'); + $link->set_attribute_ns (, 'thr:count', '+10000'); + $test->assert_num_equals + (expected_value => 10000, + actual_value => + $link->); + + $test->id ('010000'); + $link->set_attribute_ns (, 'thr:count', '010000'); + $test->assert_num_equals + (expected_value => 10000, + actual_value => + $link->); + + $test->id ('-100'); + $link-> (-100); + $test->assert_num_equals + (expected_value => -1, + actual_value => + $link->); + $test->id ('-100.attr'); + $test->assert_false ($link->has_attribute_ns (, 'count')); + + $test->id ('120a'); + $link->set_attribute_ns (, 'thr:count', '120a'); + $test->assert_num_equals + (expected_value => -1, + actual_value => + $link->); + + $test->id ('-1'); + $link-> (-1); + $test->assert_num_equals + (expected_value => -1, + actual_value => + $link->); + $test->id ('-1.attr'); + $test->assert_false ($link->has_attribute_ns (, 'count')); + + @enImplNote: + @@ddid: updated + @@@: + {TODO:: + attribute + } +##AtomLinkElementThread + +enImplNote: + @@ddid: total + @@@: + {TODO:: + + } + +enImplNote: + @@ddid: threaddtd + @@@: + {TODO:: + DTD impl for threading + }