code: public static String valueToNotationString(Object val, org.openprovenance.prov.model.QualifiedName xsdType) {
          if (val instanceof LangString) {
              LangString istring = (LangString) val;
              return "\"" + istring.getValue() + 
                      ((istring.getLang()==null) ? "\"" : "\"@" + istring.getLang())
                      + (((xsdType==null)||(xsdType.getUri().equals(internationalizedStringUri)))? "" : " %% " + Namespace.qualifiedNameToStringWithNamespace(xsdType));
          } else if (val instanceof QualifiedName) {
              QualifiedName qn = (QualifiedName) val;	    
              return "'" + Namespace.qualifiedNameToStringWithNamespace(qn) + "'";
          } else if (val instanceof String) {
              String s=(String)val;
              if (s.contains("\n")) {
                  return "\"\"\"" + escape(s) + "\"\"\"" ;
              } else {
                  //FIXME: It's here that we should detect an int and generate the compact form: e.g. 1 instand of 1 %% xsd:int
                  // However dictionaries failed to be parsed then
                  //if (xsdType.getLocalPart().equals("int")) { //FIXME:need to properly compare with xsd:int
                  //    return s;
                  //} else {
                  return "\"" + escape(s) + ((xsdType==null)? "\"" : "\" %% " + Namespace.qualifiedNameToStringWithNamespace(xsdType));
                  //}
              }
          } else {
              // We should never be here!
              return "\"" + val + "\" %% " + Namespace.qualifiedNameToStringWithNamespace(xsdType);
          }
      }
docs: TODO: what else should be escaped?