【问题标题】:Allow any attribute with a defined prefix允许具有已定义前缀的任何属性
【发布时间】:2020-06-22 09:04:01
【问题描述】:

我正在研究 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 xsd namespaces attributes schema


    【解决方案1】:

    在 XML 中执行此操作的正确方法是将属性放在命名空间中,将其写为 db:id="1234",并带有 db 前缀的命名空间声明。

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

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

    【讨论】:

      猜你喜欢
      • 2014-09-10
      • 2018-11-03
      • 2016-08-16
      • 2020-12-09
      • 2014-09-15
      • 2023-03-11
      • 2016-07-29
      • 1970-01-01
      • 2018-02-07
      相关资源
      最近更新 更多