Действительно ли это допустимо, чтобы иметь 'выбор' элементов 'группы' при определении XML-схемы (XSD)

Обновление для Swift 4

Я попробовал несколько разных вариантов создания нескольких пользователей из одной учетной записи, но это, безусловно, лучшее и самое простое решение.

Оригинальный ответ Nico

Сначала сконфигурируйте firebase в файле AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    FirebaseApp.configure()
    FirebaseApp.configure(name: "CreatingUsersApp", options: FirebaseApp.app()!.options)

    return true
}

Добавьте следующий код в действие, в котором вы создаете учетные записи.

            if let secondaryApp = FirebaseApp.app(name: "CreatingUsersApp") {
                let secondaryAppAuth = Auth.auth(app: secondaryApp)

                // Create user in secondary app.
                secondaryAppAuth.createUser(withEmail: email, password: password) { (user, error) in
                    if error != nil {
                        print(error!)
                    } else {
                        //Print created users email.
                        print(user!.email!)

                        //Print current logged in users email.
                        print(Auth.auth().currentUser?.email ?? "default")

                        try! secondaryAppAuth.signOut()

                    }
                }
            }
        }

9
задан ekad 2 April 2017 в 12:43
поделиться

3 ответа

Я не эксперт XML, хотя я использую его довольно много. Это не способ, которым я обычно делал бы этот вид структуры. Я предпочел бы отдельные составные типы, а не выбор двух групп (см. самый конец этого ответа).

Я подозреваю, что проблема состоит в том, что ReservationGroup и CancellationGroup запускаются с того же элемента, в этом случае Вы нарушите Ограничение Компонента Схемы: Уникальная Атрибуция Частицы (ниже).

http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/#cos-nonambig

Ограничение компонента схемы: уникальная атрибуция частицы

Модель содержания должна быть сформирована таким образом это во время · проверка · из последовательности объекта информации об элементе, компонент частицы, содержавший непосредственно, косвенно или · неявно · там, с которым можно попытаться к · проверьте · каждый объект в последовательности в свою очередь может быть исключительно определен, не исследуя содержание или атрибуты того объекта, и ни без какой информации об объектах в остатке от последовательности.

Примечание: Это ограничение восстанавливает для XML-схемы эквивалентные ограничения [XML 1.0 (Второй Выпуск)] и SGML. Учитывая присутствие групп замены элемента и подстановочных знаков, краткое выражение этого ограничения является трудным, посмотрите Анализ Уникального Ограничения Атрибуции Частицы (ненормативного) (§H) для дальнейшего обсуждения.

Например, эти две группы ниже недопустимы в том же выборе, потому что каждый их первый элемент является "именем", что означает, что Вы не можете определить, на какую группу Вы смотрите. Однако первый элемент ReservationGroup, отличается от группы Отмены (вновь заявите и cancDate, возможно), затем, который допустим.

Править: Я никогда не сталкивался с этим видом проблемы прежде, и я думаю ее захватывающее, что определения групп являются полностью юридическими, но если Вы соединяете их в выборе, тот выбор становится недопустимым из-за определения каждой группы.

Группы, которые не могут сформировать легальный выбор

<xs:group name="ReservationGroup">
    <xs:sequence>
        <xs:element name="date"/>
        <xs:element name="name"/>
        <xs:element name="address"/>
    </xs:sequence>
</xs:group>

<xs:group name="CancellationGroup">
    <xs:sequence>
        <xs:element name="date"/>
        <xs:element name="name"/>
        <xs:element name="address"/>
    </xs:sequence>
</xs:group>

Группы, которые могут сформировать легальный выбор

<xs:group name="ReservationGroup">
    <xs:sequence>
        <xs:element name="resDate"/>
        <xs:element name="name"/>
        <xs:element name="address"/>
    </xs:sequence>
</xs:group>

<xs:group name="CancellationGroup">
    <xs:sequence>
        <xs:element name="cancDate"/>
        <xs:element name="name"/>
        <xs:element name="address"/>
    </xs:sequence>
</xs:group>

Как я упомянул выше, я сделаю этот вид вещи с составными типами. Да, это добавляет другой элемент, но это кажется очевидным путем, и мне нравится очевидность.

<xs:complexType name="HeaderType">
  <xs:sequence>
    <xs:element name="reservation-number" type="ReservationNumberType" minOccurs="1" maxOccurs="1" nillable="false" />
    <xs:choice minOccurs="1" maxOccurs="1">
      <xs:element name="reservation" type="ReservationType" />
      <xs:element name="cancellation" type="CancellationType" />
    </xs:choice>
  </xs:sequence>
</xs:complexType>
10
ответ дан 4 December 2019 в 15:30
поделиться

Да. Это было, потому что и ReservationGroup и CancellationGroup имели тот же первый элемент - элемент 'типа резервирования' с фиксированным значением 'Резервирования' в ReservationGroup и 'Отмены' в Cancellationgroup соответственно.

2
ответ дан 4 December 2019 в 15:30
поделиться

Допустимо ли это, зависит от содержания групп: если они - 'последовательность' или группы модели 'выбора', это совершенно законно; 'все' образцовые группы более проблематичны и обычно не разрешенные в этом случае.

1
ответ дан 4 December 2019 в 15:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: