创建Veloconnect服务器(使用PHP),尝试从xsd模式生成xml文件

创建Veloconnect服务器(使用PHP),尝试从xsd模式生成xml文件,php,xml,xsd,Php,Xml,Xsd,所以我的任务是在php环境中创建一个工作环境 这不是我第一次创建这样的服务器,我认为这不会是一个问题。但是veloconnect命令我使用xsd文件为服务器应答生成xml文件。这就是它变得多毛的地方 因此,我目前正在尝试使用,首先从xsd源代码生成php类,然后使用这些类生成对象,并将它们序列化到我再次发送的xml文件中 我能够用一个较小的测试文件完成每一个重要步骤。为这个创建yml配置文件并不难。但在我的情况下,这有点难,我会一个接一个地出错 这是我的yml配置文件 # config.yml

所以我的任务是在php环境中创建一个工作环境

这不是我第一次创建这样的服务器,我认为这不会是一个问题。但是veloconnect命令我使用xsd文件为服务器应答生成xml文件。这就是它变得多毛的地方

因此,我目前正在尝试使用,首先从xsd源代码生成php类,然后使用这些类生成对象,并将它们序列化到我再次发送的xml文件中

我能够用一个较小的测试文件完成每一个重要步骤。为这个创建yml配置文件并不难。但在我的情况下,这有点难,我会一个接一个地出错

这是我的yml配置文件

# config.yml
# Linux Users: PHP Namespaces use back slash \ rather than a forward slash /
# So for destinations_php, the namespace would be TestNs\MyApp

xsd2php:
  namespaces:
    'urn:veloconnect:profile-1.3': '' 
    'urn:veloconnect:transaction-1.0': 'vct'
    'urn:oasis:names:specification:ubl:schema:xsd:UnspecializedDatatypes-1.0': 'udt'
    'urn:oasis:names:specification:ubl:schema:xsd:CoreComponentTypes-1.0': 'cct'
    'urn:oasis:names:specification:ubl:schema:xsd:CoreComponentParameters-1.0': 'ccts'   
  destinations_php:
    '': objects/php
    'vct': objects/php
    'udt': objects/php
    'cct': objects/php
    'ccts': objects/php
  destinations_jms:
    '': objects/jms
    'vct': objects/jms
    'udt': objects/jms
    'cct': objects/jms
    'ccts': objects/jms
  destinations_validation:
    '': objects/validation
    'vct': objects/validation
    'udt': objects/validation
    'cct': objects/validation
    'ccts': objects/validation
    
#  aliases: # optional
#    'http://www.example.org/test/':
#      MyCustomXSDType:  'MyCustomMappedPHPType'
  naming_strategy: short # optional and default
  path_generator: psr4 # optional and default
#  known_locations: # optional
#    "http://www.example.org/test/somefile.xsd": somefile.xsd
  known_namespace_locations: # optional
    "urn:veloconnect:profile-1.3": xsd/profile-1.3.xsd
    #"urn:veloconnect:catalog-1.1": xsd/catalog-1.1.xsd
xsd文件

<?xml version="1.0" encoding="utf-8" ?>
<!-- 
****************************************************************************** 
Copyright (C) Verbund Service und Fahrrad e. V. (2019)

Dieses Dokument, sowie Übersetzungen desselben, dürfen uneingeschränkt kopiert
und verteilt werden, vorausgesetzt, der obige Urheberrechtshinweis und diese
und die folgenden Bestimmungen sind in jeder Kopie enthalten.

Veränderungen, die über die Erfordernisse einer Übersetzung hinausgehen, sind
nur erlaubt, wenn die veränderte Version nicht den Namen veloconnect benützt
und deutliche Hinweise darauf enthält, dass diese geänderte Version auf der
veloconnect-Spezifikation beruht und inhaltliche Veränderungen vorgenommen
worden sind. Ferner ist der Urheber dieser Modifikationen zu benennen.

Zweck dieser Spezifikation ist die Implementierung von Software. Der Urheber
dieser Spezifikation weist ausdrücklich darauf hin, dass sich aus dem
Urheberrecht an dieser Spezifikation keinerlei Rechte an diesen
Implementierungen ableiten und umgekehrt aus den Implementierungen keinerlei
Ansprüche an den Urheber der Spezifikation entstehen. Insbesondere übernimmt
der Urheber dieser Spezifikation keinerlei Verantwortung für die Konformität
einer Implementierung zur veloconnect-Spezifikation und verlangt auch keine
Lizenzgebühren für die Benutzung der Spezifikation.

Der Urheber übernimmt keinerlei Gewährleistung, insbesondere nicht dafür, dass
diese Spezifikation fehlerfrei oder für einen bestimmten Zweck geeignet
ist. Die hiermit gewährten Rechte sind unwiderruflich.
****************************************************************************** 
-->


