/[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.4 by wakaba, Fri May 19 11:02:11 2006 UTC revision 1.21 by wakaba, Sat Dec 30 04:42:55 2006 UTC
# Line 52  Module: Line 52  Module:
52        @@@QName: MDOM|TreeCore        @@@QName: MDOM|TreeCore
53        @@@WithFor: ManakaiDOM|ManakaiDOMLatest        @@@WithFor: ManakaiDOM|ManakaiDOMLatest
54      @@Module:      @@Module:
55        @@@WithFor: ManakaiDOM|ManakaiDOM        @@@QName: DISlib|DISMarkup
56      @@Module:        @@@WithFor: ManakaiDOM|all
       @@@WithFor: ManakaiDOM|ManakaiDOMLatest  
57    @DefaultFor: ManakaiDOM|ManakaiDOMLatest    @DefaultFor: ManakaiDOM|ManakaiDOMLatest
58    
59  Namespace:  Namespace:
# Line 64  Namespace: Line 63  Namespace:
63      http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#      http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#
64    @cfg:    @cfg:
65      http://suika.fam.cx/www/2006/dom-config/      http://suika.fam.cx/www/2006/dom-config/
66      @DISlib:
67        http://suika.fam.cx/~wakaba/archive/2004/dis/
68    @dis:    @dis:
69      http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--      http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--
70    @dlp:    @dlp:
71      http://suika.fam.cx/~wakaba/archive/2004/dis/Perl#      http://suika.fam.cx/~wakaba/archive/2004/dis/Perl#
   @doc:  
     http://suika.fam.cx/~wakaba/archive/2005/7/tutorial#  
72    @d:    @d:
73      http://suika.fam.cx/~wakaba/archive/2004/dom/xdt#      http://suika.fam.cx/~wakaba/archive/2004/dom/xdt#
74    @DOMMain:    @DOMMain:
75      http://suika.fam.cx/~wakaba/archive/2004/dom/main#      http://suika.fam.cx/~wakaba/archive/2004/dom/main#
76      @domperl:
77        http://suika.fam.cx/~wakaba/archive/2006/dom/perl/
78    @dx:    @dx:
79      http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#      http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/DOMException#
80      @dxm:
81        http://suika.fam.cx/~wakaba/archive/2004/dis/XML#
82    @ecore:    @ecore:
83      http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/Core/      http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Error/Core/
84    @f:    @f:
# Line 92  Namespace: Line 95  Namespace:
95      http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#      http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#
96    @license:    @license:
97      http://suika.fam.cx/~wakaba/archive/2004/8/18/license#      http://suika.fam.cx/~wakaba/archive/2004/8/18/license#
   @m12n:  
     http://suika.fam.cx/www/2006/05/m12n/  
98    @ManakaiDOM:    @ManakaiDOM:
99      http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#      http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#
100    @Markup:    @Markup:
101      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/  
102    @MDOM:    @MDOM:
103      http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#ManakaiDOM.      http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#ManakaiDOM.
104    @MDOMX:    @MDOMX:
# Line 118  Namespace: Line 117  Namespace:
117      http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/Element/      http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/Element/
118    @test:    @test:
119      http://suika.fam.cx/~wakaba/archive/2004/dis/Test#      http://suika.fam.cx/~wakaba/archive/2004/dis/Test#
120      @thr:
121        http://purl.org/syndication/thread/1.0
122    @tx:    @tx:
123      http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/XML/      http://suika.fam.cx/~wakaba/archive/2005/manakai/DOM/XML/
124    @urigen:    @urigen:
# Line 164  ElementTypeBinding: Line 165  ElementTypeBinding:
165      @@ForCheck: !=ManakaiDOM|ManakaiDOM      @@ForCheck: !=ManakaiDOM|ManakaiDOM
166    
167  ElementTypeBinding:  ElementTypeBinding:
168      @Name: ATTR
169      @ElementType:
170        dis:ResourceDef
171      @ShadowContent:
172        @@DISCore:resourceType:
173          @@@@: DISLang|Attribute
174          @@@ForCheck: ManakaiDOM|ForIF
175        @@DISCore:resourceType:
176          @@@@: DISLang|Attribute
177          @@@ForCheck: ManakaiDOM|ForClass
178        @@DISCore:resourceType:
179          @@@@: mv|AttributeType
180          @@@ForCheck: s|ForML
181        @@ForCheck: !=ManakaiDOM|ManakaiDOM
182    
183    ElementTypeBinding:
184    @Name: Get    @Name: Get
185    @ElementType:    @ElementType:
186      dis:ResourceDef      dis:ResourceDef
# Line 235  ElementTypeBinding: Line 252  ElementTypeBinding:
252      @@DISCore:resourceType:      @@DISCore:resourceType:
253        @@@@: DISLang|Class        @@@@: DISLang|Class
254        @@@ForCheck: ManakaiDOM|ForClass        @@@ForCheck: ManakaiDOM|ForClass
255      @@Implement:  
       @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF  
       @@@ContentType: DISCore|TFPQNames  
       @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM  
256      @@Implement:      @@Implement:
257        @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF        @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF
258        @@@ContentType: DISCore|TFPQNames        @@@ContentType: DISCore|TFPQNames
# Line 253  ElementTypeBinding: Line 267  ElementTypeBinding:
267        @@@@: s|ElementType        @@@@: s|ElementType
268        @@@ForCheck: s|ForML        @@@ForCheck: s|ForML
269    
     @@f:implements: AtomFeature10  
   
270  ElementTypeBinding:  ElementTypeBinding:
271    @Name: IFClsDef    @Name: IFClsDef
272    @ElementType:    @ElementType:
# Line 274  ElementTypeBinding: Line 286  ElementTypeBinding:
286      @@DISCore:resourceType:      @@DISCore:resourceType:
287        @@@@: DISLang|Class        @@@@: DISLang|Class
288        @@@ForCheck: ManakaiDOM|ForClass        @@@ForCheck: ManakaiDOM|ForClass
289    
290      @@Implement:      @@Implement:
291        @@@@: ||ManakaiDOM|ManakaiDOM||ManakaiDOM|ForIF        @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF
292        @@@ContentType: DISCore|TFPQNames        @@@ContentType: DISCore|TFPQNames
293        @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOM        @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest
294    
295    ElementTypeBinding:
296      @Name: IFClsConstructDef
297      @ElementType:
298        dis:ResourceDef
299      @ShadowContent:
300        @@DISCore:resourceType:
301          @@@@: dis|MultipleResource
302          @@@ForCheck:
303            !ManakaiDOM|ForIF !ManakaiDOM|ForClass !s|ForML !mv|ForCM !mv|ForAG
304        @@resourceFor: ManakaiDOM|ForIF
305        @@resourceFor: ManakaiDOM|ForClass
306        @@resourceFor: mv|ForCM
307        @@resourceFor: mv|ForAG
308        @@For: ManakaiDOM|ManakaiDOM
309    
310        @@DISCore:resourceType:
311          @@@@: DISLang|Interface
312          @@@ForCheck: ManakaiDOM|ForIF
313    
314        @@DISCore:resourceType:
315          @@@@: DISLang|Class
316          @@@ForCheck: ManakaiDOM|ForClass
317    
318      @@Implement:      @@Implement:
319        @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF        @@@@: ||ManakaiDOM|ManakaiDOMLatest||ManakaiDOM|ForIF
320        @@@ContentType: DISCore|TFPQNames        @@@ContentType: DISCore|TFPQNames
321        @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest        @@@ForCheck: ManakaiDOM|ForClass ManakaiDOM|ManakaiDOMLatest
322    
323      @@f:implements: AtomFeature10      @@DISCore:resourceType:
324          @@@@: mv|AttributeTypeGroup
325          @@@ForCheck: mv|ForAG
326    
327        @@DISCore:resourceType:
328          @@@@: mv|ElementContentModel
329          @@@ForCheck: mv|ForCM
330    
331    
332  ElementTypeBinding:  ElementTypeBinding:
333    @Name: IFQName    @Name: IFQName
# Line 315  ElementTypeBinding: Line 359  ElementTypeBinding:
359      @@ContentType: DISCore|QName      @@ContentType: DISCore|QName
360    
361  ElementTypeBinding:  ElementTypeBinding:
362      @Name: CMQName
363      @ElementType:
364        dis:QName
365      @ShadowContent:
366        @@ForCheck: mv|ForCM
367    
368    ElementTypeBinding:
369      @Name: CMName
370      @ElementType:
371        mv:elementContentModelName
372      @ShadowContent:
373        @@ForCheck: mv|ForCM
374    
375    ElementTypeBinding:
376      @Name: AGQName
377      @ElementType:
378        dis:QName
379      @ShadowContent:
380        @@ForCheck: mv|ForAG
381    
382    ElementTypeBinding:
383      @Name: AGName
384      @ElementType:
385        mv:attributeTypeGroupName
386      @ShadowContent:
387        @@ForCheck: mv|ForAG
388    
389    ElementTypeBinding:
390    @Name: IFISA    @Name: IFISA
391    @ElementType:    @ElementType:
392      dis:ISA      dis:ISA
# Line 482  FeatureDef: Line 554  FeatureDef:
554      @@enDesc:      @@enDesc:
555        The Atom DOM, version 1.0.        The Atom DOM, version 1.0.
556    
557    FeatureDef:
558      @featureQName: fe|AtomThreading
559      @QName: AtomThreadingFeature
560      @FeatureVerDef:
561        @@QName: AtomThreadingFeature10
562        @@Version: 1.0
563        @@f:instanceOf: AtomThreadingFeature
564        @@f:requires: fe|AtomFeature10
565        @@enDesc:
566          The Atom Threading Extension DOM, version 1.0.
567    
568  ## -- Modules  ## -- Modules
569    
570  ModuleSetDef:  ModuleSetDef:
571    @QName: Atom    @QName: Atom
   @mv:id: atom  
572    @enLN: Atom    @enLN: Atom
573    @mv:version: 1.0    @mv:version: 1.0
574    @mv:contains: AtomFeed    @mv:contains: AtomDatatypes
575      @mv:contains: AtomProperties
576    @mv:contains: AtomEntry    @mv:contains: AtomEntry
577    @mv:contains: AtomProperty    @mv:contains: AtomFeed
578      @mv:contains: AtomQName
579    
580      @mv:targetNamespace: atom|
581      @mv:defaultNamespacePrefix: atom
582      @mv:systemIdentifierBaseURI: \
583    
584  ModuleDef:  ModuleDef:
585    @QName: AtomFeed    @QName: AtomFeed
586    @mv:id: feed    @mv:id: feed
587    @enLN: Feed    @enLN: Feed
588      @mv:contains: feed-prop
589    @mv:contains: atom|feed    @mv:contains: atom|feed
590    
591  ModuleDef:  ModuleDef:
592    @QName: AtomEntry    @QName: AtomEntry
593    @mv:id: entry    @mv:id: entry
594    @enLN: Entry    @enLN: Entry
595      @mv:contains: entry-prop
596    @mv:contains: atom|entry    @mv:contains: atom|entry
597    
598  ModuleDef:  ModuleDef:
599    @QName: AtomProperty    @QName: AtomProperties
600    @mv:id: prop    @mv:id: props
601    @enLN: Property    @enLN: Properties
602    @mv:contains: atom|content    @mv:contains: atom|content
603      @mv:contains: atom|contributor
604    @mv:contains: atom|category    @mv:contains: atom|category
605    @mv:contains: atom|generator    @mv:contains: atom|generator
   @mv:contains: atom|source  
606    @mv:contains: atom|link    @mv:contains: atom|link
607    @mv:contains: atom|author    @mv:contains: atom|author
608    @mv:contains: atom|published    @mv:contains: atom|published
609    @mv:contains: atom|updated    @mv:contains: atom|updated
610      @mv:contains: atom|icon
611    @mv:contains: atom|id    @mv:contains: atom|id
612      @mv:contains: atom|logo
613      @mv:contains: atom|rights
614      @mv:contains: atom|subtitle
615      @mv:contains: atom|summary
616    @mv:contains: atom|title    @mv:contains: atom|title
617      @mv:contains: source-prop
618      @mv:contains: atom|source
619    
620    ModuleDef:
621      @QName: AtomDatatypes
622      @mv:id: datatypes
623      @enLN: Datatypes
624    
625      @mv:contains: atomNCName
626      @mv:contains: atomMediaType
627      @mv:contains: atomLanguageTag
628      @mv:contains: atomUri
629      @mv:contains: atomUriCM
630      @mv:contains: atomEmailAddress
631      @mv:contains: atomEmailAddressCM
632    
633      @mv:contains: undefinedAttributes
634      @mv:contains: undefinedContent
635      @mv:contains: atomCommonAttributes
636    
637      @mv:contains: simpleExtensionElements
638      @mv:contains: structuredExtensionElements
639      @mv:contains: extensionElements
640    
641      @mv:contains: TextAG
642      @mv:contains: TextCM
643    
644      @mv:contains: atom|name
645    @mv:contains: atom|email    @mv:contains: atom|email
646    @mv:contains: atom|uri    @mv:contains: atom|uri
647      @mv:contains: PersonAG
648      @mv:contains: person-prop
649      @mv:contains: PersonCM
650    
651      @mv:contains: DateAG
652      @mv:contains: DateCM
653    
654    ResourceDef:
655      @QName: AtomQName
656      @enLN: Qualified Names
657      @mv:id: qname
658      @For: =ManakaiDOM|ManakaiDOMLatest
659      @DISCore:resourceType: mv|XMLDTDQNameModule
660    
661      @mv:contains: Atom
662    
663    ResourceDef:
664      @QName: Atom10
665      @enLN: Atom 1.0
666      @mv:id: atom10
667      @For: =ManakaiDOM|ManakaiDOMLatest
668      @DISCore:resourceType: mv|XMLDTDDriver
669    
670      @mv:refers: Atom
671    
672      @mv:refers: AtomQName
673      @mv:refers: AtomDatatypes
674      @mv:refers: AtomProperties
675      @mv:refers: AtomEntry
676      @mv:refers: AtomFeed
677    
678  ElementTypeBinding:  ElementTypeBinding:
679    @Name: ModuleSetDef    @Name: ModuleSetDef
# Line 544  IFClsDef: Line 697  IFClsDef:
697    @IFQName: AtomImplementation    @IFQName: AtomImplementation
698    @ClsQName: ManakaiAtomImplementation    @ClsQName: ManakaiAtomImplementation
699    
700    @IFISA: c|DOMImplementation    @domperl:implementedByObjectsOf: c|DOMImplementation
701    @ClsISA: c|ManakaiDOMImplementation    @domperl:classImplementedByObjectsOf: c|ManakaiDOMImplementation
702    
703    @enDesc:    @enDesc:
704      The <IF::AtomImplementation> interface provides convenience      The <IF::AtomImplementation> interface provides convenience
705      methods to create Atom documents.      methods to create Atom documents.
706    
707    @f:provides: AtomFeature10    @f:provides: AtomFeature10
708      @f:implements: AtomFeature10
709    
710    @Test:    @Test:
711      @@QName: AtomImplementation.interface.test      @@QName: AtomImplementation.interface.test
712      @@PerlDef:      @@PerlDef:
713        for my $interface (        for my $interface (
714          <IFName::AtomImplementation>,          <IFName::AtomImplementation>,
         <IFName::AtomImplementation||ManakaiDOM|ManakaiDOM>,  
715          <IFName::c|DOMImplementation>,          <IFName::c|DOMImplementation>,
         <IFName::urigen|URIImplementation>,  
         <IFName::f|MinimumImplementation>,  
716          <IFName::f|GetFeature>,          <IFName::f|GetFeature>,
717        ) {        ) {
718          $test->id ($interface);          $test->id ($interface);
719          $test->assert_true          $test->assert_true
720                   (<Class::ManakaiAtomImplementation>->isa ($interface));                   (<Class::c|ManakaiDOMImplementation>->isa ($interface));
721        }        }
722    @Test:    @Test:
723      @@QName: ImplementationRegistry.AtomImplementation.1.test      @@QName: ImplementationRegistry.AtomImplementation.1.test
724      @@PerlDef:      @@PerlDef:
725        require Message::Markup::Atom;        require Message::Markup::Atom;
726        my $impl = $Message::DOM::ImplementationRegistry        my $impl = $Message::DOM::ImplementationRegistry
727                     ->get_implementation ({                     ->get_dom_implementation ({
728                         <Q::fe|Atom> => '1.0',                         <Q::fe|Atom> => '1.0',
729                       });                       });
730    
# Line 583  IFClsDef: Line 734  IFClsDef:
734      @@PerlDef:      @@PerlDef:
735        require Message::Markup::Atom;        require Message::Markup::Atom;
736        my $impl = $Message::DOM::ImplementationRegistry        my $impl = $Message::DOM::ImplementationRegistry
737                     ->get_implementation ({                     ->get_dom_implementation ({
738                         Core => '3.0',                         Core => '3.0',
739                         <Q::fe|Atom> => '1.0',                         <Q::fe|Atom> => '1.0',
740                       });                       });
# Line 594  IFClsDef: Line 745  IFClsDef:
745      @@PerlDef:      @@PerlDef:
746        require Message::Markup::Atom;        require Message::Markup::Atom;
747        my $impl = $Message::DOM::ImplementationRegistry        my $impl = $Message::DOM::ImplementationRegistry
748                     ->get_implementation ({                     ->get_dom_implementation ({
749                         XML => '3.0',                         XML => '3.0',
750                         <Q::fe|Atom> => '1.0',                         <Q::fe|Atom> => '1.0',
751                       });                       });
# Line 630  IFClsDef: Line 781  IFClsDef:
781            The implementation <kwd:MUST> treate <DOM::null>            The implementation <kwd:MUST> treate <DOM::null>
782            as if an empty string is specified.            as if an empty string is specified.
783      @@Return:      @@Return:
784        @@@Type: AtomFeedDocument        @@@Type: AtomDocument
785        @@@enDesc:        @@@enDesc:
786          The newly created Atom Feed Document.          The newly created Atom Feed Document.
787    
# Line 813  IFClsDef: Line 964  IFClsDef:
964            The implementation <kwd:MUST> treate <DOM::null>            The implementation <kwd:MUST> treate <DOM::null>
965            as if an empty string is specified.            as if an empty string is specified.
966      @@Return:      @@Return:
967        @@@Type: AtomEntryDocument        @@@Type: AtomDocument
968        @@@enDesc:        @@@enDesc:
969          The newly created Atom Entry Document.          The newly created Atom Entry Document.
970    
# Line 1356  IFClsDef: Line 1507  IFClsDef:
1507          <QUOTE::reflecting Date child element> attribute should          <QUOTE::reflecting Date child element> attribute should
1508          be provided for published and created?          be provided for published and created?
1509        }        }
1510    
1511      @CODE:
1512        @@QName: getReflectAttrNonNegativeIntegerValue
1513        @@enDesc:
1514          {P:: If a DOM attribute is defined to <DFN::reflect the
1515               non-negative integer value of the <VAR::attr-name> attribute>
1516               of the node <VAR::E>, the getter of the attribute <kwd:MUST>
1517               return the value defined by the algorithm:
1518    
1519            {OLI:: If the <VAR::E> contains an attribute node <VAR::A> whose name
1520                   is <VAR::attr-name>:
1521    
1522              = If the <A::Node.nodeValue> of the <VAR::A> is
1523                one or more sequence of digits (<CHAR::DIGIT ZERO>,
1524                <CHAR::DIGIT ONE>, ..., <CHAR::DIGIT NINE>) optionally
1525                preceding by a <CHAR::PLUS SIGN>, then
1526                the attribute getter <kwd:MUST> return a value
1527                by interpreting the <A::Node.nodeValue> of the <VAR::A>
1528                as a decimal number.
1529    
1530            }
1531    
1532            = If a default value is explicitly defined
1533              where this algorithm is referenced, it <kwd:MUST>
1534              return the default value.
1535    
1536            = Otherwise, it <kwd:MUST> return a binding-specific
1537              default value, if it is defined by the specification
1538              of the binding, or <DOM::-1>.
1539    
1540          }
1541    
1542            {NOTE::
1543              In Atom Threading Extension <SRC::RFC 4685>,
1544              the <CHAR::PLUS SIGN> and leading <CHAR::DIGIT ZERO>s
1545              are prohibitted.
1546            }
1547        @@PerlDef:
1548          __DEEP{
1549            E: {
1550              $r = $node-><M::Element.getAttributeNS> ($namespaceURI, $localName);
1551              if (defined $r) {
1552                if ($r =~ /\A\+?([0-9]+)\z/) {
1553                  $r = 0+$1;
1554                  last E;
1555                }
1556              }
1557    
1558              $r = $defaultValue;
1559              $r = -1 unless defined $r;
1560            } # E
1561          }__;
1562    
1563      @CODE:
1564        @@QName: setReflectAttrNonNegativeIntegerValue
1565        @@enDesc:
1566          {P:: If a DOM attribute is defined to <DFN::reflect the
1567               non-negative integer value
1568               of the <VAR::attr-name> attribute> of the node <VAR::E>,
1569               the setter of the attribute <kwd:MUST> modify the node as
1570               defined by the algorithm:
1571    
1572            = If the given value is <DOM::-1> or one of binding-specific
1573              default values, if any, as defined by the specification
1574              of the binding, it <kwd:MUST>
1575              remove the <VAR::attr-name> attribute node, if any,
1576              from the list of attribute nodes of <VAR::E>.
1577    
1578            = Otherwise, it <kwd:MUST> set the <VAR::attr-name>
1579              attribute node value to a string representation
1580              of the given value as if
1581              the <M::Element.setAttributeNS> method were invoked.
1582              The string representation <kwd:MUST> be a decimal
1583              number consist of one or more sequence of digits
1584              (<CHAR::DIGIT ZERO>, <CHAR::DIGIT ONE>, ..., <CHAR::DIGIT NINE>)
1585              <EM::without> any leading <CHAR::DIGIT ZERO>.
1586              The <CHAR::PLUS SIGN> <kwd:MUST> be omitted.
1587    
1588          }
1589    
1590            {NOTE::
1591              It might throw an exception.
1592            }
1593        @@PerlDef:
1594          __DEEP{
1595            if (defined $given and $given >= 0) {
1596              $node-><M::Element.setAttributeNS>
1597                       ($namespaceURI, $localName, 0+$given);
1598            } else {
1599              $node-><M::Element.removeAttributeNS> ($namespaceURI, $localName);
1600            }
1601          }__;
1602  ##AtomImplementation  ##AtomImplementation
1603    
1604  IFClsDef:  IFClsDef:
1605    @IFQName: AtomDocument    @IFQName: AtomDocument
1606    @ClsQName: ManakaiAtomDocument    @ClsQName: ManakaiAtomDocument
1607    
1608    @IFISA: Document    @domperl:implementedByObjectsOf: Document
1609    @ClsISA: td|ManakaiDOMDocument    @domperl:classImplementedByObjectsOf: td|ManakaiDOMDocument
1610    
1611    @s:rootElementType: AnyAtomElement||ManakaiDOM|all    @f:implements: AtomFeature10
1612    
1613    @enDesc:    @enDesc:
1614      If the <Feature::fe|Atom> feature version <FeatureVer::1.0>      If the <Feature::fe|Atom> feature version <FeatureVer::1.0>
# Line 1389  IFClsDef: Line 1632  IFClsDef:
1632        $test->assert_isa ($doc, <IFName::AtomDocument>);        $test->assert_isa ($doc, <IFName::AtomDocument>);
1633  ##AtomDocument  ##AtomDocument
1634    
1635  IFClsDef:  AGDef:
1636    @IFQName: AtomFeedDocument    @QName: atomCommonAttributes
1637    @ClsQName: ManakaiFeedEntryDocument    @enFN: common attributes
1638      @mv:attributeTypeGroupName: common
   @IFISA: AtomDocument  
   @ClsISA: ManakaiAtomDocument  
   
   @s:rootElementType:  
     @@@: atom|feed  
     @@DISCore:stopISARecursive: 1  
