Changeset e45219a for spec/index.html


Ignore:
Timestamp:
26/02/2012 00:07:37 (8 years ago)
Author:
Eric van der Vlist <vdv@…>
Branches:
master
Children:
aeccbad
Parents:
e8e2fea
git-author:
Eric van der Vlist <vdv@…> (26/02/2012 00:07:37)
git-committer:
Eric van der Vlist <vdv@…> (26/02/2012 00:07:37)
Message:

Version 0.2 of the spec

File:
1 edited

Legend:

Unmodified
Added
Removed
  • spec/index.html

    re8e2fea re45219a  
    88    <h1>χίμαιραλ (chimeral) - the Chimera Language</h1> 
    99    <div> 
    10       <p>This Version: <a href="http://χίμαιραλ.com/0/1">V 0.1 (18th February 2012)</a></p> 
     10      <p>This Version: <a href="http://χίμαιραλ.com/0/2">V 0.2 (TBD)</a></p> 
     11      <p>Previous Version: <a href="http://χίμαιραλ.com/0/1">http://χίμαιραλ.com/0/1</a></p> 
    1112      <p>Latest Version: <a href="http://χίμαιραλ.com">http://χίμαιραλ.com</a></p> 
    1213      <p>This namespace: <a href="http://χίμαιραλ.com#">http://χίμαιραλ.com#</a></p> 
     
    3132        civilizations.</p> 
    3233    </div> 
    33     <div><h2>Examples</h2><p>The following JSON 
    34         object:</p><pre>{ 
     34    <div> 
     35      <h2>Examples</h2> 
     36      <div><h3>JSON objects</h3><p>The following JSON 
     37          object:</p><pre>{ 
    3538     "firstName": "John", 
    3639     "lastName" : "Smith", 
     
    5558     ] 
    5659 }</pre><p>imported 
    57         into XDM with the parse-json() function gives the following χίμαιραλ serialization:</p><pre>&lt;?xml version="1.0" encoding="UTF-8"?> 
    58 &lt;χ:map xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:χ="http://χίμαιραλ.com#"> 
    59    &lt;χ:entry key="lastName" keyType="string" valueType="string">Smith&lt;/χ:entry> 
     60          into XDM with the parse-json() function gives the following χίμαιραλ 
     61        serialization:</p><pre>&lt;?xml version="1.0" encoding="UTF-8"?> 
     62&lt;χ:map xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:χ="http://χίμαιραλ.com#"> 
     63   &lt;χ:entry key="lastName" keyType="string"> 
     64      &lt;χ:atomic-value type="string">Smith&lt;/χ:atomic-value> 
     65   &lt;/χ:entry> 
    6066   &lt;χ:entry key="phoneNumber" keyType="string"> 
    6167      &lt;χ:map> 
    6268         &lt;χ:entry key="1" keyType="number"> 
    6369            &lt;χ:map> 
    64                &lt;χ:entry key="number" keyType="string" valueType="string">212 555-1234&lt;/χ:entry> 
    65                &lt;χ:entry key="type" keyType="string" valueType="string">home&lt;/χ:entry> 
     70               &lt;χ:entry key="number" keyType="string"> 
     71                  &lt;χ:atomic-value type="string">212 555-1234&lt;/χ:atomic-value> 
     72               &lt;/χ:entry> 
     73               &lt;χ:entry key="type" keyType="string"> 
     74                  &lt;χ:atomic-value type="string">home&lt;/χ:atomic-value> 
     75               &lt;/χ:entry> 
    6676            &lt;/χ:map> 
    6777         &lt;/χ:entry> 
    6878         &lt;χ:entry key="2" keyType="number"> 
    6979            &lt;χ:map> 
    70                &lt;χ:entry key="number" keyType="string" valueType="string">646 555-4567&lt;/χ:entry> 
    71                &lt;χ:entry key="type" keyType="string" valueType="string">fax&lt;/χ:entry> 
     80               &lt;χ:entry key="number" keyType="string"> 
     81                  &lt;χ:atomic-value type="string">646 555-4567&lt;/χ:atomic-value> 
     82               &lt;/χ:entry> 
     83               &lt;χ:entry key="type" keyType="string"> 
     84                  &lt;χ:atomic-value type="string">fax&lt;/χ:atomic-value> 
     85               &lt;/χ:entry> 
    7286            &lt;/χ:map> 
    7387         &lt;/χ:entry> 
     
    7690   &lt;χ:entry key="address" keyType="string"> 
    7791      &lt;χ:map> 
    78          &lt;χ:entry key="streetAddress" keyType="string" valueType="string">21 2nd Street&lt;/χ:entry> 
    79          &lt;χ:entry key="postalCode" keyType="string" valueType="string">10021&lt;/χ:entry> 
    80          &lt;χ:entry key="state" keyType="string" valueType="string">NY&lt;/χ:entry> 
    81          &lt;χ:entry key="city" keyType="string" valueType="string">New York&lt;/χ:entry> 
     92         &lt;χ:entry key="streetAddress" keyType="string"> 
     93            &lt;χ:atomic-value type="string">21 2nd Street&lt;/χ:atomic-value> 
     94         &lt;/χ:entry> 
     95         &lt;χ:entry key="postalCode" keyType="string"> 
     96            &lt;χ:atomic-value type="string">10021&lt;/χ:atomic-value> 
     97         &lt;/χ:entry> 
     98         &lt;χ:entry key="state" keyType="string"> 
     99            &lt;χ:atomic-value type="string">NY&lt;/χ:atomic-value> 
     100         &lt;/χ:entry> 
     101         &lt;χ:entry key="city" keyType="string"> 
     102            &lt;χ:atomic-value type="string">New York&lt;/χ:atomic-value> 
     103         &lt;/χ:entry> 
    82104      &lt;/χ:map> 
    83105   &lt;/χ:entry> 
    84    &lt;χ:entry key="age" keyType="string" valueType="number">25&lt;/χ:entry> 
    85    &lt;χ:entry key="firstName" keyType="string" valueType="string">John&lt;/χ:entry> 
     106   &lt;χ:entry key="age" keyType="string"> 
     107      &lt;χ:atomic-value type="number">25&lt;/χ:atomic-value> 
     108   &lt;/χ:entry> 
     109   &lt;χ:entry key="firstName" keyType="string"> 
     110      &lt;χ:atomic-value type="string">John&lt;/χ:atomic-value> 
     111   &lt;/χ:entry> 
    86112&lt;/χ:map> 
    87113</pre> 
    88       <p>The map defined in XSLT as:</p> 
    89       <pre>        &lt;xsl:variable name="node"> 
     114      </div> 
     115      <div><h3>Map with two references to the same node</h3><p>The map defined in XSLT as:</p> 
     116        <pre>        &lt;xsl:variable name="node"> 
    90117            &lt;node> 
    91118                &lt;foo/> 
     
    98125               map:entry('bat', $node)))"/> 
    99126</pre> 
    100       <p>gives the following χίμαιραλ 
     127        <p>gives the following χίμαιραλ 
    101128        serialization:</p><pre>&lt;?xml version="1.0" encoding="UTF-8"?> 
    102129&lt;χ:map xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:χ="http://χίμαιραλ.com#"> 
    103    &lt;χ:entry key="5" keyType="number" valueType="string">foo&lt;/χ:entry> 
     130   &lt;χ:entry key="5" keyType="number"> 
     131      &lt;χ:atomic-value type="string">foo&lt;/χ:atomic-value> 
     132   &lt;/χ:entry> 
    104133   &lt;χ:entry key="bat" keyType="string"> 
    105       &lt;χ:nodeset xml:id="d3"> 
    106          &lt;node> 
     134      &lt;χ:node type="document" χ:id="d3"> 
     135         &lt;node1> 
    107136            &lt;foo/> 
    108137            &lt;bar/> 
    109          &lt;/node> 
    110       &lt;/χ:nodeset> 
     138         &lt;/node1> 
     139         &lt;node2/> 
     140      &lt;/χ:node> 
    111141   &lt;/χ:entry> 
    112142   &lt;χ:entry key="bar" keyType="string"> 
    113       &lt;χ:nodeset idref="d3"/> 
    114    &lt;/χ:entry> 
    115 &lt;/χ:map> 
    116 </pre><p>The 
    117         map defined in XSLT 
    118         as:</p><pre>        &lt;xsl:variable name="json" select=" 
     143      &lt;χ:node χ:idref="d3" type="document"/> 
     144   &lt;/χ:entry> 
     145&lt;/χ:map> 
     146</pre></div> 
     147      <div><h3>Map representing a RDF triple</h3><p>The map defined in XSLT 
     148          as:</p><pre>        &lt;xsl:variable name="json" select=" 
    119149            map { 
    120150                xs:QName('rdf:subject')   := xs:anyURI('http://www.example.org/index.html'), 
     
    126156            xmlns:rdf="http://example.com/rdf/"/> 
    127157</pre><p>gives 
    128         the following χίμαιραλ 
    129       serialization:</p><pre>&lt;?xml version="1.0" encoding="UTF-8"?> 
     158          the following χίμαιραλ 
     159        serialization:</p><pre>&lt;?xml version="1.0" encoding="UTF-8"?> 
    130160&lt;χ:map xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:χ="http://χίμαιραλ.com#"> 
    131161   &lt;χ:entry xmlns:rdf="http://example.com/rdf/" 
    132            key="rdf:subject" 
    133            keyType="xs:QName" 
    134            valueType="xs:anyURI">http://www.example.org/index.html&lt;/χ:entry> 
     162            key="rdf:subject" 
     163            keyType="xs:QName"> 
     164      &lt;χ:atomic-value type="xs:anyURI">http://www.example.org/index.html&lt;/χ:atomic-value> 
     165   &lt;/χ:entry> 
    135166   &lt;χ:entry xmlns:rdf="http://example.com/rdf/" 
    136            key="rdf:predicate" 
    137            keyType="xs:QName" 
    138            valueType="xs:anyURI">http://purl.org/dc/elements/1.1/creator&lt;/χ:entry> 
    139    &lt;χ:entry xmlns:rdf="http://example.com/rdf/" 
    140            key="rdf:object" 
    141            keyType="xs:QName" 
    142            valueType="xs:anyURI">http://www.example.org/staffid/85740&lt;/χ:entry> 
     167            key="rdf:predicate" 
     168            keyType="xs:QName"> 
     169      &lt;χ:atomic-value type="xs:anyURI">http://purl.org/dc/elements/1.1/creator&lt;/χ:atomic-value> 
     170   &lt;/χ:entry> 
     171   &lt;χ:entry xmlns:rdf="http://example.com/rdf/" key="rdf:object" keyType="xs:QName"> 
     172      &lt;χ:atomic-value type="xs:anyURI">http://www.example.org/staffid/85740&lt;/χ:atomic-value> 
     173   &lt;/χ:entry> 
    143174&lt;/χ:map> 
    144175</pre></div> 
    145     <p>The map defined in XSLT as:</p> 
    146     <pre>       &lt;xsl:variable name="node"> 
     176      <div><h3>Map with two instances of the same node, atomic values and other types of keys</h3><p>The map defined in XSLT 
     177          as:</p><pre>       &lt;xsl:variable name="node"> 
    147178            &lt;node1> 
    148179                &lt;foo/> 
     
    156187                map:entry(true(), false()), 
    157188                map:entry('sequence', ($node, $node, 2))))"/> 
    158 </pre> 
    159     <p>gives the following χίμαιραλ serialization:</p> 
    160     <pre>?xml version="1.0" encoding="UTF-8"?> 
    161 &lt;χ:map xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:χ="http://χίμαιραλ.com#"> 
    162    &lt;χ:entry key="true" keyType="boolean" valueType="boolean">false&lt;/χ:entry> 
     189</pre><p>gives 
     190          the following χίμαιραλ 
     191        serialization:</p><pre>&lt;?xml version="1.0" encoding="UTF-8"?> 
     192&lt;χ:map xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:χ="http://χίμαιραλ.com#"> 
     193   &lt;χ:entry key="true" keyType="boolean"> 
     194      &lt;χ:atomic-value type="boolean">false&lt;/χ:atomic-value> 
     195   &lt;/χ:entry> 
    163196   &lt;χ:entry key="5" keyType="number"> 
    164       &lt;χ:sequence> 
    165          &lt;χ:entry valueType="string">foo&lt;/χ:entry> 
    166          &lt;χ:entry valueType="string">bar&lt;/χ:entry> 
    167       &lt;/χ:sequence> 
     197      &lt;χ:atomic-value type="string">foo&lt;/χ:atomic-value> 
     198      &lt;χ:atomic-value type="string">bar&lt;/χ:atomic-value> 
    168199   &lt;/χ:entry> 
    169200   &lt;χ:entry key="sequence" keyType="string"> 
    170       &lt;χ:sequence> 
    171          &lt;χ:entry> 
    172             &lt;χ:nodeset xml:id="d3"> 
    173                &lt;node1> 
    174                   &lt;foo/> 
    175                   &lt;bar/> 
    176                &lt;/node1> 
    177                &lt;node2/> 
    178             &lt;/χ:nodeset> 
    179          &lt;/χ:entry> 
    180          &lt;χ:entry> 
    181             &lt;χ:nodeset idref="d3"/> 
    182          &lt;/χ:entry> 
    183          &lt;χ:entry valueType="number">2&lt;/χ:entry> 
    184       &lt;/χ:sequence> 
    185    &lt;/χ:entry> 
    186 &lt;/χ:map> 
    187 </pre> 
     201      &lt;χ:node type="document" χ:id="d3"> 
     202         &lt;node1> 
     203            &lt;foo/> 
     204            &lt;bar/> 
     205         &lt;/node1> 
     206         &lt;node2/> 
     207      &lt;/χ:node> 
     208      &lt;χ:node χ:idref="d3" type="document"/> 
     209      &lt;χ:atomic-value type="number">2&lt;/χ:atomic-value> 
     210   &lt;/χ:entry> 
     211&lt;/χ:map> 
     212</pre></div> 
     213      <div><h3>Map with different types of nodes</h3><p>The map defined in XSLT 
     214          as:</p><pre>        &lt;xsl:variable name="nodes"> 
     215            &lt;my-element xmlns:ns="http:example.com" ns:my-attribute="foo"> 
     216                &lt;xsl:comment>A comment&lt;/xsl:comment> 
     217                &lt;xsl:processing-instruction name="A">processing instruction&lt;/xsl:processing-instruction> 
     218                &lt;ns:a-sub-element>bar&lt;/ns:a-sub-element> 
     219                &lt;![CDATA[Some text]]&gt; 
     220            &lt;/my-element> 
     221        &lt;/xsl:variable> 
     222        &lt;xsl:variable name="json" 
     223            select="map:new(( 
     224            map:entry('doc',  $nodes),  
     225            map:entry('elt',  $nodes/my-element), 
     226            map:entry('att',  $nodes/my-element/@* ), 
     227            map:entry('text', $nodes/my-element/text() ), 
     228            map:entry('pi',   $nodes/my-element/processing-instruction() ), 
     229            map:entry('comment', $nodes/my-element/comment() ), 
     230            map:entry('ns', $nodes/my-element/namespace::* ) 
     231            ))"/> 
     232</pre><p>gives 
     233          the following χίμαιραλ 
     234          serialization:</p><pre>&lt;?xml version="1.0" encoding="UTF-8"?> 
     235&lt;χ:map xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:χ="http://χίμαιραλ.com#"> 
     236   &lt;χ:entry key="ns" keyType="string"> 
     237      &lt;χ:node type="namespace" name="ns">http:example.com&lt;/χ:node> 
     238      &lt;χ:node type="namespace" name="xs">http://www.w3.org/2001/XMLSchema&lt;/χ:node> 
     239      &lt;χ:node type="namespace" name="χ">http://χίμαιραλ.com#&lt;/χ:node> 
     240      &lt;χ:node type="namespace" name="xml">http://www.w3.org/XML/1998/namespace&lt;/χ:node> 
     241   &lt;/χ:entry> 
     242   &lt;χ:entry key="text" keyType="string"> 
     243      &lt;χ:node type="attribute"> 
     244                Some text 
     245            &lt;/χ:node> 
     246   &lt;/χ:entry> 
     247   &lt;χ:entry key="doc" keyType="string"> 
     248      &lt;χ:node type="document"> 
     249         &lt;my-element xmlns:ns="http:example.com" χ:id="d3e1" ns:my-attribute="foo">&lt;!--A comment-->&lt;?A processing instruction?>&lt;ns:a-sub-element>bar&lt;/ns:a-sub-element> 
     250                Some text 
     251            &lt;/my-element> 
     252      &lt;/χ:node> 
     253   &lt;/χ:entry> 
     254   &lt;χ:entry key="att" keyType="string"> 
     255      &lt;χ:node xmlns:ns="http:example.com" type="attribute" name="ns:my-attribute">foo&lt;/χ:node> 
     256   &lt;/χ:entry> 
     257   &lt;χ:entry key="comment" keyType="string"> 
     258      &lt;χ:node type="comment">A comment&lt;/χ:node> 
     259   &lt;/χ:entry> 
     260   &lt;χ:entry key="pi" keyType="string"> 
     261      &lt;χ:node type="processing-instruction" name="A">processing instruction&lt;/χ:node> 
     262   &lt;/χ:entry> 
     263   &lt;χ:entry key="elt" keyType="string"> 
     264      &lt;χ:node χ:idref="d3e1" type="element" name="my-element"/> 
     265   &lt;/χ:entry> 
     266&lt;/χ:map> 
     267</pre><p>This 
     268          last example is a good illustration of the issues we have when we want to mix items such as maps that have no identity nor context and nodes. To some extent it is possible to use 
     269            <code>id/idref</code> to avoid to duplicate nodes (like we've done here with the element with <code>χ:id="d3e1"</code>) but when we need the same feature for non element nodes that becomes 
     270          much tickier since these nodes can't carry attributes.</p></div> 
     271    </div> 
     272     
    188273    <div> 
    189274      <h2>The <a href="http://χίμαιραλ.com#">http://χίμαιραλ.com#</a> XML namespace</h2> 
     
    192277        <h3>χ:map</h3> 
    193278        <p>An XDM 3.0 map.</p> 
    194         <div> 
    195           <h4>Attributes</h4> 
    196           <p>None</p> 
    197         </div> 
    198         <div> 
    199           <h4>Content</h4> 
    200           <p>χ:entry *</p> 
    201         </div> 
    202       </div> 
    203       <div id="sequence"> 
    204         <h3>χ:sequence</h3> 
    205         <p>An XDM 3.0 sequence.</p> 
    206279        <div> 
    207280          <h4>Attributes</h4> 
     
    226299        <div> 
    227300          <h4>Content</h4> 
    228           <p>(χ:map | χ:sequence | χ:nodeset) ?</p> 
     301          <p>(χ:map | χ:node | χ:atomic-value) *</p> 
    229302          <p>One of these elements are mandatory when the valueType attribute is omitted.</p> 
    230303        </div> 
    231304      </div> 
    232       <div id="nodeset"> 
    233         <h3>χ:nodeset</h3> 
    234         <p>An XDM nodeset</p> 
     305      <div id="atomic-value"> 
     306        <h3>χ:atomic-value</h3> 
     307        <p>An XDM atomic value</p> 
    235308        <div> 
    236309          <h4>Attributes</h4> 
    237310          <ul> 
    238             <li>xml:id: an identifier for the nodeset</li> 
    239             <li>idref: a reference to a nodeset identifier.</li> 
     311            <li>type: the type of the atomic value</li> 
     312          </ul> 
     313         </div> 
     314        <div> 
     315          <h4>Content</h4> 
     316          <p>The value</p> 
     317        </div> 
     318      </div> 
     319      <div id="node"> 
     320        <h3>χ:node</h3> 
     321        <p>An XDM nodeset</p> 
     322        <div> 
     323          <h4>Attributes</h4> 
     324          <ul> 
     325            <li>χ:id: an identifier for the node</li> 
     326            <li>χ:idref: a reference to a node identifier</li> 
    240327          </ul> 
    241328          <p>These attributes are mutually exclusive.</p> 
     329          <ul> 
     330            <li>type (mandatory): node type</li> 
     331            <li>name (when applicable): name of the node</li> 
     332          </ul> 
    242333        </div> 
    243334        <div> 
    244335          <h4>Content</h4> 
    245           <p>Any element from foreign namespaces</p> 
    246         </div> 
    247       </div> 
     336          <p>Depending on the node type: a value or a sequence of nodes.</p> 
     337        </div> 
     338      </div> 
     339    </div> 
     340    <div id="changelog"> 
     341      <h2>Changelog</h2> 
     342      <p>This version (0.2) tries to bring the serialization closer to the terms and concepts as they have been defined in the W3C XPath specifications.</p> 
     343      <p>Main changes:</p> 
     344      <ul> 
     345        <li><code>χ:item</code> has been renamed <code>χ:entry</code> to match the terminology used by W3C XPath specifications.</li> 
     346        <li><code>χ:sequence</code> did not match any item type in XDM. It has been suppressed and as a consequence, a new element have been added: <code>χ:atomic-value</code>.</li> 
     347        <li>There is no such thing as a node-set in XDM 3.0. The <code>χ:nodeset</code> element has been removed and replaced by a <code>χ:node</code> element.</li> 
     348        <li>Replacement of <code>xml:id</code> attributes by <code>χ:id</code> attributes to avoid possible conflicts with existing xml:id in XML fragments. To be coherent, <code>idref</code> have 
     349          also been renamed <code>χ:idref</code>.</li> 
     350      </ul> 
     351      <p>A detailed changelog is available at <a href="http://χίμαιραλ.com/trac/log/spec/index.html">http://χίμαιραλ.com/trac/log/spec/index.html</a> as a web page and as a <a 
     352        href="http://χίμαιραλ.com/trac/log/spec/index.html?format=rss&amp;limit=100&amp;mode=stop_on_copy">RSS feed</a>.</p> 
    248353    </div> 
    249354    <div> 
Note: See TracChangeset for help on using the changeset viewer.