<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="urn:veloconnect:profile-1.3"
    xmlns:vct="urn:veloconnect:transaction-1.0"
    xmlns:udt="urn:oasis:names:specification:ubl:schema:xsd:UnspecializedDatatypes-1.0"
    targetNamespace="urn:veloconnect:profile-1.3"
    elementFormDefault="qualified" attributeFormDefault="unqualified">

    <xsd:import
        namespace="urn:oasis:names:specification:ubl:schema:xsd:UnspecializedDatatypes-1.0" schemaLocation="ubl/common/UBL-UnspecializedDatatypes-1.0.xsd"/>
    <xsd:import namespace="urn:veloconnect:transaction-1.0"  schemaLocation="transaction-1.0.xsd"/>

    <xsd:element name="GetProfileRequest"
        type="vct:RequestType">
        <xsd:annotation>
            <xsd:documentation>Anfrage zur Ermittlung der Fähigkeiten des
                Servers.
                Jeder veloconnect-konforme Server muss diese Anfrage verarbeiten können.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>

    <xsd:element name="GetProfileResponse">
        <xsd:annotation>
            <xsd:documentation>Antwort auf GetProfileRequest.</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="vct:ResponseType">
                    <xsd:sequence>
                        <xsd:element name="SellerName" type="udt:TextType"
                            maxOccurs="1" minOccurs="0" />
                        <xsd:element name="Message" type="udt:TextType"
                            maxOccurs="1" minOccurs="0" />
                        <xsd:element ref="VeloconnectProfile" />
                    </xsd:sequence>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="VeloconnectProfile">
        <xsd:annotation>
            <xsd:documentation>Information über die Fähigkeiten des Servers.
                Die implements-Elemente informieren über die unterstützten
                Transaktionen.
                Die property-Elemente enthalten einige für die Implementierung
                spezifischen
                Informationen als key/value-Paare.
                UnsupportedQuery und SpecialRequestReference beziehen sich auf die Belegverwaltung.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Implements" type="ImplementsType"
                    minOccurs="0" maxOccurs="unbounded" />
                <xsd:element name="Property" type="PropertyType"
                    minOccurs="0" maxOccurs="unbounded" />
                <xsd:element name="UnsupportedQuery" type="UnsupportedQueryType"
                    minOccurs="0" maxOccurs="unbounded" />
                <xsd:element name="SpecialRequestReference" type="RequestReferenceType"
                    minOccurs="0" maxOccurs="unbounded" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:complexType name="ImplementsType">
        <xsd:annotation>
            <xsd:documentation>Information über implementierte Operationen und
                Transaktionen, sowie unterstützte Bindungen. Die Informationen über
                eine
                unterstützte Transaktion gelten für alle Operationen dieser Transaktion.
                Eine Angabe bei URI ist nur erforderlich, wenn diese Operation oder
                Transaktion unter einer anderen URL anzusprechen ist.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:choice>
                <xsd:element name="Transaction" type="TransactionType" />
                <xsd:element name="Operation" type="OperationType" />
            </xsd:choice>
            <xsd:element name="Binding" type="BindingType" />
            <xsd:element name="URI" type="xsd:anyURI" minOccurs="0"
                maxOccurs="1" />
        </xsd:sequence>
    </xsd:complexType>

  <xsd:complexType name="PropertyType">
    <xsd:annotation>
      <xsd:documentation>Eigenschaft der Serverimplementierung.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
        <xsd:element name="Key" type="PropertyKeyType"/>
    <xsd:element name="Value" type="xsd:normalizedString"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="RequestReferenceType">
    <xsd:annotation>
      <xsd:documentation>Spezielle Refeernzen zur Abfrage von Angeboten.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
        <xsd:element name="RequestReference" type="xsd:normalizedString"/>
        <xsd:element name="Description" type="xsd:normalizedString"/>
    </xsd:sequence>
  </xsd:complexType>

    <xsd:simpleType name="OperationType">
        <xsd:annotation>
            <xsd:documentation>Liste der Operationen.</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:normalizedString">
            <xsd:enumeration value="GetStatus">
                <xsd:annotation>
                    <xsd:documentation>GetStatus</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="Rollback">
                <xsd:annotation>
                    <xsd:documentation>Rollback</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="GetItemDetails">
                <xsd:annotation>
                    <xsd:documentation>GetItemDetails</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="GetItemDetailsList">
                <xsd:annotation>
                    <xsd:documentation>GetItemDetailsList</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="GetClassificationScheme">
                <xsd:annotation>
                    <xsd:documentation>GetClassificationScheme</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="OfferQuery">
                <xsd:annotation>
                    <xsd:documentation>OfferQuery</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="OfferDetails">
                <xsd:annotation>
                    <xsd:documentation>OfferDetails</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="OrderConfirmationQuery">
                <xsd:annotation>
                    <xsd:documentation>OrderConfirmationQuery</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="OrderConfirmationDetails">
                <xsd:annotation>
                    <xsd:documentation>OrderDetails</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="DeliveryNoteQuery">
                <xsd:annotation>
                    <xsd:documentation>DeliveryNoteQuery</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="DeliveryNoteDetails">
                <xsd:annotation>
                    <xsd:documentation>DeliveryNoteDetails</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="InvoiceInformationQuery">
                <xsd:annotation>
                    <xsd:documentation>InvoiceInformationQuery</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="InvoiceInformationDetails">
                <xsd:annotation>
                    <xsd:documentation>InvoiceInformationDetails</xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleType>

  <xsd:simpleType name="TransactionType">
    <xsd:annotation>
      <xsd:documentation>Liste der Transaktionen.</xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:normalizedString">
      <xsd:enumeration value="Order">
    <xsd:annotation>
      <xsd:documentation>Order</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="OrderInOnlineShop">
    <xsd:annotation>
      <xsd:documentation>OrderInOnlineShop</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="TextSearch">
    <xsd:annotation>
      <xsd:documentation>Volltextsuche</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="BindingType">
    <xsd:annotation>
      <xsd:documentation>Liste der Bindungen</xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:normalizedString">
      <xsd:enumeration value="URL">
    <xsd:annotation>
      <xsd:documentation>URL: Anfrage per http (GET oder POST), 
