<!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.
-->
<html>
    <head>
        <title>Slingshot Content Model</title>
    </head>
    <body>
        <p>
            Draft description of the Slingshot content model.
        </p>
        <ul>
            <li>/slingshot</li>
            <li><ul>
                <li>/users</li>
                <li><ul>
                    <li>&lt;userid&gt;</li>
                    <li><ul>
                        <li>&lt;stream&gt;</li>
                        <li><ul>
                            <li>&lt;entry&gt;</li>
                            <li><ul>
                                <li>images</li>
                            </ul></li>
                        </ul></li>
                        <li>info</li>
                        <li>settings</li>
                        <li>ugc</li>
                        <li><ul>
                            <li>&lt;stream&gt;</li>
                            <li><ul>
                                <li>&lt;entry&gt;</li>
                                <li><ul>
                                    <li>ratings</li>
                                </ul></li>
                                <li><ul>
                                    <li>comments</li>
                                </ul></li>
                            </ul></li>
                        </ul></li>
                    </ul></li>
                </ul></li>
            </ul></li>
        </ul>
    </body>
</html>