gpt4 book ai didi

xml - xsd 架构引用和类型属性值的命名空间如何别名/绑定(bind)?

转载 作者:行者123 更新时间:2023-12-04 16:55:45 24 4
gpt4 key购买 nike

给出几个示例 XSD 定义:

http://docs.oasis-open.org/security/saml/v2.0/saml-schema-assertion-2.0.xsd

https://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd

两个 XSD 文档都定义了元素、属性、attributeGroups 和/或类型,这些元素、属性、attributeGroups 和/或类型在同一文档中自引用其他定义。在第一种情况下,这些类型似乎使用 saml 命名空间。命名空间别名/绑定(bind)。例子:

<attributeGroup ref="saml:IDNameQualifiers"/>

在第二种情况下,它们使用 ds 命名空间命名空间别名/绑定(bind)。例子:
<element ref="ds:SignedInfo"/>

但是,在 Firefox 中查看任一文档时,我无法在任一文档中看到定义了这些命名空间别名或绑定(bind)的位置。

第一个文档的根元素给出 targetNamespace属性:
targetNamespace="urn:oasis:names:tc:SAML:2.0:assertion"

和第二个一样:
targetNamespace="http://www.w3.org/2000/09/xmldsig#"

但这只是惯例将第一个别名为 saml第二个到 ds ?如果是这样,从哪里可以找到这些约定?如果没有,如何解决这些命名空间?

最佳答案

命名空间绑定(bind)是在模式的根元素中定义的(这是最佳实践) xmlns:属性:

saml-schema-assertion-2.0.xsd

<schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
[...]
targetNamespace="urn:oasis:names:tc:SAML:2.0:assertion"
[...]>

xmldsig-core-schema.xsd
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
targetNamespace="http://www.w3.org/2000/09/xmldsig#"
[...]>

这些绑定(bind)不仅适用于元素和属性名称(在架构中,也是 XML 文档,它们大多在 XML 架构命名空间或无命名空间中),也适用于 声明为 QNames 的属性值 在关联的模式中(在本例中为 the XML Schema Schema )。
ref就是这种情况和 type属性(引用自上述链接架构模式):
<xs:attribute name="ref" type="xs:QName"/>
<xs:attribute name="type" type="xs:QName"/>
<!-- observe how the declaration for the type attribute uses itself! -->

这就是为什么在任何引用其自己的元素/属性/类型声明并具有目标命名空间的模式中,该目标命名空间都需要绑定(bind)到前缀(或设为默认值)以在 ref 中使用的原因。和 type属性值。

简而言之,理解此处涉及的机制的关键思想是暂时忘记两个 .xsd 文档是模式,而是将它们视为对 XML 模式模式有效的任何其他 XML 文档。还有更多:XML Schema Schema 也是一个 XML 文档,它对...本身有效。这就是 XML Schema 自举的方式。

关于xml - xsd 架构引用和类型属性值的命名空间如何别名/绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44431414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com