Parameter als Querystring.</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="URL-S">
    <xsd:annotation>
      <xsd:documentation>URL-S : Wie URL nur mit https.</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="XML-POST">
    <xsd:annotation>
      <xsd:documentation>XML-POST: Request wird als XML-Dokument per http (POST) übertragen.</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="XML-POST-S">
    <xsd:annotation>
      <xsd:documentation>XML-POST-S: Wie POST, nur mit https.</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="PropertyKeyType">
    <xsd:annotation>
      <xsd:documentation>Mögliche Eigenschaften der Serverimplemtierung.</xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:normalizedString">
      <xsd:enumeration value="RecommendedRetailPrice.Netto">
    <xsd:annotation>
      <xsd:documentation>RecommendedRetailPrice.Netto: Indikator ob die empfohlenen Verkaufspreise als Nettopreise angegeben werden. 
Mögliche Werte: 
false (empfohlener VK ist brutto), 
true (empfohlener VK ist netto)</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="quantityUnitCode.EA">
    <xsd:annotation>
      <xsd:documentation>quantityUnitCode.EA: Indikator ob grundsätzlich nur Stück als Einheit verwendet wird. 
Mögliche Werte: false, true</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="OrderInOnlineShop.TransactionID">
    <xsd:annotation>
      <xsd:documentation>OrderInOnlineShop.TransactionID: Feste TransactionID für die Benutzung der OrderInOnlineShop-Transaktion. 
Muss angegeben werden, wenn diese Transaktion unterstützt wird.</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Order.DeliveryDate">
    <xsd:annotation>
      <xsd:documentation>Order.DeliveryDate: Indikator, ob terminierte Bestellungen möglich sind.
Werte:
false : nicht möglich
order : nur ein Datum für die ganze Bestellung
line  : Datum für jede Bestellzeile individuell einstellbar</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Order.Availability">
    <xsd:annotation>
      <xsd:documentation>Order.Availability: Indikator, ob Informationen zur
Lieferbarkeit zur Vergügung gestellt werden.
Werte:
true : grundsätzlich Angaben zur Lieferbarkeit
false : grundsätzlich keine Angaben zu Lieferbarkeit</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Order.Backlog">
    <xsd:annotation>
      <xsd:documentation>Order.Backlog: Indikator, wie die Nachlieferung 
gesteuert werden kann. Mögliche Werte:
false : nicht möglich
order : Nachlieferungsverhalten nur für die Bestellung einstellbar
line  : Nachlieferungsverhalten für jede Bestellzeile individuell einstellbar</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Order.BacklogDefault">
    <xsd:annotation>
      <xsd:documentation>Order.BacklogDefault: Grundsätzliches Verhalten bei nicht lieferbaren Artikeln.
Werte:
false : keine Nachlieferung
true : Nachlieferung</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
      <xsd:enumeration value="Order.ExpectingDelivery">
    <xsd:annotation>
      <xsd:documentation>Order.ExpectingDelivery: Zeitraum innerhalb dessen mit einer Lieferung zu rechnen ist; 
