我一直避免使用聚合,因为将一对多关系归类为聚合似乎太主观了。但我正在审查其他人制作的模型,其中聚合用于多对多关系(例如:一门课程由多个模块组成,一个模块可能是多个课程的一部分)。这在我看来是完全错误的,但我找不到一个明确的规则来反对它。官方有什么规定?
我是否可以使用Scala解析器框架来解析以推模式提供给解析器的事件流(即一系列write()调用)?或者它是否必须使用迭代器"拉"其输入?我正在考虑使用解析器主要验证write()调用的序列是一个格式良好的合法序列,但它也可能会向流中注入额外的令牌.
我知道我可以将一系列令牌推送到一个期望通过线程拉动序列的组件,但这是一个混乱的解决方案.
我想在一个包含很多级别的庞大目录中使用XSLT2转换XML文件.有超过100万个文件,每个文件是4到10 kB.过了一会儿我总是收到java.lang.OutOfMemoryError:Java堆空间.
我的命令是:java -Xmx3072M -XX:+ UseConcMarkSweepGC -XX:+ CMSClassUnloadingEna bled -XX:MaxPermSize = 512M ...
向-Xmx添加更多内存不是一个好的解决方案.
这是我的代码:
for (File file : dir.listFiles()) {
if (file.isDirectory()) {
pushDocuments(file);
} else {
indexFiles.index(file);
}
}
public void index(File file) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
xslTransformer.xslTransform(outputStream, file);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
System.err.println(e.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
由net.sf.saxon.s9api进行的XSLT转换
public void xslTransform(ByteArrayOutputStream outputStream, File xmlFile) {
try {
XdmNode source = proc.newDocumentBuilder().build(new StreamSource(xmlFile));
Serializer out = proc.newSerializer();
out.setOutputStream(outputStream);
transformer.setInitialContextNode(source);
transformer.setDestination(out);
transformer.transform();
out.close();
} …Run Code Online (Sandbox Code Playgroud) 在此先感谢任何帮助......
我遇到了对DTD验证失败的XML文件的问题(通过ant xmlvalidate任务),但XML文档中报告的错误与正在验证的文档的内容不匹配.此外,在Oxygen中打开的相同文件验证没有问题.
报告错误的ant输出示例如下:
[xmlvalidate] /Path/to/file.xml:240:91: Attribute "match_style" with value "ble" must have a value from the list "any all none ".
Run Code Online (Sandbox Code Playgroud)
在目视检查有问题的文件时,第match_style240行的属性值为all.对文件的搜索显示该字符串ble虽然在文档中确实发生了多次(作为tablein标签的子字符串,也enable作为属性名称),但在第145和328行之间根本不出现.
我尝试过手动编辑XML文件并重新验证.如果我从文件前面删除换行符或其他空格(有时候我添加换行符)而不是报告的错误(不进行其他更改),它偶尔会完全解决问题,然后文件将验证.在其他情况下,它仍然失败,但错误是在文件的下方,并且对更接近新错误的空格的额外编辑将修复事情或者进一步向下移动"错误".我无法辨别任何押韵或理由,这些编辑将修复什么,哪些不会.
只是重复一个重点:有时更改空格并且不进行其他更改会导致文件验证.
我已经在XML文件中搜索了可能会做奇怪事情的隐形和控制字符,但除了花园种类的空白外,还没有找到任何其他内容.
这些文件是通过XSLT 2.0转换从各种其他XML版本的源文件生成的.转换是通过Java使用Saxon 的任务在ant构建中完成的.(我无法使XSLT任务或Saxon任务按预期工作,因为我的XSL在某些情况下会从单个源文件生成多个结果文档,除了第一个结果文档之外的所有文档似乎总是被这些任务省略. )这是任务:
<java classname="net.sf.saxon.Transform" fork="true"
output="${dest.dir}/build"
resultproperty="transform_result"
failonerror="true">
<arg line="-o ${dest.dir}/ ${source.dir}/xml_sources ${source.dir}/xsl/transform.xsl"/>
</java>
Run Code Online (Sandbox Code Playgroud)
我还搜索了XSL和源XML文件以寻找不寻常的字符,并在XSL中使用字符映射并在结果文档中缩进以确保没有奇怪的空白字符.没有发现任何奇怪的东西,而且角色映射或缩进制作的唯一差异与手动编辑空白基本相同 - "错误"有时会四处移动,但仍然会发生.
我尝试过使用不同版本的Saxon和不同版本的Ant,没有不同的结果.问题开始了一段时间(不完全确定何时),但一切都曾经使用过一次,所以我尝试使用旧版本的XSL和源代码,但没有发现旧版本的东西没有显示问题(虽然由于从CVS切换到SVN,并且CVS不再存在,我可能根本无法回到足够远,因为现在丢失了一些最旧的修订版).
文件必须验证的DTD不是我的 - 我无法更改它或切换到架构.
我通常在Mac上工作(当前运行10.7.5),但问题也发生在Linux上(不确定是什么版本).我真的无法使用的一个变量是Java.当事情上次正常工作时,我可能已经运行了Java 1.5 - 我现在使用的是1.7,它确实发生在我运行1.6时.我不能在我有的机器上回到1.5.
这就是我能想到的所有可能相关的信息.
这个问题让我斗智斗勇.在我的所有研究中,我从未听说过其他人报告同样的问题,更不用说解决它了.任何关于可能出错的想法都会受到极大的赞赏.
谢谢!
我使用 Saxon XSLT 版本 9.6.0.1。样式表包含以下代码:
...
<xsl:message terminate="yes">errormessage</xsl:message>
...
Run Code Online (Sandbox Code Playgroud)
我的应用程序按预期终止,但出现此异常:
net.sf.saxon.expr.instruct.TerminationException: Processing terminated by xsl:message at line 45 in
at net.sf.saxon.expr.instruct.Message.processLeavingTail(Message.java:253) at net.sf.saxon.expr.instruct.Message.processLeavingTail(Message.java:253)
at net.sf.saxon.expr.instruct.Choose.processLeavingTail(Choose.java:822)
Run Code Online (Sandbox Code Playgroud)
现在我想知道“错误消息”文本实际上去了哪里。我可以在 stderr 上看到它,但需要将它显示给用户或将其放入日志文件中。
如何以编程方式访问消息文本?
我想从xml中获取数据使用Xquery with functions with function.
data.xml中
<data><employee id=\"1\"><name value=\"vA-12\">A</name> <title id=\"2\">Manager</title></employee>
<employee id=\"2\"><name value=\"vC-12\">C</name><title id=\"2\">Manager</title></employee>
<employee id=\"2\"><name value=\"vB-12\">B</name><title id=\"2\">Manager</title></employee>
</data>
Run Code Online (Sandbox Code Playgroud)
现在我想获取具有employee @ id = title @ id且name @ value以'vC'开头的名称.
我已经为此写了这个xquery.请看下面但是得到错误 -
for $x in /data/employee where $x/@id=$x/title/@id and [fn:starts-with($x/name/@value,vC)] return data($x/name)
Run Code Online (Sandbox Code Playgroud)
这是错误 -
Error on line 1 column 55
XPST0003 XQuery syntax error near #.../title/@id and [fn:starts-with#:
Unexpected token "[" in path expression
net.sf.saxon.s9api.SaxonApiException: Unexpected token "[" in path expression
at net.sf.saxon.s9api.XQueryCompiler.compile(XQueryCompiler.java:544)
at Xml.process(Xml.java:46)
at Xml.main(Xml.java:30)
Caused by: net.sf.saxon.trans.XPathException: Unexpected …Run Code Online (Sandbox Code Playgroud) 有没有人试图使用node.js中的XSLT样式表将xml文件转换为html网页?我的背景是Java.我通常使用SAXON将XML转换为HTML网页.我是node.js的新手.我试图使用像node_xslt,libxsltjs等少数库来实现它,但是没有成功.如果有人尝试使用其他适用于XSLT样式表的库,请发布一个链接.任何帮助,将不胜感激.
我有一个ItemType带有最终静态字段的类,它引用子类的实例:
public static final ItemType DURATION = new BuiltInAtomicItemType(x);
static class BuiltInAtomicItemType extends ItemType {
public BuiltInAtomicItemType(X x) {
this.x = x;
}
Run Code Online (Sandbox Code Playgroud)
如果一个线程先加载父类,而其他类首先加载子这引起了一个类加载死锁的可能性.
现在问题是这是一个公共API,我不能轻易改变它.我想删除一个类加载死锁的可能性,但我不希望迫使引用应用程序改变ItemType.DURATION或其他40多个类似的领域.
有没有办法在保留公共API的同时避免潜在的死锁?
通常当我在XSLT中工作时,我创建一个主要由导入组成的主文件.我保持每个导入文件都很小,以便我更容易维护.
我正在尝试在XQuery(在MarkLogic中)做同样的事情,但我无法按照我希望的方式工作.
这是我希望能够做到的:
main.xqy:
xquery version "1.0-ml";
module namespace summit = "http://example.com/summit";
import module "http://example.com/summit" at "/ext/variables.xqy";
import module "http://example.com/summit" at "/ext/utils.xqy";
Run Code Online (Sandbox Code Playgroud)
variables.xqy:
xquery version "1.0-ml";
module namespace summit = "http://example.com/summit";
declare variable $BASEURL as xs:string := "https://example.com/v1";
Run Code Online (Sandbox Code Playgroud)
utils.xqy:
xquery version "1.0-ml";
module namespace summit = "http://example.com/summit";
declare function summit:baseUrl() {
let $url := $BASEURL
return $url
};
Run Code Online (Sandbox Code Playgroud)
然后使用以下代码在查询控制台中调用它:
xquery version "1.0-ml";
import module namespace summit = "http://example.com/summit" at "/ext/main.xqy";
summit:baseUrl()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
[1.0-ml] XDMP-UNDVAR: (err:XPST0008) Undefined variable $BASEURL
Stack Trace …Run Code Online (Sandbox Code Playgroud) 我有很多需要解析的长文档.文档格式类似于XML,但实际上不是xml.
这是一个例子:
<DOC>
<TEXT>it's the content P&G</TEXT>
</DOC>
<DOC>
<TEXT>it's antoher</TEXT>
</DOC>
Run Code Online (Sandbox Code Playgroud)
请注意,有多个根标签 - <DOC>,实体&应该是&xml.
因此,上述文件不是标准的xml.
我可以使用它XmlDocument来解析文件,还是应该编写自己的解析器?