1639    
1640    @enDesc:    @mv:refers: Atom
1641      The <IF::AtomFeedDocument> interface provides convenience    
1642      methods and attributes for an Atom    @ATDef:
1643      Feed Document, i.e. representation of an Atom feed.      @@mv:attributeTypeName: xml|base
1644        @@mv:attributeValueType: atomUri
1645      If the <Feature::fe|Atom> feature version <FeatureVer::1.0>  
1646      is supported, a <IF::Document> object whose <A::Document.documentElement>'s    @ATDef:
1647      element type, if any, is <XE::atom|feed> at least at      @@mv:attributeTypeName: xml|lang
1648      the time of creation <kwd:MUST> also      @@mv:attributeValueType: atomLanguageTag
1649      implement the <IF::AtomFeedDocument> interface.  Other  
1650      <IF::Document> objects <kwd:MAY> also implement    @mv:refers: undefinedAttributes
1651      the <IF::AtomFeedDocument> interface.  ##atomCommonAttributes
1652    
1653    @Test:  STDef:
1654      @@QName: createDocument.AtomFeedDocument.test    @QName: atomNCName
1655      @@PerlDef:    @mv:datatypeEntityName: NCName
1656        my $impl;    #subsetOf: xsd|string
1657        __CODE{tc|createImplForTest:: $impl => $impl}__;    #minLength, pattern
1658        
1659        my $doc = $impl-><M::c|DOMImplementation.createDocument>  STDef:
1660                           (<Q::atom|>, 'feed');    @QName: atomMediaType
1661      @mv:datatypeEntityName: MediaType
1662        $test->id ('interface');    #subsetOf xsd|string
1663        $test->assert_isa ($doc, <IFName::AtomFeedDocument>);    # pattern
1664  ##AtomFeedDocument  
1665    STDef:
1666  IFClsDef:    @QName: atomLanguageTag
1667    @IFQName: AtomEntryDocument    @mv:datatypeEntityName: LangaugeTag
1668    @ClsQName: ManakaiAtomEntryDocument    #subsetOf: xsd|string
1669      #pattern
1670    
1671    STDef:
1672      @QName: atomUri
1673      @mv:datatypeEntityName: URI
1674      #aliasfor text
1675    STCDef:
1676      @QName: atomUriCM
1677      @mv:elementContentModelName: URI
1678      @cm: (dxm|PCDATA||ManakaiDOM|all)*
1679    
1680    STDef:
1681      @QName: atomEmailAddress
1682      @mv:datatypeEntityName: EmailAddress
1683      #subsetOf xsd|string
1684      #pattern
1685    STCDef:
1686      @QName: atomEmailAddressCM
1687      @mv:elementContentModelName: EmailAddress
1688      @cm: (dxm|PCDATA||ManakaiDOM|all)*
1689    
1690    @IFISA: AtomDocument  ElementTypeBinding:
1691    @ClsISA: ManakaiAtomDocument    @Name: AGDef
1692      @ElementType:
1693        dis:ResourceDef
1694      @ShadowContent:
1695        @@DISCore:resourceType: mv|AttributeTypeGroup
1696        @@For: =ManakaiDOM|ManakaiDOMLatest
1697    
1698    @s:rootElementType:  ElementTypeBinding:
1699      @@@: atom|entry    @Name: ATDef
1700      @@DISCore:stopISARecursive: 1    @ElementType:
1701        dis:ResourceDef
1702      @ShadowContent:
1703        @@DISCore:resourceType: mv|AttributeType
1704        @@For: =ManakaiDOM|ManakaiDOMLatest
1705    
1706    @enDesc:  ElementTypeBinding:
1707      The <IF::AtomEntryDocument> interface provides convenience    @Name: ECDef
1708      methods and attributes for an Atom    @ElementType:
1709      Entry Document, i.e. exactly one Atom entry, outside      dis:ResourceDef
1710      of the context of an Atom feed.    @ShadowContent:
1711        @@DISCore:resourceType: mv|ElementTypeClass
1712        @@For: =ManakaiDOM|ManakaiDOMLatest
1713    
1714      If the <Feature::fe|Atom> feature version <FeatureVer::1.0>  ElementTypeBinding:
1715      is supported, a <IF::Document> object whose <A::Document.documentElement>'s    @Name: EMDef
1716      element type, if any, is <XE::atom|entry> at least at    @ElementType:
1717      the time of the creation <kwd:MUST> also      dis:ResourceDef
1718      implement the <IF::AtomEntryDocument> interface.  Other    @ShadowContent:
1719      <IF::Document> objects <kwd:MAY> also implement      @@DISCore:resourceType: mv|ElementTypeClassMix
1720      the <IF::AtomEntryDocument> interface.      @@For: =ManakaiDOM|ManakaiDOMLatest
1721    
1722    @Test:  ElementTypeBinding:
1723      @@QName: createDocument.AtomEntryDocument.test    @Name: STDef
1724      @@PerlDef:    @ElementType:
1725        my $impl;      dis:ResourceDef
1726        __CODE{tc|createImplForTest:: $impl => $impl}__;    @ShadowContent:
1727            @@DISCore:resourceType: mv|XMLDTDDatatypeEntity
1728        my $doc = $impl-><M::c|DOMImplementation.createDocument>      @@For: =ManakaiDOM|ManakaiDOMLatest
                          (<Q::atom|>, 'entry');  
