SaxonJS 发出多余的命名空间属性
SaxonJS emits superfulous namespace attributes
使用 SaxonJS 时,我能够验证它产生与 Saxon 相同的输出,但有一点需要注意。似乎 SaxonJS 将为每个元素发出命名空间属性,即使在不需要它们时也是如此。我尝试调整 exclude-result-prefixes
,但这没有效果。
SaxonJS 1.2.0 输出
<CastVoteRecordReport xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd" xsi:schemaLocation="NIST_V0_cast_vote_records.xsd NIST_V0_cast_vote_records.xsd">
<CVR xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd">
<BallotStyleId xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd">_01-0052-01</BallotStyleId>
<CreatingDeviceId xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd">rd</CreatingDeviceId>
<CurrentSnapshotId xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd">i__a_aaaaaago</CurrentSnapshotId>
<CVRSnapshot xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd" ObjectId="i__a_aaaaaago">
<CVRContest xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd">
<ContestId xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd">_1GO</ContestId>
<Undervotes xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd">1</Undervotes>
</CVRContest>
...
Saxon-EE 版本 9.8.0.12 输出
<?xml version="1.0" encoding="UTF-8"?>
<CastVoteRecordReport xmlns="NIST_V0_cast_vote_records.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CVR>
<BallotStyleId>_01-0052-01</BallotStyleId>
<CreatingDeviceId>rd</CreatingDeviceId>
<CurrentSnapshotId>i__a_aaaaaago</CurrentSnapshotId>
<CVRSnapshot ObjectId="i__a_aaaaaago">
<CVRContest>
<ContestId>_1GO</ContestId>
<Undervotes>1</Undervotes>
</CVRContest>
...
SaxonJS.Transform的回调是
var transformCallback = (fragment: DocumentFragment) => {
// have to convert to string?
var div = document.createElement('div');
div.appendChild(fragment.cloneNode(true));
// replace existing output content
that.outputText(div.innerHTML);
}
Saxon-JS 1.2.0 没有(完整的、一致的)序列化器,所以问题来了,您如何生成问题中显示的词法 XML 输出?
就 XDM 数据模型而言,XML 和 XSI 命名空间确实应该在结果树中每个元素的范围内;一个好的序列化器将消除冗余的命名空间。所以这都是关于结果树如何序列化的问题。
(注意,Saxon-JS 2.0,这是测试的最后阶段,将有一个完整的序列化器。)
使用 SaxonJS 时,我能够验证它产生与 Saxon 相同的输出,但有一点需要注意。似乎 SaxonJS 将为每个元素发出命名空间属性,即使在不需要它们时也是如此。我尝试调整 exclude-result-prefixes
,但这没有效果。
SaxonJS 1.2.0 输出
<CastVoteRecordReport xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd" xsi:schemaLocation="NIST_V0_cast_vote_records.xsd NIST_V0_cast_vote_records.xsd">
<CVR xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd">
<BallotStyleId xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd">_01-0052-01</BallotStyleId>
<CreatingDeviceId xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd">rd</CreatingDeviceId>
<CurrentSnapshotId xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd">i__a_aaaaaago</CurrentSnapshotId>
<CVRSnapshot xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd" ObjectId="i__a_aaaaaago">
<CVRContest xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd">
<ContestId xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd">_1GO</ContestId>
<Undervotes xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="NIST_V0_cast_vote_records.xsd">1</Undervotes>
</CVRContest>
...
Saxon-EE 版本 9.8.0.12 输出
<?xml version="1.0" encoding="UTF-8"?>
<CastVoteRecordReport xmlns="NIST_V0_cast_vote_records.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CVR>
<BallotStyleId>_01-0052-01</BallotStyleId>
<CreatingDeviceId>rd</CreatingDeviceId>
<CurrentSnapshotId>i__a_aaaaaago</CurrentSnapshotId>
<CVRSnapshot ObjectId="i__a_aaaaaago">
<CVRContest>
<ContestId>_1GO</ContestId>
<Undervotes>1</Undervotes>
</CVRContest>
...
SaxonJS.Transform的回调是
var transformCallback = (fragment: DocumentFragment) => {
// have to convert to string?
var div = document.createElement('div');
div.appendChild(fragment.cloneNode(true));
// replace existing output content
that.outputText(div.innerHTML);
}
Saxon-JS 1.2.0 没有(完整的、一致的)序列化器,所以问题来了,您如何生成问题中显示的词法 XML 输出?
就 XDM 数据模型而言,XML 和 XSI 命名空间确实应该在结果树中每个元素的范围内;一个好的序列化器将消除冗余的命名空间。所以这都是关于结果树如何序列化的问题。
(注意,Saxon-JS 2.0,这是测试的最后阶段,将有一个完整的序列化器。)