Norwegian Licence for Open Government Data (NLOD) 1.0

Preface of licence

This licence grants you the right to copy, use and distribute information, provided you acknowledge the contributors and comply with the terms and conditions stipulated in this licence. By using information made available under this licence, you accept the terms and conditions set forth in this licence. As set out in Section 7, the licensor disclaims any and all liability for the quality of the information and what the information is used for.

This licence shall not impose any limitations on the rights or freedoms of the licensee under the Norwegian Freedom of Information Act or any other legislation granting the general public a right of access to public sector information, or that follow from exemptions or limitations stipulated in the Norwegian Copyright Act. Further, the licence shall not impose any limitations on the licensee's freedom of expression recognized by law.

1. Definitions

     «Database» shall mean a database or similar protected under Section 43 of the Norwegian Copyright Act.
     «Information» shall mean texts, images, recordings, data sets or other works protected under Section 1 of the Norwegian Copyright Act, or which are protected under provisions addressing what is referred to as «neighbouring rights» in Chapter 5 of the Norwegian Copyright Act (including databases and photographs), and which are distributed under this licence.
     «Copy» shall mean reproduction in any form.
     «Licensee» and «you» shall mean natural or legal persons using information under this licence.
     «Licensor» shall mean the natural or legal person that makes information available under this licence.
     «Distribute» shall mean any actions whereby information is made available, including to distribute, transfer, communicate, disperse, show, perform, sell, lend and rent.
     «Use» shall mean one or more actions relevant to copyright law requiring permission from the owner of the copyright.

2. Licence
The licensee, subject to the limitations that follow from this licence, may use the information for any purpose and in all contexts, by:

     * copying the information and distributing the information to others,
     * modifying the information and/or combining the information with other information, and
     * copying and distributing such changed or combined information.
     * This is a non-exclusive, free, perpetual and worldwide licence. The information may be used in any medium and format known today and/or which will become known in the future. The Licensee shall not sub-license or transfer this licence.

3. Exemptions
The licence does not apply to and therefore does not grant a right to use:

     * information which contains personal data covered by the Norwegian Personal Data Act unless there is a legitimate basis for the disclosure and further processing of the personal data
     * information distributed in violation of a statutory obligation to observe confidentiality
     * information excluded from public disclosure pursuant to law, including information deemed sensitive under the Norwegian National Security Act
     * information subject to third party rights which the licensor is not authorised to license to the licensee
     * information protected by intellectual property rights other than copyright and neighbouring rights in accordance with Chapter 5 of the Norwegian Copyright Act, such as trademarks, patents and design rights, but this does not entail an impediment to use information where the licensor's logo has been permanently integrated into the information or to attribute the origin of the information in accordance with the article below relating to attribution.

If the licensor has made available information not covered by the licence according to the above list, the licensee must cease all use of the information under the licence, and erase the information as soon as he or she becomes aware of or should have understood that the information is not covered by the licence.

4. Effects of breach of the licence
The licence is subject to the licensee's compliance with the terms and conditions of this licence. In the event that the licensee commits a breach of this licence, this will entail that the licensee's right to use the information will be revoked immediately without further notice. In case of such a breach, the licensee must immediately and without further notice take measures to cause the infringement to end. Because the right to use the information has been terminated, the licensee must cease all use of the information by virtue of the licence.

5. Attribution
The licensee shall attribute the licensor as specified by the licensor and include a reference to this licence. To the extent practically possible, the licensee shall provide a link to both this licence and the source of the information.

If the licensor has not specified how attributions shall be made, the licensee shall normally state the following: «Contains data under the Norwegian licence for Open Government data (NLOD) distributed by [name of licensor]».

If the licensor has specified that the information shall only be available under a specific version of this licence, cf. Section 10, the licensee shall also state this.

If the information has been changed, the licensee must clearly indicate that changes have been made by the licensee.

6. Proper use
The licensee shall not use the information in a manner that appears misleading nor present the information in a distorted or incorrect manner.
Neither the licensor's nor other contributors' names or trademarks must be used to support, recommend or market the licensee or any products or services using the information.

7. Disclaimer of liability
The information is licensed «as is». The information may contain errors and omissions. The licensor provides no warranties, including relating to the content and relevance of the information.

The licensor disclaims any liability for errors and defects associated with the information to the maximum extent permitted by law.

The licensor shall not be liable for direct or indirect losses as a result of use of the information or in connection with copying or further distribution of the information.

8. Guarantees regarding data quality and accessibility
This licence does not prevent the licensor from issuing supplementary statements regarding expected or intended data quality and accessibility. Such statements shall be regarded as indicative in nature and not binding on the part of the licensor. The disclaimers in Section 7 also apply in full for such indicative statements. Based on separate agreement, the licensor may provide guarantees and distribute the information on terms and conditions different from those set forth in this licence.

9. Licence compatibility
If the licensee is to distribute an adapted or combined work based on information covered by this licence and some other work licensed under a licence compatible by contract, such distribution may be based on an appropriate licence compatible by contract, cf. the list below.

A licence compatible by contract shall mean the following licences:

     * for all information: Open Government Licence (version 1.0),
     * for those parts of the information which do not constitute databases: Creative Commons Attribution Licence (generic version 1.0, 2.0, 2.5 and unported version 3.0) and Creative Commons Navngivelse 3.0 Norge,
     * for those parts of the information which constitute databases: Open Data Commons Attribution License (version 1.0).

This provision does not prevent other licences from being compatible with this licence based on their content.

10. New versions of the licence
The licensee may choose to use the information covered by this licence under any new versions of the Norwegian licence for Open Government data (NLOD) issued by the responsible ministry (currently the Ministry of Government Administration, Reform and Church Affairs) when these versions are final and official, unless the licensor when making the information available under this licence specifically has stated that solely version 1.0 of this licence may be used.

11. Governing law and legal venue
This licence, including its formation, and any disputes and claims arising in connection with or relating to this licence, shall be regulated by Norwegian law. The legal venue shall be the licensor's ordinary legal venue. The licensor may, with regard to intellectual proprietary rights, choose to pursue a claim at other competent legal venues and/or based on the laws of the country where the intellectual property rights are sought enforced.
