【问题标题】:XML to XSD transformationXML 到 XSD 的转换
【发布时间】:2018-05-12 06:03:32
【问题描述】:

我在 XSD 文件中翻译了一个 XML。当我尝试在 SUP 中导入/使用 XSD 文件时,我收到“执行错误”:

"Cannot resolve namespace URI for qualified name: sap:label"

XML 和 XSD 都是自动创建的(由 SAP XML 和 http://www.freeformatter.com/ XSD),所以我需要一些指导:D

这是 XML:

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="1.0" 
  xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" 
  xmlns:gp="http://www.sap.com/Protocols/SAPData/GenericPlayer" 
  xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
  xmlns:sap="http://www.sap.com/Protocols/SAPData">
    <edmx:DataServices m:DataServiceVersion="2.0">
        <Schema Namespace="Z_SERVICE_BANK_V3" 
                xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
            <EntityType Name="Bank" sap:content-version="1">
                <Key>
                    <PropertyRef Name="bankCountry"/>
                    <PropertyRef Name="bankID"/>
                </Key>
                <Property Name="bankCountry" Type="Edm.String" Nullable="false" MaxLength="3" sap:label="Bank Country" sap:filterable="false"/>
                <Property Name="bankID" Type="Edm.String" Nullable="false" MaxLength="15" sap:label="Bank Key" sap:filterable="false"/>
                <Property Name="bankName" Type="Edm.String" MaxLength="60" sap:label="Bank name" sap:filterable="false"/>
                <Property Name="region" Type="Edm.String" MaxLength="3" sap:label="Region" sap:filterable="false"/>
                <Property Name="street" Type="Edm.String" MaxLength="35" sap:label="Street" sap:filterable="false"/>
                <Property Name="city" Type="Edm.String" MaxLength="35" sap:label="City" sap:filterable="false"/>
            </EntityType>
            <EntityContainer Name="Z_SERVICE_BANK_V3" m:IsDefaultEntityContainer="true">
                <EntitySet Name="BankCollection" EntityType="Z_SERVICE_BANK_V3.Bank" sap:content-version="1"/>
            </EntityContainer>
        </Schema>
    </edmx:DataServices>
</edmx:Edmx>

这里是 XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/ado/2008/09/edm">
    <xs:element name="Schema">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="EntityType">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Key">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="PropertyRef" maxOccurs="unbounded" minOccurs="0">
                                            <xs:complexType>
                                                <xs:simpleContent>
                                                    <xs:extension base="xs:string">
                                                        <xs:attribute type="xs:string" name="Name" use="optional"/>
                                                    </xs:extension>
                                                </xs:simpleContent>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="Property" maxOccurs="unbounded" minOccurs="0">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute type="xs:string" name="Name" use="optional"/>
                                            <xs:attribute type="xs:string" name="Type" use="optional"/>
                                            <xs:attribute type="xs:string" name="Nullable" use="optional"/>
                                            <xs:attribute type="xs:byte" name="MaxLength" use="optional"/>
                                            <xs:attribute xmlns:sap="http://www.sap.com/Protocols/SAPData" ref="sap:label"/>
                                            <xs:attribute xmlns:sap="http://www.sap.com/Protocols/SAPData" ref="sap:filterable"/>
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute type="xs:string" name="Name"/>
                        <xs:attribute xmlns:sap="http://www.sap.com/Protocols/SAPData" ref="sap:content-version"/>
                    </xs:complexType>
                </xs:element>
                <xs:element name="EntityContainer">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="EntitySet">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute type="xs:string" name="Name"/>
                                            <xs:attribute type="xs:string" name="EntityType"/>
                                            <xs:attribute xmlns:sap="http://www.sap.com/Protocols/SAPData" ref="sap:content-version"/>
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute type="xs:string" name="Name"/>
                        <xs:attribute xmlns:met="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" ref="met:IsDefaultEntityContainer"/>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:attribute type="xs:string" name="Namespace"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

有什么想法吗?

【问题讨论】:

  • 我使用同一个站点freeformatter.com 来“验证”这两个文件。我收到同样的错误,但我不明白:D Src-resolve.4.2:错误解决组件'sap:label'。检测到“sap:label”在命名空间“sap.com/Protocols/SAPData”中,但来自该命名空间的组件无法从架构文档“null”中引用。如果这是不正确的命名空间,可能需要更改“sap:label”的前缀。如果这是正确的命名空间,则应将适当的“导入”标记添加到“空”。

标签: xml xsd


【解决方案1】:

您提供的 XML 示例在多个命名空间中包含元素和属性:

XSD 模式文档为单个目标命名空间声明组件(元素、属性、类型);您将需要至少四个模式文档来声明 XML 文档中的所有元素和属性。

您生成的 XSD 涵盖了文档的一部分,而不是全部(它从 {http://schemas.microsoft.com/ado/2008/09/edm}Schema 元素开始,而不是从 {http://schemas.microsoft.com/ado/2007/06/edmx}Edmx 元素开始),并且它没有 xsl:import for其他命名空间。简短的回答:要么你没有适当地调用模式生成器,要么它不取决于你设置它的任务。您可能需要 (1) 更强大的黑盒解决方案或 (2) 更好地理解 XSD 及其使用,或两者兼而有之。

但在短期内——所有涉及的命名空间都是由大型有能力的技术组织定义的。为什么要为这些命名空间编写自己的模式?您是否从命名空间的所有者那里寻找过定义这些格式的 XSD 架构文档?

【讨论】:

  • 嗨,XML 和 XSD 不是手动生成的,它们是由 SAP 生成的。我只是想了解这个问题,向 SAP 专家提出一个更好的问题,以解决他的问题:)。
  • 是的,您明确表示 XSD 不是手动制作的。如果您想修复问题,您可以找到更好的方法来生成架构或了解架构的工作原理(或查找相关名称空间的所有者创建的架构)。如果您想向他人解释问题,您别无选择;您必须从理解问题开始,这意味着您必须从学习 XSD 架构文档和命名空间如何交互开始。
猜你喜欢
  • 2020-07-22
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 2012-08-31
相关资源
最近更新 更多