/[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.16 by wakaba, Sat Nov 4 17:25:07 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    @dlp:    @dlp:
75      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#  
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 92  Namespace: Line 99  Namespace:
99      http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#      http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#
100    @license:    @license:
101      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/  
102    @ManakaiDOM:    @ManakaiDOM:
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:
# Line 118  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 164  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 253  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 283  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 315  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 482  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  ## -- Modules
582    
583  ModuleSetDef:  ModuleSetDef:
584    @QName: Atom    @QName: Atom
   @mv:id: atom  
585    @enLN: Atom    @enLN: Atom
586    @mv:version: 1.0    @mv:version: 1.0
587    @mv:contains: AtomFeed    @mv:contains: AtomDatatypes
588      @mv:contains: AtomProperties
589    @mv:contains: AtomEntry    @mv:contains: AtomEntry
590    @mv:contains: AtomProperty    @mv:contains: AtomFeed
591      @mv:contains: AtomQName
592    
593      @mv:targetNamespace: atom|
594      @mv:defaultNamespacePrefix: atom
595      @mv:systemIdentifierBaseURI: \
596    
597  ModuleDef:  ModuleDef:
598    @QName: AtomFeed    @QName: AtomFeed
599    @mv:id: feed    @mv:id: feed
600    @enLN: Feed    @enLN: Feed
601      @mv:contains: feed-prop
602    @mv:contains: atom|feed    @mv:contains: atom|feed
603    
604  ModuleDef:  ModuleDef:
605    @QName: AtomEntry    @QName: AtomEntry
606    @mv:id: entry    @mv:id: entry
607    @enLN: Entry    @enLN: Entry
608      @mv:contains: entry-prop
609    @mv:contains: atom|entry    @mv:contains: atom|entry
610    
611  ModuleDef:  ModuleDef:
612    @QName: AtomProperty    @QName: AtomProperties
613    @mv:id: prop    @mv:id: props
614    @enLN: Property    @enLN: Properties
615    @mv:contains: atom|content    @mv:contains: atom|content
616      @mv:contains: atom|contributor
617    @mv:contains: atom|category    @mv:contains: atom|category
618    @mv:contains: atom|generator    @mv:contains: atom|generator
   @mv:contains: atom|source  
619    @mv:contains: atom|link    @mv:contains: atom|link
620    @mv:contains: atom|author    @mv:contains: atom|author
621    @mv:contains: atom|published    @mv:contains: atom|published
622    @mv:contains: atom|updated    @mv:contains: atom|updated
623      @mv:contains: atom|icon
624    @mv:contains: atom|id    @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    @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    @mv:contains: atom|email
659    @mv:contains: atom|uri    @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:  ElementTypeBinding:
692    @Name: ModuleSetDef    @Name: ModuleSetDef
# Line 544  IFClsDef: Line 710  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 560  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);
# Line 1356  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 1393  IFClsDef: Line 1650  IFClsDef:
1650    @IFQName: AtomFeedDocument    @IFQName: AtomFeedDocument
1651    @ClsQName: ManakaiFeedEntryDocument    @ClsQName: ManakaiFeedEntryDocument
1652    
1653    @IFISA: AtomDocument    @domperl:implementedByObjectsOf: Document
1654    @ClsISA: ManakaiAtomDocument    @domperl:classImplementedByObjectsOf: td|ManakaiDOMDocument
1655    
1656    @s:rootElementType:    @f:implements: AtomFeature10
     @@@: atom|feed  
     @@DISCore:stopISARecursive: 1  
1657    
1658    @enDesc:    @enDesc:
1659      The <IF::AtomFeedDocument> interface provides convenience      The <IF::AtomFeedDocument> interface provides convenience
# Line 1430  IFClsDef: Line 1685  IFClsDef:
1685    @IFQName: AtomEntryDocument    @IFQName: AtomEntryDocument
1686    @ClsQName: ManakaiAtomEntryDocument    @ClsQName: ManakaiAtomEntryDocument
1687    
1688    @IFISA: AtomDocument    @domperl:implementedByObjectsOf: Document
1689    @ClsISA: ManakaiAtomDocument    @domperl:classImplementedByObjectsOf: td|ManakaiDOMDocument
1690    
1691    @s:rootElementType:    @f:implements: AtomFeature10
     @@@: atom|entry  
     @@DISCore:stopISARecursive: 1  
1692    
1693    @enDesc:    @enDesc:
1694      The <IF::AtomEntryDocument> interface provides convenience      The <IF::AtomEntryDocument> interface provides convenience
# Line 1464  IFClsDef: Line 1717  IFClsDef:
1717        $test->assert_isa ($doc, <IFName::AtomEntryDocument>);        $test->assert_isa ($doc, <IFName::AtomEntryDocument>);
1718  ##AtomEntryDocument  ##AtomEntryDocument
1719    
1720    AGDef:
1721      @QName: atomCommonAttributes
1722      @enFN: common attributes
1723      @mv:attributeTypeGroupName: common
1724    
1725      @mv:refers: Atom
1726      
1727      @ATDef:
1728        @@mv:attributeTypeName: xml|base
1729        @@mv:attributeValueType: atomUri
1730    
1731      @ATDef:
1732        @@mv:attributeTypeName: xml|lang
1733        @@mv:attributeValueType: atomLanguageTag
1734    
1735      @mv:refers: undefinedAttributes
1736    ##atomCommonAttributes
1737    
1738    STDef:
1739      @QName: atomNCName
1740      @mv:datatypeEntityName: NCName
1741      #subsetOf: xsd|string
1742      #minLength, pattern
1743    
1744    STDef:
1745      @QName: atomMediaType
1746      @mv:datatypeEntityName: MediaType
1747      #subsetOf xsd|string
1748      # pattern
1749    
1750    STDef:
1751      @QName: atomLanguageTag
1752      @mv:datatypeEntityName: LangaugeTag
1753      #subsetOf: xsd|string
1754      #pattern
1755    
1756    STDef:
1757      @QName: atomUri
1758      @mv:datatypeEntityName: URI
1759      #aliasfor text
1760    STCDef:
1761      @QName: atomUriCM
1762      @mv:elementContentModelName: URI
1763      @cm: (dxm|PCDATA||ManakaiDOM|all)*
1764    
1765    STDef:
1766      @QName: atomEmailAddress
1767      @mv:datatypeEntityName: EmailAddress
1768      #subsetOf xsd|string
1769      #pattern
1770    STCDef:
1771      @QName: atomEmailAddressCM
1772      @mv:elementContentModelName: EmailAddress
1773      @cm: (dxm|PCDATA||ManakaiDOM|all)*
1774    
1775    ElementTypeBinding:
1776      @Name: AGDef
1777      @ElementType:
1778        dis:ResourceDef
1779      @ShadowContent:
1780        @@DISCore:resourceType: mv|AttributeTypeGroup
1781        @@For: =ManakaiDOM|ManakaiDOMLatest
1782    
1783    ElementTypeBinding:
1784      @Name: ATDef
1785      @ElementType:
1786        dis:ResourceDef
1787      @ShadowContent:
1788        @@DISCore:resourceType: mv|AttributeType
1789        @@For: =ManakaiDOM|ManakaiDOMLatest
1790    
1791    ElementTypeBinding:
1792      @Name: ECDef
1793      @ElementType:
1794        dis:ResourceDef
1795      @ShadowContent:
1796        @@DISCore:resourceType: mv|ElementTypeClass
1797        @@For: =ManakaiDOM|ManakaiDOMLatest
1798    
1799    ElementTypeBinding:
1800      @Name: EMDef
1801      @ElementType:
1802        dis:ResourceDef
1803      @ShadowContent:
1804        @@DISCore:resourceType: mv|ElementTypeClassMix
1805        @@For: =ManakaiDOM|ManakaiDOMLatest
1806    
1807    ElementTypeBinding:
1808      @Name: STDef
1809      @ElementType:
1810        dis:ResourceDef
1811      @ShadowContent:
1812        @@DISCore:resourceType: mv|XMLDTDDatatypeEntity
1813        @@For: =ManakaiDOM|ManakaiDOMLatest
1814    
1815    ElementTypeBinding:
1816      @Name: STCDef
1817      @ElementType:
1818        dis:ResourceDef
1819      @ShadowContent:
1820        @@DISCore:resourceType: mv|ElementContentModel
1821        @@For: =ManakaiDOM|ManakaiDOMLatest
1822    
1823  IFClsDef:  IFClsDef:
1824    @IFQName: AtomElement    @IFQName: AtomElement
1825    @ClsQName: ManakaiAtomElement    @ClsQName: ManakaiAtomElement
# Line 1471  IFClsDef: Line 1827  IFClsDef:
1827    @IFISA: Element    @IFISA: Element
1828    @ClsISA: te|ManakaiDOMElement    @ClsISA: te|ManakaiDOMElement
1829        
1830      @f:implements: AtomFeature10
1831    @s:elementType: AnyAtomElement||ManakaiDOM|all    @s:elementType: AnyAtomElement||ManakaiDOM|all
1832    
1833    @enDesc:    @enDesc:
# Line 1522  ResourceDef: Line 1879  ResourceDef:
1879      @@ContentType: DISCore|QName      @@ContentType: DISCore|QName
1880    @ForCheck: =ManakaiDOM|all    @ForCheck: =ManakaiDOM|all
1881    
1882  IFClsDef:  ElementTypeBinding:
1883      @Name: cm
1884      @ElementType:
1885        mv:elementContentModel
1886      @ShadowContent:
1887        @@ContentType: lang|dcmodel
1888    
1889    IFClsConstructDef:
1890    @IFQName: AtomTextConstruct    @IFQName: AtomTextConstruct
1891    @ClsQName: ManakaiAtomTextConstruct    @ClsQName: ManakaiAtomTextConstruct
1892      @AGQName: TextAG
1893      @AGName: text
1894      @CMQName: TextCM
1895      @CMName: text
1896    
1897    @IFISA: AtomElement    @IFISA: AtomElement
1898    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
1899    
1900      @f:implements: AtomFeature10
1901      @mv:refers: atomCommonAttributes
1902    
1903      @cm:
1904        dxm|ANY||ManakaiDOM|all
1905      @enImplNote:
1906        @@ddid:cm
1907        @@@:
1908          {TODO::
1909            (dxm|PCDATA||ManakaiDOM|all | html|div)*
1910          }
1911    
1912    @enDesc:    @enDesc:
1913      The <IF::AtomTextConstruct> interface provides convenience      The <IF::AtomTextConstruct> interface provides convenience
1914      methods and attributes for <IF::Element> nodes      methods and attributes for <IF::Element> nodes
# Line 1537  IFClsDef: Line 1917  IFClsDef:
1917      interface.      interface.
1918    
1919      A Text construct contains human-readable text, usually in      A Text construct contains human-readable text, usually in
1920      small quantities.  The content of Text constructs is      small quantities.  The content of a Text construct is
1921      Language-Sensitive.      Language-Sensitive.
1922    
1923    @Attr:    @ATTR:
1924      @@Name: type      @@Name: type
1925      @@enDesc:      @@enDesc:
1926        The <XA::type> attribute of the element.        The <XA::type> attribute of the element.
# Line 1648  IFClsDef: Line 2028  IFClsDef:
2028          $test->assert_equals ($el-><AG::AtomTextConstruct.container>, $con);          $test->assert_equals ($el-><AG::AtomTextConstruct.container>, $con);
2029  ##AtomTextConstruct  ##AtomTextConstruct
2030    
2031  IFClsDef:  IFClsConstructDef:
2032    @IFQName: AtomPersonConstruct    @IFQName: AtomPersonConstruct
2033    @ClsQName: ManakaiAtomPersonConstruct    @ClsQName: ManakaiAtomPersonConstruct
2034      @AGQName: PersonAG
2035      @AGName: person
2036      @CMQName: PersonCM
2037      @CMName: person
2038    
2039    @IFISA: AtomElement    @IFISA: AtomElement
2040    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
2041    
2042      @f:implements: AtomFeature10
2043      @mv:refers: atomCommonAttributes
2044    
2045      @cm:
2046        (person-prop+)
2047    
2048    @enDesc:    @enDesc:
2049      The <IF::AtomPersonConstruct> interface provides convenience      The <IF::AtomPersonConstruct> interface provides convenience
2050      methods and attributes for <IF::Element> nodes      methods and attributes for <IF::Element> nodes
# Line 1702  IFClsDef: Line 2092  IFClsDef:
2092      @@Name: nameElement      @@Name: nameElement
2093      @@enDesc:      @@enDesc:
2094        The <XE::atom|name> child element of the node.        The <XE::atom|name> child element of the node.
2095      @@Type: AtomElement      @@Type: AtomNameElement
2096      @@Get:      @@Get:
2097        @@@enDesc:        @@@enDesc:
2098          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 2177  IFClsDef:
2177          }__;          }__;
2178  ##AtomPersonConstruct  ##AtomPersonConstruct
2179    
2180  IFClsDef:  ECDef:
2181      @QName: person-prop
2182      @mv:elementTypeClassName: person-prop
2183      @mv:refers: atom|name
2184      @mv:refers: atom|uri
2185      @mv:refers: atom|email
2186      @mv:refers: extensionElements
2187    
2188    IFClsConstructDef:
2189    @IFQName: AtomDateConstruct    @IFQName: AtomDateConstruct
2190    @ClsQName: ManakaiAtomDateConstruct    @ClsQName: ManakaiAtomDateConstruct
2191      @AGQName: DateAG
2192      @AGName: date
2193      @CMQName: DateCM
2194      @CMName: date
2195    
2196    @IFISA: AtomElement    @IFISA: AtomElement
2197    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
2198    
2199      @f:implements: AtomFeature10
2200      @mv:refers: atomCommonAttributes
2201    
2202      @cm:
2203        (dxm|PCDATA||ManakaiDOM|all)*
2204      @enImplNote:
2205        @@ddid: cm
2206        @@@:
2207          {TODO::
2208            xsd|dateTime
2209          }
2210    
2211    @enDesc:    @enDesc:
2212      The <IF::AtomDateConstruct> interface provides convenience      The <IF::AtomDateConstruct> interface provides convenience
2213      methods and attributes for <IF::Element> nodes      methods and attributes for <IF::Element> nodes
# Line 1864  IFClsDef: Line 2278  IFClsDef:
2278        }        }
2279  ##AtomDateConstruct  ##AtomDateConstruct
2280    
2281    ECDef:
2282      @QName: feed-prop
2283      @mv:elementTypeClassName: feed-prop
2284      @mv:refers: atom|author
2285      @mv:refers: atom|category
2286      @mv:refers: atom|contributor
2287      @mv:refers: atom|generator
2288      @mv:refers: atom|icon
2289      @mv:refers: atom|id
2290      @mv:refers: atom|link
2291      @mv:refers: atom|logo
2292      @mv:refers: atom|rights
2293      @mv:refers: atom|subtitle
2294      @mv:refers: atom|title
2295      @mv:refers: atom|updated
2296      @mv:refers: extensionElements
2297    
2298  IFClsETDef:  IFClsETDef:
2299    @IFQName: AtomFeedElement    @IFQName: AtomFeedElement
2300    @ETQName: atom|feed    @ETQName: atom|feed
# Line 1873  IFClsETDef: Line 2304  IFClsETDef:
2304    @IFISA: AtomElement    @IFISA: AtomElement
2305    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
2306    
2307      @f:implements: AtomFeature10
2308      @mv:refers: atomCommonAttributes
2309    
2310      @cm:
2311        (feed-prop+, atom|entry*)
2312    
2313    @enDesc:    @enDesc:
2314      The <XE::atom|feed> element is the document element      The <XE::atom|feed> element is the document element
2315      of an Atom Feed Document.      of an Atom Feed Document.
# Line 2476  IFClsETDef: Line 2913  IFClsETDef:
2913                                  (<Q::atom|>, 'updated');                                  (<Q::atom|>, 'updated');
2914            $updatede-><AS::AtomDateConstruct.value> (scalar time);            $updatede-><AS::AtomDateConstruct.value> (scalar time);
2915            $r-><M::Node.appendChild> ($updatede);            $r-><M::Node.appendChild> ($updatede);
2916    
2917              $self-><M::Node.appendChild> ($r);
2918          }__;          }__;
2919    
2920      @@Test:      @@Test:
# Line 2542  IFClsETDef: Line 2981  IFClsETDef:
2981          $test->assert_num_not_equals          $test->assert_num_not_equals
2982                   (actual_value => $updated-><AG::AtomDateConstruct.value>,                   (actual_value => $updated-><AG::AtomDateConstruct.value>,
2983                    expected_value => 0);                    expected_value => 0);
2984    
2985            $test->id ('parent');
2986            $test->assert_equals ($ent-><AG::Node.parentNode>, $feed);
2987      @@Test:      @@Test:
2988        @@@QName: AtomFeedElement.addNewEntry.2.test        @@@QName: AtomFeedElement.addNewEntry.2.test
2989        @@@enDesc:        @@@enDesc:
# Line 2560  IFClsETDef: Line 3002  IFClsETDef:
3002                                      (<Q::xml|>, 'lang'));                                      (<Q::xml|>, 'lang'));
3003  ##AtomFeedElement  ##AtomFeedElement
3004    
3005    ECDef:
3006      @QName: entry-prop
3007      @mv:elementTypeClassName: entry-prop
3008      @mv:refers: atom|author
3009      @mv:refers: atom|category
3010      @mv:refers: atom|content
3011      @mv:refers: atom|contributor
3012      @mv:refers: atom|id
3013      @mv:refers: atom|link
3014      @mv:refers: atom|published
3015      @mv:refers: atom|rights
3016      @mv:refers: atom|source
3017      @mv:refers: atom|summary
3018      @mv:refers: atom|title
3019      @mv:refers: atom|updated
3020      @mv:refers: extensionElements
3021    
3022  IFClsETDef:  IFClsETDef:
3023    @IFQName: AtomEntryElement    @IFQName: AtomEntryElement
3024    @ETQName: atom|entry    @ETQName: atom|entry
# Line 2569  IFClsETDef: Line 3028  IFClsETDef:
3028    @IFISA: AtomElement    @IFISA: AtomElement
3029    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
3030    
3031      @f:implements: AtomFeature10
3032      @mv:refers: atomCommonAttributes
3033    
3034      @cm:
3035        (entry-prop+)
3036    
3037    @enDesc:    @enDesc:
3038      The <XE::atom|entry> element represents an individual      The <XE::atom|entry> element represents an individual
3039      entry, acting as a container for metadata and data      entry, acting as a container for metadata and data
# Line 3089  IFClsETDef: Line 3554  IFClsETDef:
3554  ##AtomEntryElement  ##AtomEntryElement
3555    
3556  IFClsETDef:  IFClsETDef:
3557      @IFQName: AtomIdElement
3558      @ETQName: atom|id
3559      @ETRQName: atom|id
3560      @ClsQName: ManakaiAtomIdElement
3561    
3562      @IFISA: AtomElement
3563      @ClsISA: ManakaiAtomElement
3564    
3565      @f:implements: AtomFeature10
3566      @mv:refers: atomCommonAttributes
3567      
3568      @cm: atomUriCM
3569    ##AtomIdElement
3570    
3571    IFClsETDef:
3572      @IFQName: AtomIconElement
3573      @ETQName: atom|icon
3574      @ETRQName: atom|icon
3575      @ClsQName: ManakaiAtomIconElement
3576    
3577      @IFISA: AtomElement
3578      @ClsISA: ManakaiAtomElement
3579    
3580      @f:implements: AtomFeature10
3581      @mv:refers: atomCommonAttributes
3582    
3583      @cm: atomUriCM
3584    ##AtomIconElement
3585    
3586    IFClsETDef:
3587      @IFQName: AtomNameElement
3588      @ETQName: atom|name
3589      @ETRQName: atom|name
3590      @ClsQName: ManakaiAtomNameElement
3591    
3592      @IFISA: AtomElement
3593      @ClsISA: ManakaiAtomElement
3594    
3595      @f:implements: AtomFeature10
3596      # no common attribs
3597      @cm: TextCM
3598    
3599      @mv:refers: Atom
3600    ##AtomNameElement
3601    
3602    IFClsETDef:
3603      @IFQName: AtomUriElement
3604      @ETQName: atom|uri
3605      @ETRQName: atom|uri
3606      @ClsQName: ManakaiAtomUriElement
3607    
3608      @IFISA: AtomElement
3609      @ClsISA: ManakaiAtomElement
3610    
3611      @f:implements: AtomFeature10
3612      # no common attribs
3613      @cm: atomUriCM
3614    
3615      @mv:refers: Atom
3616    ##AtomUriElement
3617    
3618    IFClsETDef:
3619      @IFQName: AtomEmailElement
3620      @ETQName: atom|email
3621      @ETRQName: atom|email
3622      @ClsQName: ManakaiAtomEmailElement
3623    
3624      @IFISA: AtomElement
3625      @ClsISA: ManakaiAtomElement
3626    
3627      @f:implements: AtomFeature10
3628      # no common attribs
3629      @cm: atomEmailAddressCM
3630    
3631      @mv:refers: Atom
3632    ##AtomEmailElement
3633    
3634    IFClsETDef:
3635      @IFQName: AtomLogoElement
3636      @ETQName: atom|logo
3637      @ETRQName: atom|logo
3638      @ClsQName: ManakaiAtomLogoElement
3639    
3640      @IFISA: AtomElement
3641      @ClsISA: ManakaiAtomElement
3642    
3643      @f:implements: AtomFeature10
3644      @mv:refers: atomCommonAttributes
3645    
3646      @cm: atomUriCM
3647    ##AtomLogoElement
3648    
3649    IFClsETDef:
3650    @IFQName: AtomContentElement    @IFQName: AtomContentElement
3651    @ETQName: atom|content    @ETQName: atom|content
3652      @ETRQName: atom|content
3653    @ClsQName: ManakaiAtomContentElement    @ClsQName: ManakaiAtomContentElement
3654    
3655    @IFISA: AtomElement    @IFISA: AtomElement
3656    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
3657    
3658      @f:implements: AtomFeature10
3659      @mv:refers: atomCommonAttributes
3660    
3661      @cm:
3662        dxm|ANY||ManakaiDOM|all
3663    
3664    @enDesc:    @enDesc:
3665      The <XE::atom|content> element either contains or links to      The <XE::atom|content> element either contains or links to
3666      the content of the entry.      the content of the entry.
3667    
3668    @Attr:    @ATTR:
3669      @@Name: type      @@Name: type
3670      @@enDesc:      @@enDesc:
3671        The type of the element.        The type of the element.
# Line 3165  IFClsETDef: Line 3730  IFClsETDef:
3730          $el-><AS::AtomContentElement.type> (null);          $el-><AS::AtomContentElement.type> (null);
3731          $test->assert_null ($el-><AG::AtomContentElement.type>);          $test->assert_null ($el-><AG::AtomContentElement.type>);
3732    
3733    @Attr:    @ATTR:
3734      @@Name: src      @@Name: src
3735      @@enDesc:      @@enDesc:
3736        The source of the remote content of the element.        The source of the remote content of the element.
# Line 3339  IFClsETDef: Line 3904  IFClsETDef:
3904  IFClsETDef:  IFClsETDef:
3905    @IFQName: AtomAuthorElement    @IFQName: AtomAuthorElement
3906    @ETQName: atom|author    @ETQName: atom|author
3907      @ETRQName: atom|author
3908    @ClsQName: ManakaiAtomAuthorElement    @ClsQName: ManakaiAtomAuthorElement
3909    
3910    @IFISA: AtomPersonConstruct    @IFISA: AtomPersonConstruct
3911    @ClsISA: ManakaiAtomPersonConstruct    @ClsISA: ManakaiAtomPersonConstruct
3912    
3913      @f:implements: AtomFeature10
3914      @mv:refers: PersonAG
3915      @mv:elementContentModel: PersonCM
3916    
3917    @enDesc:    @enDesc:
3918      The <XE::atom|author> element is a Person construct that      The <XE::atom|author> element is a Person construct that
3919      indicates the author of the entry or feed.      indicates the author of the entry or feed.
# Line 3352  IFClsETDef: Line 3922  IFClsETDef:
3922  IFClsETDef:  IFClsETDef:
3923    @IFQName: AtomCategoryElement    @IFQName: AtomCategoryElement
3924    @ETQName: atom|category    @ETQName: atom|category
3925      @ETRQName: atom|category
3926    @ClsQName: ManakaiAtomCategoryElement    @ClsQName: ManakaiAtomCategoryElement
3927    
3928    @IFISA: AtomElement    @IFISA: AtomElement
3929    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
3930    
3931      @f:implements: AtomFeature10
3932      @mv:refers: atomCommonAttributes
3933    
3934      @cm: undefinedContent
3935    
3936    @enDesc:    @enDesc:
3937      The <XE::atom|category> element conveys information abut      The <XE::atom|category> element conveys information abut
3938      a category associated with an entry or feed.      a category associated with an entry or feed.
# Line 3465  IFClsETDef: Line 4041  IFClsETDef:
4041  IFClsETDef:  IFClsETDef:
4042    @IFQName: AtomContributorElement    @IFQName: AtomContributorElement
4043    @ETQName: atom|contributor    @ETQName: atom|contributor
4044      @ETRQName: atom|contributor
4045    @ClsQName: ManakaiAtomContributorElement    @ClsQName: ManakaiAtomContributorElement
4046    
4047    @IFISA: AtomPersonConstruct    @IFISA: AtomPersonConstruct
4048    @ClsISA: ManakaiAtomPersonConstruct    @ClsISA: ManakaiAtomPersonConstruct
4049    
4050      @f:implements: AtomFeature10
4051      @mv:refers: PersonAG
4052      @mv:elementContentModel: PersonCM
4053    
4054    @enDesc:    @enDesc:
4055      The <XE::atom|contributor> element is a Person construct that      The <XE::atom|contributor> element is a Person construct that
4056      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 4060  IFClsETDef:
4060  IFClsETDef:  IFClsETDef:
4061    @IFQName: AtomGeneratorElement    @IFQName: AtomGeneratorElement
4062    @ETQName: atom|generator    @ETQName: atom|generator
4063      @ETRQName: atom|generator
4064    @ClsQName: ManakaiAtomGeneratorElement    @ClsQName: ManakaiAtomGeneratorElement
4065    
4066    @IFISA: AtomElement    @IFISA: AtomElement
4067    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
4068    
4069      @f:implements: AtomFeature10
4070      @mv:refers: atomCommonAttributes
4071    
4072      @cm:
4073        (dxm|PCDATA||ManakaiDOM|all)*
4074    
4075    @enDesc:    @enDesc:
4076      The <XE::atom|generator> element identifies the agent used      The <XE::atom|generator> element identifies the agent used
4077      to generate a feed.      to generate a feed.
# Line 3559  IFClsETDef: Line 4147  IFClsETDef:
4147  IFClsETDef:  IFClsETDef:
4148    @IFQName: AtomLinkElement    @IFQName: AtomLinkElement
4149    @ETQName: atom|link    @ETQName: atom|link
4150      @ETRQName: atom|link
4151    @ClsQName: ManakaiAtomLinkElement    @ClsQName: ManakaiAtomLinkElement
4152    
4153    @IFISA: AtomElement    @IFISA: AtomElement
4154    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
4155    
4156      @f:implements: AtomFeature10
4157      @mv:refers: atomCommonAttributes
4158    
4159      @cm: undefinedContent
4160    
4161    @enDesc:    @enDesc:
4162      The <XE::atom|link> element defines a reference from an entry      The <XE::atom|link> element defines a reference from an entry
4163      or feed to a Web resource.      or feed to a Web resource.
4164    
4165    @Attr:    @ATTR:
4166      @@Name: href      @@Name: href
4167      @@enDesc:      @@enDesc:
4168        The <XA::href> attribute of the element.        The <XA::href> attribute of the element.
# Line 3576  IFClsETDef: Line 4170  IFClsETDef:
4170        It <kwd:MUST> <I::reflect the URI value        It <kwd:MUST> <I::reflect the URI value
4171        of the <XA::href> attribute> of the node.        of the <XA::href> attribute> of the node.
4172      @@Type: DOMString      @@Type: DOMString
4173      @@Type: DOMURI      @@actualType: DOMURI
4174      @@Get:      @@Get:
4175        @@@nullCase:        @@@nullCase:
4176          @@@@enDesc:          @@@@enDesc:
# Line 3602  IFClsETDef: Line 4196  IFClsETDef:
4196            $given => $given,            $given => $given,
4197          }__;          }__;
4198    
4199    @Attr:    @ATTR:
4200      @@Name: rel      @@Name: rel
4201      @@enDesc:      @@enDesc:
4202        The <XA::rel> attribute of the element.        The <XA::rel> attribute of the element.
# Line 3612  IFClsETDef: Line 4206  IFClsETDef:
4206        a few exceptions.  The default value <kwd:MUST>        a few exceptions.  The default value <kwd:MUST>
4207        be <URI^DISCore|QName::rel|alternate>.        be <URI^DISCore|QName::rel|alternate>.
4208      @@Type: DOMString      @@Type: DOMString
4209        @@actualType: DOMURI
4210      @@Get:      @@Get:
4211        @@@enDesc:        @@@enDesc:
4212          If the algorithm returns a string that does not contain          If the algorithm returns a string that does not contain
# Line 3685  IFClsETDef: Line 4280  IFClsETDef:
4280          $test->assert_equals ($el-><AG::AtomLinkElement.rel>,          $test->assert_equals ($el-><AG::AtomLinkElement.rel>,
4281                                <Q::rel|alternate>);                                <Q::rel|alternate>);
4282    
4283    @Attr:    @ATTR:
4284      @@Name: type      @@Name: type
4285      @@enDesc:      @@enDesc:
4286        The <XA::type> attribute of the element.        The <XA::type> attribute of the element.
# Line 3694  IFClsETDef: Line 4289  IFClsETDef:
4289        of the <XA::type> attribute> of the node.        of the <XA::type> attribute> of the node.
4290      @@Type: DOMString      @@Type: DOMString
4291      @@Get:      @@Get:
4292          @@@enDesc:
4293            {P:: If the feature <Feature^^DISCore|QName::AtomThreadingFeature10>
4294                 is supported, the attribute getter <kwd:MUST> return
4295                 the string <CODE::application/atom+xml> when both of the
4296                 following conditions are met:
4297    
4298               - The attribute getter would otherwise return <DOM::null>.
4299    
4300               - The <A::AtomLinkElement.rel> attribute contains
4301                 a string value of <URI^^DISCore|QName::rel|replies>.
4302    
4303            }
4304        @@@nullCase:        @@@nullCase:
4305          @@@@enDesc:          @@@@enDesc:
4306            If the algorithm returns <DOM::null>.            If the algorithm returns <DOM::null>.
# Line 3705  IFClsETDef: Line 4312  IFClsETDef:
4312            $r => $r,            $r => $r,
4313            $defaultValue => {null},            $defaultValue => {null},
4314          }__;          }__;
4315    
4316            unless (defined $r) {
4317              __DEEP{
4318                my $rel = $self-><AG::AtomLinkElement.rel>;
4319                if (defined $rel and $rel eq <Q::rel|replies>) {
4320                  $r = q<application/atom+xml>;
4321                }
4322              }__;
4323            }
4324      @@Set:      @@Set:
4325        @@@nullCase:        @@@nullCase:
4326          @@@@enDesc:          @@@@enDesc:
# Line 3718  IFClsETDef: Line 4334  IFClsETDef:
4334            $given => $given,            $given => $given,
4335          }__;          }__;
4336    
4337    @Attr:      @@Test:
4338          @@@QName: AtomLinkElement.type.!rel.test
4339          @@@PerlDef:
4340            my $doc;
4341            __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4342    
4343            my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'link');
4344    
4345            $test->id ('implied');
4346            my $type0 = $el-><AG::AtomLinkElement.type>;
4347            $test->assert_null ($type0);
4348    
4349            $test->id ('explicit');
4350            $el-><AS::AtomLinkElement.type> ('application/atom+xml');
4351            my $type1 = $el-><AG::AtomLinkElement.type>;
4352            $test->assert_equals ($type1, q<application/atom+xml>);
4353    
4354            $test->id ('different');
4355            $el-><AS::AtomLinkElement.type> ('application/xhtml+xml');
4356            my $type2 = $el-><AG::AtomLinkElement.type>;
4357            $test->assert_equals ($type2, q<application/xhtml+xml>);
4358        @@Test:
4359          @@@QName: AtomLinkElement.type.rel!=replies.test
4360          @@@PerlDef:
4361            my $doc;
4362            __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4363    
4364            my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'link');
4365    
4366            $el-><AS::AtomLinkElement.rel> (<Q::rel|alternate>);
4367    
4368            $test->id ('implied');
4369            my $type0 = $el-><AG::AtomLinkElement.type>;
4370            $test->assert_null ($type0);
4371    
4372            $test->id ('explicit');
4373            $el-><AS::AtomLinkElement.type> ('application/atom+xml');
4374            my $type1 = $el-><AG::AtomLinkElement.type>;
4375            $test->assert_equals ($type1, q<application/atom+xml>);
4376    
4377            $test->id ('different');
4378            $el-><AS::AtomLinkElement.type> ('application/xhtml+xml');
4379            my $type2 = $el-><AG::AtomLinkElement.type>;
4380            $test->assert_equals ($type2, q<application/xhtml+xml>);
4381        @@Test:
4382          @@@QName: AtomLinkElement.type.rel=replies.test
4383          @@@PerlDef:
4384            my $doc;
4385            __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4386    
4387            my $el = $doc-><M::Document.createElementNS> (<Q::atom|>, 'link');
4388    
4389            $el-><AS::AtomLinkElement.rel> (<Q::rel|replies>);
4390    
4391            $test->id ('implied');
4392            my $type0 = $el-><AG::AtomLinkElement.type>;
4393            $test->assert_equals ($type0, q<application/atom+xml>);
4394    
4395            $test->id ('explicit');
4396            $el-><AS::AtomLinkElement.type> ('application/atom+xml');
4397            my $type1 = $el-><AG::AtomLinkElement.type>;
4398            $test->assert_equals ($type1, q<application/atom+xml>);
4399    
4400            $test->id ('different');
4401            $el-><AS::AtomLinkElement.type> ('application/xhtml+xml');
4402            my $type2 = $el-><AG::AtomLinkElement.type>;
4403            $test->assert_equals ($type2, q<application/xhtml+xml>);
4404    
4405      @ATTR:
4406      @@Name: hreflang      @@Name: hreflang
4407      @@enDesc:      @@enDesc:
4408        The <XA::hreflang> attribute of the element.        The <XA::hreflang> attribute of the element.
# Line 3751  IFClsETDef: Line 4435  IFClsETDef:
4435            $given => $given,            $given => $given,
4436          }__;          }__;
4437    
4438    @Attr:    @ATTR:
4439      @@Name: title      @@Name: title
4440      @@enDesc:      @@enDesc:
4441        The <XA::title> attribute of the element.        The <XA::title> attribute of the element.
# Line 3784  IFClsETDef: Line 4468  IFClsETDef:
4468            $given => $given,            $given => $given,
4469          }__;          }__;
4470    
4471    @Attr:    @ATTR:
4472      @@Name: length      @@Name: length
4473      @@enDesc:      @@enDesc:
4474        The <XA::length> attribute of the element.        The <XA::length> attribute of the element.
# Line 3821  IFClsETDef: Line 4505  IFClsETDef:
4505  IFClsETDef:  IFClsETDef:
4506    @IFQName: AtomPublishedElement    @IFQName: AtomPublishedElement
4507    @ETQName: atom|published    @ETQName: atom|published
4508      @ETRQName: atom|published
4509    @ClsQName: ManakaiAtomPublishedElement    @ClsQName: ManakaiAtomPublishedElement
4510    
4511    @IFISA: AtomDateConstruct    @IFISA: AtomDateConstruct
4512    @ClsISA: ManakaiAtomDateConstruct    @ClsISA: ManakaiAtomDateConstruct
4513    
4514      @f:implements: AtomFeature10
4515      @mv:refers: DateAG
4516      @mv:elementContentModel: DateCM
4517    
4518    @enDesc:    @enDesc:
4519      The <XE::atom|published> element is a Date construct      The <XE::atom|published> element is a Date construct
4520      indicating an instant in time associated with an      indicating an instant in time associated with an
# Line 3838  IFClsETDef: Line 4527  IFClsETDef:
4527  IFClsETDef:  IFClsETDef:
4528    @IFQName: AtomRightsElement    @IFQName: AtomRightsElement
4529    @ETQName: atom|rights    @ETQName: atom|rights
4530      @ETRQName: atom|rights
4531    @ClsQName: ManakaiAtomRightsElement    @ClsQName: ManakaiAtomRightsElement
4532    
4533    @IFISA: AtomTextConstruct    @IFISA: AtomTextConstruct
4534    @ClsISA: ManakaiAtomTextConstruct    @ClsISA: ManakaiAtomTextConstruct
4535    
4536      @f:implements: AtomFeature10
4537      @mv:refers: TextAG
4538      @mv:elementContentModel: TextCM
4539    
4540    @enDesc:    @enDesc:
4541      The <XE::atom|rights> element is a Text construct      The <XE::atom|rights> element is a Text construct
4542      that conveys information about rights held in and      that conveys information about rights held in and
4543      over an entry or feed.      over an entry or feed.
4544  ##AtomRightsElement  ##AtomRightsElement
4545    
4546    ECDef:
4547      @QName: source-prop
4548      @mv:elementTypeClassName: source-prop
4549      @mv:refers: atom|author
4550      @mv:refers: atom|category
4551      @mv:refers: atom|contributor
4552      @mv:refers: atom|generator
4553      @mv:refers: atom|icon
4554      @mv:refers: atom|id
4555      @mv:refers: atom|link
4556      @mv:refers: atom|logo
4557      @mv:refers: atom|rights
4558      @mv:refers: atom|subtitle
4559      @mv:refers: atom|title
4560      @mv:refers: atom|updated
4561      @mv:refers: extensionElements
4562    
4563  IFClsETDef:  IFClsETDef:
4564    @IFQName: AtomSourceElement    @IFQName: AtomSourceElement
4565    @ETQName: atom|source    @ETQName: atom|source
4566      @ETRQName: atom|source
4567    @ClsQName: ManakaiAtomSourceElement    @ClsQName: ManakaiAtomSourceElement
4568    
4569    @IFISA: AtomElement    @IFISA: AtomElement
4570    @ClsISA: ManakaiAtomElement    @ClsISA: ManakaiAtomElement
4571    
4572      @f:implements: AtomFeature10
4573      @mv:refers: atomCommonAttributes
4574    
4575      @cm:
4576        (source-prop*)
4577    
4578    @Attr:    @Attr:
4579      @@Name: authorElements      @@Name: authorElements
4580      @@enDesc:      @@enDesc:
# Line 4061  IFClsETDef: Line 4779  IFClsETDef:
4779  IFClsETDef:  IFClsETDef:
4780    @IFQName: AtomSubtitleElement    @IFQName: AtomSubtitleElement
4781    @ETQName: atom|subtitle    @ETQName: atom|subtitle
4782      @ETRQName: atom|subtitle
4783    @ClsQName: ManakaiAtomSubtitleElement    @ClsQName: ManakaiAtomSubtitleElement
4784    
4785    @IFISA: AtomTextConstruct    @IFISA: AtomTextConstruct
4786    @ClsISA: ManakaiAtomTextConstruct    @ClsISA: ManakaiAtomTextConstruct
4787    
4788      @f:implements: AtomFeature10
4789      @mv:refers: TextAG
4790      @mv:elementContentModel: TextCM
4791    
4792    @enDesc:    @enDesc:
4793      The <XE::atom|subtitle> element is a Text construct      The <XE::atom|subtitle> element is a Text construct
4794      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 4797  IFClsETDef:
4797  IFClsETDef:  IFClsETDef:
4798    @IFQName: AtomSummaryElement    @IFQName: AtomSummaryElement
4799    @ETQName: atom|summary    @ETQName: atom|summary
4800      @ETRQName: atom|summary
4801    @ClsQName: ManakaiAtomSummaryElement    @ClsQName: ManakaiAtomSummaryElement
4802    
4803    @IFISA: AtomTextConstruct    @IFISA: AtomTextConstruct
4804    @ClsISA: ManakaiAtomTextConstruct    @ClsISA: ManakaiAtomTextConstruct
4805    
4806      @f:implements: AtomFeature10
4807      @mv:refers: TextAG
4808      @mv:elementContentModel: TextCM
4809    
4810    @enDesc:    @enDesc:
4811      The <XE::atom|summary> element is a Text construct      The <XE::atom|summary> element is a Text construct
4812      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 4815  IFClsETDef:
4815  IFClsETDef:  IFClsETDef:
4816    @IFQName: AtomTitleElement    @IFQName: AtomTitleElement
4817    @ETQName: atom|title    @ETQName: atom|title
4818      @ETRQName: atom|title
4819    @ClsQName: ManakaiAtomTitleElement    @ClsQName: ManakaiAtomTitleElement
4820    
4821    @IFISA: AtomTextConstruct    @IFISA: AtomTextConstruct
4822    @ClsISA: ManakaiAtomTextConstruct    @ClsISA: ManakaiAtomTextConstruct
4823    
4824      @f:implements: AtomFeature10
4825      @mv:refers: TextAG
4826      @mv:elementContentModel: TextCM
4827    
4828    @enDesc:    @enDesc:
4829      The <XE::atom|title> element is a Text construct      The <XE::atom|title> element is a Text construct
4830      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 4833  IFClsETDef:
4833  IFClsETDef:  IFClsETDef:
4834    @IFQName: AtomUpdatedElement    @IFQName: AtomUpdatedElement
4835    @ETQName: atom|updated    @ETQName: atom|updated
4836      @ETRQName: atom|updated
4837    @ClsQName: ManakaiAtomUpdatedElement    @ClsQName: ManakaiAtomUpdatedElement
4838    
4839    @IFISA: AtomDateConstruct    @IFISA: AtomDateConstruct
4840    @ClsISA: ManakaiAtomDateConstruct    @ClsISA: ManakaiAtomDateConstruct
4841    
4842      @f:implements: AtomFeature10
4843      @mv:refers: DateAG
4844      @mv:elementContentModel: DateCM
4845    
4846    @enDesc:    @enDesc:
4847      The <XE::atom|updated> element is a Date construct      The <XE::atom|updated> element is a Date construct
4848      indicating the most recent instant in time when an      indicating the most recent instant in time when an
# Line 4194  ElementTypeBinding: Line 4932  ElementTypeBinding:
4932      @@For: ManakaiDOM|DOM3      @@For: ManakaiDOM|DOM3
4933      @@For: =ManakaiDOM|all      @@For: =ManakaiDOM|all
4934      @@Type: idl|boolean||ManakaiDOM|all      @@Type: idl|boolean||ManakaiDOM|all
4935    
4936    ECDef:
4937      @QName: simpleExtensionElements
4938      @mv:elementTypeClassName: simple.extra
4939      @DISCore:resourceType: mv|ElementTypeAdditionalClass
4940    
4941    ECDef:
4942      @QName: structuredExtensionElements
4943      @mv:elementTypeClassName: structured.extra
4944      @DISCore:resourceType: mv|ElementTypeAdditionalClass
4945    
4946    EMDef:
4947      @QName: extensionElements
4948      @mv:elementTypeClassName: extra
4949      @mv:refers: simpleExtensionElements
4950      @mv:refers: structuredExtensionElements
4951      @DISCore:resourceType: mv|ElementTypeAdditionalClass
4952    
4953    AGDef:
4954      @QName: undefinedAttributes
4955      @mv:attributeTypeGroupName: common.extra
4956    
4957    ResourceDef:
4958      @QName: undefinedContent
4959      @mv:elementContentModelName: undefined
4960      @For: =ManakaiDOM|ManakaiDOMLatest
4961      @DISCore:resourceType: mv|ElementContentModel
4962      @cm: dxm|ANY||ManakaiDOM|all
4963      @enImplNote:
4964        (text | anyForeignElement)*
4965    
4966    ## -- Atom Threading Extension [RFC 4685]
4967    
4968    IFClsDef:
4969      @IFQName: AtomEntryElementThread
4970      @ClsQName: ManakaiAtomEntryElementThread
4971    
4972      @ClsISA: ManakaiAtomEntryElement
4973    
4974      @f:implements: AtomThreadingFeature10
4975    
4976      @enDesc:
4977        If the feature <Feature^^DISCore|QName::AtomThreadingFeature10>
4978        is supported, any <IF::Element> whose element type
4979        is <XE::atom|entry> <kwd:MUST> implement the <IF::AtomEntryElementThread>
4980        interface in addition to other appropriate interfaces.
4981    
4982      @Test:
4983        @@QName: AtomEntryElementThread.1.test
4984        @@PerlDef:
4985          my $doc;
4986          __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
4987    
4988          my $el = $doc->create_element_ns (<Q::atom|>, 'entry');
4989    
4990          $test->id ('interface');
4991          $test->assert_isa ($el, <IFName::AtomEntryElementThread>);
4992    
4993          $test->id ('feature');
4994          $test->assert_true ($el->is_supported (<Q::fe|AtomThreading> => '1.0'));
4995    
4996      @Attr:
4997        @@Name: threadInReplyToElements
4998        @@enDesc:
4999          A static list of <XE::thr|in-reply-to> child elements of the node.
5000        @@Type: StaticNodeList
5001        @@Get:
5002          @@@enDesc:
5003            It <kwd:MUST> <I::return a <XE::thr|in-reply-to> child element list>
5004            of the node.
5005          @@@PerlDef:
5006            __CODE{returnChildElementList::
5007              $node => $self,
5008              $namespaceURI => {<Q::thr|>},
5009              $localName => 'in-reply-to',
5010              $r => $r,
5011            }__;
5012    ##AtomEntryElementThread
5013    
5014    IFClsETDef:
5015      @IFQName: AtomThreadInReplyToElement
5016      @ETQName: thr|in-reply-to
5017      @ETRQName: thr|in-reply-to
5018      @ClsQName: ManakaiAtomThreadInReplyToElement
5019    
5020      @IFISA: AtomDateConstruct
5021      @ClsISA: ManakaiAtomDateConstruct
5022    
5023      @f:implements: AtomThreadingFeature10
5024      @mv:refers: atomCommonAttributes
5025    
5026      @cm: undefinedContent
5027    
5028      @enDesc:
5029        The <XE::thr|in-reply-to> element is used to indicate
5030        that an entry is a response to another resource.
5031    
5032        If the entry is a response to multiple resources,
5033        additional <XE::thr|in-reply-to> element <kwd:MAY>
5034        be used.
5035    
5036        RFC 4685 assigns no significance to the order in which
5037        multiple <XE::thr|in-reply-to> element appear within
5038        an entry.
5039    
5040      @Test:
5041        @@QName: AtomThreadInReplyToElement.1.test
5042        @@PerlDef:
5043          my $doc;
5044          __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
5045    
5046          my $el = $doc->create_element_ns (<Q::thr|>, 'in-reply-to');
5047    
5048          $test->id ('interface');
5049          $test->assert_isa ($el, <IFName::AtomThreadInReplyToElement>);
5050    
5051          $test->id ('feature');
5052          $test->assert_true ($el->is_supported (<Q::fe|AtomThreading> => '1.0'));
5053    
5054      @ATTR:
5055        @@Name: ref
5056        @@enDesc:
5057          The <XA::ref> attribute of the element.
5058    
5059          It <kwd:MUST> <I::reflect the URI value
5060          of the <XA::ref> attribute> of the node.
5061    
5062          The <XA::ref> attribute specifies the persistent,
5063          universally unique identifier of the resource being
5064          responded to.  The value <kwd:MUST> conform to
5065          the same construction and comparison rules as the
5066          value of the <XE::atom|id> element.  Though the IRI
5067          might use a dereferenceable scheme, processors <kwd:MUST-NOT>
5068          assume that it can be dereferenced.
5069    
5070          The <XE::thr|in-reply-to> element <kwd:MUST> contain
5071          a <XA::ref> attribute identifying the resource that
5072          is being respnoded to.
5073    
5074          If the resource being responded to does not have a persistent,
5075          universally unique identifier, the publisher <kwd:MUST> assign an
5076          identifier that satisfies all the considerations in Section 4.2.6 of
5077          RFC 4287 for use as the value of the <XA::ref> attribute.
5078          In that case, if a representation of the resource can be retrieved
5079          from an IRI that can be used as a valid atom:id value, then this IRI
5080          <kwd:SHOULD> be used as the value of both the <XA::ref> and
5081          <XA::href> attributes.
5082        @@Type: DOMString
5083        @@actualType: DOMURI
5084        @@Get:
5085          @@@nullCase:
5086            @@@@enDesc:
5087              If the algorithm returns <DOM::null>.
5088          @@@PerlDef:
5089            __CODE{getReflectAttrURIValue::
5090              $node => $self,
5091              $namespaceURI => {null},
5092              $localName => 'ref',
5093              $r => $r,
5094              $defaultValue => {null},
5095            }__;
5096        @@Set:
5097          @@@nullCase:
5098            @@@@enDesc:
5099              Removes the attribute.
5100          @@@NodeReadOnlyError:
5101          @@@PerlDef:
5102            __CODE{setReflectAttrURIValue::
5103              $node => $self,
5104              $namespaceURI => {null},
5105              $localName => 'ref',
5106              $given => $given,
5107            }__;
5108            
5109      @ATTR:
5110        @@Name: source
5111        @@enDesc:
5112          The <XA::source> attribute of the element.
5113    
5114          It <kwd:MUST> <I::reflect the URI value
5115          of the <XA::source> attribute> of the node.
5116    
5117          The <XA::source> attribute <kwd:MAY> be used to specify the IRI
5118          of an Atom Feed or Entry Document containing an
5119          <XE::atom|entry> with an <XE::atom|id> value equal to the
5120          value of the <XA::ref> attribute.  The IRI specified <kwd:MUST>
5121          be dereferenceable.
5122        @@Type: DOMString
5123        @@actualType: DOMURI
5124        @@Get:
5125          @@@nullCase:
5126            @@@@enDesc:
5127              If the algorithm returns <DOM::null>.
5128          @@@PerlDef:
5129            __CODE{getReflectAttrURIValue::
5130              $node => $self,
5131              $namespaceURI => {null},
5132              $localName => 'source',
5133              $r => $r,
5134              $defaultValue => {null},
5135            }__;
5136        @@Set:
5137          @@@nullCase:
5138            @@@@enDesc:
5139              Removes the attribute.
5140          @@@NodeReadOnlyError:
5141          @@@PerlDef:
5142            __CODE{setReflectAttrURIValue::
5143              $node => $self,
5144              $namespaceURI => {null},
5145              $localName => 'source',
5146              $given => $given,
5147            }__;
5148            
5149      @ATTR:
5150        @@Name: href
5151        @@enDesc:
5152          The <XA::href> attribute of the element.
5153    
5154          It <kwd:MUST> <I::reflect the URI value
5155          of the <XA::href> attribute> of the node.
5156    
5157          The <XA::href> attribute specifies an IRI that may be used
5158          to retrieve a representation of the resource being
5159          responded to.  The IRI specified <kwd:MUST> be
5160          dereferenceable.
5161        @@Type: DOMString
5162        @@actualType: DOMURI
5163        @@Get:
5164          @@@nullCase:
5165            @@@@enDesc:
5166              If the algorithm returns <DOM::null>.
5167          @@@PerlDef:
5168            __CODE{getReflectAttrURIValue::
5169              $node => $self,
5170              $namespaceURI => {null},
5171              $localName => 'href',
5172              $r => $r,
5173              $defaultValue => {null},
5174            }__;
5175        @@Set:
5176          @@@nullCase:
5177            @@@@enDesc:
5178              Removes the attribute.
5179          @@@NodeReadOnlyError:
5180          @@@PerlDef:
5181            __CODE{setReflectAttrURIValue::
5182              $node => $self,
5183              $namespaceURI => {null},
5184              $localName => 'href',
5185              $given => $given,
5186            }__;
5187      
5188      @ATTR:
5189        @@Name: type
5190        @@enDesc:
5191          The <XA::type> attribute of the element.
5192    
5193          It <kwd:MUST> <I::reflect the string value
5194          of the <XA::type> attribute> of the node.
5195    
5196          The <XA::type> attribute <kwd:MAY> be used to provide
5197          a hint to the client about the media type of the
5198          resource identified by the <XA::href> attribute.
5199          The <XA::type> attribute is only meaningful if a
5200          corresponding <XA::href> attribute is also provided.
5201        @@Type: DOMString
5202        @@Get:
5203          @@@nullCase:
5204            @@@@enDesc:
5205              If the algorithm returns <DOM::null>.
5206          @@@PerlDef:
5207            __CODE{getReflectAttrStringValue::
5208              $node => $self,
5209              $namespaceURI => {null},
5210              $localName => 'type',
5211              $r => $r,
5212              $defaultValue => {null},
5213            }__;
5214        @@Set:
5215          @@@nullCase:
5216            @@@@enDesc:
5217              Removes the attribute.
5218          @@@NodeReadOnlyError:
5219          @@@PerlDef:
5220            __CODE{setReflectAttrStringValue::
5221              $node => $self,
5222              $namespaceURI => {null},
5223              $localName => 'type',
5224              $given => $given,
5225            }__;
5226    ##AtomThreadInReplyToElement
5227    
5228    IFClsDef:
5229      @IFQName: AtomLinkElementThread
5230      @ClsQName: ManakaiAtomLinkElementThread
5231    
5232      @ClsISA: ManakaiAtomLinkElement
5233    
5234      @f:implements: AtomThreadingFeature10
5235    
5236      @enDesc:
5237        An <XE::atom|link> element with a <XA::rel> attribute value of
5238        <XML::replies> may be used to reference a resource where responses
5239        to an entry may be found.  If the <XA::type> attribute of the
5240        <XE::atom|link> is omitted, its value is assumed to be
5241        <XML::application/atom+xml>.
5242    
5243        A <XML::replies> link appearing as a child of the <XE::atom|feed>
5244        or <XE::atom|source> element indicates that the referenced
5245        resource likely contains responses to any of that
5246        feed's entries.  A <XML::replies>
5247        link appearing as a child of an <XE::atom|entry> element
5248        indicates that the linked resource likely contains responses
5249        specific to that entry.
5250    
5251        If the feature <Feature^^DISCore|QName::AtomThreadingFeature10>
5252        is supported, any <IF::Element> whose element type
5253        is <XE::atom|link> <kwd:MUST> implement the <IF::AtomLinkElementThread>
5254        interface in addition to other appropriate interfaces.
5255    
5256      @Test:
5257        @@QName: AtomLinkElementThread.1.test
5258        @@PerlDef:
5259          my $doc;
5260          __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
5261    
5262          my $el = $doc->create_element_ns (<Q::atom|>, 'link');
5263    
5264          $test->id ('interface');
5265          $test->assert_isa ($el, <IFName::AtomLinkElementThread>);
5266    
5267          $test->id ('feature');
5268          $test->assert_true ($el->is_supported (<Q::fe|AtomThreading> => '1.0'));
5269    
5270      @ATTR:
5271        @@Name: threadCount
5272        @@enDesc:
5273          The <XA::thr|count> attribute of the element.
5274    
5275          It <kwd:MUST> <I::reflect the non-negative integer value
5276          of the <XA::thr|count> attribute> of the node.
5277    
5278          An <XE::atom|link> element using the <XML::replies>
5279          <XA::rel> attribute value <kwd:MAY> contain
5280          a <XA::thr|count> attribute whose value is a
5281          non-negative integer that provides a hint to clients
5282          as to the total number of replies contained by the
5283          linked resource.  The value is advisory and
5284          may not accurately reflect the actual number of replies.
5285        @@Type: idl|long||ManakaiDOM|all
5286        @@Get:
5287          @@@PerlDef:
5288            __CODE{getReflectAttrNonNegativeIntegerValue::
5289              $node => $self,
5290              $namespaceURI => {<Q::thr|>},
5291              $localName => 'count',
5292              $r => $r,
5293              $defaultValue => {null},
5294            }__;
5295        @@Set:
5296          @@@NodeReadOnlyError:
5297          @@@PerlDef:
5298            __CODE{setReflectAttrNonNegativeIntegerValue::
5299              $node => $self,
5300              $namespaceURI => {<Q::thr|>},
5301              $localName => 'count',
5302              $given => $given,
5303            }__;
5304    
5305        @@Test:
5306          @@@QName: AtomLinkElementThread.threadCount.1.test
5307          @@@PerlDef:
5308            my $doc;
5309            __CODE{tc|createEmptyDocumentForTest:: $doc => $doc}__;
5310    
5311            my $link = $doc->create_element_ns (<Q::atom|>, 'link');
5312    
5313            $test->id ('default');
5314            $test->assert_num_equals
5315                     (expected_value => -1,
5316                      actual_value =>
5317                        $link-><AG::AtomLinkElementThread.threadCount>);
5318    
5319            $test->id ('zero');
5320            $link-><AS::AtomLinkElementThread.threadCount> (0);
5321            $test->assert_num_equals
5322                     (expected_value => 0,
5323                      actual_value =>
5324                        $link-><AG::AtomLinkElementThread.threadCount>);
5325            $test->id ('zero.attr');
5326            $test->assert_equals ($link->get_attribute_ns (<Q::thr|>, 'count'), '0');
5327    
5328            $test->id ('one');
5329            $link-><AS::AtomLinkElementThread.threadCount> (1);
5330            $test->assert_num_equals
5331                     (expected_value => 1,
5332                      actual_value =>
5333                        $link-><AG::AtomLinkElementThread.threadCount>);
5334            $test->id ('one.attr');
5335            $test->assert_equals ($link->get_attribute_ns (<Q::thr|>, 'count'), '1');
5336    
5337            $test->id ('10000');
5338            $link-><AS::AtomLinkElementThread.threadCount> (10000);
5339            $test->assert_num_equals
5340                     (expected_value => 10000,
5341                      actual_value =>
5342                        $link-><AG::AtomLinkElementThread.threadCount>);
5343            $test->id ('10000.attr');
5344            $test->assert_equals ($link->get_attribute_ns (<Q::thr|>, 'count'),
5345                                  '10000');
5346    
5347            $test->id ('+10000');
5348            $link->set_attribute_ns (<Q::thr|>, 'thr:count', '+10000');
5349            $test->assert_num_equals
5350                     (expected_value => 10000,
5351                      actual_value =>
5352                        $link-><AG::AtomLinkElementThread.threadCount>);
5353    
5354            $test->id ('010000');
5355            $link->set_attribute_ns (<Q::thr|>, 'thr:count', '010000');
5356            $test->assert_num_equals
5357                     (expected_value => 10000,
5358                      actual_value =>
5359                        $link-><AG::AtomLinkElementThread.threadCount>);
5360    
5361            $test->id ('-100');
5362            $link-><AS::AtomLinkElementThread.threadCount> (-100);
5363            $test->assert_num_equals
5364                     (expected_value => -1,
5365                      actual_value =>
5366                        $link-><AG::AtomLinkElementThread.threadCount>);
5367            $test->id ('-100.attr');
5368            $test->assert_false ($link->has_attribute_ns (<Q::thr|>, 'count'));
5369    
5370            $test->id ('120a');
5371            $link->set_attribute_ns (<Q::thr|>, 'thr:count', '120a');
5372            $test->assert_num_equals
5373                     (expected_value => -1,
5374                      actual_value =>
5375                        $link-><AG::AtomLinkElementThread.threadCount>);
5376    
5377            $test->id ('-1');
5378            $link-><AS::AtomLinkElementThread.threadCount> (-1);
5379            $test->assert_num_equals
5380                     (expected_value => -1,
5381                      actual_value =>
5382                        $link-><AG::AtomLinkElementThread.threadCount>);
5383            $test->id ('-1.attr');
5384            $test->assert_false ($link->has_attribute_ns (<Q::thr|>, 'count'));
5385    
5386      @enImplNote:
5387        @@ddid: updated
5388        @@@:
5389          {TODO::
5390            <XA::thr|updated> attribute
5391          }
5392    ##AtomLinkElementThread
5393    
5394    enImplNote:
5395      @@ddid: total
5396      @@@:
5397        {TODO::
5398          <XE::thr|total>
5399        }
5400    
5401    enImplNote:
5402      @@ddid: threaddtd
5403      @@@:
5404        {TODO::
5405          DTD impl for threading
5406        }

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24