2
我正在使用schematron編寫一些針對XML文件的檢查。使用schematron獲取xml中的重複屬性
我想記下一張支票,以便在xml中的任何標記中不得有重複的屬性'id'
。
請注意,屬性'id'
可以發生在整個xml的任何元素。
我發現了一些與此相關的東西,但是這隻適用於使用兄弟姐妹功能的兄弟姐妹。
請建議。
我正在使用schematron編寫一些針對XML文件的檢查。使用schematron獲取xml中的重複屬性
我想記下一張支票,以便在xml中的任何標記中不得有重複的屬性'id'
。
請注意,屬性'id'
可以發生在整個xml的任何元素。
我發現了一些與此相關的東西,但是這隻適用於使用兄弟姐妹功能的兄弟姐妹。
請建議。
這是我使用的方法。對於每個可能具有id屬性的元素,在整個文檔中執行XPath語句是非常低效的。所以,我使用了一個xsl:鍵。以下解決方案使用ISO Schematron。
<schema xmlns="http://purl.oclc.org/dsdl/schematron"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
queryBinding="xslt2" schemaVersion="ISO19757-3">
<xsl:key name="xmlid" match="*[@id]" use="@id"/>
<pattern id="duplicate_id">
<rule context="*[@id]">
<assert test="count(key('xmlid', @id)) = 1">
Duplicated id in element "<name/>" - "<value-of select='@id'/>".
</assert>
</rule>
</pattern>
</schema>
鍵緩存所有具有id
屬性的元素。該規則然後適用於具有該屬性的所有元素。斷言只是計算與id
屬性相匹配的匹配數,並且如果計數不是一個,則會生成一條錯誤消息。