BaseX:尝试在 XQuery 更新工具中的名称空间之间移动元素
BaseX: Trying to move elements between namespaces in XQuery Update Facility
我想规范化 XSD 输入文件以将 xs:
放在任何 XSD 元素之前而不 xs:
以 XQuery 为前缀。
copy $c:=doc("test.xsd")
modify
(
if($c/schema)
then
(
for $item in $c//*
where substring($item/text(), 1, 3) != "xs:"
return rename node $item as concat("xs:", $item/text())
)
else ()
)
return $c
运行 输入 XSD 上的此 xqy 没有 xs:
前缀 returns 输入文件不变。我确实更新了 $c
和 return。那怎么了?
输入文件:
<?xml version="1.0"?>
<schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<element name="note" type="xs:string"/>
</schema>
预期输出:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note" type="xs:string"/>
</xs:schema>
PS:看来我的问题引起了混乱。我需要 xs:
存在,因为我有另一个文本处理程序,它只处理带有 xs:
前缀的元素。
这应该可行(与您的方法非常相似):
copy $doc := doc("test.xsd")
modify (
if($doc/*:schema) then (
for $item in $doc//*
let $name := name($item)
where not(starts-with($name, 'xs:'))
let $new-name := xs:QName('xs:' || replace($name, '^.+:', ''))
return rename node $item as $new-name
)
else ()
)
return $doc
我想规范化 XSD 输入文件以将 xs:
放在任何 XSD 元素之前而不 xs:
以 XQuery 为前缀。
copy $c:=doc("test.xsd")
modify
(
if($c/schema)
then
(
for $item in $c//*
where substring($item/text(), 1, 3) != "xs:"
return rename node $item as concat("xs:", $item/text())
)
else ()
)
return $c
运行 输入 XSD 上的此 xqy 没有 xs:
前缀 returns 输入文件不变。我确实更新了 $c
和 return。那怎么了?
输入文件:
<?xml version="1.0"?>
<schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<element name="note" type="xs:string"/>
</schema>
预期输出:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note" type="xs:string"/>
</xs:schema>
PS:看来我的问题引起了混乱。我需要 xs:
存在,因为我有另一个文本处理程序,它只处理带有 xs:
前缀的元素。
这应该可行(与您的方法非常相似):
copy $doc := doc("test.xsd")
modify (
if($doc/*:schema) then (
for $item in $doc//*
let $name := name($item)
where not(starts-with($name, 'xs:'))
let $new-name := xs:QName('xs:' || replace($name, '^.+:', ''))
return rename node $item as $new-name
)
else ()
)
return $doc