我试图用来BaseX运行一个XQuery没有成功.我尝试过键入以下命令:
doc("Bookstore.xml")//Bookstore
//Bookstore
XQUERY[//Bookstore]
Run Code Online (Sandbox Code Playgroud)
我收到这些错误消息:
Stopped at C:/tools/libxml/file, 1/32:
Unknown command: doc("Bookstore.xml")//Bookstore. Try HELP.
Stopped at C:/tools/libxml/file, 1/12:
Unknown command: //Bookstore. Try HELP.
Stopped at C:/tools/libxml/file, 1/20:
Unknown command: XQUERY[//Bookstore]. Try HELP.
Run Code Online (Sandbox Code Playgroud)
每当我试图击中Execute Query.我怎样才能让它真正起作用?我正在观看斯坦福教程,但那些显示在那里的命令无法正常工作BaseX.
下面你可以看到file我正在尝试查询教育目的.
<?xml version="1.0" ?>
<!--Bookstore with no DTD-->
<Bookstore>
<Book ISBN="ISBN-0-13-713526-2" Price="85" Edition="3rd">
<Title>A First Course in Database Systems</Title>
<Authors>
<Author>
<First_Name>Jeffrey</First_Name>
<Last_Name>Ullman</Last_Name>
</Author>
<Author>
<First_Name>Jennifer</First_Name>
<Last_Name>Widom</Last_Name>
</Author>
</Authors>
</Book>
<Book ISBN="ISBN-0-13-815504-6" Price="100">
<Remark> …Run Code Online (Sandbox Code Playgroud) 使用直接元素构造函数设置默认命名空间非常简单.例如:
<map xmlns="http://www.w3.org/2013/XSL/json"/>
Run Code Online (Sandbox Code Playgroud)
如上所述,上述直接构造函数输出完全相同的元素.但是,如果我尝试对计算元素和命名空间构造函数执行相同操作,那么我运气不好:
element {"map"} {
namespace {""} { "http://www.w3.org/2013/XSL/json" }
}
Run Code Online (Sandbox Code Playgroud)
以上内容Duplicate namespace declaration: ''在BaseX 8.2中引发错误; 和XTDE0440: Cannot output a namespace node for the default namespace when the element is in no namespaceSaxon-HE 9.6中的一个.
如果我传递前缀,没有问题.以下效果很好:
element {"map"} {
namespace { "e" } {"http://www.w3.org/2013/XSL/json"}
}
Run Code Online (Sandbox Code Playgroud)
在上述情况下,BaseX和Saxon都没有抱怨.但我想将命名空间设置为默认命名空间.
关于计算机命名空间构造函数,XQuery 3.0规范说:
如果构造函数指定了PrefixExpr,则前缀表达式的计算方法如下:
湾 如果结果是空序列或零长度xs:string或xs:untypedAtomic值,则新命名空间节点没有名称(此类命名空间节点表示默认命名空间的绑定).
该规范还提供了"具有空前缀的计算命名空间构造函数"的类似示例:
namespace { "" } {"http://a.example.com" }
Run Code Online (Sandbox Code Playgroud)
为什么然后,错误消息?显然,计算的命名空间构造函数尝试重新声明已由计算元素构造函数声明的命名空间.另一方面,直接构造函数将直接初始化元素的命名空间到我的选择.但这只是我的猜测.我唯一确定的是我的困惑.
在任何情况下,有没有办法用计算构造函数获得与直接构造函数相同的结果?
我正在尝试执行此查询:
declare variable $doc as xs:string external;
declare namespace type4="http:///de/tudarmstadt/ukp/dkpro/core/api/segmentation/type.ecore";
fn:doc($doc)//type4:Lemma/@value
Run Code Online (Sandbox Code Playgroud)
在BaseX java驱动程序中.实际的代码段如下所示:
String queryString = "declare variable $doc as xs:string external; " +
"declare namespace type4=\"http:///de/tudarmstadt/ukp/dkpro/core/api/segmentation/type.ecore\"; " +
"fn:doc($doc)//type4:Lemma/@value";
Set<String> lemmata = new TreeSet<>();
try (ClientQuery query = this.clientSession.query(queryString))
{
query.bind("$doc", this.getUriFromDocumentId(documentId));
while (query.more())
{
String next = query.next();
logger.info(next);
lemmata.add(next);
}
return lemmata;
} catch (IOException e)
{
e.printStackTrace();
throw new QHException(e);
}
Run Code Online (Sandbox Code Playgroud)
我得到了这个例外:
[XPST0003] Unexpected end of query: 'namespace type4...'
Run Code Online (Sandbox Code Playgroud)
在打电话时query.more().
我声明命名空间错了吗?java代码中的转义引号是否有错误?我不明白xquery从何处获取查询结束.
命名空间也在我查询的xml文档中声明.
编辑:this.getUriFromDocumentId(String documentId)只是预先设置数据库名称,以便uri完成并实际匹配我想要查询的文档.在上面的代码片段执行之前,我检查说该文档存在.
我有一个相对复杂的XML文件,它遵循ReqIF标准,希望使用BaseX进行操作。当我删除节点xlmns中的所有属性时REQ-IF,可以执行XQueries并遍历//REQ-IF/THE-HEADERXQuery栏中的文件(例如),并按预期查看结果。
但是,当我包含xlmns属性时,所有查询都不起作用。更糟糕的是,当我在“地图视图”中选择一个节点以复制路径并将其粘贴到XQuery栏中时,也不会返回任何结果。
那么,如何表达一种XQuery(大概使用名称空间信息)来到达此XML文件的内部?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<REQ-IF xmlns="http://www.omg.org/spec/ReqIF/20110401/reqif.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.omg.org/spec/ReqIF/20110401/reqif.xsd reqif.xsd" xmlns:reqif="http://www.omg.org/spec/ReqIF/20110401/reqif.xsd" xmlns:reqif-xhtml="http://www.w3.org/1999/xhtml" xmlns:rm-reqif="http://www.ibm.com/rm/reqif" xmlns:xhtml="http://www.w3.org/1999/xhtml" >
<THE-HEADER>
</THE-HEADER>
<CORE-CONTENT>
<REQ-IF-CONTENT>
<DATATYPES>
</DATATYPES>
<SPEC-TYPES>
</SPEC-TYPES>
<SPEC-OBJECTS>
</SPEC-OBJECTS>
<SPEC-RELATIONS>
</SPEC-RELATIONS>
<SPECIFICATIONS>
</SPECIFICATIONS>
<SPEC-RELATION-GROUPS>
</SPEC-RELATION-GROUPS>
</REQ-IF-CONTENT>
</CORE-CONTENT>
</REQ-IF>
Run Code Online (Sandbox Code Playgroud) 我试图使用这样的XQuery搜索BaseX:
XQUERY doc("ann-20140201.xml")//xbrl
Run Code Online (Sandbox Code Playgroud)
我正在提交原始实例的一小段摘录:
<?xml version="1.0" encoding="US-ASCII"?>
<xbrli:xbrl xmlns:ann="http://www.anninc.com/20140201" xmlns:dei="http://xbrl.sec.gov/dei/2013-01-31" xmlns:iso4217="http://www.xbrl.org/2003/iso4217" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:us-gaap="http://fasb.org/us-gaap/2013-01-31" xmlns:xbrldi="http://xbrl.org/2006/xbrldi" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<link:schemaRef xlink:href="ann-20140201.xsd" xlink:type="simple" />
<xbrli:context id="FD2011Q4YTD">
<xbrli:entity>
<xbrli:identifier scheme="http://www.sec.gov/CIK">0000874214</xbrli:identifier>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2011-01-30</xbrli:startDate>
<xbrli:endDate>2012-01-28</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="FD2011Q4YTD_ann_EarningsPerShareReconciliationAxis_ann_EarningsPerShareBasic.Member">
<xbrli:entity>
Run Code Online (Sandbox Code Playgroud)
但是,即使很明显,当我用它执行查询时,它<xbrl>是根元素,BaseX也不会返回任何内容!
当等效命令返回根时,如何才能返回任何内容?
的等效命令是:
XQUERY doc("ann-20140201.xml")//*
Run Code Online (Sandbox Code Playgroud)