|
|
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = function ( graph ){ |
|
|
var exportTTLModule = {}; |
|
|
var resultingTTLContent = ""; |
|
|
var currentNodes; |
|
|
var currentProperties; |
|
|
var currentAxioms; |
|
|
var Map_ID2Node = {}; |
|
|
var Map_ID2Prop = {}; |
|
|
var prefixModule = webvowl.util.prefixTools(graph); |
|
|
|
|
|
exportTTLModule.requestExport = function (){ |
|
|
prefixModule.updatePrefixModel(); |
|
|
resultingTTLContent = ""; |
|
|
currentNodes = graph.getClassDataForTtlExport(); |
|
|
var i; |
|
|
for ( i = 0; i < currentNodes.length; i++ ) { |
|
|
Map_ID2Node[currentNodes[i].id()] = currentNodes[i]; |
|
|
} |
|
|
currentProperties = graph.getPropertyDataForTtlExport(); |
|
|
|
|
|
for ( i = 0; i < currentProperties.length; i++ ) { |
|
|
Map_ID2Prop[currentProperties[i].id()] = currentProperties[i]; |
|
|
} |
|
|
|
|
|
|
|
|
prepareHeader(); |
|
|
preparePrefixList(); |
|
|
prepareOntologyDef(); |
|
|
resultingTTLContent += "#################################################################\r\n\r\n"; |
|
|
preparePrefixRepresentation(); |
|
|
var property_success = exportProperties(); |
|
|
var class_success = exportClasses(); |
|
|
currentNodes = null; |
|
|
currentProperties = null; |
|
|
Map_ID2Node = {}; |
|
|
Map_ID2Prop = {}; |
|
|
if ( property_success === false || class_success === false ) |
|
|
return false; |
|
|
return true; |
|
|
|
|
|
}; |
|
|
|
|
|
function preparePrefixRepresentation(){ |
|
|
var i; |
|
|
var allNodes = graph.getUnfilteredData().nodes; |
|
|
var allProps = graph.getUnfilteredData().properties; |
|
|
for ( i = 0; i < allNodes.length; i++ ) { |
|
|
var nodeIRI = prefixModule.getPrefixRepresentationForFullURI(allNodes[i].iri()); |
|
|
if ( prefixModule.validURL(nodeIRI) === true ) |
|
|
allNodes[i].prefixRepresentation = "<" + nodeIRI + ">"; |
|
|
else |
|
|
allNodes[i].prefixRepresentation = nodeIRI; |
|
|
} |
|
|
for ( i = 0; i < allProps.length; i++ ) { |
|
|
var propIRI = prefixModule.getPrefixRepresentationForFullURI(allProps[i].iri()); |
|
|
if ( prefixModule.validURL(propIRI) === true ) |
|
|
allProps[i].prefixRepresentation = "<" + propIRI + ">"; |
|
|
else |
|
|
allProps[i].prefixRepresentation = propIRI; |
|
|
} |
|
|
} |
|
|
|
|
|
function exportProperties(){ |
|
|
if ( currentProperties.length === 0 ) return; |
|
|
resultingTTLContent += "### Property Definitions (Number of Property) " + currentProperties.length + " ###\r\n"; |
|
|
for ( var i = 0; i < currentProperties.length; i++ ) { |
|
|
|
|
|
resultingTTLContent += "# --------------------------- Property " + i + "------------------------- \r\n"; |
|
|
var addedElement = extractPropertyDescription(currentProperties[i]); |
|
|
resultingTTLContent += addedElement; |
|
|
|
|
|
if ( addedElement.indexOf("WHYEMPTYNAME") !== -1 ) { |
|
|
return false; |
|
|
} |
|
|
} |
|
|
return true; |
|
|
} |
|
|
|
|
|
|
|
|
function exportClasses(){ |
|
|
if ( currentNodes.length === 0 ) return; |
|
|
resultingTTLContent += "### Class Definitions (Number of Classes) " + currentNodes.length + " ###\r\n"; |
|
|
for ( var i = 0; i < currentNodes.length; i++ ) { |
|
|
|
|
|
resultingTTLContent += "# --------------------------- Class " + i + "------------------------- \r\n"; |
|
|
var addedElement = extractClassDescription(currentNodes[i]); |
|
|
resultingTTLContent += addedElement; |
|
|
|
|
|
if ( addedElement.indexOf("WHYEMPTYNAME") !== -1 ) { |
|
|
return false; |
|
|
} |
|
|
} |
|
|
return true; |
|
|
} |
|
|
|
|
|
function getPresentAttribute( selectedElement, element ){ |
|
|
var attr = selectedElement.attributes(); |
|
|
return (attr.indexOf(element) >= 0); |
|
|
} |
|
|
|
|
|
function extractClassDescription( node ){ |
|
|
var subject = node.prefixRepresentation; |
|
|
var predicate = "rdf:type"; |
|
|
var object = node.type(); |
|
|
if ( node.type() === "owl:equivalentClass" ) |
|
|
object = "owl:Class"; |
|
|
if ( node.type() === "owl:disjointUnionOf" ) |
|
|
object = "owl:Class"; |
|
|
if ( node.type() === "owl:unionOf" ) |
|
|
object = "owl:Class"; |
|
|
var arrayOfNodes = []; |
|
|
var arrayOfUnionNodes = []; |
|
|
|
|
|
if ( node.union() ) { |
|
|
var union = node.union(); |
|
|
for ( var u = 0; u < union.length; u++ ) { |
|
|
var u_node = Map_ID2Node[union[u]]; |
|
|
arrayOfUnionNodes.push(u_node); |
|
|
} |
|
|
} |
|
|
|
|
|
if ( node.disjointUnion() ) { |
|
|
var distUnion = node.disjointUnion(); |
|
|
for ( var du = 0; du < distUnion.length; du++ ) { |
|
|
var du_node = Map_ID2Node[distUnion[du]]; |
|
|
arrayOfNodes.push(du_node); |
|
|
} |
|
|
} |
|
|
|
|
|
var objectDef = subject + " " + predicate + " " + object; |
|
|
if ( getPresentAttribute(node, "deprecated") === true ) { |
|
|
objectDef += ", owl:DeprecatedProperty"; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var indent = getIndent(subject); |
|
|
objectDef += "; \r\n"; |
|
|
for ( var e = 0; e < node.equivalents().length; e++ ) { |
|
|
var eqIRI = prefixModule.getPrefixRepresentationForFullURI(node.equivalents()[e].iri()); |
|
|
var eqNode_prefRepresentation = ""; |
|
|
if ( prefixModule.validURL(eqIRI) === true ) |
|
|
eqNode_prefRepresentation = "<" + eqIRI + ">"; |
|
|
else |
|
|
eqNode_prefRepresentation = eqIRI; |
|
|
objectDef += indent + " owl:equivalentClass " + eqNode_prefRepresentation + " ;\r\n"; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( node.commentForCurrentLanguage() ) { |
|
|
|
|
|
objectDef += indent + " rdfs:comment \"" + node.commentForCurrentLanguage() + "\" ;\r\n"; |
|
|
} |
|
|
|
|
|
if ( node.annotations() ) { |
|
|
var annotations = node.annotations(); |
|
|
for ( var an in annotations ) { |
|
|
if ( annotations.hasOwnProperty(an) ) { |
|
|
var anArrayObj = annotations[an]; |
|
|
var anObj = anArrayObj[0]; |
|
|
var an_ident = anObj.identifier; |
|
|
var an_val = anObj.value; |
|
|
|
|
|
if ( an_ident === "isDefinedBy" ) { |
|
|
objectDef += indent + " rdfs:isDefinedBy <" + an_val + "> ;\r\n"; |
|
|
} |
|
|
if ( an_ident === "term_status" ) { |
|
|
objectDef += indent + " vs:term_status \"" + an_val + "\" ;\r\n"; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if ( arrayOfNodes.length > 0 ) { |
|
|
|
|
|
objectDef += indent + " owl:disjointUnionOf ("; |
|
|
for ( var duE = 0; duE < arrayOfNodes.length; duE++ ) { |
|
|
var duIri = prefixModule.getPrefixRepresentationForFullURI(arrayOfNodes[duE].iri()); |
|
|
var duNode_prefRepresentation = ""; |
|
|
if ( prefixModule.validURL(duIri) === true ) |
|
|
duNode_prefRepresentation = "<" + duIri + ">"; |
|
|
else |
|
|
duNode_prefRepresentation = duIri; |
|
|
objectDef += indent + indent + duNode_prefRepresentation + " \n"; |
|
|
} |
|
|
objectDef += ") ;\r\n"; |
|
|
} |
|
|
|
|
|
if ( arrayOfUnionNodes.length > 0 ) { |
|
|
|
|
|
objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Class ; \r\n"; |
|
|
objectDef += indent + indent + " owl:unionOf ( "; |
|
|
|
|
|
for ( var uE = 0; uE < arrayOfUnionNodes.length; uE++ ) { |
|
|
|
|
|
if ( arrayOfUnionNodes[uE] && arrayOfUnionNodes[uE].iri() ) { |
|
|
var uIri = prefixModule.getPrefixRepresentationForFullURI(arrayOfUnionNodes[uE].iri()); |
|
|
var uNode_prefRepresentation = ""; |
|
|
if ( prefixModule.validURL(uIri) === true ) |
|
|
uNode_prefRepresentation = "<" + uIri + ">"; |
|
|
else |
|
|
uNode_prefRepresentation = uIri; |
|
|
objectDef += indent + indent + indent + uNode_prefRepresentation + " \n"; |
|
|
} |
|
|
} |
|
|
objectDef += ") ;\r\n"; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
var allProps = graph.getUnfilteredData().properties; |
|
|
var myProperties = []; |
|
|
var i; |
|
|
for ( i = 0; i < allProps.length; i++ ) { |
|
|
if ( allProps[i].domain() === node && |
|
|
( allProps[i].type() === "rdfs:subClassOf" || |
|
|
allProps[i].type() === "owl:allValuesFrom" || |
|
|
allProps[i].type() === "owl:someValuesFrom") |
|
|
) { |
|
|
myProperties.push(allProps[i]); |
|
|
} |
|
|
|
|
|
if ( (allProps[i].domain() === node) && |
|
|
allProps[i].type() === "owl:disjointWith" ) { |
|
|
myProperties.push(allProps[i]); |
|
|
} |
|
|
|
|
|
} |
|
|
for ( i = 0; i < myProperties.length; i++ ) { |
|
|
|
|
|
|
|
|
|
|
|
if ( myProperties[i].type() === "owl:someValuesFrom" ) { |
|
|
objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Restriction ; \r\n"; |
|
|
objectDef += indent + " owl:onProperty " + myProperties[i].prefixRepresentation + ";\r\n"; |
|
|
if ( myProperties[i].range().type() !== "owl:Thing" ) { |
|
|
objectDef += indent + " owl:someValuesFrom " + myProperties[i].range().prefixRepresentation + "\r\n"; |
|
|
} |
|
|
objectDef += indent + " ];\r\n"; |
|
|
continue; |
|
|
} |
|
|
|
|
|
if ( myProperties[i].type() === "owl:allValuesFrom" ) { |
|
|
objectDef += indent + " rdfs:subClassOf [ rdf:type owl:Restriction ; \r\n"; |
|
|
objectDef += indent + " owl:onProperty " + myProperties[i].prefixRepresentation + ";\r\n"; |
|
|
if ( myProperties[i].range().type() !== "owl:Thing" ) { |
|
|
objectDef += indent + " owl:allValuesFrom " + myProperties[i].range().prefixRepresentation + "\r\n"; |
|
|
} |
|
|
objectDef += indent + " ];\r\n"; |
|
|
continue; |
|
|
} |
|
|
|
|
|
if ( myProperties[i].range().type() !== "owl:Thing" ) { |
|
|
objectDef += indent + " " + myProperties[i].prefixRepresentation + |
|
|
" " + myProperties[i].range().prefixRepresentation + " ;\r\n"; |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
objectDef += general_Label_languageExtractor(indent, node.label(), "rdfs:label", true); |
|
|
return objectDef; |
|
|
|
|
|
} |
|
|
|
|
|
function extractPropertyDescription( property ){ |
|
|
var subject = property.prefixRepresentation; |
|
|
if ( subject.length === 0 ) { |
|
|
console.log("THIS SHOULD NOT HAPPEN"); |
|
|
var propIRI = prefixModule.getPrefixRepresentationForFullURI(property.iri()); |
|
|
console.log("FOUND " + propIRI); |
|
|
|
|
|
|
|
|
} |
|
|
var predicate = "rdf:type"; |
|
|
var object = property.type(); |
|
|
|
|
|
var objectDef = subject + " " + predicate + " " + object; |
|
|
if ( getPresentAttribute(property, "deprecated") === true ) { |
|
|
objectDef += ", owl:DeprecatedProperty"; |
|
|
} |
|
|
if ( getPresentAttribute(property, "functional") === true ) { |
|
|
objectDef += ", owl:FunctionalProperty"; |
|
|
} |
|
|
if ( getPresentAttribute(property, "inverse functional") === true ) { |
|
|
objectDef += ", owl:InverseFunctionalProperty"; |
|
|
} |
|
|
if ( getPresentAttribute(property, "symmetric") === true ) { |
|
|
objectDef += ", owl:SymmetricProperty"; |
|
|
} |
|
|
if ( getPresentAttribute(property, "transitive") === true ) { |
|
|
objectDef += ", owl:TransitiveProperty"; |
|
|
} |
|
|
var indent = getIndent(subject); |
|
|
|
|
|
if ( property.inverse() ) { |
|
|
objectDef += "; \r\n"; |
|
|
objectDef += indent + " owl:inverseOf " + property.inverse().prefixRepresentation; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var closeStatement = false; |
|
|
var domain = property.domain(); |
|
|
var range = property.range(); |
|
|
|
|
|
|
|
|
objectDef += " ;\r\n"; |
|
|
|
|
|
|
|
|
if ( property.commentForCurrentLanguage() ) { |
|
|
|
|
|
objectDef += indent + " rdfs:comment \"" + property.commentForCurrentLanguage() + "\" ;\r\n"; |
|
|
} |
|
|
|
|
|
if ( property.superproperties() ) { |
|
|
var superProps = property.superproperties(); |
|
|
for ( var sP = 0; sP < superProps.length; sP++ ) { |
|
|
var sPelement = superProps[sP]; |
|
|
objectDef += indent + "rdfs:subPropertyOf " + sPelement.prefixRepresentation + ";\r\n"; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
if ( property.annotations() ) { |
|
|
var annotations = property.annotations(); |
|
|
for ( var an in annotations ) { |
|
|
if ( annotations.hasOwnProperty(an) ) { |
|
|
var anArrayObj = annotations[an]; |
|
|
var anObj = anArrayObj[0]; |
|
|
var an_ident = anObj.identifier; |
|
|
var an_val = anObj.value; |
|
|
|
|
|
if ( an_ident === "isDefinedBy" ) { |
|
|
objectDef += indent + " rdfs:isDefinedBy <" + an_val + "> ;\r\n"; |
|
|
} |
|
|
if ( an_ident === "term_status" ) { |
|
|
objectDef += indent + " vs:term_status \"" + an_val + "\" ;\r\n"; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if ( domain.type() === "owl:Thing" && range.type() === "owl:Thing" ) { |
|
|
|
|
|
if ( typeof property.label() !== "object" && property.label().length === 0 ) { |
|
|
closeStatement = true; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if ( closeStatement === true ) { |
|
|
var uobjectDef = objectDef.substring(0, objectDef.length - 2); |
|
|
objectDef = uobjectDef + " . \r\n"; |
|
|
return objectDef; |
|
|
} |
|
|
|
|
|
var labelDescription; |
|
|
|
|
|
|
|
|
if ( domain.type() === "owl:Thing" && range.type() === "owl:Thing" ) { |
|
|
labelDescription = general_Label_languageExtractor(indent, property.label(), "rdfs:label", true); |
|
|
objectDef += labelDescription; |
|
|
} |
|
|
else { |
|
|
|
|
|
labelDescription = general_Label_languageExtractor(indent, property.label(), "rdfs:label"); |
|
|
objectDef += labelDescription; |
|
|
if ( domain.type() !== "owl:Thing" ) { |
|
|
objectDef += indent + " rdfs:domain " + domain.prefixRepresentation + ";\r\n"; |
|
|
} |
|
|
if ( range.type() !== "owl:Thing" ) { |
|
|
objectDef += indent + " rdfs:range " + range.prefixRepresentation + ";\r\n"; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var s_needUpdate = objectDef; |
|
|
var s_lastPtr = s_needUpdate.lastIndexOf(";"); |
|
|
objectDef = s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; |
|
|
} |
|
|
|
|
|
return objectDef; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
exportTTLModule.resultingTTL_Content = function (){ |
|
|
return resultingTTLContent; |
|
|
}; |
|
|
|
|
|
function getIndent( name ){ |
|
|
if ( name === undefined ) { |
|
|
return "WHYEMPTYNAME?"; |
|
|
} |
|
|
return new Array(name.length + 1).join(" "); |
|
|
} |
|
|
|
|
|
function prepareHeader(){ |
|
|
resultingTTLContent += "#################################################################\r\n"; |
|
|
resultingTTLContent += "### Generated with the experimental alpha version of the TTL exporter of WebVOWL (version 1.1.7) " + |
|
|
" http://visualdataweb.de/webvowl/ ###\r\n"; |
|
|
resultingTTLContent += "#################################################################\r\n\r\n"; |
|
|
|
|
|
} |
|
|
|
|
|
function preparePrefixList(){ |
|
|
var ontoIri = graph.options().getGeneralMetaObjectProperty('iri'); |
|
|
var prefixList = graph.options().prefixList(); |
|
|
var prefixDef = []; |
|
|
prefixDef.push('@prefix : \t\t<' + ontoIri + '> .'); |
|
|
for ( var name in prefixList ) { |
|
|
if ( prefixList.hasOwnProperty(name) ) { |
|
|
prefixDef.push('@prefix ' + name + ': \t\t<' + prefixList[name] + '> .'); |
|
|
} |
|
|
} |
|
|
prefixDef.push('@base \t\t\t<' + ontoIri + '> .\r\n'); |
|
|
|
|
|
for ( var i = 0; i < prefixDef.length; i++ ) { |
|
|
resultingTTLContent += prefixDef[i] + '\r\n'; |
|
|
} |
|
|
} |
|
|
|
|
|
function prepareOntologyDef(){ |
|
|
var ontoIri = graph.options().getGeneralMetaObjectProperty('iri'); |
|
|
var indent = getIndent('<' + ontoIri + '>'); |
|
|
resultingTTLContent += '<' + ontoIri + '> rdf:type owl:Ontology ;\r\n' + |
|
|
getOntologyTitle(indent) + |
|
|
getOntologyDescription(indent) + |
|
|
getOntologyVersion(indent) + |
|
|
getOntologyAuthor(indent); |
|
|
|
|
|
|
|
|
var s_needUpdate = resultingTTLContent; |
|
|
var s_lastPtr = s_needUpdate.lastIndexOf(";"); |
|
|
resultingTTLContent = s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; |
|
|
} |
|
|
|
|
|
function getOntologyTitle( indent ){ |
|
|
return general_languageExtractor(indent, "title", "dc:title"); |
|
|
} |
|
|
|
|
|
function getOntologyDescription( indent ){ |
|
|
return general_languageExtractor(indent, "description", "dc:description"); |
|
|
} |
|
|
|
|
|
function getOntologyAuthor( indent ){ |
|
|
var languageElement = graph.options().getGeneralMetaObjectProperty('author'); |
|
|
if ( languageElement ) { |
|
|
if ( typeof languageElement !== "object" ) { |
|
|
if ( languageElement.length === 0 ) |
|
|
return ""; |
|
|
var aString = indent + " dc:creator " + '"' + languageElement + '";\r\n'; |
|
|
return aString; |
|
|
} |
|
|
|
|
|
var authorString = indent + " dc:creator " + '"'; |
|
|
for ( var i = 0; i < languageElement.length - 1; i++ ) { |
|
|
authorString += languageElement[i] + ", "; |
|
|
} |
|
|
authorString += languageElement[languageElement.length - 1] + '";\r\n'; |
|
|
return authorString; |
|
|
} else { |
|
|
return ""; |
|
|
} |
|
|
} |
|
|
|
|
|
function getOntologyVersion( indent ){ |
|
|
var languageElement = graph.options().getGeneralMetaObjectProperty('version'); |
|
|
if ( languageElement ) { |
|
|
if ( typeof languageElement !== "object" ) { |
|
|
if ( languageElement.length === 0 ) |
|
|
return ""; |
|
|
} |
|
|
return general_languageExtractor(indent, "version", "owl:versionInfo"); |
|
|
} else return ""; |
|
|
} |
|
|
|
|
|
function general_languageExtractor( indent, metaObjectDescription, annotationDescription, endStatement ){ |
|
|
var languageElement = graph.options().getGeneralMetaObjectProperty(metaObjectDescription); |
|
|
|
|
|
if ( typeof languageElement === 'object' ) { |
|
|
|
|
|
var resultingLanguages = []; |
|
|
for ( var name in languageElement ) { |
|
|
if ( languageElement.hasOwnProperty(name) ) { |
|
|
var content = languageElement[name]; |
|
|
if ( name === "undefined" ) { |
|
|
resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@en; \r\n'); |
|
|
} |
|
|
else { |
|
|
resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@' + name + '; \r\n'); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
var resultingString = ""; |
|
|
for ( var i = 0; i < resultingLanguages.length; i++ ) { |
|
|
resultingString += resultingLanguages[i]; |
|
|
} |
|
|
if ( endStatement && endStatement === true ) { |
|
|
var needUpdate = resultingString; |
|
|
var lastPtr = needUpdate.lastIndexOf(";"); |
|
|
return needUpdate.substring(0, lastPtr) + ". \r\n"; |
|
|
} else { |
|
|
return resultingString; |
|
|
} |
|
|
|
|
|
} else { |
|
|
if ( endStatement && endStatement === true ) { |
|
|
var s_needUpdate = indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; |
|
|
var s_lastPtr = s_needUpdate.lastIndexOf(";"); |
|
|
return s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; |
|
|
} |
|
|
return indent + " " + annotationDescription + ' "' + languageElement + '"@en;\r\n'; |
|
|
} |
|
|
} |
|
|
|
|
|
function general_Label_languageExtractor( indent, label, annotationDescription, endStatement ){ |
|
|
var languageElement = label; |
|
|
|
|
|
if ( typeof languageElement === 'object' ) { |
|
|
var resultingLanguages = []; |
|
|
for ( var name in languageElement ) { |
|
|
if ( languageElement.hasOwnProperty(name) ) { |
|
|
var content = languageElement[name]; |
|
|
if ( name === "undefined" ) { |
|
|
resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@en; \r\n'); |
|
|
} |
|
|
else { |
|
|
resultingLanguages.push(indent + " " + annotationDescription + ' "' + content + '"@' + name + '; \r\n'); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
var resultingString = ""; |
|
|
for ( var i = 0; i < resultingLanguages.length; i++ ) { |
|
|
resultingString += resultingLanguages[i]; |
|
|
} |
|
|
if ( endStatement && endStatement === true ) { |
|
|
var needUpdate = resultingString; |
|
|
var lastPtr = needUpdate.lastIndexOf(";"); |
|
|
return needUpdate.substring(0, lastPtr) + " . \r\n"; |
|
|
} else { |
|
|
return resultingString; |
|
|
} |
|
|
|
|
|
} else { |
|
|
if ( endStatement && endStatement === true ) { |
|
|
var s_needUpdate = indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; |
|
|
var s_lastPtr = s_needUpdate.lastIndexOf(";"); |
|
|
return s_needUpdate.substring(0, s_lastPtr) + " . \r\n"; |
|
|
} |
|
|
return indent + " " + annotationDescription + ' "' + languageElement + '"@en; \r\n'; |
|
|
} |
|
|
} |
|
|
|
|
|
return exportTTLModule; |
|
|
}; |
|
|
|