1

我正在开发一些软件,它可以生成一个用户界面,用于将数据输入到一个非常复杂的 XML 文件中。我有一个输入文本文件,它描述了要呈现给用户的 GUI 字段,以及 XML 文件中元素存储的 XPath。因此,例如,给定以下 XML:

<rootDoc>
    <A>
        <B someAttr="Hello"/>
   </A>
</rootDoc>

我可能会显示一个带有 XPath 为“/A/B/@someAttr”的文本框的 GUI 字段。这样,我知道从哪里读取原始值以显示在文本框中,然后我也知道当用户单击“确定”时将其存储回哪里。这一切都很好,我让它工作。现在的问题 -

有大量的 XSD 描述了 XML 文件的结构、需要哪些字段以及有关字符串字段的数据(即最大字段长度等......)所以,对于我上面非常简单的示例,可能有成为如下的 XSD(如果这不是有效的 XSD,我深表歉意,我只是想弄清楚这一点......):

<schema>
    <complexType name="B">
        <complexContent>
            <attribute name="someAttr" use="required"/>
        </complexContent>
    </complexType>

    <complexType name="A">
        <sequence>
            <element name="B" type="B" minOccurs="0"/>
        </sequence>
     </complexType>
</schema>

现在,鉴于我知道 GUI 字段的 XPath 是 /A/B/@someAttr,.NET 中是否有某种方法可以获取与 @someAttr 关联的 XSD 元素?例如,我将使用它来验证该字段的格式是否正确;我还可以根据需要“标记”GUI 字段等。请注意,我不是在寻找如何针对 XSD 验证 XML —— 我希望在显示 GUI 时进行“处理”,以便我可以立即在 GUI 上标记必填字段,或将最大字段长度设置为 XSD 中表示的长度,等等。

请注意,我在 C# 中对此进行了编码,因此将不胜感激 .NET 特定的指针。

编辑:另一种表述方式可能是,“给定一个 XSD,以及一个表示从该 XSD 描述的 XML 中选择的元素或属性的 xpath,有没有办法获取表示模式的 XSD 块对于将由 xpath 表达式选择的元素或属性?”

4

1 回答 1

0

这是看起来很简单但实际上并非如此的问题之一。将模式类型分配给标签的过程称为“类型关联”,它对标签出现的上下文很敏感。事实证明,您无法预测哪种模式类型适用于特定标记,除非您从开始到标记出现的位置对文档执行模式验证。

W3C 联盟(XML 和 XML Schema 规范的作者)已经指定了 XML 处理器应该如何公开其类型关联信息。该信息称为“Post Schema Validation Infoset”或简称 PSVI。

看起来 .Net 中似乎支持 PSVI:https ://msdn.microsoft.com/en-us/library/system.xml.schema.extensions%28v=vs.110%29.aspx

于 2015-12-09T14:24:41.730 回答