允许任何具有已定义前缀的属性



我正在研究OFMX,这是一种基于AIXM的XML交换格式。该模式正确地验证公共可用文件,但是,当OFMX在内部使用时,会使用不属于该模式的许多属性。

这里有一个简单有效的OFMX文件:

<?xml version="1.0" encoding="UTF-8"?>
<OFMX-Snapshot xmlns:xsi="http://schema.openflightmaps.org/0/OFMX-Snapshot.xsd" version="0" origin="rubygem aixm-0.3.9" namespace="daf19610-f43b-4db3-80b7-602d9083dc32" created="2020-03-03T10:25:18+01:00" effective="2020-02-27T00:00:00+01:00">
<Ahp source="LF|AD|AD-2.LFBA|2020-02-27|17">
<AhpUid region="LF">
<codeId>LFBA</codeId>
</AhpUid>
<OrgUid region="LF">
<txtName>FRANCE</txtName>
</OrgUid>
<txtName>AGEN LA GARENNE</txtName>
<codeIcao>LFBA</codeIcao>
<codeType>AD</codeType>
<geoLat>44.17472222N</geoLat>
<geoLong>000.59055556E</geoLong>
<codeDatum>WGE</codeDatum>
<valElev>204</valElev>
<uomDistVer>FT</uomDistVer>
<valMagVar>0.0</valMagVar>
</Ahp>
</OFMX-Snapshot>

为了加快速度,非公共(本地(处理可能会添加dbid:等属性

<Ahp source="LF|AD|AD-2.LFBA|2020-02-27|17" dbid="1234">

我不想用这种非公共属性定义来污染模式,因此我正在寻找一种微创的方式来允许它们。

允许任何带有前缀下划线的属性(如_dbid(都是一个解决方案,但AFAIK不可能在模式中定义通配符属性。

是否有替代方案,例如,像local:dbid这样的本地命名空间可能与anyAttribute一起,对根元素进行尽可能少的修改?

在XML中实现这一点的正确方法是将属性放在命名空间中,将其写为db:id="1234",并为db前缀声明命名空间。

然后,可以编写模式以允许(a(特定名称空间中的任何属性,或(b(使用具有适当namespace属性(例如namespace="##other"(的xs:anyAttribute通配符的任何名称空间中任何属性。

如果您想以这种方式使所有元素声明都是可扩展的,通常的方法是通过限制从包含通配符的类型派生所有元素类型。

最新更新