/[suikacvs]/messaging/manakai/lib/Message/Markup/Atom.dis
Suika

Diff of /messaging/manakai/lib/Message/Markup/Atom.dis

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by wakaba, Sat Apr 29 11:05:09 2006 UTC revision 1.20 by wakaba, Fri Dec 29 14:45:44 2006 UTC
# Line 55  Module: Line 55  Module:
55        @@@WithFor: ManakaiDOM|ManakaiDOM        @@@WithFor: ManakaiDOM|ManakaiDOM
56      @@Module:      @@Module:
57        @@@WithFor: ManakaiDOM|ManakaiDOMLatest        @@@WithFor: ManakaiDOM|ManakaiDOMLatest
58        @@Module:
59          @@@QName: DISlib|DISMarkup
60          @@@WithFor: ManakaiDOM|all
61    @DefaultFor: ManakaiDOM|ManakaiDOMLatest    @DefaultFor: ManakaiDOM|ManakaiDOMLatest
62    
63  Namespace:  Namespace:
# Line 64  Namespace: Line 67  Namespace:
67      http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#      http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#
68    @cfg:    @cfg:
69      http://suika.fam.cx/www/2006/dom-config/      http://suika.fam.cx/www/2006/dom-config/
70      @DISlib:
71        http://suika.fam.cx/~wakaba/archive/2004/dis/
72    @dis:    @dis:
73      http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--      http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--
74    @doc:    @dlp:
75      http://suika.fam.cx/~wakaba/archive/2005/7/tutorial#      http://suika.fam.cx/~wakaba/archive/2004/dis/Perl#
76    @d:    @d:
77      http://suika.fam.cx/~wakaba/archive/2004/dom/xdt#      http://suika.fam.cx/~wakaba/archive/2004/dom/xdt#
78    @DOMMain:    @DOMMain:
79      http://suika.fam.cx/~wakaba/archive/2004/dom/main#      http://suika.fam.cx/~wakaba/archive/2004/dom/main#
80      @domperl:
81        http://suika.fam.cx/~wakaba/archive/2006/dom/perl/
82    @dx:    @dx:
83      http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#      http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#
84      @dxm:
85        http://suika.fam.cx/~wakaba/archive/2004/dis/XML#
86    @ecore:    @ecore:
87      http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/Core/      http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/Core/
88    @f:    @f:
# Line 94  Namespace: Line 103  Namespace:
103      http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#      http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#
104    @Markup:    @Markup:
105      http://suika.fam.cx/~wakaba/archive/2005/manakai/Markup#      http://suika.fam.cx/~wakaba/archive/2005/manakai/Markup#
   @mat:  
     http://suika.fam.cx/~wakaba/archive/2005/manakai/Markup/Atom/  
106    @MDOM:    @MDOM:
107      http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#ManakaiDOM.      http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#ManakaiDOM.
108    @MDOMX:    @MDOMX:
109      http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#      http://suika.fam.cx/~wakaba/archive/2004/8/4/manakai-dom-exception#
110    @dlp:    @mv:
111      http://suika.fam.cx/~wakaba/archive/2004/dis/Perl#      http://suika.fam.cx/www/2006/05/mv/
112    @rel:    @rel:
113      http://www.iana.org/assignments/relation/      http://www.iana.org/assignments/relation/
114    @s:    @s:
# Line 114  Namespace: Line 121  Namespace:
121      http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/Element/      http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/Element/
122    @test:    @test:
123      http://suika.fam.cx/~wakaba/archive/2004/dis/Test#      http://suika.fam.cx/~wakaba/archive/2004/dis/Test#
124      @thr:
125        http://purl.org/syndication/thread/1.0
126    @tx:    @tx:
127      http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/XML/      http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/XML/
128    @urigen:    @urigen:
# Line 160  ElementTypeBinding: Line 169  ElementTypeBinding:
169      @@ForCheck: !=ManakaiDOM|ManakaiDOM      @@ForCheck: !=ManakaiDOM|ManakaiDOM
170    
171  ElementTypeBinding:  ElementTypeBinding:
172      @Name: ATTR
173      @ElementType:
174        dis:ResourceDef
175      @ShadowContent:
176        @@DISCore:resourceType:
177          @@@@: DISLang|Attribute
178          @@@ForCheck: ManakaiDOM|ForIF
179        @@DISCore:resourceType:
180          @@@@: DISLang|Attribute
181          @@@ForCheck: ManakaiDOM|ForClass
182        @@DISCore:resourceType:
183          @@@@: mv|AttributeType
184          @@@ForCheck: s|ForML
185        @@ForCheck: !=ManakaiDOM|ManakaiDOM
186    
187    ElementTypeBinding:
188    @Name: Get    @Name: Get
189    @ElementType:    @ElementType:
190      dis:ResourceDef      dis:ResourceDef
# Line 249  ElementTypeBinding: Line 274  ElementTypeBinding:
274        @@@@: s|ElementType        @@@@: s|ElementType
275        @@@ForCheck: s|ForML        @@@ForCheck: s|ForML
276    
     @@f:implements: AtomFeature10  
   
277  ElementTypeBinding:  ElementTypeBinding:
278    @Name: IFClsDef    @Name: IFClsDef
279    @ElementType:    @ElementType:
# Line 279  ElementTypeBinding: Line 302  ElementTypeBinding:
302        @@@ContentType: DISCore|TFPQNames        @@@ContentType: DISCore|TFPQNames
303        @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest        @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest
304    
305      @@f:implements: AtomFeature10  ElementTypeBinding:
306      @Name: IFClsConstructDef
307      @ElementType:
308        dis:ResourceDef
309      @ShadowContent:
310        @@DISCore:resourceType:
311          @@@@: dis|MultipleResource
312          @@@ForCheck:
313            !ManakaiDOM|ForIF !ManakaiDOM|ForClass !s|ForML !mv|ForCM !mv|ForAG
314        @@resourceFor: ManakaiDOM|ForIF
315        @@resourceFor: ManakaiDOM|ForClass
316        @@resourceFor: mv|ForCM
317        @@resourceFor: mv|ForAG
318        @@For: ManakaiDOM|ManakaiDOM
319    
320        @@DISCore:resourceType:
321          @@@@: DISLang|Interface
322          @@@ForCheck: ManakaiDOM|ForIF
323    
324        @@DISCore:resourceType:
325          @@@@: DISLang|Class
326          @@@ForCheck: ManakaiDOM|ForClass
327        @@Implement:
328          @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF
329          @@@ContentType: DISCore|TFPQNames
330          @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM
331        @@Implement:
332          @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF
333          @@@ContentType: DISCore|TFPQNames
334          @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest
335    
336        @@DISCore:resourceType:
337          @@@@: mv|AttributeTypeGroup
338          @@@ForCheck: mv|ForAG
339    
340        @@DISCore:resourceType:
341          @@@@: mv|ElementContentModel
342          @@@ForCheck: mv|ForCM
343    
344    
345  ElementTypeBinding:  ElementTypeBinding:
346    @Name: IFQName    @Name: IFQName
# Line 311  ElementTypeBinding: Line 372  ElementTypeBinding:
372      @@ContentType: DISCore|QName      @@ContentType: DISCore|QName
373    
374  ElementTypeBinding:  ElementTypeBinding:
375      @Name: CMQName
376      @ElementType:
377        dis:QName
378      @ShadowContent:
379        @@ForCheck: mv|ForCM
380    
381    ElementTypeBinding:
382      @Name: CMName
383      @ElementType:
384        mv:elementContentModelName
385      @ShadowContent:
386        @@ForCheck: mv|ForCM
387    
388    ElementTypeBinding:
389      @Name: AGQName
390      @ElementType:
391        dis:QName
392      @ShadowContent:
393        @@ForCheck: mv|ForAG
394    
395    ElementTypeBinding:
396      @Name: AGName
397      @ElementType:
398        mv:attributeTypeGroupName
399      @ShadowContent:
400        @@ForCheck: mv|ForAG
401    
402    ElementTypeBinding:
403    @Name: IFISA    @Name: IFISA
404    @ElementType:    @ElementType:
405      dis:ISA      dis:ISA
# Line 413  ElementTypeBinding: Line 502  ElementTypeBinding:
502      @@lang:en      @@lang:en
503    
504  ElementTypeBinding:  ElementTypeBinding:
505      @Name: enLN
506      @ElementType:
507        mv:longName
508      @ShadowContent:
509        @@lang:en
510    
511    ElementTypeBinding:
512    @Name: TrueCase    @Name: TrueCase
513    @ElementType:    @ElementType:
514      dis:ResourceDef      dis:ResourceDef
# Line 471  FeatureDef: Line 567  FeatureDef:
567      @@enDesc:      @@enDesc:
568        The Atom DOM, version 1.0.        The Atom DOM, version 1.0.
569    
570    FeatureDef:
571      @featureQName: fe|AtomThreading
572      @QName: AtomThreadingFeature
573      @FeatureVerDef:
574        @@QName: AtomThreadingFeature10
575        @@Version: 1.0
576        @@f:instanceOf: AtomThreadingFeature
577        @@f:requires: fe|AtomFeature10
578        @@enDesc:
579          The Atom Threading Extension DOM, version 1.0.
580    
581    ## -- Modules
582    
583    ModuleSetDef:
584      @QName: Atom
585      @enLN: Atom
586      @mv:version: 1.0
587      @mv:contains: AtomDatatypes
588      @mv:contains: AtomProperties
589      @mv:contains: AtomEntry
590      @mv:contains: AtomFeed
591      @mv:contains: AtomQName
592    
593      @mv:targetNamespace: atom|
594      @mv:defaultNamespacePrefix: atom
595      @mv:systemIdentifierBaseURI: \
596    
597    ModuleDef:
598      @QName: AtomFeed
599      @mv:id: feed
600      @enLN: Feed
601      @mv:contains: feed-prop
602      @mv:contains: atom|feed
603    
604    ModuleDef:
605      @QName: AtomEntry
606      @mv:id: entry
607      @enLN: Entry
608      @mv:contains: entry-prop
609      @mv:contains: atom|entry
610    
611    ModuleDef:
612      @QName: AtomProperties
613      @mv:id: props
614      @enLN: Properties
615      @mv:contains: atom|content
616      @mv:contains: atom|contributor
617      @mv:contains: atom|category
618      @mv:contains: atom|generator
619      @mv:contains: atom|link
620      @mv:contains: atom|author
621      @mv:contains: atom|published
622      @mv:contains: atom|updated
623      @mv:contains: atom|icon
624      @mv:contains: atom|id
625      @mv:contains: atom|logo
626      @mv:contains: atom|rights
627      @mv:contains: atom|subtitle
628      @mv:contains: atom|summary
629      @mv:contains: atom|title
630      @mv:contains: source-prop
631      @mv:contains: atom|source
632    
633    ModuleDef:
634      @QName: AtomDatatypes
635      @mv:id: datatypes
636      @enLN: Datatypes
637    
638      @mv:contains: atomNCName
639      @mv:contains: atomMediaType
640      @mv:contains: atomLanguageTag
641      @mv:contains: atomUri
642      @mv:contains: atomUriCM
643      @mv:contains: atomEmailAddress
644      @mv:contains: atomEmailAddressCM
645    
646      @mv:contains: undefinedAttributes
647      @mv:contains: undefinedContent
648      @mv:contains: atomCommonAttributes
649    
650      @mv:contains: simpleExtensionElements
651      @mv:contains: structuredExtensionElements
652      @mv:contains: extensionElements
653    
654      @mv:contains: TextAG
655      @mv:contains: TextCM
656    
657      @mv:contains: atom|name
658      @mv:contains: atom|email
659      @mv:contains: atom|uri
660      @mv:contains: PersonAG
661      @mv:contains: person-prop
662      @mv:contains: PersonCM
663    
664      @mv:contains: DateAG
665      @mv:contains: DateCM
666    
667    ResourceDef:
668      @QName: AtomQName
669      @enLN: Qualified Names
670      @mv:id: qname
671      @For: =ManakaiDOM|ManakaiDOMLatest
672      @DISCore:resourceType: mv|XMLDTDQNameModule
673    
674      @mv:contains: Atom
675    
676    ResourceDef:
677      @QName: Atom10
678      @enLN: Atom 1.0
679      @mv:id: atom10
680      @For: =ManakaiDOM|ManakaiDOMLatest
681      @DISCore:resourceType: mv|XMLDTDDriver
682    
683      @mv:refers: Atom
684    
685      @mv:refers: AtomQName
686      @mv:refers: AtomDatatypes
687      @mv:refers: AtomProperties
688      @mv:refers: AtomEntry
689      @mv:refers: AtomFeed
690    
691    ElementTypeBinding:
692      @Name: ModuleSetDef
693      @ElementType:
694        dis:ResourceDef
695      @ShadowContent:
696        @@DISCore:resourceType: mv|XMLDTDModuleSet
697        @@For: =ManakaiDOM|ManakaiDOMLatest
698    
699    ElementTypeBinding:
700      @Name: ModuleDef
701      @ElementType:
702        dis:ResourceDef
703      @ShadowContent:
704        @@DISCore:resourceType: mv|XMLDTDModule
705        @@For: =ManakaiDOM|ManakaiDOMLatest
706    
707  ## -- Implementation  ## -- Implementation
708    
709  IFClsDef:  IFClsDef:
710    @IFQName: AtomImplementation    @IFQName: AtomImplementation
711    @ClsQName: ManakaiAtomImplementation    @ClsQName: ManakaiAtomImplementation
712    
713    @IFISA: c|DOMImplementation    @domperl:implementedByObjectsOf: c|DOMImplementation
714    @ClsISA: c|ManakaiDOMImplementation    @domperl:classImplementedByObjectsOf: c|ManakaiDOMImplementation
715    
716    @enDesc:    @enDesc:
717      The <IF::AtomImplementation> interface provides convenience      The <IF::AtomImplementation> interface provides convenience
718      methods to create Atom documents.      methods to create Atom documents.
719    
720    @f:provides: AtomFeature10    @f:provides: AtomFeature10
721      @f:implements: AtomFeature10
722    
723    @Test:    @Test:
724      @@QName: AtomImplementation.interface.test      @@QName: AtomImplementation.interface.test
# Line 493  IFClsDef: Line 727  IFClsDef:
727          <IFName::AtomImplementation>,          <IFName::AtomImplementation>,
728          <IFName::AtomImplementation||ManakaiDOM|ManakaiDOM>,          <IFName::AtomImplementation||ManakaiDOM|ManakaiDOM>,
729          <IFName::c|DOMImplementation>,          <IFName::c|DOMImplementation>,
         <IFName::urigen|URIImplementation>,  
         <IFName::f|MinimumImplementation>,  