Wert: Zahl (Anzahl von Tagen)</xsd:documentation>
    </xsd:annotation>
      </xsd:enumeration>
    </xsd:restriction>
  </xsd:simpleType>

    <xsd:simpleType name="UnsupportedQueryType">
        <xsd:annotation>
            <xsd:documentation>Suchparameter je Belegart.</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:normalizedString">
            <xsd:enumeration value="OrderConfirmation-OrderID">
                <xsd:annotation>
                    <xsd:documentation>OrderID in OrderConfirmationQueryRequest
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="DeliveryNote-OrderID">
                <xsd:annotation>
                    <xsd:documentation>OrderID in DeliveryNoteQueryRequest
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="Invoice-OrderID">
                <xsd:annotation>
                    <xsd:documentation>OrderID in InvoiceInformationQueryRequest
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="DeliveryNote-OrderConfirmationID">
                <xsd:annotation>
                    <xsd:documentation>OrderConfirmationID in DeliveryNoteQueryRequest
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="Invoice-OrderConfirmationID">
                <xsd:annotation>
                    <xsd:documentation>OrderConfirmationID in InvoiceInformationQueryRequest
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
            <xsd:enumeration value="Invoice-DeliveryNoteID">
                <xsd:annotation>
                    <xsd:documentation>DeliveryNoteID in InvoiceInformationQueryRequest
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleType>


</xsd:schema>

恐怕我真的需要一些帮助来完成这项工作,我已经调试这些工具好几天了。我遗漏了什么吗?互联网上没有任何关于这方面的有用文档或线索。我非常感谢每一个提示、替代解决方案或工具来解决这个问题。

好的。。。最后我自己找到了答案。第一个名称空间应该是veloconnect,之后我只需要添加缺少的名称空间。因此,一个正在工作的yml文件现在看起来像是,如果有人在未来有同样的问题

# config.yml
# Linux Users: PHP Namespaces use back slash \ rather than a forward slash /
# So for destinations_php, the namespace would be TestNs\MyApp

xsd2php:
  namespaces:
    'urn:veloconnect:profile-1.3': 'veloconnect' 
    'urn:veloconnect:transaction-1.0': 'vct'
    'urn:oasis:names:specification:ubl:schema:xsd:UnspecializedDatatypes-1.0': 'udt'
    'urn:oasis:names:specification:ubl:schema:xsd:CoreComponentTypes-1.0': 'cct'
    'urn:oasis:names:specification:ubl:schema:xsd:CoreComponentParameters-1.0': 'ccts'   
  destinations_php:
    'veloconnect': objects/php
    'vct': objects/php
    'udt': objects/php
    'cct': objects/php
    'ccts': objects/php
  destinations_jms:
    'veloconnect': objects/jms
    'vct': objects/jms
    'udt': objects/jms
    'cct': objects/jms
    'ccts': objects/jms
  destinations_validation:
    'veloconnect': objects/validation
    'vct': objects/validation
    'udt': objects/validation
    'cct': objects/validation
    'ccts': objects/validation
    
#  aliases: # optional
#    'http://www.example.org/test/':
#      MyCustomXSDType:  'MyCustomMappedPHPType'
  naming_strategy: short # optional and default
  path_generator: psr4 # optional and default
#  known_locations: # optional
#    "http://www.example.org/test/somefile.xsd": somefile.xsd
  known_namespace_locations: # optional
    "urn:veloconnect:profile-1.3": xsd/profile-1.3.xsd
    #"urn:veloconnect:catalog-1.1": xsd/catalog-1.1.xsd
# config.yml
# Linux Users: PHP Namespaces use back slash \ rather than a forward slash /
# So for destinations_php, the namespace would be TestNs\MyApp

xsd2php:
  namespaces:
    'urn:veloconnect:profile-1.3': 'veloconnect' 
    'urn:veloconnect:transaction-1.0': 'vct'
    'urn:oasis:names:specification:ubl:schema:xsd:UnspecializedDatatypes-1.0': 'udt'
    'urn:oasis:names:specification:ubl:schema:xsd:CoreComponentTypes-1.0': 'cct'
    'urn:oasis:names:specification:ubl:schema:xsd:CoreComponentParameters-1.0': 'ccts'   
  destinations_php:
    'veloconnect': objects/php
    'vct': objects/php
    'udt': objects/php
    'cct': objects/php
    'ccts': objects/php
  destinations_jms:
    'veloconnect': objects/jms
    'vct': objects/jms
    'udt': objects/jms
    'cct': objects/jms
    'ccts': objects/jms
  destinations_validation:
    'veloconnect': objects/validation
    'vct': objects/validation
    'udt': objects/validation
    'cct': objects/validation
    'ccts': objects/validation
    
#  aliases: # optional
#    'http://www.example.org/test/':
#      MyCustomXSDType:  'MyCustomMappedPHPType'
  naming_strategy: short # optional and default
  path_generator: psr4 # optional and default
#  known_locations: # optional
#    "http://www.example.org/test/somefile.xsd": somefile.xsd
  known_namespace_locations: # optional
    "urn:veloconnect:profile-1.3": xsd/profile-1.3.xsd
    #"urn:veloconnect:catalog-1.1": xsd/catalog-1.1.xsd