1

我有一个遵循 ReqIF 标准的相对复杂的 XML 文件,我希望使用 BaseX 进行操作。当我剥离节点xlmns中的所有属性时REQ-IF,我可以执行 XQuery 并遍历//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>
4

1 回答 1

5

好吧,看看你最喜欢的 XQuery 教程或规范,它显示你可以声明一个默认元素命名空间https://www.w3.org/TR/xquery-31/#id-default-namespace

declare default element namespace "http://www.omg.org/spec/ReqIF/20110401/reqif.xsd";

/REQ-IF/CORE-CONTENT/REQ-IF-CONTENT/DATATYPES

(例如https://xqueryfiddle.liberty-development.net/pPgCcoC

或其他命名空间https://www.w3.org/TR/xquery-31/#id-namespace-declaration

declare  namespace reqif = "http://www.omg.org/spec/ReqIF/20110401/reqif.xsd";

/reqif:REQ-IF/reqif:CORE-CONTENT/reqif:REQ-IF-CONTENT/reqif:DATATYPES

(在线https://xqueryfiddle.liberty-development.net/pPgCcoC/1

此外还有通配符命名空间表达式/*:REQ-IF,如 ( /Q{http://www.omg.org/spec/ReqIF/20110401/reqif.xsd}REQ-IF)

于 2019-08-14T11:07:16.433 回答