// Path: src/main/java/org/nanopub/Nanopub.java
// public interface Nanopub {
// 
// 	// URIs in the nanopub namespace:
// 	public static final IRI NANOPUB_TYPE_URI = SimpleValueFactory.getInstance().createIRI("http://www.nanopub.org/nschema#Nanopublication");
// 	public static final IRI HAS_ASSERTION_URI = SimpleValueFactory.getInstance().createIRI("http://www.nanopub.org/nschema#hasAssertion");
// 	public static final IRI HAS_PROVENANCE_URI = SimpleValueFactory.getInstance().createIRI("http://www.nanopub.org/nschema#hasProvenance");
// 	public static final IRI HAS_PUBINFO_URI = SimpleValueFactory.getInstance().createIRI("http://www.nanopub.org/nschema#hasPublicationInfo");
// 
// 	// URIs that link nanopublications:
// 	public static final IRI SUPERSEDES = SimpleValueFactory.getInstance().createIRI("http://purl.org/nanopub/x/supersedes");
// 
// 	public IRI getUri();
// 
// 	public IRI getHeadUri();
// 
// 	public Set<Statement> getHead();
// 
// 	public IRI getAssertionUri();
// 
// 	public Set<Statement> getAssertion();
// 
// 	public IRI getProvenanceUri();
// 
// 	public Set<Statement> getProvenance();
// 
// 	public IRI getPubinfoUri();
// 
// 	public Set<Statement> getPubinfo();
// 
// 	public Set<IRI> getGraphUris();
// 
// 	// TODO: Now that we have SimpleCreatorPattern and SimpleTimestampPattern,
// 	// we might not need the following three methods anymore...
// 
// 	public Calendar getCreationTime();
// 
// 	public Set<IRI> getAuthors();
// 
// 	public Set<IRI> getCreators();
// 
// 	public int getTripleCount();
// 
// 	public long getByteCount();
// 
// }
// 
// Path: src/main/java/org/nanopub/NanopubPattern.java
// public interface NanopubPattern extends Serializable {
// 
// 	/**
// 	 * This method should return the name of the pattern, as to be shown to the
// 	 * user.
// 	 *
// 	 * @return The name of the pattern
// 	 */
// 	public String getName();
// 
// 	/**
// 	 * This method should return true if this pattern applies to the given
// 	 * nanopublication. This can be because the creators of the pattern think
// 	 * that the given nanopublication should use it, or because the
// 	 * nanopublication seems to be using the pattern, but not necessarily in a
// 	 * correct and valid manner.
// 	 *
// 	 * @param nanopub The nanopublication
// 	 * @return true if the pattern applies to the nanopublication
// 	 */
// 	public boolean appliesTo(Nanopub nanopub);
// 
// 	/**
// 	 * This method should return true if the given nanopublication uses this
// 	 * pattern in a correct and valid manner.
// 	 *
// 	 * @param nanopub The nanopublication
// 	 * @return true if this pattern is used in a valid manner
// 	 */
// 	public boolean isCorrectlyUsedBy(Nanopub nanopub);
// 
// 	/**
// 	 * This method can optionally return a short description of the given
// 	 * nanopublication, such as information about the relevant elements of
// 	 * this pattern (if valid) or the errors (if invalid).
// 	 *
// 	 * @param nanopub The nanopublication
// 	 * @return A short description of the nanopublication with respect to
// 	 *   the pattern
// 	 */
// 	public String getDescriptionFor(Nanopub nanopub);
// 
// 	/**
// 	 * This method should return a URL with additional information about the
// 	 * given pattern.
// 	 *
// 	 * @return A URL with additional information
// 	 */
// 	public URL getPatternInfoUrl() throws MalformedURLException;
// 
// }


import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
import org.nanopub.Nanopub;
import org.nanopub.NanopubPattern;
package org.nanopub.extra.aida;



public class AidaPattern implements NanopubPattern {

	private static final long serialVersionUID = -164193908921728662L;

	@Override
	public String getName() {
		return "AIDA nanopublication";
	}

