/* * 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. */ package org.apache.jena.rdfxml.xmloutput.impl; import java.io.PrintWriter; import java.io.Writer; import org.apache.jena.rdf.model.Model ; import org.apache.jena.rdf.model.RDFErrorHandler ; import org.apache.jena.rdf.model.Resource ; import org.apache.jena.vocabulary.OWL ; import org.apache.jena.vocabulary.RDF ; import org.apache.jena.vocabulary.RDFS ; import org.apache.jena.vocabulary.RDFSyntax ; /** Writes out RDF in the abbreviated syntax, for human consumption not only machine readable. * It is not normal to call the constructor directly, but to use * the method RDFWriterF.getWriter("RDF/XML-ABBREV"). * Does not support the <code>NSPREFIXPROPBASE</code> system properties. * Use <code>setNsPrefix</code>. * For best results it is necessary to set the property <code>"prettyTypes"</code>. See setProperty for information. @see org.apache.jena.rdf.model.RDFWriterF#getWriter(String) */ public class Abbreviated extends BaseXMLWriter implements RDFErrorHandler { private Resource types[] = new Resource[] { OWL.Ontology, //OWL.DataRange, named or orphaned dataranges unusual. RDFS.Datatype, RDFS.Class, OWL.Class, OWL.ObjectProperty, RDF.Property, OWL.DatatypeProperty, OWL.TransitiveProperty, OWL.SymmetricProperty, OWL.FunctionalProperty, OWL.InverseFunctionalProperty, }; boolean sReification; boolean sIdAttr; boolean sDamlCollection; boolean sParseTypeCollectionPropertyElt; boolean sListExpand; boolean sParseTypeLiteralPropertyElt; boolean sParseTypeResourcePropertyElt; boolean sPropertyAttr; boolean sResourcePropertyElt; @Override protected void unblockAll() { sDamlCollection = false; sReification = false; sResourcePropertyElt = false; sParseTypeLiteralPropertyElt = false; sParseTypeResourcePropertyElt = false; sParseTypeCollectionPropertyElt = false; sIdAttr = false; sPropertyAttr = false; sListExpand = false; } { unblockAll(); blockRule(RDFSyntax.propertyAttr); } @Override protected void blockRule(Resource r) { if (r.equals(RDFSyntax.sectionReification)) sReification=true; // else if (r.equals(RDFSyntax.resourcePropertyElt)) sResourcePropertyElt=true; else if (r.equals(RDFSyntax.sectionListExpand)) sListExpand=true; else if (r.equals(RDFSyntax.parseTypeLiteralPropertyElt)) sParseTypeLiteralPropertyElt=true; else if (r.equals(RDFSyntax.parseTypeResourcePropertyElt)) sParseTypeResourcePropertyElt=true; else if (r.equals(RDFSyntax.parseTypeCollectionPropertyElt)) sParseTypeCollectionPropertyElt=true; else if (r.equals(RDFSyntax.idAttr)) { sIdAttr=true; sReification = true; } else if (r.equals(RDFSyntax.propertyAttr)) sPropertyAttr=true; //else if (r.equals(DAML_OIL.collection)) sDamlCollection=true; else { logger.warn("Cannot block rule <"+r.getURI()+">"); } } @Override Resource[] setTypes(Resource[] propValue) { Resource[] rslt = types; types = propValue; return rslt; } @Override synchronized public void write(Model baseModel, Writer out, String base) { if (baseModel.getGraph().getCapabilities().findContractSafe() == false) { logger.warn( "Workaround for bugs 803804 and 858163: using RDF/XML (not RDF/XML-ABBREV) writer for unsafe graph " + baseModel.getGraph().getClass() ); baseModel.write( out, "RDF/XML", base ); } else super.write( baseModel, out, base ); } @Override protected void writeBody( Model model, PrintWriter pw, String base, boolean useXMLBase) { Unparser unp = new Unparser(this, base, model, pw); unp.setTopLevelTypes(types); //unp.useNameSpaceDecl(nameSpacePrefices); if (useXMLBase) unp.setXMLBase(base); unp.write(); } // Implemenatation of RDFErrorHandler @Override public void error(Exception e) { errorHandler.error(e); } @Override public void warning(Exception e) { errorHandler.warning(e); } @Override public void fatalError(Exception e) { errorHandler.fatalError(e); } }