730          <IFName::f|GetFeature>,          <IFName::f|GetFeature>,
731        ) {        ) {
732          $test->id ($interface);          $test->id ($interface);
733          $test->assert_true          $test->assert_true
734                   (<Class::ManakaiAtomImplementation>->isa ($interface));                   (<Class::c|ManakaiDOMImplementation>->isa ($interface));
735        }        }
736    @Test:    @Test:
737      @@QName: ImplementationRegistry.AtomImplementation.1.test      @@QName: ImplementationRegistry.AtomImplementation.1.test
738      @@PerlDef:      @@PerlDef:
739        require Message::Markup::Atom;        require Message::Markup::Atom;
740        my $impl = $Message::DOM::ImplementationRegistry        my $impl = $Message::DOM::ImplementationRegistry
741                     ->get_implementation ({                     ->get_dom_implementation ({
742                         <Q::fe|Atom> => '1.0',                         <Q::fe|Atom> => '1.0',
743                       });                       });
744    
# Line 516  IFClsDef: Line 748  IFClsDef:
748      @@PerlDef:      @@PerlDef:
749        require Message::Markup::Atom;        require Message::Markup::Atom;
750        my $impl = $Message::DOM::ImplementationRegistry        my $impl = $Message::DOM::ImplementationRegistry
751                     ->get_implementation ({                     ->get_dom_implementation ({
752                         Core => '3.0',                         Core => '3.0',
753                         <Q::fe|Atom> => '1.0',                         <Q::fe|Atom> => '1.0',
754                       });                       });
# Line 527  IFClsDef: Line 759  IFClsDef:
759      @@PerlDef:      @@PerlDef:
760        require Message::Markup::Atom;        require Message::Markup::Atom;
761        my $impl = $Message::DOM::ImplementationRegistry        my $impl = $Message::DOM::ImplementationRegistry
762                     ->get_implementation ({                     ->get_dom_implementation ({
763                         XML => '3.0',                         XML => '3.0',
764                         <Q::fe|Atom> => '1.0',                         <Q::fe|Atom> => '1.0',
765                       });                       });
# Line 563  IFClsDef: Line 795  IFClsDef:
795            The implementation <kwd:MUST> treate <DOM::null>            The implementation <kwd:MUST> treate <DOM::null>
796            as if an empty string is specified.            as if an empty string is specified.
797      @@Return:      @@Return:
798        @@@Type: AtomFeedDocument        @@@Type: AtomDocument
799        @@@enDesc:        @@@enDesc:
800          The newly created Atom Feed Document.          The newly created Atom Feed Document.
801    
# Line 746  IFClsDef: Line 978  IFClsDef:
978            The implementation <kwd:MUST> treate <DOM::null>            The implementation <kwd:MUST> treate <DOM::null>
979            as if an empty string is specified.            as if an empty string is specified.
980      @@Return:      @@Return:
981        @@@Type: AtomEntryDocument        @@@Type: AtomDocument
982        @@@enDesc:        @@@enDesc:
983          The newly created Atom Entry Document.          The newly created Atom Entry Document.
984    
# Line 1289  IFClsDef: Line 1521  IFClsDef:
1521          <QUOTE::reflecting Date child element> attribute should          <QUOTE::reflecting Date child element> attribute should
1522          be provided for published and created?          be provided for published and created?
1523        }        }
1524    
1525      @CODE:
1526        @@QName: getReflectAttrNonNegativeIntegerValue
1527        @@enDesc:
1528          {P:: If a DOM attribute is defined to <DFN::reflect the
1529               non-negative integer value of the <VAR::attr-name> attribute>
1530               of the node <VAR::E>, the getter of the attribute <kwd:MUST>
1531               return the value defined by the algorithm:
1532    
1533            {OLI:: If the <VAR::E> contains an attribute node <VAR::A> whose name
1534                   is <VAR::attr-name>:
1535    
1536              = If the <A::Node.nodeValue> of the <VAR::A> is
1537                one or more sequence of digits (<CHAR::DIGIT ZERO>,
1538                <CHAR::DIGIT ONE>, ..., <CHAR::DIGIT NINE>) optionally
1539                preceding by a <CHAR::PLUS SIGN>, then
1540                the attribute getter <kwd:MUST> return a value
1541                by interpreting the <A::Node.nodeValue> of the <VAR::A>
1542                as a decimal number.
1543    
1544            }
1545    
1546            = If a default value is explicitly defined
1547              where this algorithm is referenced, it <kwd:MUST>
1548              return the default value.
1549    
1550            = Otherwise, it <kwd:MUST> return a binding-specific
1551              default value, if it is defined by the specification
1552              of the binding, or <DOM::-1>.
1553    
1554          }
1555    
1556            {NOTE::
1557              In Atom Threading Extension <SRC::RFC 4685>,
1558              the <CHAR::PLUS SIGN> and leading <CHAR::DIGIT ZERO>s
1559              are prohibitted.
1560            }
1561        @@PerlDef:
1562          __DEEP{
1563            E: {
1564              $r = $node-><M::Element.getAttributeNS> ($namespaceURI, $localName);
1565              if (defined $r) {
1566                if ($r =~ /\A\+?([0-9]+)\z/) {
1567                  $r = 0+$1;
1568                  last E;
1569                }
1570              }
1571    
1572              $r = $defaultValue;
1573              $r = -1 unless defined $r;
1574            } # E
1575          }__;
1576    
1577      @CODE:
1578        @@QName: setReflectAttrNonNegativeIntegerValue
1579        @@enDesc:
1580          {P:: If a DOM attribute is defined to <DFN::reflect the
1581               non-negative integer value
1582               of the <VAR::attr-name> attribute> of the node <VAR::E>,
1583               the setter of the attribute <kwd:MUST> modify the node as
1584               defined by the algorithm:
1585    
1586            = If the given value is <DOM::-1> or one of binding-specific
1587              default values, if any, as defined by the specification
1588              of the binding, it <kwd:MUST>
1589              remove the <VAR::attr-name> attribute node, if any,
1590              from the list of attribute nodes of <VAR::E>.
1591    
1592            = Otherwise, it <kwd:MUST> set the <VAR::attr-name>
1593              attribute node value to a string representation
1594              of the given value as if
1595              the <M::Element.setAttributeNS> method were invoked.
1596              The string representation <kwd:MUST> be a decimal
1597              number consist of one or more sequence of digits
1598              (<CHAR::DIGIT ZERO>, <CHAR::DIGIT ONE>, ..., <CHAR::DIGIT NINE>)
1599              <EM::without> any leading <CHAR::DIGIT ZERO>.
1600              The <CHAR::PLUS SIGN> <kwd:MUST> be omitted.
1601    
1602          }
1603    
1604            {NOTE::
1605              It might throw an exception.
1606            }
1607        @@PerlDef:
1608          __DEEP{
1609            if (defined $given and $given >= 0) {
1610              $node-><M::Element.setAttributeNS>
1611                       ($namespaceURI, $localName, 0+$given);
1612            } else {
1613              $node-><M::Element.removeAttributeNS> ($namespaceURI, $localName);
1614            }
1615          }__;
1616  ##AtomImplementation  ##AtomImplementation
1617    
1618  IFClsDef:  IFClsDef:
1619    @IFQName: AtomDocument    @IFQName: AtomDocument
1620    @ClsQName: ManakaiAtomDocument    @ClsQName: ManakaiAtomDocument
1621    
1622    @IFISA: Document    @domperl:implementedByObjectsOf: Document
1623    @ClsISA: td|ManakaiDOMDocument    @domperl:classImplementedByObjectsOf: td|ManakaiDOMDocument
1624    
1625    @s:rootElementType: AnyAtomElement||ManakaiDOM|all    @f:implements: AtomFeature10
1626    
1627    @enDesc:    @enDesc:
1628      If the <Feature::fe|Atom> feature version <FeatureVer::1.0>      If the <Feature::fe|Atom> feature version <FeatureVer::1.0>
# Line 1322  IFClsDef: Line 1646  IFClsDef:
1646        $test->assert_isa ($doc, <IFName::AtomDocument>);        $test->assert_isa ($doc, <IFName::AtomDocument>);
1647  ##AtomDocument  ##AtomDocument
1648    
1649  IFClsDef:  AGDef:
1650    @IFQName: AtomFeedDocument    @QName: atomCommonAttributes
1651    @ClsQName: ManakaiFeedEntryDocument    @enFN: common attributes
1652      @mv:attributeTypeGroupName: common
   @IFISA: AtomDocument  
   @ClsISA: ManakaiAtomDocument  