	@Override
// Path: src/main/java/org/nanopub/Nanopub.java
// public interface Nanopub {
// 
// 	// URIs in the nanopub namespace:
// 	public static final IRI NANOPUB_TYPE_URI = SimpleValueFactory.getInstance().createIRI("http://www.nanopub.org/nschema#Nanopublication");
// 	public static final IRI HAS_ASSERTION_URI = SimpleValueFactory.getInstance().createIRI("http://www.nanopub.org/nschema#hasAssertion");
// 	public static final IRI HAS_PROVENANCE_URI = SimpleValueFactory.getInstance().createIRI("http://www.nanopub.org/nschema#hasProvenance");
// 	public static final IRI HAS_PUBINFO_URI = SimpleValueFactory.getInstance().createIRI("http://www.nanopub.org/nschema#hasPublicationInfo");
// 
// 	// URIs that link nanopublications:
// 	public static final IRI SUPERSEDES = SimpleValueFactory.getInstance().createIRI("http://purl.org/nanopub/x/supersedes");
// 
// 	public IRI getUri();
// 
// 	public IRI getHeadUri();
// 
// 	public Set<Statement> getHead();
// 
// 	public IRI getAssertionUri();
// 
// 	public Set<Statement> getAssertion();
// 
// 	public IRI getProvenanceUri();
// 
// 	public Set<Statement> getProvenance();
// 
// 	public IRI getPubinfoUri();
// 
// 	public Set<Statement> getPubinfo();
// 
// 	public Set<IRI> getGraphUris();
// 
// 	// TODO: Now that we have SimpleCreatorPattern and SimpleTimestampPattern,
// 	// we might not need the following three methods anymore...
// 
// 	public Calendar getCreationTime();
// 
// 	public Set<IRI> getAuthors();
// 
// 	public Set<IRI> getCreators();
// 
// 	public int getTripleCount();
// 
// 	public long getByteCount();
// 
// }
// 
// Path: src/main/java/org/nanopub/NanopubPattern.java
// public interface NanopubPattern extends Serializable {
// 
// 	/**
// 	 * This method should return the name of the pattern, as to be shown to the
// 	 * user.
// 	 *
// 	 * @return The name of the pattern
// 	 */
// 	public String getName();
// 
// 	/**
// 	 * This method should return true if this pattern applies to the given
// 	 * nanopublication. This can be because the creators of the pattern think
// 	 * that the given nanopublication should use it, or because the
// 	 * nanopublication seems to be using the pattern, but not necessarily in a
// 	 * correct and valid manner.
// 	 *
// 	 * @param nanopub The nanopublication
// 	 * @return true if the pattern applies to the nanopublication
// 	 */
// 	public boolean appliesTo(Nanopub nanopub);
// 
// 	/**
// 	 * This method should return true if the given nanopublication uses this
// 	 * pattern in a correct and valid manner.
// 	 *
// 	 * @param nanopub The nanopublication
// 	 * @return true if this pattern is used in a valid manner
// 	 */
// 	public boolean isCorrectlyUsedBy(Nanopub nanopub);
// 
// 	/**
// 	 * This method can optionally return a short description of the given
// 	 * nanopublication, such as information about the relevant elements of
// 	 * this pattern (if valid) or the errors (if invalid).
// 	 *
// 	 * @param nanopub The nanopublication
// 	 * @return A short description of the nanopublication with respect to
// 	 *   the pattern
// 	 */
// 	public String getDescriptionFor(Nanopub nanopub);
// 
// 	/**
// 	 * This method should return a URL with additional information about the
// 	 * given pattern.
// 	 *
// 	 * @return A URL with additional information
// 	 */
// 	public URL getPatternInfoUrl() throws MalformedURLException;
// 
// }


// Path: src/main/java/org/nanopub/extra/aida/AidaPattern.java
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
import org.nanopub.Nanopub;
import org.nanopub.NanopubPattern;

package org.nanopub.extra.aida;



public class AidaPattern implements NanopubPattern {

	private static final long serialVersionUID = -164193908921728662L;

	@Override
	public String getName() {
		return "AIDA nanopublication";
	}

	@Override
	public boolean appliesTo(Nanopub nanopub) {