--- messaging/manakai/lib/Message/Markup/Atom.dis 2006/08/17 12:12:02 1.10 +++ messaging/manakai/lib/Message/Markup/Atom.dis 2006/12/29 14:45:44 1.20 @@ -43,7 +43,7 @@ @DISCore:author: DISCore|Wakaba @License: license|Perl+MPL @Date: - $Date: 2006/08/17 12:12:02 $ + $Date: 2006/12/29 14:45:44 $ @Require: @@Module: @@ -55,6 +55,9 @@ @@@WithFor: ManakaiDOM|ManakaiDOM @@Module: @@@WithFor: ManakaiDOM|ManakaiDOMLatest + @@Module: + @@@QName: DISlib|DISMarkup + @@@WithFor: ManakaiDOM|all @DefaultFor: ManakaiDOM|ManakaiDOMLatest Namespace: @@ -64,16 +67,18 @@ http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core# @cfg: http://suika.fam.cx/www/2006/dom-config/ + @DISlib: + http://suika.fam.cx/~wakaba/archive/2004/dis/ @dis: http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis-- @dlp: http://suika.fam.cx/~wakaba/archive/2004/dis/Perl# - @doc: - http://suika.fam.cx/~wakaba/archive/2005/7/tutorial# @d: 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: @@ -88,22 +93,16 @@ http://www.w3.org/1999/xhtml @idl: http://suika.fam.cx/~wakaba/archive/2004/dis/IDL# - @infoset: - http://www.w3.org/2001/04/infoset# @kwd: http://suika.fam.cx/~wakaba/archive/2005/rfc2119/ @lang: http://suika.fam.cx/~wakaba/archive/2004/8/18/lang# @license: http://suika.fam.cx/~wakaba/archive/2004/8/18/license# - @m12n: - http://suika.fam.cx/www/2006/05/m12n/ @ManakaiDOM: http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom# @Markup: http://suika.fam.cx/~wakaba/archive/2005/manakai/Markup# - @mat: - http://suika.fam.cx/~wakaba/archive/2005/manakai/Markup/Atom/ @MDOM: http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#ManakaiDOM. @MDOMX: @@ -122,6 +121,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: @@ -273,8 +274,6 @@ @@@@: s|ElementType @@@ForCheck: s|ForML - @@f:implements: AtomFeature10 - ElementTypeBinding: @Name: IFClsDef @ElementType: @@ -303,8 +302,6 @@ @@@ContentType: DISCore|TFPQNames @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest - @@f:implements: AtomFeature10 - ElementTypeBinding: @Name: IFClsConstructDef @ElementType: @@ -344,7 +341,6 @@ @@@@: mv|ElementContentModel @@@ForCheck: mv|ForCM - @@f:implements: AtomFeature10 ElementTypeBinding: @Name: IFQName @@ -571,12 +567,21 @@ @@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: @QName: Atom - @mv:id: atom - @mv:vid: 10 @enLN: Atom @mv:version: 1.0 @mv:contains: AtomDatatypes @@ -585,9 +590,9 @@ @mv:contains: AtomFeed @mv:contains: AtomQName - @infoset:namespaceName: - http://www.w3.org/2005/Atom - @infoset:prefix: atom + @mv:targetNamespace: atom| + @mv:defaultNamespacePrefix: atom + @mv:systemIdentifierBaseURI: \ ModuleDef: @QName: AtomFeed @@ -667,6 +672,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 @@ -690,14 +710,15 @@ @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 @@ -706,20 +727,18 @@ , , , - , - , , ) { $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', }); @@ -729,7 +748,7 @@ @@PerlDef: require Message::Markup::Atom; my $impl = $Message::DOM::ImplementationRegistry - ->get_implementation ({ + ->get_dom_implementation ({ Core => '3.0', => '1.0', }); @@ -740,7 +759,7 @@ @@PerlDef: require Message::Markup::Atom; my $impl = $Message::DOM::ImplementationRegistry - ->get_implementation ({ + ->get_dom_implementation ({ XML => '3.0', => '1.0', }); @@ -776,7 +795,7 @@ The implementation treate as if an empty string is specified. @@Return: - @@@Type: AtomFeedDocument + @@@Type: AtomDocument @@@enDesc: The newly created Atom Feed Document. @@ -959,7 +978,7 @@ The implementation treate as if an empty string is specified. @@Return: - @@@Type: AtomEntryDocument + @@@Type: AtomDocument @@@enDesc: The newly created Atom Entry Document. @@ -1502,118 +1521,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 @@ -1718,6 +1756,7 @@ @IFISA: Element @ClsISA: te|ManakaiDOMElement + @f:implements: AtomFeature10 @s:elementType: AnyAtomElement||ManakaiDOM|all @enDesc: @@ -1787,6 +1826,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -1928,6 +1968,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -2084,6 +2125,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -2191,6 +2233,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -2799,6 +2842,8 @@ (, 'updated'); $updatede-> (scalar time); $r-> ($updatede); + + $self-> ($r); }__; @@Test: @@ -2865,6 +2910,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: @@ -2909,6 +2957,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -3086,7 +3135,9 @@ $test->assert_num_equals (actual_value => 0+@$list, expected_value => 0); $test->id ('parent'); + my $parent; for ($doc-> (, 'feed')) { + $parent = $_; $_-> ($doc-> (, 'author')); $_-> @@ -3106,7 +3157,9 @@ my $el = $doc-> (, 'entry'); $test->id ('parent'); + my $parent; for ($doc-> (, 'feed')) { + $parent = $_; $_-> ($doc-> (, 'author')); $_-> @@ -3442,6 +3495,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: atomUriCM @@ -3456,6 +3510,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: atomUriCM @@ -3470,8 +3525,11 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 # no common attribs @cm: TextCM + + @mv:refers: Atom ##AtomNameElement IFClsETDef: @@ -3483,8 +3541,11 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 # no common attribs @cm: atomUriCM + + @mv:refers: Atom ##AtomUriElement IFClsETDef: @@ -3496,8 +3557,11 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 # no common attribs @cm: atomEmailAddressCM + + @mv:refers: Atom ##AtomEmailElement IFClsETDef: @@ -3509,6 +3573,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: atomUriCM @@ -3523,6 +3588,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -3532,7 +3598,7 @@ The element either contains or links to the content of the entry. - @Attr: + @ATTR: @@Name: type @@enDesc: The type of the element. @@ -3597,7 +3663,7 @@ $el-> (null); $test->assert_null ($el->); - @Attr: + @ATTR: @@Name: src @@enDesc: The source of the remote content of the element. @@ -3776,6 +3842,8 @@ @IFISA: AtomPersonConstruct @ClsISA: ManakaiAtomPersonConstruct + + @f:implements: AtomFeature10 @mv:refers: PersonAG @mv:elementContentModel: PersonCM @@ -3793,6 +3861,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: undefinedContent @@ -3910,6 +3979,8 @@ @IFISA: AtomPersonConstruct @ClsISA: ManakaiAtomPersonConstruct + + @f:implements: AtomFeature10 @mv:refers: PersonAG @mv:elementContentModel: PersonCM @@ -3928,6 +3999,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -4014,6 +4086,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: undefinedContent @@ -4149,6 +4222,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 . @@ -4160,6 +4245,15 @@ $r => $r, $defaultValue => {null}, }__; + + unless (defined $r) { + __DEEP{ + my $rel = $self->; + if (defined $rel and $rel eq ) { + $r = q; + } + }__; + } @@Set: @@@nullCase: @@@@enDesc: @@ -4173,6 +4267,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: @@ -4281,6 +4443,8 @@ @IFISA: AtomDateConstruct @ClsISA: ManakaiAtomDateConstruct + + @f:implements: AtomFeature10 @mv:refers: DateAG @mv:elementContentModel: DateCM @@ -4301,6 +4465,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4336,6 +4502,7 @@ @IFISA: AtomElement @ClsISA: ManakaiAtomElement + @f:implements: AtomFeature10 @mv:refers: atomCommonAttributes @cm: @@ -4550,6 +4717,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4566,6 +4735,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4582,6 +4753,8 @@ @IFISA: AtomTextConstruct @ClsISA: ManakaiAtomTextConstruct + + @f:implements: AtomFeature10 @mv:refers: TextAG @mv:elementContentModel: TextCM @@ -4598,6 +4771,8 @@ @IFISA: AtomDateConstruct @ClsISA: ManakaiAtomDateConstruct + + @f:implements: AtomFeature10 @mv:refers: DateAG @mv:elementContentModel: DateCM @@ -4720,3 +4895,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 + }