1653    
1654    @s:rootElementType:    @mv:refers: Atom
1655      @@@: atom|feed    
1656      @@DISCore:stopISARecursive: 1    @ATDef:
1657        @@mv:attributeTypeName: xml|base
1658    @enDesc:      @@mv:attributeValueType: atomUri
1659      The <IF::AtomFeedDocument> interface provides convenience  
1660      methods and attributes for an Atom    @ATDef:
1661      Feed Document, i.e. representation of an Atom feed.      @@mv:attributeTypeName: xml|lang
1662        @@mv:attributeValueType: atomLanguageTag
1663      If the <Feature::fe|Atom> feature version <FeatureVer::1.0>  
1664      is supported, a <IF::Document> object whose <A::Document.documentElement>'s    @mv:refers: undefinedAttributes
1665      element type, if any, is <XE::atom|feed> at least at  ##atomCommonAttributes
1666      the time of creation <kwd:MUST> also  
1667      implement the <IF::AtomFeedDocument> interface.  Other  STDef:
1668      <IF::Document> objects <kwd:MAY> also implement    @QName: atomNCName
1669      the <IF::AtomFeedDocument> interface.    @mv:datatypeEntityName: NCName
1670      #subsetOf: xsd|string
1671    @Test:    #minLength, pattern
1672      @@QName: createDocument.AtomFeedDocument.test  
1673      @@PerlDef:  STDef:
1674        my $impl;    @QName: atomMediaType
1675        __CODE{tc|createImplForTest:: $impl => $impl}__;    @mv:datatypeEntityName: MediaType
1676          #subsetOf xsd|string
1677        my $doc = $impl-><M::c|DOMImplementation.createDocument>    # pattern
1678                           (<Q::atom|>, 'feed');  
1679    STDef:
1680        $test->id ('interface');    @QName: atomLanguageTag
1681        $test->assert_isa ($doc, <IFName::AtomFeedDocument>);    @mv:datatypeEntityName: LangaugeTag
1682  ##AtomFeedDocument    #subsetOf: xsd|string
1683      #pattern
1684  IFClsDef:  
1685    @IFQName: AtomEntryDocument  STDef:
1686    @ClsQName: ManakaiAtomEntryDocument    @QName: atomUri
1687      @mv:datatypeEntityName: URI
1688      #aliasfor text
1689    STCDef:
1690      @QName: atomUriCM
1691      @mv:elementContentModelName: URI
1692      @cm: (dxm|PCDATA||ManakaiDOM|all)*
1693    
1694    STDef:
1695      @QName: atomEmailAddress
1696      @mv:datatypeEntityName: EmailAddress
1697      #subsetOf xsd|string
1698      #pattern
1699    STCDef:
1700      @QName: atomEmailAddressCM
1701      @mv:elementContentModelName: EmailAddress
1702      @cm: (dxm|PCDATA||ManakaiDOM|all)*
1703    
1704    @IFISA: AtomDocument  ElementTypeBinding:
1705    @ClsISA: ManakaiAtomDocument    @Name: AGDef
1706      @ElementType:
1707        dis:ResourceDef
1708      @ShadowContent:
1709        @@DISCore:resourceType: mv|AttributeTypeGroup
1710        @@For: =ManakaiDOM|ManakaiDOMLatest
1711    
1712    @s:rootElementType:  ElementTypeBinding:
1713      @@@: atom|entry    @Name: ATDef
1714      @@DISCore:stopISARecursive: 1    @ElementType:
1715        dis:ResourceDef
1716      @ShadowContent:
1717        @@DISCore:resourceType: mv|AttributeType
1718        @@For: =ManakaiDOM|ManakaiDOMLatest
1719    
1720    @enDesc:  ElementTypeBinding:
1721      The <IF::AtomEntryDocument> interface provides convenience    @Name: ECDef
1722      methods and attributes for an Atom    @ElementType:
1723      Entry Document, i.e. exactly one Atom entry, outside      dis:ResourceDef
1724      of the context of an Atom feed.    @ShadowContent:
1725        @@DISCore:resourceType: mv|ElementTypeClass
1726        @@For: =ManakaiDOM|ManakaiDOMLatest
1727    
1728      If the <Feature::fe|Atom> feature version <FeatureVer::1.0>  ElementTypeBinding:
1729      is supported, a <IF::Document> object whose <A::Document.documentElement>'s    @Name: EMDef
1730      element type, if any, is <XE::atom|entry> at least at    @ElementType:
1731      the time of the creation <kwd:MUST> also      dis:ResourceDef
1732      implement the <IF::AtomEntryDocument> interface.  Other    @ShadowContent:
1733      <IF::Document> objects <kwd:MAY> also implement      @@DISCore:resourceType: mv|ElementTypeClassMix
1734      the <IF::AtomEntryDocument> interface.      @@For: =ManakaiDOM|ManakaiDOMLatest
1735    
1736    @Test:  ElementTypeBinding:
1737      @@QName: createDocument.AtomEntryDocument.test    @Name: STDef
1738      @@PerlDef:    @ElementType:
1739        my $impl;      dis:ResourceDef
1740        __CODE{tc|createImplForTest:: $impl => $impl}__;    @ShadowContent:
1741            @@DISCore:resourceType: mv|XMLDTDDatatypeEntity
1742        my $doc = $impl-><M::c|DOMImplementation.createDocument>      @@For: =ManakaiDOM|ManakaiDOMLatest
                          (<Q::atom|>, 'entry');  
