/** * CreativeCommons * Copyright 2011 by Michael Peter Christen, mc@yacy.net, Frankfurt am Main, Germany * First released 17.12.2011 at http://yacy.net * * $LastChangedDate: 2011-04-14 00:04:23 +0200 (Do, 14 Apr 2011) $ * $LastChangedRevision: 7653 $ * $LastChangedBy: orbiter $ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program in the file lgpl21.txt * If not, see <http://www.gnu.org/licenses/>. */ package net.yacy.cora.lod.vocabulary; import java.net.MalformedURLException; import java.util.HashSet; import java.util.Set; import java.util.regex.Pattern; import net.yacy.cora.document.id.MultiProtocolURL; import net.yacy.cora.lod.Literal; import net.yacy.cora.lod.Vocabulary; /** * a vocabulary for creative commons license declarations. see: * http://creativecommons.org/ns# */ public enum CreativeCommons implements Vocabulary { // License Properties permits(new Literal[]{ PermitLiteral.Reproduction, PermitLiteral.Distribution, PermitLiteral.DerivativeWorks, PermitLiteral.Sharing}), requires(new Literal[]{ RequirementLiteral.Notice, RequirementLiteral.Attribution, RequirementLiteral.ShareAlike, RequirementLiteral.SourceCode, RequirementLiteral.Copyleft, RequirementLiteral.LesserCopyleft}), prohibits(new Literal[]{ ProhibitionLiteral.CommercialUse, ProhibitionLiteral.HighIncomeNationUse}), jurisdiction, legalcode, deprecatedOn, // Work Properties license, morePermissions, attributionName, attributionURL, useGuidelines; enum PermitLiteral implements Literal { Reproduction("Reproduction", "http://creativecommons.org/ns#Permission", ".*"), Distribution("Distribution", "http://creativecommons.org/ns#Permission", ".*"), DerivativeWorks("Derivative Works", "http://creativecommons.org/ns#Permission", ".*"), Sharing("Sharing", "http://creativecommons.org/ns#Permission", ".*"); String terminal; MultiProtocolURL subject; Pattern discoveryPattern; private PermitLiteral( String terminal, String subject, String discoveryPattern) { this.terminal = terminal; try { this.subject = subject == null ? null : new MultiProtocolURL(subject); } catch (final MalformedURLException e) { this.subject = null; } this.discoveryPattern = Pattern.compile(discoveryPattern == null ? ".*" : discoveryPattern); } @Override public String getTerminal() { return this.terminal; } @Override public MultiProtocolURL getSubject() { return this.subject; } @Override public Pattern getDiscoveryPattern() { return this.discoveryPattern; } } enum RequirementLiteral implements Literal { Notice("Notice", "http://creativecommons.org/ns#Requirement", ".*"), Attribution("Attribution", "http://creativecommons.org/ns#Requirement", ".*"), ShareAlike("Share Alike", "http://creativecommons.org/ns#Requirement", ".*"), SourceCode("Source Code", "http://creativecommons.org/ns#Requirement", ".*"), Copyleft("Copyleft", "http://creativecommons.org/ns#Requirement", ".*"), LesserCopyleft("Lesser Copyleft", "http://creativecommons.org/ns#Requirement", ".*"); String terminal; MultiProtocolURL subject; Pattern discoveryPattern; private RequirementLiteral( String terminal, String subject, String discoveryPattern) { this.terminal = terminal; try { this.subject = subject == null ? null : new MultiProtocolURL(subject); } catch (final MalformedURLException e) { this.subject = null; } this.discoveryPattern = Pattern.compile(discoveryPattern == null ? ".*" : discoveryPattern); } @Override public String getTerminal() { return this.terminal; } @Override public MultiProtocolURL getSubject() { return this.subject; } @Override public Pattern getDiscoveryPattern() { return this.discoveryPattern; } } enum ProhibitionLiteral implements Literal { CommercialUse("Commercial Use", "http://creativecommons.org/ns#Prohibition", ".*"), HighIncomeNationUse("High Income Nation Use", "http://creativecommons.org/ns#Prohibition", ".*"); String terminal; MultiProtocolURL subject; Pattern discoveryPattern; private ProhibitionLiteral( String terminal, String subject, String discoveryPattern) { this.terminal = terminal; try { this.subject = subject == null ? null : new MultiProtocolURL(subject); } catch (final MalformedURLException e) { this.subject = null; } this.discoveryPattern = Pattern.compile(discoveryPattern == null ? ".*" : discoveryPattern); } @Override public String getTerminal() { return this.terminal; } @Override public MultiProtocolURL getSubject() { return this.subject; } @Override public Pattern getDiscoveryPattern() { return this.discoveryPattern; } } public final static String IDENTIFIER = "http://creativecommons.org/ns#"; public final static String PREFIX = "cc"; private final String predicate; private final Set<Literal> literals; private CreativeCommons() { this.predicate = IDENTIFIER + this.name(); this.literals = null; } private CreativeCommons(Literal[] literals) { this.predicate = IDENTIFIER + this.name(); this.literals = new HashSet<Literal>(); for (Literal l: literals) this.literals.add(l); } @Override public String getNamespace() { return IDENTIFIER; } @Override public String getNamespacePrefix() { return PREFIX; } @Override public Set<Literal> getLiterals() { return null; } @Override public String getPredicate() { return this.predicate; } @Override public String getURIref() { return PREFIX + ':' + this.name(); } }