rdfwriter.java

来自「Semantic Web Ontology Editor」· Java 代码 · 共 531 行 · 第 1/2 页

JAVA
531
字号
			} else {				xml.startElement(RDFVocabularyAdapter.RDF, "Description");				if (SwoopResourceImpl.isAnonymous(element)) {					xml.addAttribute(RDFVocabularyAdapter.RDF, "nodeID", (String)bnodes.get(element));				} else {							xml.addAttribute(RDFVocabularyAdapter.RDF, "about", new URI(element.getURI()));				}				xml.endElement();			}		}				return true;	}		protected boolean propertyLiteral(RDFNode value) throws ModelException, IOException, URISyntaxException {		if (value instanceof Literal) {			Literal valueLit = (Literal) value;			String datatype = valueLit.getDatatype();			String language = valueLit.getLanguage();			if (datatype != null) {				xml.addAttribute(RDFVocabularyAdapter.RDF, "datatype", new URI(datatype));			} else if (language != null) {				xml.addAttribute(null, "xml:lang", language);			}			xml.writeData(valueLit.getLabel());			return true;		}		return false;	}		protected boolean propertyNested(RDFNode value) throws IOException, OWLException {		if (!(value instanceof Resource) || !shouldNest(value)) { 			return false;		}		serializeSubject((Resource) value);		return true;	}		protected boolean propertyReference(RDFNode value) throws URISyntaxException, ModelException, IOException {		if ((value instanceof Resource) && !SwoopResourceImpl.isAnonymous(value)) {			URI valueURI = new URI(((Resource)value).getURI());			xml.addAttribute(RDFVocabularyAdapter.RDF, "resource", valueURI);			return true;		}		return false;	}		protected boolean propertyXMLLiteral(RDFNode value) {		return false;	}		private void reset() {		bnodes = new HashMap();		bnodeCount = new HashMap();		namespaces = new HashSet();		rendered = new HashSet();		level = 0;	}		public void serializeAll() throws IOException, OWLException {		serializeAll(null);	}	public void serializeAll(String comment)  throws IOException, OWLException {		boolean started = false;		for (Iterator subjectIter = subjects.keySet().iterator(); subjectIter.hasNext();) {			Resource subject = (Resource) subjectIter.next();			if (!started && !rendered.contains(subject)) {				if (comment != null) {					xml.writeComment(comment);				}				started = true;			}			serializeSubject(subject);		}	}			protected void serializeProperty(Resource property, RDFNode value) throws URISyntaxException, ModelException, IOException, OWLException {		URI propertyURI = new URI(property.getURI());		startElement(propertyURI);				if (!propertyList(value)				&& !propertyNested(value)				&& !propertyBNode(value)				&& !propertyReference(value)				&& !propertyXMLLiteral(value)				&& !propertyLiteral(value)) {			throw new OWLException("Could not serialize property "+property+" with value "+value);		}				xml.endElement();	}		public void serializeSubject(Resource subject) throws IOException, OWLException {		if (rendered.contains(subject) || (subjects.get(subject) == null)) {			return;		}		try {			level++;			rendered.add(subject);			Map propertyMap = (Map) subjects.get(subject);						Collection types = (Collection) propertyMap.get(genResource(rdf					.getInstanceOf()));			if (types == null) {				types = Collections.EMPTY_SET;			}			boolean started = false;			for (Iterator typeIter = types.iterator(); typeIter.hasNext();) {				RDFNode typeNode = (RDFNode) typeIter.next();				if (typeNode instanceof Resource						&& !SwoopResourceImpl.isAnonymous(typeNode)) {					started = true;					types.remove(typeNode);					startElement(new URI(((Resource) typeNode).getURI()));					break;				}			}			if (!started) {				xml.startElement(RDFVocabularyAdapter.RDF, "Description");			}						/* Add identifier */			if (SwoopResourceImpl.isAnonymous(subject)) {				String nodeid = (String) bnodes.get(subject);				Integer count = (Integer) bnodeCount.get(subject);				if ((nodeid != null) && (count != null)) {					if ((count.intValue() > 1) || ((count.intValue() == 1) && (level == 1))) {						xml.addAttribute(RDFVocabularyAdapter.RDF, "nodeID", nodeid);					}				}			} else {				xml.addAttribute(RDFVocabularyAdapter.RDF, "about", new URI(subject.getURI()));			}						/* Write short literal properties */			for (Iterator propIter = propertyMap.keySet().iterator(); propIter.hasNext();) {				Resource property = (Resource) propIter.next();				URI propertyURI = new URI(property.getURI());				Collection values = (Collection) propertyMap.get(property);				if (values.size() > 1) {					continue;				}				for (Iterator valueIter = values.iterator(); valueIter.hasNext();) {					RDFNode value = (RDFNode) valueIter.next();					if (value instanceof Literal) {						Literal valueLit = (Literal) value;						if (valueLit.getDatatype()==null 								&& valueLit.getLanguage()==null 								&& valueLit.toString().length() < 40) {														xml.addAttribute(qnames.findPrefixURI(propertyURI), 									qnames.findLocal(propertyURI), valueLit.toString());							values.remove(valueLit);							break;						}					}				}			}						/* Write all properties */			for (Iterator propIter = propertyMap.keySet().iterator(); propIter.hasNext();) {				Resource property = (Resource) propIter.next();				Collection values = (Collection) propertyMap.get(property);				for (Iterator valueIter = values.iterator(); valueIter.hasNext();) {					RDFNode value = (RDFNode) valueIter.next();					serializeProperty(property, value);				}			}						xml.endElement();		} catch (URISyntaxException e) {			throw new OWLException(e);		} catch (ModelException e) {			throw new OWLException(e);		} finally {			level--;		}	}		public void serializeSubjects(Collection subjects) throws IOException, OWLException {		serializeSubjects(subjects, null);	}		public void serializeSubjects(Collection subjects, String comment) throws IOException, OWLException {		boolean started = false;		for (Iterator subjectIter = subjects.iterator(); subjectIter.hasNext();) {			Resource subject = (Resource) subjectIter.next();			if (!started && !rendered.contains(subject)) {				if (comment != null) {					xml.writeComment(comment);				}				started = true;			}			serializeSubject(subject);		}	}		public void setMaxLevel(int level) {		maxLevel = level;	}		private boolean shouldNest(RDFNode node) {		if (node instanceof Resource)			return shouldNest((Resource) node);		return false;	}		private boolean shouldNest(Resource resource) {		if (rendered.contains(resource) || (subjects.get(resource) == null)) {			return false;		}				if (SwoopResourceImpl.isAnonymous(resource)) {			return true;		}				if (level >= maxLevel) {			return false;		}		return true;	}	public void startDocument() throws IOException, OWLException {				try {			collectInformation();			addNamespaces();			xml.addEntity("xsd", XMLSchemaSimpleDatatypeVocabulary.XS);						xml.startDocument();			xml.startElement(RDFVocabularyAdapter.RDF, "RDF");		} catch (ModelException e) {			throw new OWLException(e);		} catch (URISyntaxException e) {			throw new OWLException(e);		}			}		private void startElement(URI uri) throws IOException {		xml.startElement(qnames.findPrefixURI(uri), qnames.findLocal(uri));	}		public void endDocument() throws OWLException {		try {			xml.endDocument();		} catch (Exception e) {			throw new OWLException(e);		}	}	/**	 * @param base	 */	public void setBase(URI base) {		this.base = base;		nodeComparator = new NodeComparator(base.toString());		xml.setBase(base);	}		}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?