1743    
1744        $test->id ('interface');  ElementTypeBinding:
1745        $test->assert_isa ($doc, <IFName::AtomEntryDocument>);    @Name: STCDef
1746  ##AtomEntryDocument    @ElementType:
1747        dis:ResourceDef
1748      @ShadowContent:
1749        @@DISCore:resourceType: mv|ElementContentModel
1750        @@For: =ManakaiDOM|ManakaiDOMLatest
1751    
1752  IFClsDef:  IFClsDef:
1753    @IFQName: AtomElement    @IFQName: AtomElement
# Line 1404  IFClsDef: Line 1756  IFClsDef:
1756    @IFISA: Element    @IFISA: Element
1757    @ClsISA: te|ManakaiDOMElement    @ClsISA: te|ManakaiDOMElement
1758        
1759      @f:implements: AtomFeature10
1760    @s:elementType: AnyAtomElement||ManakaiDOM|all    @s:elementType: AnyAtomElement||ManakaiDOM|all
1761    
1762    @enDesc:    @enDesc:
# Line 1455  ResourceDef: Line 1808  ResourceDef:
1808      @@ContentType: DISCore|QName      @@ContentType: DISCore|QName
1809    @ForCheck: =ManakaiDOM|all    @ForCheck: =ManakaiDOM|all
1810    
1811  IFClsDef:  ElementTypeBinding:
1812      @Name: cm
1813      @ElementType:
1814        mv:elementContentModel
1815      @ShadowContent:
1816        @@ContentType: lang|dcmodel
1817    
1818    IFClsConstructDef:
1819    @IFQName: AtomTextConstruct    @IFQName: AtomTextConstruct
1820    @ClsQName: ManakaiAtomTextConstruct    @ClsQName: ManakaiAtomTextConstruct
1821      @AGQName: TextAG
1822      @AGName: text
1823      @CMQName: TextCM
1824      @CMName: text
1825    
1826    @IFISA: AtomElement    @IFISA: AtomElement
1827    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
1828    
1829      @f:implements: AtomFeature10
1830      @mv:refers: atomCommonAttributes
1831    
1832      @cm:
1833        dxm|ANY||ManakaiDOM|all
1834      @enImplNote:
1835        @@ddid:cm
1836        @@@:
1837          {TODO::
1838            (dxm|PCDATA||ManakaiDOM|all | html|div)*
1839          }
1840    
1841    @enDesc:    @enDesc:
1842      The <IF::AtomTextConstruct> interface provides convenience      The <IF::AtomTextConstruct> interface provides convenience
1843      methods and attributes for <IF::Element> nodes      methods and attributes for <IF::Element> nodes
# Line 1470  IFClsDef: Line 1846  IFClsDef:
1846      interface.      interface.
1847    
1848      A Text construct contains human-readable text, usually in      A Text construct contains human-readable text, usually in
1849      small quantities.  The content of Text constructs is      small quantities.  The content of a Text construct is
1850      Language-Sensitive.      Language-Sensitive.
1851    
1852    @Attr:    @ATTR:
1853      @@Name: type      @@Name: type
1854      @@enDesc:      @@enDesc:
1855        The <XA::type> attribute of the element.        The <XA::type> attribute of the element.
# Line 1581  IFClsDef: Line 1957  IFClsDef:
1957          $test->assert_equals ($el-><AG::AtomTextConstruct.container>, $con);          $test->assert_equals ($el-><AG::AtomTextConstruct.container>, $con);
1958  ##AtomTextConstruct  ##AtomTextConstruct
1959    
1960  IFClsDef:  IFClsConstructDef:
1961    @IFQName: AtomPersonConstruct    @IFQName: AtomPersonConstruct
1962    @ClsQName: ManakaiAtomPersonConstruct    @ClsQName: ManakaiAtomPersonConstruct
1963      @AGQName: PersonAG
1964      @AGName: person
1965      @CMQName: PersonCM
1966      @CMName: person
1967    
1968    @IFISA: AtomElement    @IFISA: AtomElement
1969    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
1970    
1971      @f:implements: AtomFeature10
1972      @mv:refers: atomCommonAttributes
1973    
1974      @cm:
1975        (person-prop+)
1976    
1977    @enDesc:    @enDesc:
1978      The <IF::AtomPersonConstruct> interface provides convenience      The <IF::AtomPersonConstruct> interface provides convenience
1979      methods and attributes for <IF::Element> nodes      methods and attributes for <IF::Element> nodes
# Line 1635  IFClsDef: Line 2021  IFClsDef:
2021      @@Name: nameElement      @@Name: nameElement
2022      @@enDesc:      @@enDesc:
2023        The <XE::atom|name> child element of the node.        The <XE::atom|name> child element of the node.
2024      @@Type: AtomElement      @@Type: AtomNameElement
2025      @@Get:      @@Get:
2026        @@@enDesc:        @@@enDesc:
2027          It <kwd:MUST> <I::return a <XE::atom|name> child element>          It <kwd:MUST> <I::return a <XE::atom|name> child element>
# Line 1720  IFClsDef: Line 2106  IFClsDef:
2106          }__;          }__;
2107  ##AtomPersonConstruct  ##AtomPersonConstruct
2108    
2109  IFClsDef:  ECDef:
2110      @QName: person-prop
2111      @mv:elementTypeClassName: person-prop
2112      @mv:refers: atom|name
2113      @mv:refers: atom|uri
2114      @mv:refers: atom|email
2115      @mv:refers: extensionElements
2116    
2117    IFClsConstructDef:
2118    @IFQName: AtomDateConstruct    @IFQName: AtomDateConstruct
2119    @ClsQName: ManakaiAtomDateConstruct    @ClsQName: ManakaiAtomDateConstruct
2120      @AGQName: DateAG
2121      @AGName: date
2122      @CMQName: DateCM
2123      @CMName: date
2124    
2125    @IFISA: AtomElement    @IFISA: AtomElement
2126    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
2127    
2128      @f:implements: AtomFeature10
2129      @mv:refers: atomCommonAttributes
2130    
2131      @cm:
2132        (dxm|PCDATA||ManakaiDOM|all)*
2133      @enImplNote:
2134        @@ddid: cm
2135        @@@:
2136          {TODO::
2137            xsd|dateTime
2138          }
2139    
2140    @enDesc:    @enDesc:
2141      The <IF::AtomDateConstruct> interface provides convenience      The <IF::AtomDateConstruct> interface provides convenience
2142      methods and attributes for <IF::Element> nodes      methods and attributes for <IF::Element> nodes
# Line 1797  IFClsDef: Line 2207  IFClsDef:
2207        }        }
2208  ##AtomDateConstruct  ##AtomDateConstruct
2209    
2210    ECDef:
2211      @QName: feed-prop
2212      @mv:elementTypeClassName: feed-prop
2213      @mv:refers: atom|author
2214      @mv:refers: atom|category
2215      @mv:refers: atom|contributor
2216      @mv:refers: atom|generator
2217      @mv:refers: atom|icon
2218      @mv:refers: atom|id
2219      @mv:refers: atom|link
2220      @mv:refers: atom|logo
2221      @mv:refers: atom|rights
2222      @mv:refers: atom|subtitle
2223      @mv:refers: atom|title
2224      @mv:refers: atom|updated
2225      @mv:refers: extensionElements
2226    
2227  IFClsETDef:  IFClsETDef:
2228    @IFQName: AtomFeedElement    @IFQName: AtomFeedElement
2229    @ETQName: atom|feed    @ETQName: atom|feed
# Line 1806  IFClsETDef: Line 2233  IFClsETDef:
2233    @IFISA: AtomElement    @IFISA: AtomElement
2234    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
2235    
2236      @f:implements: AtomFeature10
2237      @mv:refers: atomCommonAttributes
2238    
2239      @cm:
2240        (feed-prop+, atom|entry*)
2241    
2242    @enDesc:    @enDesc:
2243      The <XE::atom|feed> element is the document element      The <XE::atom|feed> element is the document element
2244      of an Atom Feed Document.      of an Atom Feed Document.
2245    
2246        {ISSUE::
2247          <XE::atom|entry> children <kwd:MUST> be placed after
2248          any other elements.  Attributes creating children
2249          should insert them before any entries?
2250        }
2251    
2252    @Attr:    @Attr:
2253      @@Name: authorElements      @@Name: authorElements
2254      @@enDesc:      @@enDesc:
# Line 2403  IFClsETDef: Line 2842  IFClsETDef:
2842                                  (<Q::atom|>, 'updated');                                  (<Q::atom|>, 'updated');
2843            $updatede-><AS::AtomDateConstruct.value> (scalar time);            $updatede-><AS::AtomDateConstruct.value> (scalar time);
2844            $r-><M::Node.appendChild> ($updatede);            $r-><M::Node.appendChild> ($updatede);
2845    
2846              $self-><M::Node.appendChild> ($r);
2847          }__;          }__;
2848    
2849      @@Test:      @@Test:
# Line 2469  IFClsETDef: Line 2910  IFClsETDef:
2910          $test->assert_num_not_equals          $test->assert_num_not_equals
2911                   (actual_value => $updated-><AG::AtomDateConstruct.value>,                   (actual_value => $updated-><AG::AtomDateConstruct.value>,
2912                    expected_value => 0);                    expected_value => 0);
2913    
2914            $test->id ('parent');
2915            $test->assert_equals ($ent-><AG::Node.parentNode>, $feed);
2916      @@Test:      @@Test:
2917        @@@QName: AtomFeedElement.addNewEntry.2.test        @@@QName: AtomFeedElement.addNewEntry.2.test
2918        @@@enDesc:        @@@enDesc:
# Line 2487  IFClsETDef: Line 2931  IFClsETDef:
2931                                      (<Q::xml|>, 'lang'));                                      (<Q::xml|>, 'lang'));
2932  ##AtomFeedElement  ##AtomFeedElement
2933    
2934    ECDef:
2935      @QName: entry-prop
2936      @mv:elementTypeClassName: entry-prop
2937      @mv:refers: atom|author
2938      @mv:refers: atom|category
2939      @mv:refers: atom|content
2940      @mv:refers: atom|contributor
2941      @mv:refers: atom|id
2942      @mv:refers: atom|link
2943      @mv:refers: atom|published
2944      @mv:refers: atom|rights
2945      @mv:refers: atom|source
2946      @mv:refers: atom|summary
2947      @mv:refers: atom|title
2948      @mv:refers: atom|updated
2949      @mv:refers: extensionElements
2950    
2951  IFClsETDef:  IFClsETDef:
2952    @IFQName: AtomEntryElement    @IFQName: AtomEntryElement
2953    @ETQName: atom|entry    @ETQName: atom|entry
# Line 2496  IFClsETDef: Line 2957  IFClsETDef:
2957    @IFISA: AtomElement    @IFISA: AtomElement
2958    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
2959    
2960      @f:implements: AtomFeature10
2961      @mv:refers: atomCommonAttributes
2962    
2963      @cm:
2964        (entry-prop+)
2965    
2966    @enDesc:    @enDesc:
2967      The <XE::atom|entry> element represents an individual      The <XE::atom|entry> element represents an individual
2968      entry, acting as a container for metadata and data      entry, acting as a container for metadata and data
# Line 2668  IFClsETDef: Line 3135  IFClsETDef:
3135          $test->assert_num_equals (actual_value => 0+@$list, expected_value => 0);          $test->assert_num_equals (actual_value => 0+@$list, expected_value => 0);
3136    
3137          $test->id ('parent');          $test->id ('parent');
3138            my $parent;
3139          for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {          for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {
3140              $parent = $_;
3141            $_-><M::Node.appendChild>            $_-><M::Node.appendChild>
3142                  ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));                  ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3143            $_-><M::Node.appendChild>            $_-><M::Node.appendChild>
# Line 2688  IFClsETDef: Line 3157  IFClsETDef:
3157          my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');          my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');
3158    
3159          $test->id ('parent');          $test->id ('parent');
3160            my $parent;
3161          for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {          for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {
3162              $parent = $_;
3163            $_-><M::Node.appendChild>            $_-><M::Node.appendChild>
3164                  ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));                  ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3165            $_-><M::Node.appendChild>            $_-><M::Node.appendChild>
# Line 2713  IFClsETDef: Line 3184  IFClsETDef:
3184          @@@@dlp:cloneCode: ManakaiAtomFeedElement.categoryElements.get          @@@@dlp:cloneCode: ManakaiAtomFeedElement.categoryElements.get
3185    
3186    @Attr:    @Attr:
3187        @@Name: contentElement
3188        @@enDesc:
3189          The <XE::atom|content> child element of the node.
3190        @@Type: AtomContentElement
3191        @@Get:
3192          @@@enDesc:
3193            It <kwd:MUST> <I::return a <XE::atom|content> child element>
3194            of the node.
3195          @@@nullCase:
3196            @@@@enDesc:
3197              If the algorithm returns <DOM::null>.
3198          @@@NodeReadOnlyError:
3199          @@@PerlDef:
3200            __CODE{returnChildElement::
3201              $node => $self,
3202              $namespaceURI => {<Q::atom|>},
3203              $localName => 'content',
3204              $r => $r,
3205            }__;
3206    
3207      @Attr:
3208      @@Name: contributorElements      @@Name: contributorElements
3209      @@enDesc:      @@enDesc:
3210        A static list of <XE::atom|contributor> child elements of the node.        A static list of <XE::atom|contributor> child elements of the node.
# Line 2995  IFClsETDef: Line 3487  IFClsETDef:
3487  ##AtomEntryElement  ##AtomEntryElement
3488    
3489  IFClsETDef:  IFClsETDef:
3490      @IFQName: AtomIdElement
3491      @ETQName: atom|id
3492      @ETRQName: atom|id
3493      @ClsQName: ManakaiAtomIdElement
3494    
3495      @IFISA: AtomElement
3496      @ClsISA: ManakaiAtomElement
3497    
3498      @f:implements: AtomFeature10
3499      @mv:refers: atomCommonAttributes
3500      
3501      @cm: atomUriCM
3502    ##AtomIdElement
3503    
3504    IFClsETDef:
3505      @IFQName: AtomIconElement
3506      @ETQName: atom|icon
3507      @ETRQName: atom|icon
3508      @ClsQName: ManakaiAtomIconElement
3509    
3510      @IFISA: AtomElement
3511      @ClsISA: ManakaiAtomElement
3512    
3513      @f:implements: AtomFeature10
3514      @mv:refers: atomCommonAttributes
3515    
3516      @cm: atomUriCM
3517    ##AtomIconElement
3518    
3519    IFClsETDef:
3520      @IFQName: AtomNameElement
3521      @ETQName: atom|name
3522      @ETRQName: atom|name
3523      @ClsQName: ManakaiAtomNameElement
3524    
3525      @IFISA: AtomElement
3526      @ClsISA: ManakaiAtomElement
3527    
3528      @f:implements: AtomFeature10
3529      # no common attribs
3530      @cm: TextCM
3531    
3532      @mv:refers: Atom
3533    ##AtomNameElement
3534    
3535    IFClsETDef:
3536      @IFQName: AtomUriElement
3537      @ETQName: atom|uri
3538      @ETRQName: atom|uri
3539      @ClsQName: ManakaiAtomUriElement
3540    
3541      @IFISA: AtomElement
3542      @ClsISA: ManakaiAtomElement
3543    
3544      @f:implements: AtomFeature10
3545      # no common attribs
3546      @cm: atomUriCM
3547    
3548      @mv:refers: Atom
3549    ##AtomUriElement
3550    
3551    IFClsETDef:
3552      @IFQName: AtomEmailElement
3553      @ETQName: atom|email
3554      @ETRQName: atom|email
3555      @ClsQName: ManakaiAtomEmailElement
3556    
3557      @IFISA: AtomElement
3558      @ClsISA: ManakaiAtomElement
3559    
3560      @f:implements: AtomFeature10
3561      # no common attribs
3562      @cm: atomEmailAddressCM
3563    
3564      @mv:refers: Atom
3565    ##AtomEmailElement
3566    
3567    IFClsETDef:
3568      @IFQName: AtomLogoElement
3569      @ETQName: atom|logo
3570      @ETRQName: atom|logo
3571      @ClsQName: ManakaiAtomLogoElement
3572    
3573      @IFISA: AtomElement
3574      @ClsISA: ManakaiAtomElement
3575    
3576      @f:implements: AtomFeature10
3577      @mv:refers: atomCommonAttributes
3578    
3579      @cm: atomUriCM
3580    ##AtomLogoElement
3581    
3582    IFClsETDef:
3583    @IFQName: AtomContentElement    @IFQName: AtomContentElement
3584    @ETQName: atom|content    @ETQName: atom|content
3585      @ETRQName: atom|content
3586    @ClsQName: ManakaiAtomContentElement    @ClsQName: ManakaiAtomContentElement
3587    
3588    @IFISA: AtomElement    @IFISA: AtomElement
3589    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
3590    
3591      @f:implements: AtomFeature10
3592      @mv:refers: atomCommonAttributes
3593    
3594      @cm:
3595        dxm|ANY||ManakaiDOM|all
3596    
3597    @enDesc:    @enDesc:
3598      The <XE::atom|content> element either contains or links to      The <XE::atom|content> element either contains or links to
3599      the content of the entry.      the content of the entry.
3600    
3601    @Attr:    @ATTR:
3602      @@Name: type      @@Name: type
3603      @@enDesc:      @@enDesc:
3604        The type of the element.        The type of the element.
# Line 3071  IFClsETDef: Line 3663  IFClsETDef:
3663          $el-><AS::AtomContentElement.type> (null);          $el-><AS::AtomContentElement.type> (null);
3664          $test->assert_null ($el-><AG::AtomContentElement.type>);          $test->assert_null ($el-><AG::AtomContentElement.type>);
3665    
3666    @Attr:    @ATTR:
3667      @@Name: src      @@Name: src
3668      @@enDesc:      @@enDesc:
3669        The source of the remote content of the element.        The source of the remote content of the element.
# Line 3245  IFClsETDef: Line 3837  IFClsETDef:
3837  IFClsETDef:  IFClsETDef:
3838    @IFQName: AtomAuthorElement    @IFQName: AtomAuthorElement
3839    @ETQName: atom|author    @ETQName: atom|author
3840      @ETRQName: atom|author
3841    @ClsQName: ManakaiAtomAuthorElement    @ClsQName: ManakaiAtomAuthorElement
3842    
3843    @IFISA: AtomPersonConstruct    @IFISA: AtomPersonConstruct
3844    @ClsISA: ManakaiAtomPersonConstruct    @ClsISA: ManakaiAtomPersonConstruct
3845    
3846      @f:implements: AtomFeature10
3847      @mv:refers: PersonAG
3848      @mv:elementContentModel: PersonCM
3849    
3850    @enDesc:    @enDesc:
3851      The <XE::atom|author> element is a Person construct that      The <XE::atom|author> element is a Person construct that
3852      indicates the author of the entry or feed.      indicates the author of the entry or feed.
# Line 3258  IFClsETDef: Line 3855  IFClsETDef:
3855  IFClsETDef:  IFClsETDef:
3856    @IFQName: AtomCategoryElement    @IFQName: AtomCategoryElement
3857    @ETQName: atom|category    @ETQName: atom|category
3858      @ETRQName: atom|category
3859    @ClsQName: ManakaiAtomCategoryElement    @ClsQName: ManakaiAtomCategoryElement
3860    
3861    @IFISA: AtomElement    @IFISA: AtomElement
3862    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
3863    
3864      @f:implements: AtomFeature10
3865      @mv:refers: atomCommonAttributes
3866    
3867      @cm: undefinedContent
3868    
3869    @enDesc:    @enDesc:
3870      The <XE::atom|category> element conveys information abut      The <XE::atom|category> element conveys information abut
3871      a category associated with an entry or feed.      a category associated with an entry or feed.
# Line 3371  IFClsETDef: Line 3974  IFClsETDef:
3974  IFClsETDef:  IFClsETDef:
3975    @IFQName: AtomContributorElement    @IFQName: AtomContributorElement
3976    @ETQName: atom|contributor    @ETQName: atom|contributor
3977      @ETRQName: atom|contributor
3978    @ClsQName: ManakaiAtomContributorElement    @ClsQName: ManakaiAtomContributorElement
3979    
3980    @IFISA: AtomPersonConstruct    @IFISA: AtomPersonConstruct
3981    @ClsISA: ManakaiAtomPersonConstruct    @ClsISA: ManakaiAtomPersonConstruct
3982    
3983      @f:implements: AtomFeature10
3984      @mv:refers: PersonAG
3985      @mv:elementContentModel: PersonCM
3986    
3987    @enDesc:    @enDesc:
3988      The <XE::atom|contributor> element is a Person construct that      The <XE::atom|contributor> element is a Person construct that
3989      indicates a person or other entity who contributed to the entry      indicates a person or other entity who contributed to the entry
# Line 3385  IFClsETDef: Line 3993  IFClsETDef:
3993  IFClsETDef:  IFClsETDef:
3994    @IFQName: AtomGeneratorElement    @IFQName: AtomGeneratorElement
3995    @ETQName: atom|generator    @ETQName: atom|generator
3996      @ETRQName: atom|generator
3997    @ClsQName: ManakaiAtomGeneratorElement    @ClsQName: ManakaiAtomGeneratorElement
3998    
3999    @IFISA: AtomElement    @IFISA: AtomElement
4000    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
4001    
4002      @f:implements: AtomFeature10
4003      @mv:refers: atomCommonAttributes
4004    
4005      @cm:
4006        (dxm|PCDATA||ManakaiDOM|all)*
4007    
4008    @enDesc:    @enDesc:
4009      The <XE::atom|generator> element identifies the agent used      The <XE::atom|generator> element identifies the agent used
4010      to generate a feed.      to generate a feed.
# Line 3465  IFClsETDef: Line 4080  IFClsETDef:
4080  IFClsETDef:  IFClsETDef:
4081    @IFQName: AtomLinkElement    @IFQName: AtomLinkElement
4082    @ETQName: atom|link    @ETQName: atom|link
4083      @ETRQName: atom|link
4084    @ClsQName: ManakaiAtomLinkElement    @ClsQName: ManakaiAtomLinkElement
4085    
4086    @IFISA: AtomElement    @IFISA: AtomElement
4087    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
4088    
4089      @f:implements: AtomFeature10
4090      @mv:refers: atomCommonAttributes
4091    
4092      @cm: undefinedContent
4093    
4094    @enDesc:    @enDesc:
4095      The <XE::atom|link> element defines a reference from an entry      The <XE::atom|link> element defines a reference from an entry
4096      or feed to a Web resource.      or feed to a Web resource.
4097    
4098    @Attr:    @ATTR:
4099      @@Name: href      @@Name: href
4100      @@enDesc:      @@enDesc:
4101        The <XA::href> attribute of the element.        The <XA::href> attribute of the element.
# Line 3482  IFClsETDef: Line 4103  IFClsETDef:
4103        It <kwd:MUST> <I::reflect the URI value        It <kwd:MUST> <I::reflect the URI value
4104        of the <XA::href> attribute> of the node.        of the <XA::href> attribute> of the node.
4105      @@Type: DOMString      @@Type: DOMString
4106      @@Type: DOMURI      @@actualType: DOMURI
4107      @@Get:      @@Get:
4108        @@@nullCase:        @@@nullCase:
4109          @@@@enDesc:          @@@@enDesc:
# Line 3508  IFClsETDef: Line 4129  IFClsETDef:
4129            $given => $given,            $given => $given,
4130          }__;          }__;
4131    
4132    @Attr:    @ATTR:
4133      @@Name: rel      @@Name: rel
4134      @@enDesc:      @@enDesc:
4135        The <XA::rel> attribute of the element.        The <XA::rel> attribute of the element.
# Line 3518  IFClsETDef: Line 4139  IFClsETDef:
4139        a few exceptions.  The default value <kwd:MUST>        a few exceptions.  The default value <kwd:MUST>
4140        be <URI^DISCore|QName::rel|alternate>.        be <URI^DISCore|QName::rel|alternate>.
4141      @@Type: DOMString      @@Type: DOMString
4142        @@actualType: DOMURI
4143      @@Get:      @@Get:
4144        @@@enDesc:        @@@enDesc:
4145          If the algorithm returns a string that does not contain          If the algorithm returns a string that does not contain
# Line 3591  IFClsETDef: Line 4213  IFClsETDef:
4213          $test->assert_equals ($el-><AG::AtomLinkElement.rel>,          $test->assert_equals ($el-><AG::AtomLinkElement.rel>,
4214                                <Q::rel|alternate>);                                <Q::rel|alternate>);
4215    
4216    @Attr:    @ATTR:
4217      @@Name: type      @@Name: type
4218      @@enDesc:      @@enDesc:
4219        The <XA::type> attribute of the element.        The <XA::type> attribute of the element.
# Line 3600  IFClsETDef: Line 4222  IFClsETDef:
4222        of the <XA::type> attribute> of the node.        of the <XA::type> attribute> of the node.
4223      @@Type: DOMString      @@Type: DOMString
4224      @@Get:      @@Get:
4225          @@@enDesc:
4226            {P:: If the feature <Feature^^DISCore|QName::AtomThreadingFeature10>
4227                 is supported, the attribute getter <kwd:MUST> return
4228                 the string <CODE::application/atom+xml> when both of the
4229                 following conditions are met:
4230    
4231               - The attribute getter would otherwise return <DOM::null>.
4232    
4233               - The <A::AtomLinkElement.rel> attribute contains
4234                 a string value of <URI^^DISCore|QName::rel|replies>.
4235    
4236            }
4237        @@@nullCase:        @@@nullCase:
4238          @@@@enDesc:          @@@@enDesc:
4239            If the algorithm returns <DOM::null>.            If the algorithm returns <DOM::null>.
# Line 3611  IFClsETDef: Line 4245  IFClsETDef:
4245            $r => $r,            $r => $r,
4246            $defaultValue => {null},            $defaultValue => {null},
4247          }__;          }__;
4248    
4249            unless (defined $r) {
4250              __DEEP{
4251                my $rel = $self-><AG::AtomLinkElement.rel>;
4252                if (defined $rel and $rel eq <Q::rel|replies>) {
4253                  $r = q<application/atom+xml>;
4254                }
4255              }__;
4256            }
4257      @@Set:      @@Set:
4258        @@@nullCase:        @@@nullCase:
4259          @@@@enDesc:          @@@@enDesc:
# Line 3624  IFClsETDef: Line 4267  IFClsETDef:
4267            $given => $given,            $given => $given,
4268          }__;          }__;
4269    
4270    @Attr:      @@Test:
4271          @@@QName: AtomLinkElement.type.!rel.test
4272          @@@PerlDef:
4273            my $doc;
4274            __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4275    
4276            my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'link');
4277    
4278            $test->id ('implied');
4279            my $type0 = $el-><AG::AtomLinkElement.type>;
4280            $test->assert_null ($type0);
4281    
4282            $test->id ('explicit');
4283            $el-><AS::AtomLinkElement.type> ('application/atom+xml');
4284            my $type1 = $el-><AG::AtomLinkElement.type>;
4285            $test->assert_equals ($type1, q<application/atom+xml>);
4286    
4287            $test->id ('different');
4288            $el-><AS::AtomLinkElement.type> ('application/xhtml+xml');
4289            my $type2 = $el-><AG::AtomLinkElement.type>;
4290            $test->assert_equals ($type2, q<application/xhtml+xml>);
4291        @@Test:
4292          @@@QName: AtomLinkElement.type.rel!=replies.test
4293          @@@PerlDef:
4294            my $doc;
4295            __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4296    
4297            my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'link');
4298    
4299            $el-><AS::AtomLinkElement.rel> (<Q::rel|alternate>);
4300    
4301            $test->id ('implied');
4302            my $type0 = $el-><AG::AtomLinkElement.type>;
4303            $test->assert_null ($type0);
4304    
4305            $test->id ('explicit');
4306            $el-><AS::AtomLinkElement.type> ('application/atom+xml');
4307            my $type1 = $el-><AG::AtomLinkElement.type>;
4308            $test->assert_equals ($type1, q<application/atom+xml>);
4309    
4310            $test->id ('different');
4311            $el-><AS::AtomLinkElement.type> ('application/xhtml+xml');
4312            my $type2 = $el-><AG::AtomLinkElement.type>;
4313            $test->assert_equals ($type2, q<application/xhtml+xml>);
4314        @@Test:
4315          @@@QName: AtomLinkElement.type.rel=replies.test
4316          @@@PerlDef:
4317            my $doc;
4318            __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4319    
4320            my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'link');
4321    
4322            $el-><AS::AtomLinkElement.rel> (<Q::rel|replies>);
4323    
4324            $test->id ('implied');
4325            my $type0 = $el-><AG::AtomLinkElement.type>;
4326            $test->assert_equals ($type0, q<application/atom+xml>);
4327    
4328            $test->id ('explicit');
4329            $el-><AS::AtomLinkElement.type> ('application/atom+xml');
4330            my $type1 = $el-><AG::AtomLinkElement.type>;
4331            $test->assert_equals ($type1, q<application/atom+xml>);
4332    
4333            $test->id ('different');
4334            $el-><AS::AtomLinkElement.type> ('application/xhtml+xml');
4335            my $type2 = $el-><AG::AtomLinkElement.type>;
4336            $test->assert_equals ($type2, q<application/xhtml+xml>);
4337    
4338      @ATTR:
4339      @@Name: hreflang      @@Name: hreflang
4340      @@enDesc:      @@enDesc:
4341        The <XA::hreflang> attribute of the element.        The <XA::hreflang> attribute of the element.
# Line 3657  IFClsETDef: Line 4368  IFClsETDef:
4368            $given => $given,            $given => $given,
4369          }__;          }__;
4370    
4371    @Attr:    @ATTR:
4372      @@Name: title      @@Name: title
4373      @@enDesc:      @@enDesc:
4374        The <XA::title> attribute of the element.        The <XA::title> attribute of the element.
# Line 3690  IFClsETDef: Line 4401  IFClsETDef:
4401            $given => $given,            $given => $given,
4402          }__;          }__;
4403    
4404    @Attr:    @ATTR:
4405      @@Name: length      @@Name: length
4406      @@enDesc:      @@enDesc:
4407        The <XA::length> attribute of the element.        The <XA::length> attribute of the element.
# Line 3727  IFClsETDef: Line 4438  IFClsETDef:
4438  IFClsETDef:  IFClsETDef:
4439    @IFQName: AtomPublishedElement    @IFQName: AtomPublishedElement
4440    @ETQName: atom|published    @ETQName: atom|published
4441      @ETRQName: atom|published
4442    @ClsQName: ManakaiAtomPublishedElement    @ClsQName: ManakaiAtomPublishedElement
4443    
4444    @IFISA: AtomDateConstruct    @IFISA: AtomDateConstruct
4445    @ClsISA: ManakaiAtomDateConstruct    @ClsISA: ManakaiAtomDateConstruct
4446    
4447      @f:implements: AtomFeature10
4448      @mv:refers: DateAG
4449      @mv:elementContentModel: DateCM
4450    
4451    @enDesc:    @enDesc:
4452      The <XE::atom|published> element is a Date construct      The <XE::atom|published> element is a Date construct
4453      indicating an instant in time associated with an      indicating an instant in time associated with an
# Line 3744  IFClsETDef: Line 4460  IFClsETDef:
4460  IFClsETDef:  IFClsETDef:
4461    @IFQName: AtomRightsElement    @IFQName: AtomRightsElement
4462    @ETQName: atom|rights    @ETQName: atom|rights
4463      @ETRQName: atom|rights
4464    @ClsQName: ManakaiAtomRightsElement    @ClsQName: ManakaiAtomRightsElement
4465    
4466    @IFISA: AtomTextConstruct    @IFISA: AtomTextConstruct
4467    @ClsISA: ManakaiAtomTextConstruct    @ClsISA: ManakaiAtomTextConstruct
4468    
4469      @f:implements: AtomFeature10
4470      @mv:refers: TextAG
4471      @mv:elementContentModel: TextCM
4472    
4473    @enDesc:    @enDesc:
4474      The <XE::atom|rights> element is a Text construct      The <XE::atom|rights> element is a Text construct
4475      that conveys information about rights held in and      that conveys information about rights held in and
4476      over an entry or feed.      over an entry or feed.
4477  ##AtomRightsElement  ##AtomRightsElement
4478    
4479    ECDef:
4480      @QName: source-prop
4481      @mv:elementTypeClassName: source-prop
4482      @mv:refers: atom|author
4483      @mv:refers: atom|category
4484      @mv:refers: atom|contributor
4485      @mv:refers: atom|generator
4486      @mv:refers: atom|icon
4487      @mv:refers: atom|id
4488      @mv:refers: atom|link
4489      @mv:refers: atom|logo
4490      @mv:refers: atom|rights
4491      @mv:refers: atom|subtitle
4492      @mv:refers: atom|title
4493      @mv:refers: atom|updated
4494      @mv:refers: extensionElements
4495    
4496  IFClsETDef:  IFClsETDef:
4497    @IFQName: AtomSourceElement    @IFQName: AtomSourceElement
4498    @ETQName: atom|source    @ETQName: atom|source
4499      @ETRQName: atom|source
4500    @ClsQName: ManakaiAtomSourceElement    @ClsQName: ManakaiAtomSourceElement
4501    
4502    @IFISA: AtomElement    @IFISA: AtomElement
4503    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
4504    
4505      @f:implements: AtomFeature10
4506      @mv:refers: atomCommonAttributes
4507    
4508      @cm:
4509        (source-prop*)
4510    
4511    @Attr:    @Attr:
4512      @@Name: authorElements      @@Name: authorElements
4513      @@enDesc:      @@enDesc:
# Line 3967  IFClsETDef: Line 4712  IFClsETDef:
4712  IFClsETDef:  IFClsETDef:
4713    @IFQName: AtomSubtitleElement    @IFQName: AtomSubtitleElement
4714    @ETQName: atom|subtitle    @ETQName: atom|subtitle
4715      @ETRQName: atom|subtitle
4716    @ClsQName: ManakaiAtomSubtitleElement    @ClsQName: ManakaiAtomSubtitleElement
4717    
4718    @IFISA: AtomTextConstruct    @IFISA: AtomTextConstruct
4719    @ClsISA: ManakaiAtomTextConstruct    @ClsISA: ManakaiAtomTextConstruct
4720    
4721      @f:implements: AtomFeature10
4722      @mv:refers: TextAG
4723      @mv:elementContentModel: TextCM
4724    
4725    @enDesc:    @enDesc:
4726      The <XE::atom|subtitle> element is a Text construct      The <XE::atom|subtitle> element is a Text construct
4727      that conveys a human-readable description or subtitle for a feed.      that conveys a human-readable description or subtitle for a feed.
# Line 3980  IFClsETDef: Line 4730  IFClsETDef:
4730  IFClsETDef:  IFClsETDef:
4731    @IFQName: AtomSummaryElement    @IFQName: AtomSummaryElement
4732    @ETQName: atom|summary    @ETQName: atom|summary
4733      @ETRQName: atom|summary
4734    @ClsQName: ManakaiAtomSummaryElement    @ClsQName: ManakaiAtomSummaryElement
4735    
4736    @IFISA: AtomTextConstruct    @IFISA: AtomTextConstruct
4737    @ClsISA: ManakaiAtomTextConstruct    @ClsISA: ManakaiAtomTextConstruct
4738    
4739      @f:implements: AtomFeature10
4740      @mv:refers: TextAG
4741      @mv:elementContentModel: TextCM
4742    
4743    @enDesc:    @enDesc:
4744      The <XE::atom|summary> element is a Text construct      The <XE::atom|summary> element is a Text construct
4745      that conveys a short summary, abstract, or excerpt of an entry.      that conveys a short summary, abstract, or excerpt of an entry.
# Line 3993  IFClsETDef: Line 4748  IFClsETDef:
4748  IFClsETDef:  IFClsETDef:
4749    @IFQName: AtomTitleElement    @IFQName: AtomTitleElement
4750    @ETQName: atom|title    @ETQName: atom|title
4751      @ETRQName: atom|title
4752    @ClsQName: ManakaiAtomTitleElement    @ClsQName: ManakaiAtomTitleElement
4753    
4754    @IFISA: AtomTextConstruct    @IFISA: AtomTextConstruct
4755    @ClsISA: ManakaiAtomTextConstruct    @ClsISA: ManakaiAtomTextConstruct
4756    
4757      @f:implements: AtomFeature10
4758      @mv:refers: TextAG
4759      @mv:elementContentModel: TextCM
4760    
4761    @enDesc:    @enDesc:
4762      The <XE::atom|title> element is a Text construct      The <XE::atom|title> element is a Text construct
4763      that conveys a human-readable title for an entry or feed.      that conveys a human-readable title for an entry or feed.
# Line 4006  IFClsETDef: Line 4766  IFClsETDef:
4766  IFClsETDef:  IFClsETDef:
4767    @IFQName: AtomUpdatedElement    @IFQName: AtomUpdatedElement
4768    @ETQName: atom|updated    @ETQName: atom|updated
4769      @ETRQName: atom|updated
4770    @ClsQName: ManakaiAtomUpdatedElement    @ClsQName: ManakaiAtomUpdatedElement
4771    
4772    @IFISA: AtomDateConstruct    @IFISA: AtomDateConstruct
4773    @ClsISA: ManakaiAtomDateConstruct    @ClsISA: ManakaiAtomDateConstruct
4774    
4775      @f:implements: AtomFeature10
4776      @mv:refers: DateAG
4777      @mv:elementContentModel: DateCM
4778    
4779    @enDesc:    @enDesc:
4780      The <XE::atom|updated> element is a Date construct      The <XE::atom|updated> element is a Date construct
4781      indicating the most recent instant in time when an      indicating the most recent instant in time when an
# Line 4100  ElementTypeBinding: Line 4865  ElementTypeBinding:
4865      @@For: ManakaiDOM|DOM3      @@For: ManakaiDOM|DOM3
4866      @@For: =ManakaiDOM|all      @@For: =ManakaiDOM|all
4867      @@Type: idl|boolean||ManakaiDOM|all      @@Type: idl|boolean||ManakaiDOM|all
4868    
4869    ECDef:
4870      @QName: simpleExtensionElements
4871      @mv:elementTypeClassName: simple.extra
4872      @DISCore:resourceType: mv|ElementTypeAdditionalClass
4873    
4874    ECDef:
4875      @QName: structuredExtensionElements
4876      @mv:elementTypeClassName: structured.extra
4877      @DISCore:resourceType: mv|ElementTypeAdditionalClass
4878    
4879    EMDef:
4880      @QName: extensionElements
4881      @mv:elementTypeClassName: extra
4882      @mv:refers: simpleExtensionElements
4883      @mv:refers: structuredExtensionElements
4884      @DISCore:resourceType: mv|ElementTypeAdditionalClass
4885    
4886    AGDef:
4887      @QName: undefinedAttributes
4888      @mv:attributeTypeGroupName: common.extra
4889    
4890    ResourceDef:
4891      @QName: undefinedContent
4892      @mv:elementContentModelName: undefined
4893      @For: =ManakaiDOM|ManakaiDOMLatest
4894      @DISCore:resourceType: mv|ElementContentModel
4895      @cm: dxm|ANY||ManakaiDOM|all
4896      @enImplNote:
4897        (text | anyForeignElement)*
4898    
4899    ## -- Atom Threading Extension [RFC 4685]
4900    
4901    IFClsDef:
4902      @IFQName: AtomEntryElementThread
4903      @ClsQName: ManakaiAtomEntryElementThread
4904    
4905      @ClsISA: ManakaiAtomEntryElement
4906    
4907      @f:implements: AtomThreadingFeature10
4908    
4909      @enDesc:
4910        If the feature <Feature^^DISCore|QName::AtomThreadingFeature10>
4911        is supported, any <IF::Element> whose element type
4912        is <XE::atom|entry> <kwd:MUST> implement the <IF::AtomEntryElementThread>
4913        interface in addition to other appropriate interfaces.
4914    
4915      @Test:
4916        @@QName: AtomEntryElementThread.1.test
4917        @@PerlDef:
4918          my $doc;
4919          __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4920    
4921          my $el = $doc->create_element_ns (<Q::atom|>, 'entry');
4922    
4923          $test->id ('interface');
4924          $test->assert_isa ($el, <IFName::AtomEntryElementThread>);
4925    
4926          $test->id ('feature');
4927          $test->assert_true ($el->is_supported (<Q::fe|AtomThreading> => '1.0'));
4928    
4929      @Attr:
4930        @@Name: threadInReplyToElements
4931        @@enDesc:
4932          A static list of <XE::thr|in-reply-to> child elements of the node.
4933        @@Type: StaticNodeList
4934        @@Get:
4935          @@@enDesc:
4936            It <kwd:MUST> <I::return a <XE::thr|in-reply-to> child element list>
4937            of the node.
4938          @@@PerlDef:
4939            __CODE{returnChildElementList::
4940              $node => $self,
4941              $namespaceURI => {<Q::thr|>},
4942              $localName => 'in-reply-to',
4943              $r => $r,
4944            }__;
4945    ##AtomEntryElementThread
4946    
4947    IFClsETDef:
4948      @IFQName: AtomThreadInReplyToElement
4949      @ETQName: thr|in-reply-to
4950      @ETRQName: thr|in-reply-to
4951      @ClsQName: ManakaiAtomThreadInReplyToElement
4952    
4953      @IFISA: AtomDateConstruct
4954      @ClsISA: ManakaiAtomDateConstruct
4955    
4956      @f:implements: AtomThreadingFeature10
4957      @mv:refers: atomCommonAttributes
4958    
4959      @cm: undefinedContent
4960    
4961      @enDesc:
4962        The <XE::thr|in-reply-to> element is used to indicate
4963        that an entry is a response to another resource.
4964    
4965        If the entry is a response to multiple resources,
4966        additional <XE::thr|in-reply-to> element <kwd:MAY>
4967        be used.
4968    
4969        RFC 4685 assigns no significance to the order in which
4970        multiple <XE::thr|in-reply-to> element appear within
4971        an entry.
4972    
4973      @Test:
4974        @@QName: AtomThreadInReplyToElement.1.test
4975        @@PerlDef:
4976          my $doc;
4977          __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4978    
4979          my $el = $doc->create_element_ns (<Q::thr|>, 'in-reply-to');
4980    
4981          $test->id ('interface');
4982          $test->assert_isa ($el, <IFName::AtomThreadInReplyToElement>);
4983    
4984          $test->id ('feature');
4985          $test->assert_true ($el->is_supported (<Q::fe|AtomThreading> => '1.0'));
4986    
4987      @ATTR:
4988        @@Name: ref
4989        @@enDesc:
4990          The <XA::ref> attribute of the element.
4991    
4992          It <kwd:MUST> <I::reflect the URI value
4993          of the <XA::ref> attribute> of the node.
4994    
4995          The <XA::ref> attribute specifies the persistent,
4996          universally unique identifier of the resource being
4997          responded to.  The value <kwd:MUST> conform to
4998          the same construction and comparison rules as the
4999          value of the <XE::atom|id> element.  Though the IRI
5000          might use a dereferenceable scheme, processors <kwd:MUST-NOT>
5001          assume that it can be dereferenced.
5002    
5003          The <XE::thr|in-reply-to> element <kwd:MUST> contain
5004          a <XA::ref> attribute identifying the resource that
5005          is being respnoded to.
5006    
5007          If the resource being responded to does not have a persistent,
5008          universally unique identifier, the publisher <kwd:MUST> assign an
5009          identifier that satisfies all the considerations in Section 4.2.6 of
5010          RFC 4287 for use as the value of the <XA::ref> attribute.
5011          In that case, if a representation of the resource can be retrieved
5012          from an IRI that can be used as a valid atom:id value, then this IRI
5013          <kwd:SHOULD> be used as the value of both the <XA::ref> and
5014          <XA::href> attributes.
5015        @@Type: DOMString
5016        @@actualType: DOMURI
5017        @@Get:
5018          @@@nullCase:
5019            @@@@enDesc:
5020              If the algorithm returns <DOM::null>.
5021          @@@PerlDef:
5022            __CODE{getReflectAttrURIValue::
5023              $node => $self,
5024              $namespaceURI => {null},
5025              $localName => 'ref',
5026              $r => $r,
5027              $defaultValue => {null},
5028            }__;
5029        @@Set:
5030          @@@nullCase:
5031            @@@@enDesc:
5032              Removes the attribute.
5033          @@@NodeReadOnlyError:
5034          @@@PerlDef:
5035            __CODE{setReflectAttrURIValue::
5036              $node => $self,
5037              $namespaceURI => {null},
5038              $localName => 'ref',
5039              $given => $given,
5040            }__;
5041            
5042      @ATTR:
5043        @@Name: source
5044        @@enDesc:
5045          The <XA::source> attribute of the element.
5046    
5047          It <kwd:MUST> <I::reflect the URI value
5048          of the <XA::source> attribute> of the node.
5049    
5050          The <XA::source> attribute <kwd:MAY> be used to specify the IRI
5051          of an Atom Feed or Entry Document containing an
5052          <XE::atom|entry> with an <XE::atom|id> value equal to the
5053          value of the <XA::ref> attribute.  The IRI specified <kwd:MUST>
5054          be dereferenceable.
5055        @@Type: DOMString
5056        @@actualType: DOMURI
5057        @@Get:
5058          @@@nullCase:
5059            @@@@enDesc:
5060              If the algorithm returns <DOM::null>.
5061          @@@PerlDef:
5062            __CODE{getReflectAttrURIValue::
5063              $node => $self,
5064              $namespaceURI => {null},
5065              $localName => 'source',
5066              $r => $r,
5067              $defaultValue => {null},
5068            }__;
5069        @@Set:
5070          @@@nullCase:
5071            @@@@enDesc:
5072              Removes the attribute.
5073          @@@NodeReadOnlyError:
5074          @@@PerlDef:
5075            __CODE{setReflectAttrURIValue::
5076              $node => $self,
5077              $namespaceURI => {null},
5078              $localName => 'source',
5079              $given => $given,
5080            }__;
5081            
5082      @ATTR:
5083        @@Name: href
5084        @@enDesc:
5085          The <XA::href> attribute of the element.
5086    
5087          It <kwd:MUST> <I::reflect the URI value
5088          of the <XA::href> attribute> of the node.
5089    
5090          The <XA::href> attribute specifies an IRI that may be used
5091          to retrieve a representation of the resource being
5092          responded to.  The IRI specified <kwd:MUST> be
5093          dereferenceable.
5094        @@Type: DOMString
5095        @@actualType: DOMURI
5096        @@Get:
5097          @@@nullCase:
5098            @@@@enDesc:
5099              If the algorithm returns <DOM::null>.
5100          @@@PerlDef:
5101            __CODE{getReflectAttrURIValue::
5102              $node => $self,
5103              $namespaceURI => {null},
5104              $localName => 'href',
5105              $r => $r,
5106              $defaultValue => {null},
5107            }__;
5108        @@Set:
5109          @@@nullCase:
5110            @@@@enDesc:
5111              Removes the attribute.
5112          @@@NodeReadOnlyError:
5113          @@@PerlDef:
5114            __CODE{setReflectAttrURIValue::
5115              $node => $self,
5116              $namespaceURI => {null},
5117              $localName => 'href',
5118              $given => $given,
5119            }__;
5120      
5121      @ATTR:
5122        @@Name: type
5123        @@enDesc:
5124          The <XA::type> attribute of the element.
5125    
5126          It <kwd:MUST> <I::reflect the string value
5127          of the <XA::type> attribute> of the node.
5128    
5129          The <XA::type> attribute <kwd:MAY> be used to provide
5130          a hint to the client about the media type of the
5131          resource identified by the <XA::href> attribute.
5132          The <XA::type> attribute is only meaningful if a
5133          corresponding <XA::href> attribute is also provided.
5134        @@Type: DOMString
5135        @@Get:
5136          @@@nullCase:
5137            @@@@enDesc:
5138              If the algorithm returns <DOM::null>.
5139          @@@PerlDef:
5140            __CODE{getReflectAttrStringValue::
5141              $node => $self,
5142              $namespaceURI => {null},
5143              $localName => 'type',
5144              $r => $r,
5145              $defaultValue => {null},
5146            }__;
5147        @@Set:
5148          @@@nullCase:
5149            @@@@enDesc:
5150              Removes the attribute.
5151          @@@NodeReadOnlyError:
5152          @@@PerlDef:
5153            __CODE{setReflectAttrStringValue::
5154              $node => $self,
5155              $namespaceURI => {null},
5156              $localName => 'type',
5157              $given => $given,
5158            }__;
5159    ##AtomThreadInReplyToElement
5160    
5161    IFClsDef:
5162      @IFQName: AtomLinkElementThread
5163      @ClsQName: ManakaiAtomLinkElementThread
5164    
5165      @ClsISA: ManakaiAtomLinkElement
5166    
5167      @f:implements: AtomThreadingFeature10
5168    
5169      @enDesc:
5170        An <XE::atom|link> element with a <XA::rel> attribute value of
5171        <XML::replies> may be used to reference a resource where responses
5172        to an entry may be found.  If the <XA::type> attribute of the
5173        <XE::atom|link> is omitted, its value is assumed to be
5174        <XML::application/atom+xml>.
5175    
5176        A <XML::replies> link appearing as a child of the <XE::atom|feed>
5177        or <XE::atom|source> element indicates that the referenced
5178        resource likely contains responses to any of that
5179        feed's entries.  A <XML::replies>
5180        link appearing as a child of an <XE::atom|entry> element
5181        indicates that the linked resource likely contains responses
5182        specific to that entry.
5183    
5184        If the feature <Feature^^DISCore|QName::AtomThreadingFeature10>
5185        is supported, any <IF::Element> whose element type
5186        is <XE::atom|link> <kwd:MUST> implement the <IF::AtomLinkElementThread>
5187        interface in addition to other appropriate interfaces.
5188    
5189      @Test:
5190        @@QName: AtomLinkElementThread.1.test
5191        @@PerlDef:
5192          my $doc;
5193          __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
5194    
5195          my $el = $doc->create_element_ns (<Q::atom|>, 'link');
5196    
5197          $test->id ('interface');
5198          $test->assert_isa ($el, <IFName::AtomLinkElementThread>);
5199    
5200          $test->id ('feature');
5201          $test->assert_true ($el->is_supported (<Q::fe|AtomThreading> => '1.0'));
5202    
5203      @ATTR:
5204        @@Name: threadCount
5205        @@enDesc:
5206          The <XA::thr|count> attribute of the element.
5207    
5208          It <kwd:MUST> <I::reflect the non-negative integer value
5209          of the <XA::thr|count> attribute> of the node.
5210    
5211          An <XE::atom|link> element using the <XML::replies>
5212          <XA::rel> attribute value <kwd:MAY> contain
5213          a <XA::thr|count> attribute whose value is a
5214          non-negative integer that provides a hint to clients
5215          as to the total number of replies contained by the
5216          linked resource.  The value is advisory and
5217          may not accurately reflect the actual number of replies.
5218        @@Type: idl|long||ManakaiDOM|all
5219        @@Get:
5220          @@@PerlDef:
5221            __CODE{getReflectAttrNonNegativeIntegerValue::
5222              $node => $self,
5223              $namespaceURI => {<Q::thr|>},
5224              $localName => 'count',
5225              $r => $r,
5226              $defaultValue => {null},
5227            }__;
5228        @@Set:
5229          @@@NodeReadOnlyError:
5230          @@@PerlDef:
5231            __CODE{setReflectAttrNonNegativeIntegerValue::
5232              $node => $self,
5233              $namespaceURI => {<Q::thr|>},
5234              $localName => 'count',
5235              $given => $given,
5236            }__;
5237    
5238        @@Test:
5239          @@@QName: AtomLinkElementThread.threadCount.1.test
5240          @@@PerlDef:
5241            my $doc;
5242            __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
5243    
5244            my $link = $doc->create_element_ns (<Q::atom|>, 'link');
5245    
5246            $test->id ('default');
5247            $test->assert_num_equals
5248                     (expected_value => -1,
5249                      actual_value =>
5250                        $link-><AG::AtomLinkElementThread.threadCount>);
5251    
5252            $test->id ('zero');
5253            $link-><AS::AtomLinkElementThread.threadCount> (0);
5254            $test->assert_num_equals
5255                     (expected_value => 0,
5256                      actual_value =>
5257                        $link-><AG::AtomLinkElementThread.threadCount>);
5258            $test->id ('zero.attr');
5259            $test->assert_equals ($link->get_attribute_ns (<Q::thr|>, 'count'), '0');
5260    
5261            $test->id ('one');
5262            $link-><AS::AtomLinkElementThread.threadCount> (1);
5263            $test->assert_num_equals
5264                     (expected_value => 1,
5265                      actual_value =>
5266                        $link-><AG::AtomLinkElementThread.threadCount>);
5267            $test->id ('one.attr');
5268            $test->assert_equals ($link->get_attribute_ns (<Q::thr|>, 'count'), '1');
5269    
5270            $test->id ('10000');
5271            $link-><AS::AtomLinkElementThread.threadCount> (10000);
5272            $test->assert_num_equals
5273                     (expected_value => 10000,
5274                      actual_value =>
5275                        $link-><AG::AtomLinkElementThread.threadCount>);
5276            $test->id ('10000.attr');
5277            $test->assert_equals ($link->get_attribute_ns (<Q::thr|>, 'count'),
5278                                  '10000');
5279    
5280            $test->id ('+10000');
5281            $link->set_attribute_ns (<Q::thr|>, 'thr:count', '+10000');
5282            $test->assert_num_equals
5283                     (expected_value => 10000,
5284                      actual_value =>
5285                        $link-><AG::AtomLinkElementThread.threadCount>);
5286    
5287            $test->id ('010000');
5288            $link->set_attribute_ns (<Q::thr|>, 'thr:count', '010000');
5289            $test->assert_num_equals
5290                     (expected_value => 10000,
5291                      actual_value =>
5292                        $link-><AG::AtomLinkElementThread.threadCount>);
5293    
5294            $test->id ('-100');
5295            $link-><AS::AtomLinkElementThread.threadCount> (-100);
5296            $test->assert_num_equals
5297                     (expected_value => -1,
5298                      actual_value =>
5299                        $link-><AG::AtomLinkElementThread.threadCount>);
5300            $test->id ('-100.attr');
5301            $test->assert_false ($link->has_attribute_ns (<Q::thr|>, 'count'));
5302    
5303            $test->id ('120a');
5304            $link->set_attribute_ns (<Q::thr|>, 'thr:count', '120a');
5305            $test->assert_num_equals
5306                     (expected_value => -1,
5307                      actual_value =>
5308                        $link-><AG::AtomLinkElementThread.threadCount>);
5309    
5310            $test->id ('-1');
5311            $link-><AS::AtomLinkElementThread.threadCount> (-1);
5312            $test->assert_num_equals
5313                     (expected_value => -1,
5314                      actual_value =>
5315                        $link-><AG::AtomLinkElementThread.threadCount>);
5316            $test->id ('-1.attr');
5317            $test->assert_false ($link->has_attribute_ns (<Q::thr|>, 'count'));
5318    
5319      @enImplNote:
5320        @@ddid: updated
5321        @@@:
5322          {TODO::
5323            <XA::thr|updated> attribute
5324          }
5325    ##AtomLinkElementThread
5326    
5327    enImplNote:
5328      @@ddid: total
5329      @@@:
5330        {TODO::
5331          <XE::thr|total>
5332        }
5333    
5334    enImplNote:
5335      @@ddid: threaddtd
5336      @@@:
5337        {TODO::
5338          DTD impl for threading
5339        }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.20

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24