use of javax.xml.xquery.XQDataSource in project translationstudio8 by heartsome.
the class SaxonSearcher method PropagateQurey.
/**
* 繁殖翻译文本段的查询 robert 2012-04-03
* @param queryString
* XQuery查询语句
* @return RowId集合
* @throws XQException
* ;
*/
public static Map<String, List<String>> PropagateQurey(String queryString) throws XQException {
XQDataSource dataSource = new SaxonXQDataSource();
XQConnection conn = null;
XQExpression expression = null;
XQSequence results = null;
try {
conn = dataSource.getConnection();
expression = conn.createExpression();
results = expression.executeQuery(queryString);
Map<String, List<String>> resultMap = new HashMap<String, List<String>>();
while (results.next()) {
Node node = results.getNode();
// System.out.println("node.getChildNodes().getLength() = " + node.getChildNodes().getLength());
if (node.getChildNodes().getLength() >= 1) {
String rootFileName = node.getAttributes().getNamedItem("fileName").getNodeValue();
rootFileName = new File(rootFileName).getAbsolutePath();
String rootOriginal = node.getAttributes().getNamedItem("original").getNodeValue();
String rootTuid = node.getAttributes().getNamedItem("tuid").getNodeValue();
String rootRowId = RowIdUtil.getRowId(rootFileName, rootOriginal, rootTuid);
if (!resultMap.keySet().contains(rootRowId)) {
resultMap.put(rootRowId, new ArrayList<String>());
}
NodeList nodeList = node.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
if (nodeList.item(i).getAttributes() == null) {
continue;
}
String fileName = nodeList.item(i).getAttributes().getNamedItem("fileName").getNodeValue();
fileName = new File(fileName).getAbsolutePath();
String original = nodeList.item(i).getAttributes().getNamedItem("original").getNodeValue();
String tuid = nodeList.item(i).getAttributes().getNamedItem("tuid").getNodeValue();
String rowId = RowIdUtil.getRowId(fileName, original, tuid);
resultMap.get(rootRowId).add(rowId);
}
}
}
return resultMap;
} finally {
// 释放资源
if (results != null && !results.isClosed()) {
results.close();
}
if (expression != null && !expression.isClosed()) {
expression.close();
}
if (conn != null && !conn.isClosed()) {
conn.close();
}
}
}
use of javax.xml.xquery.XQDataSource in project translationstudio8 by heartsome.
the class SaxonSearcher method sort.
public static ArrayList<String> sort(String xmlns, String fileName, String elementName, boolean isAsc) throws XQException {
URI uri = new File(fileName).toURI();
String uriPath = uri.getPath();
ArrayList<String> rowIds = new ArrayList<String>();
XQDataSource dataSource = new SaxonXQDataSource();
XQConnection conn = dataSource.getConnection();
String queryString = "for $file in doc(\'" + uriPath + "')/xliff/file," + " $tu in $file/body//trans-unit order by $tu/" + elementName + " " + (isAsc ? "" : "descending") + " return <file original='{$file/@original}' tuid='{$tu/@id}'></file>";
if (xmlns != null) {
queryString = "declare default element namespace '" + xmlns + "';" + queryString;
}
XQExpression expression = conn.createExpression();
XQSequence results = expression.executeQuery(queryString);
while (results.next()) {
Node node = results.getNode();
String original = node.getAttributes().getNamedItem("original").getNodeValue();
String tuid = node.getAttributes().getNamedItem("tuid").getNodeValue();
String rowId = RowIdUtil.getRowId(fileName, original, tuid);
rowIds.add(rowId);
}
// 释放资源
results.close();
expression.close();
conn.close();
return rowIds;
}
use of javax.xml.xquery.XQDataSource in project translationstudio8 by heartsome.
the class SaxonSearcher method qurey.
/**
* 查询
* @param queryString
* XQuery查询语句
* @return RowId集合
* @throws XQException ;
*/
private static ArrayList<String> qurey(String queryString) throws XQException {
XQDataSource dataSource = new SaxonXQDataSource();
XQConnection conn = null;
XQExpression expression = null;
XQSequence results = null;
try {
conn = dataSource.getConnection();
expression = conn.createExpression();
results = expression.executeQuery(queryString);
LinkedHashSet<String> set = new LinkedHashSet<String>();
while (results.next()) {
Node node = results.getNode();
String fileName = node.getAttributes().getNamedItem("fileName").getNodeValue();
String original = node.getAttributes().getNamedItem("original").getNodeValue();
String tuid = node.getAttributes().getNamedItem("tuid").getNodeValue();
// 解决 Windows 平台下,无法查询“重复文本段”的问题“:
// 这里返回的是 URI,因此需要转成操作系统的标准文件路径。
// 注:在 Winodws 平台中文件路径分隔符使用“\”,而在 URI 标准中文件路径分隔符使用“/”,并且会以“/”为根,
// 因此,Windows 的路径“c:\test.txt”,使用 URI 表示为“/c:/test.txt”。
fileName = new File(fileName).getAbsolutePath();
String rowId = RowIdUtil.getRowId(fileName, original, tuid);
set.add(rowId);
}
return new ArrayList<String>(set);
} finally {
// 释放资源
if (results != null && !results.isClosed()) {
results.close();
}
if (expression != null && !expression.isClosed()) {
expression.close();
}
if (conn != null && !conn.isClosed()) {
conn.close();
}
}
}
use of javax.xml.xquery.XQDataSource in project translationstudio8 by heartsome.
the class SaxonSearcher method testRpeateed.
/**
* 测试过滤重复文本段 robert 2012-06-11
* @throws XQException
*/
private static void testRpeateed() throws XQException {
String xqueryStr_1 = "declare namespace ns0='urn:oasis:names:tc:xliff:document:1.2'; " + "for $t in (let $allTU_1 := ( " + " for $file0 in doc('/home/robert/workspace/runtime-UltimateEdition.product/test/XLIFF/zh-CN/user_defineed_filter4.doc.xlf')/ns0:xliff/ns0:file[upper-case(@source-language)='EN-US' " + " and upper-case(@target-language)='ZH-CN'], " + " $tu0 in $file0/ns0:body//ns0:trans-unit " + " return <tu fileName='/home/robert/workspace/runtime-UltimateEdition.product/test/XLIFF/zh-CN/user_defineed_filter4.doc.xlf' original='{$file0/@original}' tuid='{$tu0/@id}' source='{$tu0/ns0:source/text()}' />), " + " $allTU := for $allTU1 in $allTU_1 return <tu fileName='{$allTU1/@fileName}' original='{$allTU1/@original}' tuid='{$allTU1/@tuid}' source='{normalize-space($allTU1/@source)}' /> ," + " $id := (for $src in distinct-values($allTU/@source) " + " return <root>{if (count($allTU[@source=$src])>1) then <src>{$src}</src> else ''}</root>)/src/text(), " + " $tu := $allTU[@source=$id] return $tu) order by $t/@source " + " return <tu fileName='{$t/@fileName}' original='{$t/@original}' tuid='{$t/@tuid}' /> ";
String xqueryStr = "declare namespace ns0='urn:oasis:names:tc:xliff:document:1.2'; \n" + "declare function local:getPureText ($srcText1 as xs:anyType) as xs:anyType {\n" + "let $result := srcText1 \n" + "return $result }; \n" + "for $t in (let $allTU := ( \n" + " for $file0 in doc('/home/robert/workspace/runtime-UltimateEdition.product/test/XLIFF/zh-CN/user_defineed_filter4.doc.xlf')/ns0:xliff/ns0:file[upper-case(@source-language)='EN-US' \n" + " and upper-case(@target-language)='ZH-CN'], \n" + " $tu0 in $file0/ns0:body//ns0:trans-unit \n" + " return <tu fileName='/home/robert/workspace/runtime-UltimateEdition.product/test/XLIFF/zh-CN/user_defineed_filter4.doc.xlf' original='{$file0/@original}' tuid='{$tu0/@id}' source='{$tu0/ns0:source/text()}' />) \n" + " return $allTU )\n " + " return <tu fileName='{$t/@fileName}' original='{$t/@original}' tuid='{$t/@tuid}' source='{$t/@source}'/> \n";
XQDataSource dataSource = new SaxonXQDataSource();
XQConnection conn = null;
XQExpression expression = null;
XQSequence results = null;
try {
conn = dataSource.getConnection();
expression = conn.createExpression();
results = expression.executeQuery(xqueryStr);
while (results.next()) {
Node node = results.getNode();
String fileName = node.getAttributes().getNamedItem("fileName").getNodeValue();
String original = node.getAttributes().getNamedItem("original").getNodeValue();
String tuid = node.getAttributes().getNamedItem("tuid").getNodeValue();
String source = node.getAttributes().getNamedItem("source").getNodeValue();
System.out.println(source);
// System.out.println(tuid);
}
return;
} finally {
// 释放资源
if (results != null && !results.isClosed()) {
results.close();
}
if (expression != null && !expression.isClosed()) {
expression.close();
}
if (conn != null && !conn.isClosed()) {
conn.close();
}
}
}
Aggregations