1729    
1730        $test->id ('interface');  ElementTypeBinding:
1731        $test->assert_isa ($doc, <IFName::AtomEntryDocument>);    @Name: STCDef
1732  ##AtomEntryDocument    @ElementType:
1733        dis:ResourceDef
1734      @ShadowContent:
1735        @@DISCore:resourceType: mv|ElementContentModel
1736        @@For: =ManakaiDOM|ManakaiDOMLatest
1737    
1738  IFClsDef:  IFClsDef:
1739    @IFQName: AtomElement    @IFQName: AtomElement
# Line 1471  IFClsDef: Line 1742  IFClsDef:
1742    @IFISA: Element    @IFISA: Element
1743    @ClsISA: te|ManakaiDOMElement    @ClsISA: te|ManakaiDOMElement
1744        
1745      @f:implements: AtomFeature10
1746    @s:elementType: AnyAtomElement||ManakaiDOM|all    @s:elementType: AnyAtomElement||ManakaiDOM|all
1747    
1748    @enDesc:    @enDesc:
# Line 1496  IFClsDef: Line 1768  IFClsDef:
1768      @@PerlDef:      @@PerlDef:
1769        for my $interface (        for my $interface (
1770          <IFName::AtomElement>,          <IFName::AtomElement>,
         <IFName::AtomElement||ManakaiDOM|ManakaiDOM>,  
1771          <IFName::Element>,          <IFName::Element>,
1772          <IFName::Node>,          <IFName::Node>,
1773          <IFName::f|GetFeature>,          <IFName::f|GetFeature>,
# Line 1522  ResourceDef: Line 1793  ResourceDef:
1793      @@ContentType: DISCore|QName      @@ContentType: DISCore|QName
1794    @ForCheck: =ManakaiDOM|all    @ForCheck: =ManakaiDOM|all
1795    
1796  IFClsDef:  ElementTypeBinding:
1797      @Name: cm
1798      @ElementType:
1799        mv:elementContentModel
1800      @ShadowContent:
1801        @@ContentType: lang|dcmodel
1802    
1803    IFClsConstructDef:
1804    @IFQName: AtomTextConstruct    @IFQName: AtomTextConstruct
1805    @ClsQName: ManakaiAtomTextConstruct    @ClsQName: ManakaiAtomTextConstruct
1806      @AGQName: TextAG
1807      @AGName: text
1808      @CMQName: TextCM
1809      @CMName: text
1810    
1811    @IFISA: AtomElement    @IFISA: AtomElement
1812    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
1813    
1814      @f:implements: AtomFeature10
1815      @mv:refers: atomCommonAttributes
1816    
1817      @cm:
1818        dxm|ANY||ManakaiDOM|all
1819      @enImplNote:
1820        @@ddid:cm
1821        @@@:
1822          {TODO::
1823            (dxm|PCDATA||ManakaiDOM|all | html|div)*
1824          }
1825    
1826    @enDesc:    @enDesc:
1827      The <IF::AtomTextConstruct> interface provides convenience      The <IF::AtomTextConstruct> interface provides convenience
1828      methods and attributes for <IF::Element> nodes      methods and attributes for <IF::Element> nodes
# Line 1537  IFClsDef: Line 1831  IFClsDef:
1831      interface.      interface.
1832    
1833      A Text construct contains human-readable text, usually in      A Text construct contains human-readable text, usually in
1834      small quantities.  The content of Text constructs is      small quantities.  The content of a Text construct is
1835      Language-Sensitive.      Language-Sensitive.
1836    
1837    @Attr:    @ATTR:
1838      @@Name: type      @@Name: type
1839      @@enDesc:      @@enDesc:
1840        The <XA::type> attribute of the element.        The <XA::type> attribute of the element.
# Line 1648  IFClsDef: Line 1942  IFClsDef:
1942          $test->assert_equals ($el-><AG::AtomTextConstruct.container>, $con);          $test->assert_equals ($el-><AG::AtomTextConstruct.container>, $con);
1943  ##AtomTextConstruct  ##AtomTextConstruct
1944    
1945  IFClsDef:  IFClsConstructDef:
1946    @IFQName: AtomPersonConstruct    @IFQName: AtomPersonConstruct
1947    @ClsQName: ManakaiAtomPersonConstruct    @ClsQName: ManakaiAtomPersonConstruct
1948      @AGQName: PersonAG
1949      @AGName: person
1950      @CMQName: PersonCM
1951      @CMName: person
1952    
1953    @IFISA: AtomElement    @IFISA: AtomElement
1954    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
1955    
1956      @f:implements: AtomFeature10
1957      @mv:refers: atomCommonAttributes
1958    
1959      @cm:
1960        (person-prop+)
1961    
1962    @enDesc:    @enDesc:
1963      The <IF::AtomPersonConstruct> interface provides convenience      The <IF::AtomPersonConstruct> interface provides convenience
1964      methods and attributes for <IF::Element> nodes      methods and attributes for <IF::Element> nodes
# Line 1702  IFClsDef: Line 2006  IFClsDef:
2006      @@Name: nameElement      @@Name: nameElement
2007      @@enDesc:      @@enDesc:
2008        The <XE::atom|name> child element of the node.        The <XE::atom|name> child element of the node.
2009      @@Type: AtomElement      @@Type: AtomNameElement
2010      @@Get:      @@Get:
2011        @@@enDesc:        @@@enDesc:
2012          It <kwd:MUST> <I::return a <XE::atom|name> child element>          It <kwd:MUST> <I::return a <XE::atom|name> child element>
# Line 1787  IFClsDef: Line 2091  IFClsDef:
2091          }__;          }__;
2092  ##AtomPersonConstruct  ##AtomPersonConstruct
2093    
2094  IFClsDef:  ECDef:
2095      @QName: person-prop
2096      @mv:elementTypeClassName: person-prop
2097      @mv:refers: atom|name
2098      @mv:refers: atom|uri
2099      @mv:refers: atom|email
2100      @mv:refers: extensionElements
2101    
2102    IFClsConstructDef:
2103    @IFQName: AtomDateConstruct    @IFQName: AtomDateConstruct
2104    @ClsQName: ManakaiAtomDateConstruct    @ClsQName: ManakaiAtomDateConstruct
2105      @AGQName: DateAG
2106      @AGName: date
2107      @CMQName: DateCM
2108      @CMName: date
2109    
2110    @IFISA: AtomElement    @IFISA: AtomElement
2111    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
2112    
2113      @f:implements: AtomFeature10
2114      @mv:refers: atomCommonAttributes
2115    
2116      @cm:
2117        (dxm|PCDATA||ManakaiDOM|all)*
2118      @enImplNote:
2119        @@ddid: cm
2120        @@@:
2121          {TODO::
2122            xsd|dateTime
2123          }
2124    
2125    @enDesc:    @enDesc:
2126      The <IF::AtomDateConstruct> interface provides convenience      The <IF::AtomDateConstruct> interface provides convenience
2127      methods and attributes for <IF::Element> nodes      methods and attributes for <IF::Element> nodes
# Line 1864  IFClsDef: Line 2192  IFClsDef:
2192        }        }
2193  ##AtomDateConstruct  ##AtomDateConstruct
2194    
2195    ECDef:
2196      @QName: feed-prop
2197      @mv:elementTypeClassName: feed-prop
2198      @mv:refers: atom|author
2199      @mv:refers: atom|category
2200      @mv:refers: atom|contributor
2201      @mv:refers: atom|generator
2202      @mv:refers: atom|icon
2203      @mv:refers: atom|id
2204      @mv:refers: atom|link
2205      @mv:refers: atom|logo
2206      @mv:refers: atom|rights
2207      @mv:refers: atom|subtitle
2208      @mv:refers: atom|title
2209      @mv:refers: atom|updated
2210      @mv:refers: extensionElements
2211    
2212  IFClsETDef:  IFClsETDef:
2213    @IFQName: AtomFeedElement    @IFQName: AtomFeedElement
2214    @ETQName: atom|feed    @ETQName: atom|feed
# Line 1873  IFClsETDef: Line 2218  IFClsETDef:
2218    @IFISA: AtomElement    @IFISA: AtomElement
2219    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
2220    
2221      @f:implements: AtomFeature10
2222      @mv:refers: atomCommonAttributes
2223    
2224      @cm:
2225        (feed-prop+, atom|entry*)
2226    
2227    @enDesc:    @enDesc:
2228      The <XE::atom|feed> element is the document element      The <XE::atom|feed> element is the document element
2229      of an Atom Feed Document.      of an Atom Feed Document.
# Line 2476  IFClsETDef: Line 2827  IFClsETDef:
2827                                  (<Q::atom|>, 'updated');                                  (<Q::atom|>, 'updated');
2828            $updatede-><AS::AtomDateConstruct.value> (scalar time);            $updatede-><AS::AtomDateConstruct.value> (scalar time);
2829            $r-><M::Node.appendChild> ($updatede);            $r-><M::Node.appendChild> ($updatede);
2830    
2831              $self-><M::Node.appendChild> ($r);
2832          }__;          }__;
2833    
2834      @@Test:      @@Test:
# Line 2542  IFClsETDef: Line 2895  IFClsETDef:
2895          $test->assert_num_not_equals          $test->assert_num_not_equals
2896                   (actual_value => $updated-><AG::AtomDateConstruct.value>,                   (actual_value => $updated-><AG::AtomDateConstruct.value>,
2897                    expected_value => 0);                    expected_value => 0);
2898    
2899            $test->id ('parent');
2900            $test->assert_equals ($ent-><AG::Node.parentNode>, $feed);
2901      @@Test:      @@Test:
2902        @@@QName: AtomFeedElement.addNewEntry.2.test        @@@QName: AtomFeedElement.addNewEntry.2.test
2903        @@@enDesc:        @@@enDesc:
# Line 2560  IFClsETDef: Line 2916  IFClsETDef:
2916                                      (<Q::xml|>, 'lang'));                                      (<Q::xml|>, 'lang'));
2917  ##AtomFeedElement  ##AtomFeedElement
2918    
2919    ECDef:
2920      @QName: entry-prop
2921      @mv:elementTypeClassName: entry-prop
2922      @mv:refers: atom|author
2923      @mv:refers: atom|category
2924      @mv:refers: atom|content
2925      @mv:refers: atom|contributor
2926      @mv:refers: atom|id
2927      @mv:refers: atom|link
2928      @mv:refers: atom|published
2929      @mv:refers: atom|rights
2930      @mv:refers: atom|source
2931      @mv:refers: atom|summary
2932      @mv:refers: atom|title
2933      @mv:refers: atom|updated
2934      @mv:refers: extensionElements
2935    
2936  IFClsETDef:  IFClsETDef:
2937    @IFQName: AtomEntryElement    @IFQName: AtomEntryElement
2938    @ETQName: atom|entry    @ETQName: atom|entry
# Line 2569  IFClsETDef: Line 2942  IFClsETDef:
2942    @IFISA: AtomElement    @IFISA: AtomElement
2943    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
2944    
2945      @f:implements: AtomFeature10
2946      @mv:refers: atomCommonAttributes
2947    
2948      @cm:
2949        (entry-prop+)
2950    
2951    @enDesc:    @enDesc:
2952      The <XE::atom|entry> element represents an individual      The <XE::atom|entry> element represents an individual
2953      entry, acting as a container for metadata and data      entry, acting as a container for metadata and data
# Line 2741  IFClsETDef: Line 3120  IFClsETDef:
3120          $test->assert_num_equals (actual_value => 0+@$list, expected_value => 0);          $test->assert_num_equals (actual_value => 0+@$list, expected_value => 0);
3121    
3122          $test->id ('parent');          $test->id ('parent');
3123            my $parent;
3124          for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {          for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {
3125              $parent = $_;
3126            $_-><M::Node.appendChild>            $_-><M::Node.appendChild>
3127                  ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));                  ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3128            $_-><M::Node.appendChild>            $_-><M::Node.appendChild>
# Line 2761  IFClsETDef: Line 3142  IFClsETDef:
3142          my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');          my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'entry');
3143    
3144          $test->id ('parent');          $test->id ('parent');
3145            my $parent;
3146          for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {          for ($doc-><M::Document.createElementNS> (<Q::atom|>, 'feed')) {
3147              $parent = $_;
3148            $_-><M::Node.appendChild>            $_-><M::Node.appendChild>
3149                  ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));                  ($doc-><M::Document.createElementNS> (<Q::atom|>, 'author'));
3150            $_-><M::Node.appendChild>            $_-><M::Node.appendChild>
# Line 3089  IFClsETDef: Line 3472  IFClsETDef:
3472  ##AtomEntryElement  ##AtomEntryElement
3473    
3474  IFClsETDef:  IFClsETDef:
3475      @IFQName: AtomIdElement
3476      @ETQName: atom|id
3477      @ETRQName: atom|id
3478      @ClsQName: ManakaiAtomIdElement
3479    
3480      @IFISA: AtomElement
3481      @ClsISA: ManakaiAtomElement
3482    
3483      @f:implements: AtomFeature10
3484      @mv:refers: atomCommonAttributes
3485      
3486      @cm: atomUriCM
3487    ##AtomIdElement
3488    
3489    IFClsETDef:
3490      @IFQName: AtomIconElement
3491      @ETQName: atom|icon
3492      @ETRQName: atom|icon
3493      @ClsQName: ManakaiAtomIconElement
3494    
3495      @IFISA: AtomElement
3496      @ClsISA: ManakaiAtomElement
3497    
3498      @f:implements: AtomFeature10
3499      @mv:refers: atomCommonAttributes
3500    
3501      @cm: atomUriCM
3502    ##AtomIconElement
3503    
3504    IFClsETDef:
3505      @IFQName: AtomNameElement
3506      @ETQName: atom|name
3507      @ETRQName: atom|name
3508      @ClsQName: ManakaiAtomNameElement
3509    
3510      @IFISA: AtomElement
3511      @ClsISA: ManakaiAtomElement
3512    
3513      @f:implements: AtomFeature10
3514      # no common attribs
3515      @cm: TextCM
3516    
3517      @mv:refers: Atom
3518    ##AtomNameElement
3519    
3520    IFClsETDef:
3521      @IFQName: AtomUriElement
3522      @ETQName: atom|uri
3523      @ETRQName: atom|uri
3524      @ClsQName: ManakaiAtomUriElement
3525    
3526      @IFISA: AtomElement
3527      @ClsISA: ManakaiAtomElement
3528    
3529      @f:implements: AtomFeature10
3530      # no common attribs
3531      @cm: atomUriCM
3532    
3533      @mv:refers: Atom
3534    ##AtomUriElement
3535    
3536    IFClsETDef:
3537      @IFQName: AtomEmailElement
3538      @ETQName: atom|email
3539      @ETRQName: atom|email
3540      @ClsQName: ManakaiAtomEmailElement
3541    
3542      @IFISA: AtomElement
3543      @ClsISA: ManakaiAtomElement
3544    
3545      @f:implements: AtomFeature10
3546      # no common attribs
3547      @cm: atomEmailAddressCM
3548    
3549      @mv:refers: Atom
3550    ##AtomEmailElement
3551    
3552    IFClsETDef:
3553      @IFQName: AtomLogoElement
3554      @ETQName: atom|logo
3555      @ETRQName: atom|logo
3556      @ClsQName: ManakaiAtomLogoElement
3557    
3558      @IFISA: AtomElement
3559      @ClsISA: ManakaiAtomElement
3560    
3561      @f:implements: AtomFeature10
3562      @mv:refers: atomCommonAttributes
3563    
3564      @cm: atomUriCM
3565    ##AtomLogoElement
3566    
3567    IFClsETDef:
3568    @IFQName: AtomContentElement    @IFQName: AtomContentElement
3569    @ETQName: atom|content    @ETQName: atom|content
3570      @ETRQName: atom|content
3571    @ClsQName: ManakaiAtomContentElement    @ClsQName: ManakaiAtomContentElement
3572    
3573    @IFISA: AtomElement    @IFISA: AtomElement
3574    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
3575    
3576      @f:implements: AtomFeature10
3577      @mv:refers: atomCommonAttributes
3578    
3579      @cm:
3580        dxm|ANY||ManakaiDOM|all
3581    
3582    @enDesc:    @enDesc:
3583      The <XE::atom|content> element either contains or links to      The <XE::atom|content> element either contains or links to
3584      the content of the entry.      the content of the entry.
3585    
3586    @Attr:    @ATTR:
3587      @@Name: type      @@Name: type
3588      @@enDesc:      @@enDesc:
3589        The type of the element.        The type of the element.
# Line 3165  IFClsETDef: Line 3648  IFClsETDef:
3648          $el-><AS::AtomContentElement.type> (null);          $el-><AS::AtomContentElement.type> (null);
3649          $test->assert_null ($el-><AG::AtomContentElement.type>);          $test->assert_null ($el-><AG::AtomContentElement.type>);
3650    
3651    @Attr:    @ATTR:
3652      @@Name: src      @@Name: src
3653      @@enDesc:      @@enDesc:
3654        The source of the remote content of the element.        The source of the remote content of the element.
# Line 3339  IFClsETDef: Line 3822  IFClsETDef:
3822  IFClsETDef:  IFClsETDef:
3823    @IFQName: AtomAuthorElement    @IFQName: AtomAuthorElement
3824    @ETQName: atom|author    @ETQName: atom|author
3825      @ETRQName: atom|author
3826    @ClsQName: ManakaiAtomAuthorElement    @ClsQName: ManakaiAtomAuthorElement
3827    
3828    @IFISA: AtomPersonConstruct    @IFISA: AtomPersonConstruct
3829    @ClsISA: ManakaiAtomPersonConstruct    @ClsISA: ManakaiAtomPersonConstruct
3830    
3831      @f:implements: AtomFeature10
3832      @mv:refers: PersonAG
3833      @mv:elementContentModel: PersonCM
3834    
3835    @enDesc:    @enDesc:
3836      The <XE::atom|author> element is a Person construct that      The <XE::atom|author> element is a Person construct that
3837      indicates the author of the entry or feed.      indicates the author of the entry or feed.
# Line 3352  IFClsETDef: Line 3840  IFClsETDef:
3840  IFClsETDef:  IFClsETDef:
3841    @IFQName: AtomCategoryElement    @IFQName: AtomCategoryElement
3842    @ETQName: atom|category    @ETQName: atom|category
3843      @ETRQName: atom|category
3844    @ClsQName: ManakaiAtomCategoryElement    @ClsQName: ManakaiAtomCategoryElement
3845    
3846    @IFISA: AtomElement    @IFISA: AtomElement
3847    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
3848    
3849      @f:implements: AtomFeature10
3850      @mv:refers: atomCommonAttributes
3851    
3852      @cm: undefinedContent
3853    
3854    @enDesc:    @enDesc:
3855      The <XE::atom|category> element conveys information abut      The <XE::atom|category> element conveys information abut
3856      a category associated with an entry or feed.      a category associated with an entry or feed.
# Line 3465  IFClsETDef: Line 3959  IFClsETDef:
3959  IFClsETDef:  IFClsETDef:
3960    @IFQName: AtomContributorElement    @IFQName: AtomContributorElement
3961    @ETQName: atom|contributor    @ETQName: atom|contributor
3962      @ETRQName: atom|contributor
3963    @ClsQName: ManakaiAtomContributorElement    @ClsQName: ManakaiAtomContributorElement
3964    
3965    @IFISA: AtomPersonConstruct    @IFISA: AtomPersonConstruct
3966    @ClsISA: ManakaiAtomPersonConstruct    @ClsISA: ManakaiAtomPersonConstruct
3967    
3968      @f:implements: AtomFeature10
3969      @mv:refers: PersonAG
3970      @mv:elementContentModel: PersonCM
3971    
3972    @enDesc:    @enDesc:
3973      The <XE::atom|contributor> element is a Person construct that      The <XE::atom|contributor> element is a Person construct that
3974      indicates a person or other entity who contributed to the entry      indicates a person or other entity who contributed to the entry
# Line 3479  IFClsETDef: Line 3978  IFClsETDef:
3978  IFClsETDef:  IFClsETDef:
3979    @IFQName: AtomGeneratorElement    @IFQName: AtomGeneratorElement
3980    @ETQName: atom|generator    @ETQName: atom|generator
3981      @ETRQName: atom|generator
3982    @ClsQName: ManakaiAtomGeneratorElement    @ClsQName: ManakaiAtomGeneratorElement
3983    
3984    @IFISA: AtomElement    @IFISA: AtomElement
3985    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
3986    
3987      @f:implements: AtomFeature10
3988      @mv:refers: atomCommonAttributes
3989    
3990      @cm:
3991        (dxm|PCDATA||ManakaiDOM|all)*
3992    
3993    @enDesc:    @enDesc:
3994      The <XE::atom|generator> element identifies the agent used      The <XE::atom|generator> element identifies the agent used
3995      to generate a feed.      to generate a feed.
# Line 3559  IFClsETDef: Line 4065  IFClsETDef:
4065  IFClsETDef:  IFClsETDef:
4066    @IFQName: AtomLinkElement    @IFQName: AtomLinkElement
4067    @ETQName: atom|link    @ETQName: atom|link
4068      @ETRQName: atom|link
4069    @ClsQName: ManakaiAtomLinkElement    @ClsQName: ManakaiAtomLinkElement
4070    
4071    @IFISA: AtomElement    @IFISA: AtomElement
4072    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
4073    
4074      @f:implements: AtomFeature10
4075      @mv:refers: atomCommonAttributes
4076    
4077      @cm: undefinedContent
4078    
4079    @enDesc:    @enDesc:
4080      The <XE::atom|link> element defines a reference from an entry      The <XE::atom|link> element defines a reference from an entry
4081      or feed to a Web resource.      or feed to a Web resource.
4082    
4083    @Attr:    @ATTR:
4084      @@Name: href      @@Name: href
4085      @@enDesc:      @@enDesc:
4086        The <XA::href> attribute of the element.        The <XA::href> attribute of the element.
# Line 3576  IFClsETDef: Line 4088  IFClsETDef:
4088        It <kwd:MUST> <I::reflect the URI value        It <kwd:MUST> <I::reflect the URI value
4089        of the <XA::href> attribute> of the node.        of the <XA::href> attribute> of the node.
4090      @@Type: DOMString      @@Type: DOMString
4091      @@Type: DOMURI      @@actualType: DOMURI
4092      @@Get:      @@Get:
4093        @@@nullCase:        @@@nullCase:
4094          @@@@enDesc:          @@@@enDesc:
# Line 3602  IFClsETDef: Line 4114  IFClsETDef:
4114            $given => $given,            $given => $given,
4115          }__;          }__;
4116    
4117    @Attr:    @ATTR:
4118      @@Name: rel      @@Name: rel
4119      @@enDesc:      @@enDesc:
4120        The <XA::rel> attribute of the element.        The <XA::rel> attribute of the element.
# Line 3612  IFClsETDef: Line 4124  IFClsETDef:
4124        a few exceptions.  The default value <kwd:MUST>        a few exceptions.  The default value <kwd:MUST>
4125        be <URI^DISCore|QName::rel|alternate>.        be <URI^DISCore|QName::rel|alternate>.
4126      @@Type: DOMString      @@Type: DOMString
4127        @@actualType: DOMURI
4128      @@Get:      @@Get:
4129        @@@enDesc:        @@@enDesc:
4130          If the algorithm returns a string that does not contain          If the algorithm returns a string that does not contain
# Line 3685  IFClsETDef: Line 4198  IFClsETDef:
4198          $test->assert_equals ($el-><AG::AtomLinkElement.rel>,          $test->assert_equals ($el-><AG::AtomLinkElement.rel>,
4199                                <Q::rel|alternate>);                                <Q::rel|alternate>);
4200    
4201    @Attr:    @ATTR:
4202      @@Name: type      @@Name: type
4203      @@enDesc:      @@enDesc:
4204        The <XA::type> attribute of the element.        The <XA::type> attribute of the element.
# Line 3694  IFClsETDef: Line 4207  IFClsETDef:
4207        of the <XA::type> attribute> of the node.        of the <XA::type> attribute> of the node.
4208      @@Type: DOMString      @@Type: DOMString
4209      @@Get:      @@Get:
4210          @@@enDesc:
4211            {P:: If the feature <Feature^^DISCore|QName::AtomThreadingFeature10>
4212                 is supported, the attribute getter <kwd:MUST> return
4213                 the string <CODE::application/atom+xml> when both of the
4214                 following conditions are met:
4215    
4216               - The attribute getter would otherwise return <DOM::null>.
4217    
4218               - The <A::AtomLinkElement.rel> attribute contains
4219                 a string value of <URI^^DISCore|QName::rel|replies>.
4220    
4221            }
4222        @@@nullCase:        @@@nullCase:
4223          @@@@enDesc:          @@@@enDesc:
4224            If the algorithm returns <DOM::null>.            If the algorithm returns <DOM::null>.
# Line 3705  IFClsETDef: Line 4230  IFClsETDef:
4230            $r => $r,            $r => $r,
4231            $defaultValue => {null},            $defaultValue => {null},
4232          }__;          }__;
4233    
4234            unless (defined $r) {
4235              __DEEP{
4236                my $rel = $self-><AG::AtomLinkElement.rel>;
4237                if (defined $rel and $rel eq <Q::rel|replies>) {
4238                  $r = q<application/atom+xml>;
4239                }
4240              }__;
4241            }
4242      @@Set:      @@Set:
4243        @@@nullCase:        @@@nullCase:
4244          @@@@enDesc:          @@@@enDesc:
# Line 3718  IFClsETDef: Line 4252  IFClsETDef:
4252            $given => $given,            $given => $given,
4253          }__;          }__;
4254    
4255    @Attr:      @@Test:
4256          @@@QName: AtomLinkElement.type.!rel.test
4257          @@@PerlDef:
4258            my $doc;
4259            __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4260    
4261            my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'link');
4262    
4263            $test->id ('implied');
4264            my $type0 = $el-><AG::AtomLinkElement.type>;
4265            $test->assert_null ($type0);
4266    
4267            $test->id ('explicit');
4268            $el-><AS::AtomLinkElement.type> ('application/atom+xml');
4269            my $type1 = $el-><AG::AtomLinkElement.type>;
4270            $test->assert_equals ($type1, q<application/atom+xml>);
4271    
4272            $test->id ('different');
4273            $el-><AS::AtomLinkElement.type> ('application/xhtml+xml');
4274            my $type2 = $el-><AG::AtomLinkElement.type>;
4275            $test->assert_equals ($type2, q<application/xhtml+xml>);
4276        @@Test:
4277          @@@QName: AtomLinkElement.type.rel!=replies.test
4278          @@@PerlDef:
4279            my $doc;
4280            __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4281    
4282            my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'link');
4283    
4284            $el-><AS::AtomLinkElement.rel> (<Q::rel|alternate>);
4285    
4286            $test->id ('implied');
4287            my $type0 = $el-><AG::AtomLinkElement.type>;
4288            $test->assert_null ($type0);
4289    
4290            $test->id ('explicit');
4291            $el-><AS::AtomLinkElement.type> ('application/atom+xml');
4292            my $type1 = $el-><AG::AtomLinkElement.type>;
4293            $test->assert_equals ($type1, q<application/atom+xml>);
4294    
4295            $test->id ('different');
4296            $el-><AS::AtomLinkElement.type> ('application/xhtml+xml');
4297            my $type2 = $el-><AG::AtomLinkElement.type>;
4298            $test->assert_equals ($type2, q<application/xhtml+xml>);
4299        @@Test:
4300          @@@QName: AtomLinkElement.type.rel=replies.test
4301          @@@PerlDef:
4302            my $doc;
4303            __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4304    
4305            my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'link');
4306    
4307            $el-><AS::AtomLinkElement.rel> (<Q::rel|replies>);
4308    
4309            $test->id ('implied');
4310            my $type0 = $el-><AG::AtomLinkElement.type>;
4311            $test->assert_equals ($type0, q<application/atom+xml>);
4312    
4313            $test->id ('explicit');
4314            $el-><AS::AtomLinkElement.type> ('application/atom+xml');
4315            my $type1 = $el-><AG::AtomLinkElement.type>;
4316            $test->assert_equals ($type1, q<application/atom+xml>);
4317    
4318            $test->id ('different');
4319            $el-><AS::AtomLinkElement.type> ('application/xhtml+xml');
4320            my $type2 = $el-><AG::AtomLinkElement.type>;
4321            $test->assert_equals ($type2, q<application/xhtml+xml>);
4322    
4323      @ATTR:
4324      @@Name: hreflang      @@Name: hreflang
4325      @@enDesc:      @@enDesc:
4326        The <XA::hreflang> attribute of the element.        The <XA::hreflang> attribute of the element.
# Line 3751  IFClsETDef: Line 4353  IFClsETDef:
4353            $given => $given,            $given => $given,
4354          }__;          }__;
4355    
4356    @Attr:    @ATTR:
4357      @@Name: title      @@Name: title
4358      @@enDesc:      @@enDesc:
4359        The <XA::title> attribute of the element.        The <XA::title> attribute of the element.
# Line 3784  IFClsETDef: Line 4386  IFClsETDef:
4386            $given => $given,            $given => $given,
4387          }__;          }__;
4388    
4389    @Attr:    @ATTR:
4390      @@Name: length      @@Name: length
4391      @@enDesc:      @@enDesc:
4392        The <XA::length> attribute of the element.        The <XA::length> attribute of the element.
# Line 3821  IFClsETDef: Line 4423  IFClsETDef:
4423  IFClsETDef:  IFClsETDef:
4424    @IFQName: AtomPublishedElement    @IFQName: AtomPublishedElement
4425    @ETQName: atom|published    @ETQName: atom|published
4426      @ETRQName: atom|published
4427    @ClsQName: ManakaiAtomPublishedElement    @ClsQName: ManakaiAtomPublishedElement
4428    
4429    @IFISA: AtomDateConstruct    @IFISA: AtomDateConstruct
4430    @ClsISA: ManakaiAtomDateConstruct    @ClsISA: ManakaiAtomDateConstruct
4431    
4432      @f:implements: AtomFeature10
4433      @mv:refers: DateAG
4434      @mv:elementContentModel: DateCM
4435    
4436    @enDesc:    @enDesc:
4437      The <XE::atom|published> element is a Date construct      The <XE::atom|published> element is a Date construct
4438      indicating an instant in time associated with an      indicating an instant in time associated with an
# Line 3838  IFClsETDef: Line 4445  IFClsETDef:
4445  IFClsETDef:  IFClsETDef:
4446    @IFQName: AtomRightsElement    @IFQName: AtomRightsElement
4447    @ETQName: atom|rights    @ETQName: atom|rights
4448      @ETRQName: atom|rights
4449    @ClsQName: ManakaiAtomRightsElement    @ClsQName: ManakaiAtomRightsElement
4450    
4451    @IFISA: AtomTextConstruct    @IFISA: AtomTextConstruct
4452    @ClsISA: ManakaiAtomTextConstruct    @ClsISA: ManakaiAtomTextConstruct
4453    
4454      @f:implements: AtomFeature10
4455      @mv:refers: TextAG
4456      @mv:elementContentModel: TextCM
4457    
4458    @enDesc:    @enDesc:
4459      The <XE::atom|rights> element is a Text construct      The <XE::atom|rights> element is a Text construct
4460      that conveys information about rights held in and      that conveys information about rights held in and
4461      over an entry or feed.      over an entry or feed.
4462  ##AtomRightsElement  ##AtomRightsElement
4463    
4464    ECDef:
4465      @QName: source-prop
4466      @mv:elementTypeClassName: source-prop
4467      @mv:refers: atom|author
4468      @mv:refers: atom|category
4469      @mv:refers: atom|contributor
4470      @mv:refers: atom|generator
4471      @mv:refers: atom|icon
4472      @mv:refers: atom|id
4473      @mv:refers: atom|link
4474      @mv:refers: atom|logo
4475      @mv:refers: atom|rights
4476      @mv:refers: atom|subtitle
4477      @mv:refers: atom|title
4478      @mv:refers: atom|updated
4479      @mv:refers: extensionElements
4480    
4481  IFClsETDef:  IFClsETDef:
4482    @IFQName: AtomSourceElement    @IFQName: AtomSourceElement
4483    @ETQName: atom|source    @ETQName: atom|source
4484      @ETRQName: atom|source
4485    @ClsQName: ManakaiAtomSourceElement    @ClsQName: ManakaiAtomSourceElement
4486    
4487    @IFISA: AtomElement    @IFISA: AtomElement
4488    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
4489    
4490      @f:implements: AtomFeature10
4491      @mv:refers: atomCommonAttributes
4492    
4493      @cm:
4494        (source-prop*)
4495    
4496    @Attr:    @Attr:
4497      @@Name: authorElements      @@Name: authorElements
4498      @@enDesc:      @@enDesc:
# Line 4061  IFClsETDef: Line 4697  IFClsETDef:
4697  IFClsETDef:  IFClsETDef:
4698    @IFQName: AtomSubtitleElement    @IFQName: AtomSubtitleElement
4699    @ETQName: atom|subtitle    @ETQName: atom|subtitle
4700      @ETRQName: atom|subtitle
4701    @ClsQName: ManakaiAtomSubtitleElement    @ClsQName: ManakaiAtomSubtitleElement
4702    
4703    @IFISA: AtomTextConstruct    @IFISA: AtomTextConstruct
4704    @ClsISA: ManakaiAtomTextConstruct    @ClsISA: ManakaiAtomTextConstruct
4705    
4706      @f:implements: AtomFeature10
4707      @mv:refers: TextAG
4708      @mv:elementContentModel: TextCM
4709    
4710    @enDesc:    @enDesc:
4711      The <XE::atom|subtitle> element is a Text construct      The <XE::atom|subtitle> element is a Text construct
4712      that conveys a human-readable description or subtitle for a feed.      that conveys a human-readable description or subtitle for a feed.
# Line 4074  IFClsETDef: Line 4715  IFClsETDef:
4715  IFClsETDef:  IFClsETDef:
4716    @IFQName: AtomSummaryElement    @IFQName: AtomSummaryElement
4717    @ETQName: atom|summary    @ETQName: atom|summary
4718      @ETRQName: atom|summary
4719    @ClsQName: ManakaiAtomSummaryElement    @ClsQName: ManakaiAtomSummaryElement
4720    
4721    @IFISA: AtomTextConstruct    @IFISA: AtomTextConstruct
4722    @ClsISA: ManakaiAtomTextConstruct    @ClsISA: ManakaiAtomTextConstruct
4723    
4724      @f:implements: AtomFeature10
4725      @mv:refers: TextAG
4726      @mv:elementContentModel: TextCM
4727    
4728    @enDesc:    @enDesc:
4729      The <XE::atom|summary> element is a Text construct      The <XE::atom|summary> element is a Text construct
4730      that conveys a short summary, abstract, or excerpt of an entry.      that conveys a short summary, abstract, or excerpt of an entry.
# Line 4087  IFClsETDef: Line 4733  IFClsETDef:
4733  IFClsETDef:  IFClsETDef:
4734    @IFQName: AtomTitleElement    @IFQName: AtomTitleElement
4735    @ETQName: atom|title    @ETQName: atom|title
4736      @ETRQName: atom|title
4737    @ClsQName: ManakaiAtomTitleElement    @ClsQName: ManakaiAtomTitleElement
4738    
4739    @IFISA: AtomTextConstruct    @IFISA: AtomTextConstruct
4740    @ClsISA: ManakaiAtomTextConstruct    @ClsISA: ManakaiAtomTextConstruct
4741    
4742      @f:implements: AtomFeature10
4743      @mv:refers: TextAG
4744      @mv:elementContentModel: TextCM
4745    
4746    @enDesc:    @enDesc:
4747      The <XE::atom|title> element is a Text construct      The <XE::atom|title> element is a Text construct
4748      that conveys a human-readable title for an entry or feed.      that conveys a human-readable title for an entry or feed.
# Line 4100  IFClsETDef: Line 4751  IFClsETDef:
4751  IFClsETDef:  IFClsETDef:
4752    @IFQName: AtomUpdatedElement    @IFQName: AtomUpdatedElement
4753    @ETQName: atom|updated    @ETQName: atom|updated
4754      @ETRQName: atom|updated
4755    @ClsQName: ManakaiAtomUpdatedElement    @ClsQName: ManakaiAtomUpdatedElement
4756    
4757    @IFISA: AtomDateConstruct    @IFISA: AtomDateConstruct
4758    @ClsISA: ManakaiAtomDateConstruct    @ClsISA: ManakaiAtomDateConstruct
4759    
4760      @f:implements: AtomFeature10
4761      @mv:refers: DateAG
4762      @mv:elementContentModel: DateCM
4763    
4764    @enDesc:    @enDesc:
4765      The <XE::atom|updated> element is a Date construct      The <XE::atom|updated> element is a Date construct
4766      indicating the most recent instant in time when an      indicating the most recent instant in time when an
# Line 4194  ElementTypeBinding: Line 4850  ElementTypeBinding:
4850      @@For: ManakaiDOM|DOM3      @@For: ManakaiDOM|DOM3
4851      @@For: =ManakaiDOM|all      @@For: =ManakaiDOM|all
4852      @@Type: idl|boolean||ManakaiDOM|all      @@Type: idl|boolean||ManakaiDOM|all
4853    
4854    ECDef:
4855      @QName: simpleExtensionElements
4856      @mv:elementTypeClassName: simple.extra
4857      @DISCore:resourceType: mv|ElementTypeAdditionalClass
4858    
4859    ECDef:
4860      @QName: structuredExtensionElements
4861      @mv:elementTypeClassName: structured.extra
4862      @DISCore:resourceType: mv|ElementTypeAdditionalClass
4863    
4864    EMDef:
4865      @QName: extensionElements
4866      @mv:elementTypeClassName: extra
4867      @mv:refers: simpleExtensionElements
4868      @mv:refers: structuredExtensionElements
4869      @DISCore:resourceType: mv|ElementTypeAdditionalClass
4870    
4871    AGDef:
4872      @QName: undefinedAttributes
4873      @mv:attributeTypeGroupName: common.extra
4874    
4875    ResourceDef:
4876      @QName: undefinedContent
4877      @mv:elementContentModelName: undefined
4878      @For: =ManakaiDOM|ManakaiDOMLatest
4879      @DISCore:resourceType: mv|ElementContentModel
4880      @cm: dxm|ANY||ManakaiDOM|all
4881      @enImplNote:
4882        (text | anyForeignElement)*
4883    
4884    ## -- Atom Threading Extension [RFC 4685]
4885    
4886    IFClsDef:
4887      @IFQName: AtomEntryElementThread
4888      @ClsQName: ManakaiAtomEntryElementThread
4889    
4890      @ClsISA: ManakaiAtomEntryElement
4891    
4892      @f:implements: AtomThreadingFeature10
4893    
4894      @enDesc:
4895        If the feature <Feature^^DISCore|QName::AtomThreadingFeature10>
4896        is supported, any <IF::Element> whose element type
4897        is <XE::atom|entry> <kwd:MUST> implement the <IF::AtomEntryElementThread>
4898        interface in addition to other appropriate interfaces.
4899    
4900      @Test:
4901        @@QName: AtomEntryElementThread.1.test
4902        @@PerlDef:
4903          my $doc;
4904          __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4905    
4906          my $el = $doc->create_element_ns (<Q::atom|>, 'entry');
4907    
4908          $test->id ('interface');
4909          $test->assert_isa ($el, <IFName::AtomEntryElementThread>);
4910    
4911          $test->id ('feature');
4912          $test->assert_true ($el->is_supported (<Q::fe|AtomThreading> => '1.0'));
4913    
4914      @Attr:
4915        @@Name: threadInReplyToElements
4916        @@enDesc:
4917          A static list of <XE::thr|in-reply-to> child elements of the node.
4918        @@Type: StaticNodeList
4919        @@Get:
4920          @@@enDesc:
4921            It <kwd:MUST> <I::return a <XE::thr|in-reply-to> child element list>
4922            of the node.
4923          @@@PerlDef:
4924            __CODE{returnChildElementList::
4925              $node => $self,
4926              $namespaceURI => {<Q::thr|>},
4927              $localName => 'in-reply-to',
4928              $r => $r,
4929            }__;
4930    ##AtomEntryElementThread
4931    
4932    IFClsETDef:
4933      @IFQName: AtomThreadInReplyToElement
4934      @ETQName: thr|in-reply-to
4935      @ETRQName: thr|in-reply-to
4936      @ClsQName: ManakaiAtomThreadInReplyToElement
4937    
4938      @IFISA: AtomDateConstruct
4939      @ClsISA: ManakaiAtomDateConstruct
4940    
4941      @f:implements: AtomThreadingFeature10
4942      @mv:refers: atomCommonAttributes
4943    
4944      @cm: undefinedContent
4945    
4946      @enDesc:
4947        The <XE::thr|in-reply-to> element is used to indicate
4948        that an entry is a response to another resource.
4949    
4950        If the entry is a response to multiple resources,
4951        additional <XE::thr|in-reply-to> element <kwd:MAY>
4952        be used.
4953    
4954        RFC 4685 assigns no significance to the order in which
4955        multiple <XE::thr|in-reply-to> element appear within
4956        an entry.
4957    
4958      @Test:
4959        @@QName: AtomThreadInReplyToElement.1.test
4960        @@PerlDef:
4961          my $doc;
4962          __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4963    
4964          my $el = $doc->create_element_ns (<Q::thr|>, 'in-reply-to');
4965    
4966          $test->id ('interface');
4967          $test->assert_isa ($el, <IFName::AtomThreadInReplyToElement>);
4968    
4969          $test->id ('feature');
4970          $test->assert_true ($el->is_supported (<Q::fe|AtomThreading> => '1.0'));
4971    
4972      @ATTR:
4973        @@Name: ref
4974        @@enDesc:
4975          The <XA::ref> attribute of the element.
4976    
4977          It <kwd:MUST> <I::reflect the URI value
4978          of the <XA::ref> attribute> of the node.
4979    
4980          The <XA::ref> attribute specifies the persistent,
4981          universally unique identifier of the resource being
4982          responded to.  The value <kwd:MUST> conform to
4983          the same construction and comparison rules as the
4984          value of the <XE::atom|id> element.  Though the IRI
4985          might use a dereferenceable scheme, processors <kwd:MUST-NOT>
4986          assume that it can be dereferenced.
4987    
4988          The <XE::thr|in-reply-to> element <kwd:MUST> contain
4989          a <XA::ref> attribute identifying the resource that
4990          is being respnoded to.
4991    
4992          If the resource being responded to does not have a persistent,
4993          universally unique identifier, the publisher <kwd:MUST> assign an
4994          identifier that satisfies all the considerations in Section 4.2.6 of
4995          RFC 4287 for use as the value of the <XA::ref> attribute.
4996          In that case, if a representation of the resource can be retrieved
4997          from an IRI that can be used as a valid atom:id value, then this IRI
4998          <kwd:SHOULD> be used as the value of both the <XA::ref> and
4999          <XA::href> attributes.
5000        @@Type: DOMString
5001        @@actualType: DOMURI
5002        @@Get:
5003          @@@nullCase:
5004            @@@@enDesc:
5005              If the algorithm returns <DOM::null>.
5006          @@@PerlDef:
5007            __CODE{getReflectAttrURIValue::
5008              $node => $self,
5009              $namespaceURI => {null},
5010              $localName => 'ref',
5011              $r => $r,
5012              $defaultValue => {null},
5013            }__;
5014        @@Set:
5015          @@@nullCase:
5016            @@@@enDesc:
5017              Removes the attribute.
5018          @@@NodeReadOnlyError:
5019          @@@PerlDef:
5020            __CODE{setReflectAttrURIValue::
5021              $node => $self,
5022              $namespaceURI => {null},
5023              $localName => 'ref',
5024              $given => $given,
5025            }__;
5026            
5027      @ATTR:
5028        @@Name: source
5029        @@enDesc:
5030          The <XA::source> attribute of the element.
5031    
5032          It <kwd:MUST> <I::reflect the URI value
5033          of the <XA::source> attribute> of the node.
5034    
5035          The <XA::source> attribute <kwd:MAY> be used to specify the IRI
5036          of an Atom Feed or Entry Document containing an
5037          <XE::atom|entry> with an <XE::atom|id> value equal to the
5038          value of the <XA::ref> attribute.  The IRI specified <kwd:MUST>
5039          be dereferenceable.
5040        @@Type: DOMString
5041        @@actualType: DOMURI
5042        @@Get:
5043          @@@nullCase:
5044            @@@@enDesc:
5045              If the algorithm returns <DOM::null>.
5046          @@@PerlDef:
5047            __CODE{getReflectAttrURIValue::
5048              $node => $self,
5049              $namespaceURI => {null},
5050              $localName => 'source',
5051              $r => $r,
5052              $defaultValue => {null},
5053            }__;
5054        @@Set:
5055          @@@nullCase:
5056            @@@@enDesc:
5057              Removes the attribute.
5058          @@@NodeReadOnlyError:
5059          @@@PerlDef:
5060            __CODE{setReflectAttrURIValue::
5061              $node => $self,
5062              $namespaceURI => {null},
5063              $localName => 'source',
5064              $given => $given,
5065            }__;
5066            
5067      @ATTR:
5068        @@Name: href
5069        @@enDesc:
5070          The <XA::href> attribute of the element.
5071    
5072          It <kwd:MUST> <I::reflect the URI value
5073          of the <XA::href> attribute> of the node.
5074    
5075          The <XA::href> attribute specifies an IRI that may be used
5076          to retrieve a representation of the resource being
5077          responded to.  The IRI specified <kwd:MUST> be
5078          dereferenceable.
5079        @@Type: DOMString
5080        @@actualType: DOMURI
5081        @@Get:
5082          @@@nullCase:
5083            @@@@enDesc:
5084              If the algorithm returns <DOM::null>.
5085          @@@PerlDef:
5086            __CODE{getReflectAttrURIValue::
5087              $node => $self,
5088              $namespaceURI => {null},
5089              $localName => 'href',
5090              $r => $r,
5091              $defaultValue => {null},
5092            }__;
5093        @@Set:
5094          @@@nullCase:
5095            @@@@enDesc:
5096              Removes the attribute.
5097          @@@NodeReadOnlyError:
5098          @@@PerlDef:
5099            __CODE{setReflectAttrURIValue::
5100              $node => $self,
5101              $namespaceURI => {null},
5102              $localName => 'href',
5103              $given => $given,
5104            }__;
5105      
5106      @ATTR:
5107        @@Name: type
5108        @@enDesc:
5109          The <XA::type> attribute of the element.
5110    
5111          It <kwd:MUST> <I::reflect the string value
5112          of the <XA::type> attribute> of the node.
5113    
5114          The <XA::type> attribute <kwd:MAY> be used to provide
5115          a hint to the client about the media type of the
5116          resource identified by the <XA::href> attribute.
5117          The <XA::type> attribute is only meaningful if a
5118          corresponding <XA::href> attribute is also provided.
5119        @@Type: DOMString
5120        @@Get:
5121          @@@nullCase:
5122            @@@@enDesc:
5123              If the algorithm returns <DOM::null>.
5124          @@@PerlDef:
5125            __CODE{getReflectAttrStringValue::
5126              $node => $self,
5127              $namespaceURI => {null},
5128              $localName => 'type',
5129              $r => $r,
5130              $defaultValue => {null},
5131            }__;
5132        @@Set:
5133          @@@nullCase:
5134            @@@@enDesc:
5135              Removes the attribute.
5136          @@@NodeReadOnlyError:
5137          @@@PerlDef:
5138            __CODE{setReflectAttrStringValue::
5139              $node => $self,
5140              $namespaceURI => {null},
5141              $localName => 'type',
5142              $given => $given,
5143            }__;
5144    ##AtomThreadInReplyToElement
5145    
5146    IFClsDef:
5147      @IFQName: AtomLinkElementThread
5148      @ClsQName: ManakaiAtomLinkElementThread
5149    
5150      @ClsISA: ManakaiAtomLinkElement
5151    
5152      @f:implements: AtomThreadingFeature10
5153    
5154      @enDesc:
5155        An <XE::atom|link> element with a <XA::rel> attribute value of
5156        <XML::replies> may be used to reference a resource where responses
5157        to an entry may be found.  If the <XA::type> attribute of the
5158        <XE::atom|link> is omitted, its value is assumed to be
5159        <XML::application/atom+xml>.
5160    
5161        A <XML::replies> link appearing as a child of the <XE::atom|feed>
5162        or <XE::atom|source> element indicates that the referenced
5163        resource likely contains responses to any of that
5164        feed's entries.  A <XML::replies>
5165        link appearing as a child of an <XE::atom|entry> element
5166        indicates that the linked resource likely contains responses
5167        specific to that entry.
5168    
5169        If the feature <Feature^^DISCore|QName::AtomThreadingFeature10>
5170        is supported, any <IF::Element> whose element type
5171        is <XE::atom|link> <kwd:MUST> implement the <IF::AtomLinkElementThread>
5172        interface in addition to other appropriate interfaces.
5173    
5174      @Test:
5175        @@QName: AtomLinkElementThread.1.test
5176        @@PerlDef:
5177          my $doc;
5178          __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
5179    
5180          my $el = $doc->create_element_ns (<Q::atom|>, 'link');
5181    
5182          $test->id ('interface');
5183          $test->assert_isa ($el, <IFName::AtomLinkElementThread>);
5184    
5185          $test->id ('feature');
5186          $test->assert_true ($el->is_supported (<Q::fe|AtomThreading> => '1.0'));
5187    
5188      @ATTR:
5189        @@Name: threadCount
5190        @@enDesc:
5191          The <XA::thr|count> attribute of the element.
5192    
5193          It <kwd:MUST> <I::reflect the non-negative integer value
5194          of the <XA::thr|count> attribute> of the node.
5195    
5196          An <XE::atom|link> element using the <XML::replies>
5197          <XA::rel> attribute value <kwd:MAY> contain
5198          a <XA::thr|count> attribute whose value is a
5199          non-negative integer that provides a hint to clients
5200          as to the total number of replies contained by the
5201          linked resource.  The value is advisory and
5202          may not accurately reflect the actual number of replies.
5203        @@Type: idl|long||ManakaiDOM|all
5204        @@Get:
5205          @@@PerlDef:
5206            __CODE{getReflectAttrNonNegativeIntegerValue::
5207              $node => $self,
5208              $namespaceURI => {<Q::thr|>},
5209              $localName => 'count',
5210              $r => $r,
5211              $defaultValue => {null},
5212            }__;
5213        @@Set:
5214          @@@NodeReadOnlyError:
5215          @@@PerlDef:
5216            __CODE{setReflectAttrNonNegativeIntegerValue::
5217              $node => $self,
5218              $namespaceURI => {<Q::thr|>},
5219              $localName => 'count',
5220              $given => $given,
5221            }__;
5222    
5223        @@Test:
5224          @@@QName: AtomLinkElementThread.threadCount.1.test
5225          @@@PerlDef:
5226            my $doc;
5227            __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
5228    
5229            my $link = $doc->create_element_ns (<Q::atom|>, 'link');
5230    
5231            $test->id ('default');
5232            $test->assert_num_equals
5233                     (expected_value => -1,
5234                      actual_value =>
5235                        $link-><AG::AtomLinkElementThread.threadCount>);
5236    
5237            $test->id ('zero');
5238            $link-><AS::AtomLinkElementThread.threadCount> (0);
5239            $test->assert_num_equals
5240                     (expected_value => 0,
5241                      actual_value =>
5242                        $link-><AG::AtomLinkElementThread.threadCount>);
5243            $test->id ('zero.attr');
5244            $test->assert_equals ($link->get_attribute_ns (<Q::thr|>, 'count'), '0');
5245    
5246            $test->id ('one');
5247            $link-><AS::AtomLinkElementThread.threadCount> (1);
5248            $test->assert_num_equals
5249                     (expected_value => 1,
5250                      actual_value =>
5251                        $link-><AG::AtomLinkElementThread.threadCount>);
5252            $test->id ('one.attr');
5253            $test->assert_equals ($link->get_attribute_ns (<Q::thr|>, 'count'), '1');
5254    
5255            $test->id ('10000');
5256            $link-><AS::AtomLinkElementThread.threadCount> (10000);
5257            $test->assert_num_equals
5258                     (expected_value => 10000,
5259                      actual_value =>
5260                        $link-><AG::AtomLinkElementThread.threadCount>);
5261            $test->id ('10000.attr');
5262            $test->assert_equals ($link->get_attribute_ns (<Q::thr|>, 'count'),
5263                                  '10000');
5264    
5265            $test->id ('+10000');
5266            $link->set_attribute_ns (<Q::thr|>, 'thr:count', '+10000');
5267            $test->assert_num_equals
5268                     (expected_value => 10000,
5269                      actual_value =>
5270                        $link-><AG::AtomLinkElementThread.threadCount>);
5271    
5272            $test->id ('010000');
5273            $link->set_attribute_ns (<Q::thr|>, 'thr:count', '010000');
5274            $test->assert_num_equals
5275                     (expected_value => 10000,
5276                      actual_value =>
5277                        $link-><AG::AtomLinkElementThread.threadCount>);
5278    
5279            $test->id ('-100');
5280            $link-><AS::AtomLinkElementThread.threadCount> (-100);
5281            $test->assert_num_equals
5282                     (expected_value => -1,
5283                      actual_value =>
5284                        $link-><AG::AtomLinkElementThread.threadCount>);
5285            $test->id ('-100.attr');
5286            $test->assert_false ($link->has_attribute_ns (<Q::thr|>, 'count'));
5287    
5288            $test->id ('120a');
5289            $link->set_attribute_ns (<Q::thr|>, 'thr:count', '120a');
5290            $test->assert_num_equals
5291                     (expected_value => -1,
5292                      actual_value =>
5293                        $link-><AG::AtomLinkElementThread.threadCount>);
5294    
5295            $test->id ('-1');
5296            $link-><AS::AtomLinkElementThread.threadCount> (-1);
5297            $test->assert_num_equals
5298                     (expected_value => -1,
5299                      actual_value =>
5300                        $link-><AG::AtomLinkElementThread.threadCount>);
5301            $test->id ('-1.attr');
5302            $test->assert_false ($link->has_attribute_ns (<Q::thr|>, 'count'));
5303    
5304      @enImplNote:
5305        @@ddid: updated
5306        @@@:
5307          {TODO::
5308            <XA::thr|updated> attribute
5309          }
5310    ##AtomLinkElementThread
5311    
5312    enImplNote:
5313      @@ddid: total
5314      @@@:
5315        {TODO::
5316          <XE::thr|total>
5317        }
5318    
5319    enImplNote:
5320      @@ddid: threaddtd
5321      @@@:
5322        {TODO::
5323          DTD impl for threading
5324        }

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.21

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24