给出了几个示例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和/或类型。在第一种情况下,这些类型似乎使用saml命名空间别名/绑定来命名空间。示例:
<attributeGroup ref="saml:IDNameQualifiers"/>在第二个例子中,它们使用ds命名空间别名/绑定来命名空间。示例:
<element ref="ds:SignedInfo"/>但是,在Firefox中查看这两个文档时,我都看不到这些名称空间别名或绑定是在哪个文档中定义的。
第一个文档的根元素提供了一个targetNamespace属性:
targetNamespace="urn:oasis:names:tc:SAML:2.0:assertion"第二种情况是:
targetNamespace="http://www.w3.org/2000/09/xmldsig#"但是,第一个化名为saml,第二个别名命名为ds,这仅仅是惯例吗?如果是这样的话,在哪里可以找到这些惯例呢?如果没有,那么解决这些命名空间的方法是什么?
发布于 2017-06-08 11:39:40
命名空间绑定是在带有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#"
[...]>这些绑定不仅适用于元素和属性名称(在模式中,这也是一个XML文档,它们主要位于XML命名空间中或不存在名称空间中),而且还适用于在关联模式中声明为QNames (在本例中为XML模式模式)的QNames属性值。
这是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! -->这就是为什么在引用自己的元素/属性/类型声明并具有目标命名空间的任何架构中,需要将目标命名空间绑定到前缀(或默认设置),以便在ref和type属性值中使用。
简而言之,理解这里所涉及的机制的关键思想是暂时忘记这两个.xsd文档是模式,而是将它们视为对XML有效的任何其他XML文档。更多: XML也是一个XML文档,它对.它本身。这就是XML引导自身的方式。
https://stackoverflow.com/questions/44431414
复制相似问题