Mercurial > hg > svcore
comparison rdf/RDFImporter.cpp @ 510:af7b6e55895b
* Ensure text models are exported with text properties in RDF, and
imported back into text models again (instead of time/value models)
author | Chris Cannam |
---|---|
date | Mon, 08 Dec 2008 11:53:10 +0000 |
parents | 1b8c748fd7ea |
children | e340b2fb9471 |
comparison
equal
deleted
inserted
replaced
509:6066bde1c126 | 510:af7b6e55895b |
---|---|
28 | 28 |
29 #include "data/model/SparseOneDimensionalModel.h" | 29 #include "data/model/SparseOneDimensionalModel.h" |
30 #include "data/model/SparseTimeValueModel.h" | 30 #include "data/model/SparseTimeValueModel.h" |
31 #include "data/model/EditableDenseThreeDimensionalModel.h" | 31 #include "data/model/EditableDenseThreeDimensionalModel.h" |
32 #include "data/model/NoteModel.h" | 32 #include "data/model/NoteModel.h" |
33 #include "data/model/TextModel.h" | |
33 #include "data/model/RegionModel.h" | 34 #include "data/model/RegionModel.h" |
34 #include "data/model/WaveFileModel.h" | 35 #include "data/model/WaveFileModel.h" |
35 | 36 |
36 #include "data/fileio/FileSource.h" | 37 #include "data/fileio/FileSource.h" |
37 | 38 |
564 " <%2> rdfs:label ?label . " | 565 " <%2> rdfs:label ?label . " |
565 " } " | 566 " } " |
566 | 567 |
567 ).arg(m_uristring); | 568 ).arg(m_uristring); |
568 | 569 |
570 QString textQueryString = prefixes + QString( | |
571 | |
572 " SELECT ?label FROM <%1> " | |
573 " WHERE { " | |
574 " <%2> af:text ?label . " | |
575 " } " | |
576 | |
577 ).arg(m_uristring); | |
578 | |
569 SimpleSPARQLQuery query(s, queryString); | 579 SimpleSPARQLQuery query(s, queryString); |
570 query.setProgressReporter(reporter); | 580 query.setProgressReporter(reporter); |
571 | 581 |
572 // cerr << "Query will be: " << queryString.toStdString() << endl; | 582 // cerr << "Query will be: " << queryString.toStdString() << endl; |
573 | 583 |
624 RealTime duration; | 634 RealTime duration; |
625 | 635 |
626 bool haveTime = false; | 636 bool haveTime = false; |
627 bool haveDuration = false; | 637 bool haveDuration = false; |
628 | 638 |
629 QString label = SimpleSPARQLQuery::singleResultQuery | 639 QString label = ""; |
630 (s, labelQueryString.arg(thinguri), "label").value; | 640 bool text = (type.contains("Text") || type.contains("text")); // Ha, ha |
641 | |
642 if (text) { | |
643 label = SimpleSPARQLQuery::singleResultQuery | |
644 (s, textQueryString.arg(thinguri), "label").value; | |
645 } | |
646 | |
647 if (label == "") { | |
648 label = SimpleSPARQLQuery::singleResultQuery | |
649 (s, labelQueryString.arg(thinguri), "label").value; | |
650 } | |
631 | 651 |
632 SimpleSPARQLQuery rangeQuery(s, rangeQueryString.arg(thinguri)); | 652 SimpleSPARQLQuery rangeQuery(s, rangeQueryString.arg(thinguri)); |
633 SimpleSPARQLQuery::ResultList rangeResults = rangeQuery.execute(); | 653 SimpleSPARQLQuery::ResultList rangeResults = rangeQuery.execute(); |
634 if (!rangeResults.empty()) { | 654 if (!rangeResults.empty()) { |
635 // std::cerr << rangeResults.size() << " range results" << std::endl; | 655 // std::cerr << rangeResults.size() << " range results" << std::endl; |
680 | 700 |
681 if (!haveDuration) { | 701 if (!haveDuration) { |
682 | 702 |
683 if (dimensions == 1) { | 703 if (dimensions == 1) { |
684 | 704 |
685 // std::cerr << "SparseOneDimensionalModel" << std::endl; | 705 if (text) { |
686 model = new SparseOneDimensionalModel(m_sampleRate, 1, false); | 706 |
707 model = new TextModel(m_sampleRate, 1, false); | |
708 | |
709 } else { | |
710 | |
711 model = new SparseOneDimensionalModel(m_sampleRate, 1, false); | |
712 } | |
687 | 713 |
688 } else if (dimensions == 2) { | 714 } else if (dimensions == 2) { |
689 | 715 |
690 // std::cerr << "SparseTimeValueModel" << std::endl; | 716 if (text) { |
691 model = new SparseTimeValueModel(m_sampleRate, 1, false); | 717 |
718 model = new TextModel(m_sampleRate, 1, false); | |
719 | |
720 } else { | |
721 | |
722 model = new SparseTimeValueModel(m_sampleRate, 1, false); | |
723 } | |
692 | 724 |
693 } else { | 725 } else { |
694 | 726 |
695 // We don't have a three-dimensional sparse model, | 727 // We don't have a three-dimensional sparse model, |
696 // so use a note model. We do have some logic (in | 728 // so use a note model. We do have some logic (in |
697 // extractStructure below) for guessing whether | 729 // extractStructure below) for guessing whether |
698 // this should after all have been a dense model, | 730 // this should after all have been a dense model, |
699 // but it's hard to apply it because we don't have | 731 // but it's hard to apply it because we don't have |
700 // all the necessary timing data yet... hmm | 732 // all the necessary timing data yet... hmm |
701 | 733 |
702 // std::cerr << "NoteModel" << std::endl; | |
703 model = new NoteModel(m_sampleRate, 1, false); | 734 model = new NoteModel(m_sampleRate, 1, false); |
704 } | 735 } |
705 | 736 |
706 } else { // haveDuration | 737 } else { // haveDuration |
707 | 738 |
708 if (dimensions == 1 || dimensions == 2) { | 739 if (dimensions == 1 || dimensions == 2) { |
709 | 740 |
710 // If our units are frequency or midi pitch, we | 741 // If our units are frequency or midi pitch, we |
711 // should be using a note model... hm | 742 // should be using a note model... hm |
712 | 743 |
713 // std::cerr << "RegionModel" << std::endl; | |
714 model = new RegionModel(m_sampleRate, 1, false); | 744 model = new RegionModel(m_sampleRate, 1, false); |
715 | 745 |
716 } else { | 746 } else { |
717 | 747 |
718 // We don't have a three-dimensional sparse model, | 748 // We don't have a three-dimensional sparse model, |
720 // extractStructure below) for guessing whether | 750 // extractStructure below) for guessing whether |
721 // this should after all have been a dense model, | 751 // this should after all have been a dense model, |
722 // but it's hard to apply it because we don't have | 752 // but it's hard to apply it because we don't have |
723 // all the necessary timing data yet... hmm | 753 // all the necessary timing data yet... hmm |
724 | 754 |
725 // std::cerr << "NoteModel" << std::endl; | |
726 model = new NoteModel(m_sampleRate, 1, false); | 755 model = new NoteModel(m_sampleRate, 1, false); |
727 } | 756 } |
728 } | 757 } |
729 | 758 |
730 if (m_audioModelMap.find(source) != m_audioModelMap.end()) { | 759 if (m_audioModelMap.find(source) != m_audioModelMap.end()) { |
772 SparseOneDimensionalModel *sodm = | 801 SparseOneDimensionalModel *sodm = |
773 dynamic_cast<SparseOneDimensionalModel *>(model); | 802 dynamic_cast<SparseOneDimensionalModel *>(model); |
774 if (sodm) { | 803 if (sodm) { |
775 SparseOneDimensionalModel::Point point(ftime, label); | 804 SparseOneDimensionalModel::Point point(ftime, label); |
776 sodm->addPoint(point); | 805 sodm->addPoint(point); |
806 return; | |
807 } | |
808 | |
809 TextModel *tm = | |
810 dynamic_cast<TextModel *>(model); | |
811 if (tm) { | |
812 TextModel::Point point | |
813 (ftime, | |
814 values.empty() ? 0.5f : values[0] < 0.f ? 0.f : values[0] > 1.f ? 1.f : values[0], // I was young and feckless once too | |
815 label); | |
816 tm->addPoint(point); | |
777 return; | 817 return; |
778 } | 818 } |
779 | 819 |
780 SparseTimeValueModel *stvm = | 820 SparseTimeValueModel *stvm = |
781 dynamic_cast<SparseTimeValueModel *>(model); | 821 dynamic_cast<SparseTimeValueModel *>(model); |